var (
		vmFinder   *fakevm.FakeFinder
		diskFinder *fakedisk.FakeFinder
		action     AttachDisk
	)

	BeforeEach(func() {
		vmFinder = &fakevm.FakeFinder{}
		diskFinder = &fakedisk.FakeFinder{}
		action = NewAttachDisk(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
			)
	)

	BeforeEach(func() {
		vmFinder = &fakevm.FakeFinder{}
		action = NewDeleteVM(vmFinder)
	})

	Describe("Run", func() {
		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("deletes vm", func() {
				_, err := action.Run(1234)
				Expect(err).ToNot(HaveOccurred())

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

			It("returns error if deleting vm fails", func() {
				vm.DeleteErr = errors.New("fake-delete-err")

				_, err := action.Run(1234)
				Expect(err).To(HaveOccurred())
	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,