vmCloudProp = bslcvm.VMCloudProperties{
				StartCpus:  2,
				MaxMemory:  2048,
				Datacenter: sldatatypes.Datacenter{Name: "fake-datacenter"},
				SshKeys: []sldatatypes.SshKey{
					sldatatypes.SshKey{Id: 1234},
				},
			}
			networks = Networks{"fake-net-name": Network{IP: "fake-ip"}}
			diskLocality = []DiskCID{1234}
			env = Environment{"fake-env-key": "fake-env-value"}
		})

		It("tries to find stemcell with given stemcell cid", func() {
			stemcellFinder.FindFound = true
			vmCreator.CreateVM = fakevm.NewFakeVM(1234)

			_, err := action.Run("fake-agent-id", stemcellCID, vmCloudProp, networks, diskLocality, env)
			Expect(err).ToNot(HaveOccurred())
		})

		Context("when stemcell is found with given stemcell cid", func() {
			var (
				stemcell *fakestem.FakeStemcell
			)

			BeforeEach(func() {
				stemcell = fakestem.NewFakeStemcell(1234, "fake-stemcell-id", fakestem.FakeStemcellKind)
				stemcellFinder.FindStemcell = stemcell
				stemcellFinder.FindFound = true
			})
	Describe("#Run", func() {
		Context("when VM could NOT be found", func() {
			BeforeEach(func() {
				vmFinder.FindFound = false
			})

			It("errors with message that VM could not be found", func() {
				_, err := action.Run(vmID, metadata)
				Expect(err).To(HaveOccurred())
			})
		})

		Context("when VM could be found", func() {
			BeforeEach(func() {
				vmFinder.FindFound = true
				vmFinder.FindVM = fakevm.NewFakeVM(int(vmID))
			})

			Context("when metadata is not valid", func() {
				Context("when metadata is empty", func() {
					It("does not do anything and returns no error", func() {
						_, err := action.Run(vmID, bslcvm.VMMetadata{})
						Expect(err).ToNot(HaveOccurred())
					})
				})

				Context("when metadata is not a hash of string/string", func() {
					BeforeEach(func() {
						metadataBytes := []byte(`{
  							"tag1": 0,
  							"tag2": null,
	Describe("Run", func() {
		It("tries to find vm with given vm cid", func() {
			_, err := action.Run(1234)
			Expect(err).ToNot(HaveOccurred())

			Expect(vmFinder.FindID).To(Equal(1234))
		})

		Context("when vm is found with given vm cid", func() {
			var (
				vm *fakevm.FakeVM
			)

			BeforeEach(func() {
				vm = fakevm.NewFakeVM(1234)
				vmFinder.FindVM = vm
				vmFinder.FindFound = true
			})

			It("reboots vm", func() {
				_, err := action.Run(1234)
				Expect(err).ToNot(HaveOccurred())

				Expect(vm.RebootCalled).To(BeTrue())
			})

			It("returns error if rebooting vm fails", func() {
				vm.RebootErr = errors.New("fake-reboot-err")

				_, err := action.Run(1234)
	var (
		vmFinder   *fakevm.FakeFinder
		diskFinder *fakedisk.FakeFinder
		action     DetachDisk
	)

	BeforeEach(func() {
		vmFinder = &fakevm.FakeFinder{}
		diskFinder = &fakedisk.FakeFinder{}
		action = NewDetachDisk(vmFinder, diskFinder)
	})

	Describe("Run", func() {
		It("tries to find VM with given VM cid", func() {
			vmFinder.FindFound = true
			vmFinder.FindVM = fakevm.NewFakeVM(1234)

			diskFinder.FindFound = true
			diskFinder.FindDisk = fakedisk.NewFakeDisk(1234)

			_, err := action.Run(1234, 1234)
			Expect(err).ToNot(HaveOccurred())

			Expect(vmFinder.FindID).To(Equal(1234))
		})

		Context("when VM is found with given VM cid", func() {
			var (
				vm *fakevm.FakeVM
			)