"Tag_compiling":  "buildpack_python",
				"Tag_deployment": "metadata_deployment",
			}
		})

		AfterEach(func() {
			testhelpers.DeleteVirtualGuest(virtualGuest.Id)
			testhelpers.DeleteSshKey(createdSshKey.Id)
		})

		It("issues set_vm_metadata to cpi", func() {
			pwd, err := os.Getwd()
			Expect(err).ToNot(HaveOccurred())
			rootTemplatePath := filepath.Join(pwd, "..", "..")

			jsonPayload, err := testhelperscpi.GenerateCpiJsonPayload("set_vm_metadata", rootTemplatePath, replacementMap)
			Expect(err).ToNot(HaveOccurred())

			tmpConfigPath, err := testhelperscpi.CreateTmpConfigPath(rootTemplatePath, configPath, username, apiKey)
			Expect(err).ToNot(HaveOccurred())

			_, err = testhelperscpi.RunCpi(rootTemplatePath, tmpConfigPath, jsonPayload)
			Expect(err).ToNot(HaveOccurred())

			err = os.RemoveAll(tmpConfigPath)
			Expect(err).ToNot(HaveOccurred())

			tagReferences, err := virtualGuestService.GetTagReferences(virtualGuest.Id)
			Expect(err).ToNot(HaveOccurred())

			tagReferencesJSON, err := json.Marshal(tagReferences)
			Expect(err).ToNot(HaveOccurred())
		})
	})

	Context("#GenerateCpiJsonPayload", func() {
		Context("set_vm_metadata CPI method", func() {
			BeforeEach(func() {
				cpiTemplate = testhelpers.CpiTemplate{
					ID:           "fake-id",
					DirectorUuid: "fake-director-uuid",
					Tags:         "fake, tags",
				}
			})

			It("verifies the generated payload", func() {
				payload, err := testhelpers.GenerateCpiJsonPayload("set_vm_metadata", rootTemplatePath, replacementMap)
				Expect(err).ToNot(HaveOccurred())
				Expect(payload).To(MatchJSON(`
					{
						"method": "set_vm_metadata",
						"arguments": [
							"some ID",
							{
								"director": "BOSH Director",
								"deployment": "softlayer",
								"tags": "some, tags"
							}
						],
						"context": {
							"director_uuid": "some director UUID"
						}
	AfterEach(func() {
		err = os.RemoveAll(tmpConfigPath)
		Expect(err).ToNot(HaveOccurred())
	})

	Context("attach_disk in SoftLayer with invalid virtual guest id and disk id", func() {
		BeforeEach(func() {
			replacementMap = map[string]string{
				"VMID":   "123456",
				"DiskID": "123",
			}
		})

		It("returns error", func() {
			jsonPayload, err := testhelperscpi.GenerateCpiJsonPayload("attach_disk", rootTemplatePath, replacementMap)
			Expect(err).ToNot(HaveOccurred())

			outputBytes, err := testhelperscpi.RunCpi(rootTemplatePath, tmpConfigPath, jsonPayload)
			log.Println("outputBytes=" + string(outputBytes))
			Expect(err).ToNot(HaveOccurred())
			err = json.Unmarshal(outputBytes, &resultOutput)
			Expect(err).ToNot(HaveOccurred())
			Expect(resultOutput["error"]).ToNot(BeNil())
		})
	})

	Context("attach_disk in SoftLayer with valid virtual guest id(with multipath installed) and disk id", func() {
		BeforeEach(func() {
			err = testhelpers.FindAndDeleteTestSshKeys()
			Expect(err).ToNot(HaveOccurred())
			strVGID = strconv.Itoa(virtualGuest.Id)

			replacementMap = map[string]string{
				"ID":           strVGID,
				"DirectorUuid": "fake-director-uuid",
			}
		})

		AfterEach(func() {
			testhelpers.DeleteVirtualGuest(virtualGuest.Id)
			testhelpers.DeleteSshKey(createdSshKey.Id)
		})

		It("returns true because vm exists", func() {
			jsonPayload, err := testhelperscpi.GenerateCpiJsonPayload("has_vm", rootTemplatePath, replacementMap)
			Expect(err).ToNot(HaveOccurred())

			outputBytes, err := testhelperscpi.RunCpi(rootTemplatePath, tmpConfigPath, jsonPayload)
			Expect(err).ToNot(HaveOccurred())

			err = json.Unmarshal(outputBytes, &output)
			Expect(err).ToNot(HaveOccurred())
			Expect(output["result"]).To(BeTrue())
		})
	})

	Context("has_vm without valid vm id", func() {
		BeforeEach(func() {
			replacementMap = map[string]string{
				"ID":           "123456",
			testhelpers.TIMEOUT = 35 * time.Minute
			testhelpers.POLLING_INTERVAL = 10 * time.Second
			testhelpers.WaitForVirtualGuestBlockTemplateGroupToHaveNoActiveTransactions(vgbdtGroup.Id)
		})

		AfterEach(func() {
			_, err := vgbdtgService.DeleteObject(virtual_disk_image_id)
			Expect(err).ToNot(HaveOccurred())
		})

		It("returns true because valid parameters", func() {
			replacementMap = map[string]string{
				"ID":         strconv.Itoa(virtual_disk_image_id),
				"Datacenter": testhelpers.GetDatacenter(),
			}
			jsonPayload, err := testhelperscpi.GenerateCpiJsonPayload("create_stemcell", rootTemplatePath, replacementMap)
			Expect(err).ToNot(HaveOccurred())

			outputBytes, err := testhelperscpi.RunCpi(rootTemplatePath, tmpConfigPath, jsonPayload)
			log.Println("outputBytes=" + string(outputBytes))
			Expect(err).ToNot(HaveOccurred())

			err = json.Unmarshal(outputBytes, &output)
			Expect(err).ToNot(HaveOccurred())
			Expect(output["result"]).ToNot(BeNil())
			Expect(output["error"]).To(BeNil())

			vmId, err = strconv.ParseFloat(output["result"].(string), 64)
			Expect(err).ToNot(HaveOccurred())
			Expect(vmId).ToNot(BeZero())
		})
	})

	Context("True path of OS Reload", func() {

		BeforeEach(func() {
			os.Setenv("SQLITE_DB_FILE", "vm_pool.sqlite.right")
		})

		AfterEach(func() {
			err = os.Remove("/tmp/vm_pool.sqlite.right")
			Expect(err).ToNot(HaveOccurred())
		})

		It("returns true if the VM creation procedure is correct", func() {

			jsonPayload, err := testhelperscpi.GenerateCpiJsonPayload("create_vm", rootTemplatePath, replacementMap)
			Expect(err).ToNot(HaveOccurred())

			outputBytes, err := testhelperscpi.RunCpi(rootTemplatePath, tmpConfigPath, jsonPayload)
			log.Println("outputBytes of vm creation: " + string(outputBytes))
			Expect(err).ToNot(HaveOccurred())

			err = json.Unmarshal(outputBytes, &output)
			Expect(err).ToNot(HaveOccurred())
			Expect(output["result"]).ToNot(BeNil())
			Expect(output["error"]).To(BeNil())

			id := output["result"].(string)
			vmId, err = strconv.Atoi(id)
			log.Println(fmt.Sprintf("Create a new VM with ID: %d", vmId))