github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/builder/azure/arm/step_capture_image_test.go (about) 1 package arm 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/Azure/azure-sdk-for-go/arm/compute" 8 "github.com/hashicorp/packer/builder/azure/common/constants" 9 "github.com/mitchellh/multistep" 10 ) 11 12 func TestStepCaptureImageShouldFailIfCaptureFails(t *testing.T) { 13 var testSubject = &StepCaptureImage{ 14 captureVhd: func(string, string, *compute.VirtualMachineCaptureParameters, <-chan struct{}) error { 15 return fmt.Errorf("!! Unit Test FAIL !!") 16 }, 17 generalizeVM: func(string, string) error { 18 return nil 19 }, 20 get: func(client *AzureClient) *CaptureTemplate { 21 return nil 22 }, 23 say: func(message string) {}, 24 error: func(e error) {}, 25 } 26 27 stateBag := createTestStateBagStepCaptureImage() 28 29 var result = testSubject.Run(stateBag) 30 if result != multistep.ActionHalt { 31 t.Fatalf("Expected the step to return 'ActionHalt', but got '%d'.", result) 32 } 33 34 if _, ok := stateBag.GetOk(constants.Error); ok == false { 35 t.Fatalf("Expected the step to set stateBag['%s'], but it was not.", constants.Error) 36 } 37 } 38 39 func TestStepCaptureImageShouldPassIfCapturePasses(t *testing.T) { 40 var testSubject = &StepCaptureImage{ 41 captureVhd: func(string, string, *compute.VirtualMachineCaptureParameters, <-chan struct{}) error { return nil }, 42 generalizeVM: func(string, string) error { 43 return nil 44 }, 45 get: func(client *AzureClient) *CaptureTemplate { 46 return nil 47 }, 48 say: func(message string) {}, 49 error: func(e error) {}, 50 } 51 52 stateBag := createTestStateBagStepCaptureImage() 53 54 var result = testSubject.Run(stateBag) 55 if result != multistep.ActionContinue { 56 t.Fatalf("Expected the step to return 'ActionContinue', but got '%d'.", result) 57 } 58 59 if _, ok := stateBag.GetOk(constants.Error); ok == true { 60 t.Fatalf("Expected the step to not set stateBag['%s'], but it was.", constants.Error) 61 } 62 } 63 64 func TestStepCaptureImageShouldTakeStepArgumentsFromStateBag(t *testing.T) { 65 cancelCh := make(chan<- struct{}) 66 defer close(cancelCh) 67 68 var actualResourceGroupName string 69 var actualComputeName string 70 var actualVirtualMachineCaptureParameters *compute.VirtualMachineCaptureParameters 71 actualCaptureTemplate := &CaptureTemplate{ 72 Schema: "!! Unit Test !!", 73 } 74 75 var testSubject = &StepCaptureImage{ 76 captureVhd: func(resourceGroupName string, computeName string, parameters *compute.VirtualMachineCaptureParameters, cancelCh <-chan struct{}) error { 77 actualResourceGroupName = resourceGroupName 78 actualComputeName = computeName 79 actualVirtualMachineCaptureParameters = parameters 80 81 return nil 82 }, 83 generalizeVM: func(string, string) error { 84 return nil 85 }, 86 get: func(client *AzureClient) *CaptureTemplate { 87 return actualCaptureTemplate 88 }, 89 say: func(message string) {}, 90 error: func(e error) {}, 91 } 92 93 stateBag := createTestStateBagStepCaptureImage() 94 var result = testSubject.Run(stateBag) 95 96 if result != multistep.ActionContinue { 97 t.Fatalf("Expected the step to return 'ActionContinue', but got '%d'.", result) 98 } 99 100 var expectedComputeName = stateBag.Get(constants.ArmComputeName).(string) 101 var expectedResourceGroupName = stateBag.Get(constants.ArmResourceGroupName).(string) 102 var expectedVirtualMachineCaptureParameters = stateBag.Get(constants.ArmVirtualMachineCaptureParameters).(*compute.VirtualMachineCaptureParameters) 103 var expectedCaptureTemplate = stateBag.Get(constants.ArmCaptureTemplate).(*CaptureTemplate) 104 105 if actualComputeName != expectedComputeName { 106 t.Fatal("Expected StepCaptureImage to source 'constants.ArmComputeName' from the state bag, but it did not.") 107 } 108 109 if actualResourceGroupName != expectedResourceGroupName { 110 t.Fatal("Expected StepCaptureImage to source 'constants.ArmResourceGroupName' from the state bag, but it did not.") 111 } 112 113 if actualVirtualMachineCaptureParameters != expectedVirtualMachineCaptureParameters { 114 t.Fatal("Expected StepCaptureImage to source 'constants.ArmVirtualMachineCaptureParameters' from the state bag, but it did not.") 115 } 116 117 if actualCaptureTemplate != expectedCaptureTemplate { 118 t.Fatal("Expected StepCaptureImage to source 'constants.ArmCaptureTemplate' from the state bag, but it did not.") 119 } 120 } 121 122 func createTestStateBagStepCaptureImage() multistep.StateBag { 123 stateBag := new(multistep.BasicStateBag) 124 125 stateBag.Put(constants.ArmLocation, "localhost") 126 stateBag.Put(constants.ArmComputeName, "Unit Test: ComputeName") 127 stateBag.Put(constants.ArmResourceGroupName, "Unit Test: ResourceGroupName") 128 stateBag.Put(constants.ArmVirtualMachineCaptureParameters, &compute.VirtualMachineCaptureParameters{}) 129 130 stateBag.Put(constants.ArmIsManagedImage, false) 131 stateBag.Put(constants.ArmManagedImageResourceGroupName, "") 132 stateBag.Put(constants.ArmManagedImageName, "") 133 stateBag.Put(constants.ArmManagedImageLocation, "") 134 stateBag.Put(constants.ArmImageParameters, &compute.Image{}) 135 136 return stateBag 137 }