github.phpd.cn/hashicorp/packer@v1.3.2/builder/azure/arm/step_delete_os_disk_test.go (about) 1 package arm 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 "testing" 8 9 "github.com/hashicorp/packer/builder/azure/common/constants" 10 "github.com/hashicorp/packer/helper/multistep" 11 ) 12 13 func TestStepDeleteOSDiskShouldFailIfGetFails(t *testing.T) { 14 var testSubject = &StepDeleteOSDisk{ 15 delete: func(string, string) error { return fmt.Errorf("!! Unit Test FAIL !!") }, 16 deleteManaged: func(context.Context, string, string) error { return nil }, 17 say: func(message string) {}, 18 error: func(e error) {}, 19 } 20 21 stateBag := DeleteTestStateBagStepDeleteOSDisk("http://storage.blob.core.windows.net/images/pkrvm_os.vhd") 22 23 var result = testSubject.Run(context.Background(), stateBag) 24 if result != multistep.ActionHalt { 25 t.Fatalf("Expected the step to return 'ActionHalt', but got '%d'.", result) 26 } 27 28 if _, ok := stateBag.GetOk(constants.Error); ok == false { 29 t.Fatalf("Expected the step to set stateBag['%s'], but it was not.", constants.Error) 30 } 31 } 32 33 func TestStepDeleteOSDiskShouldPassIfGetPasses(t *testing.T) { 34 var testSubject = &StepDeleteOSDisk{ 35 delete: func(string, string) error { return nil }, 36 say: func(message string) {}, 37 error: func(e error) {}, 38 } 39 40 stateBag := DeleteTestStateBagStepDeleteOSDisk("http://storage.blob.core.windows.net/images/pkrvm_os.vhd") 41 42 var result = testSubject.Run(context.Background(), stateBag) 43 if result != multistep.ActionContinue { 44 t.Fatalf("Expected the step to return 'ActionContinue', but got '%d'.", result) 45 } 46 47 if _, ok := stateBag.GetOk(constants.Error); ok == true { 48 t.Fatalf("Expected the step to not set stateBag['%s'], but it was.", constants.Error) 49 } 50 } 51 52 func TestStepDeleteOSDiskShouldTakeStepArgumentsFromStateBag(t *testing.T) { 53 var actualStorageContainerName string 54 var actualBlobName string 55 56 var testSubject = &StepDeleteOSDisk{ 57 delete: func(storageContainerName string, blobName string) error { 58 actualStorageContainerName = storageContainerName 59 actualBlobName = blobName 60 return nil 61 }, 62 say: func(message string) {}, 63 error: func(e error) {}, 64 } 65 66 stateBag := DeleteTestStateBagStepDeleteOSDisk("http://storage.blob.core.windows.net/images/pkrvm_os.vhd") 67 var result = testSubject.Run(context.Background(), stateBag) 68 69 if result != multistep.ActionContinue { 70 t.Fatalf("Expected the step to return 'ActionContinue', but got '%d'.", result) 71 } 72 73 if actualStorageContainerName != "images" { 74 t.Fatalf("Expected the storage container name to be 'images', but found '%s'.", actualStorageContainerName) 75 } 76 77 if actualBlobName != "pkrvm_os.vhd" { 78 t.Fatalf("Expected the blob name to be 'pkrvm_os.vhd', but found '%s'.", actualBlobName) 79 } 80 } 81 82 func TestStepDeleteOSDiskShouldHandleComplexStorageContainerNames(t *testing.T) { 83 var actualStorageContainerName string 84 var actualBlobName string 85 86 var testSubject = &StepDeleteOSDisk{ 87 delete: func(storageContainerName string, blobName string) error { 88 actualStorageContainerName = storageContainerName 89 actualBlobName = blobName 90 return nil 91 }, 92 say: func(message string) {}, 93 error: func(e error) {}, 94 } 95 96 stateBag := DeleteTestStateBagStepDeleteOSDisk("http://storage.blob.core.windows.net/abc/def/pkrvm_os.vhd") 97 testSubject.Run(context.Background(), stateBag) 98 99 if actualStorageContainerName != "abc" { 100 t.Fatalf("Expected the storage container name to be 'abc/def', but found '%s'.", actualStorageContainerName) 101 } 102 103 if actualBlobName != "def/pkrvm_os.vhd" { 104 t.Fatalf("Expected the blob name to be 'pkrvm_os.vhd', but found '%s'.", actualBlobName) 105 } 106 } 107 108 func TestStepDeleteOSDiskShouldFailIfVHDNameCannotBeURLParsed(t *testing.T) { 109 var testSubject = &StepDeleteOSDisk{ 110 delete: func(string, string) error { return nil }, 111 say: func(message string) {}, 112 error: func(e error) {}, 113 deleteManaged: func(context.Context, string, string) error { return nil }, 114 } 115 116 // Invalid URL per https://golang.org/src/net/url/url_test.go 117 stateBag := DeleteTestStateBagStepDeleteOSDisk("http://[fe80::1%en0]/") 118 119 var result = testSubject.Run(context.Background(), stateBag) 120 if result != multistep.ActionHalt { 121 t.Fatalf("Expected the step to return 'ActionHalt', but got '%v'.", result) 122 } 123 124 if _, ok := stateBag.GetOk(constants.Error); ok == false { 125 t.Fatalf("Expected the step to not stateBag['%s'], but it was.", constants.Error) 126 } 127 } 128 func TestStepDeleteOSDiskShouldFailIfVHDNameIsTooShort(t *testing.T) { 129 var testSubject = &StepDeleteOSDisk{ 130 delete: func(string, string) error { return nil }, 131 say: func(message string) {}, 132 error: func(e error) {}, 133 deleteManaged: func(context.Context, string, string) error { return nil }, 134 } 135 136 stateBag := DeleteTestStateBagStepDeleteOSDisk("storage.blob.core.windows.net/abc") 137 138 var result = testSubject.Run(context.Background(), stateBag) 139 if result != multistep.ActionHalt { 140 t.Fatalf("Expected the step to return 'ActionHalt', but got '%d'.", result) 141 } 142 143 if _, ok := stateBag.GetOk(constants.Error); ok == false { 144 t.Fatalf("Expected the step to not stateBag['%s'], but it was.", constants.Error) 145 } 146 } 147 148 func TestStepDeleteOSDiskShouldPassIfManagedDiskInTempResourceGroup(t *testing.T) { 149 var testSubject = &StepDeleteOSDisk{ 150 delete: func(string, string) error { return nil }, 151 say: func(message string) {}, 152 error: func(e error) {}, 153 } 154 155 stateBag := new(multistep.BasicStateBag) 156 stateBag.Put(constants.ArmOSDiskVhd, "subscriptions/123-456-789/resourceGroups/existingresourcegroup/providers/Microsoft.Compute/disks/osdisk") 157 stateBag.Put(constants.ArmIsManagedImage, true) 158 stateBag.Put(constants.ArmIsExistingResourceGroup, false) 159 stateBag.Put(constants.ArmResourceGroupName, "testgroup") 160 161 var result = testSubject.Run(context.Background(), stateBag) 162 if result != multistep.ActionContinue { 163 t.Fatalf("Expected the step to return 'ActionContinue', but got '%d'.", result) 164 } 165 166 if _, ok := stateBag.GetOk(constants.Error); ok == true { 167 t.Fatalf("Expected the step to not set stateBag['%s'], but it was.", constants.Error) 168 } 169 } 170 171 func TestStepDeleteOSDiskShouldFailIfManagedDiskInExistingResourceGroupFailsToDelete(t *testing.T) { 172 var testSubject = &StepDeleteOSDisk{ 173 delete: func(string, string) error { return nil }, 174 say: func(message string) {}, 175 error: func(e error) {}, 176 deleteManaged: func(context.Context, string, string) error { return errors.New("UNIT TEST FAIL!") }, 177 } 178 179 stateBag := new(multistep.BasicStateBag) 180 stateBag.Put(constants.ArmOSDiskVhd, "subscriptions/123-456-789/resourceGroups/existingresourcegroup/providers/Microsoft.Compute/disks/osdisk") 181 stateBag.Put(constants.ArmIsManagedImage, true) 182 stateBag.Put(constants.ArmIsExistingResourceGroup, true) 183 stateBag.Put(constants.ArmResourceGroupName, "testgroup") 184 185 var result = testSubject.Run(context.Background(), stateBag) 186 if result != multistep.ActionHalt { 187 t.Fatalf("Expected the step to return 'ActionHalt', but got '%d'.", result) 188 } 189 190 if _, ok := stateBag.GetOk(constants.Error); ok == false { 191 t.Fatalf("Expected the step to not stateBag['%s'], but it was.", constants.Error) 192 } 193 } 194 195 func TestStepDeleteOSDiskShouldFailIfManagedDiskInExistingResourceGroupIsDeleted(t *testing.T) { 196 var testSubject = &StepDeleteOSDisk{ 197 delete: func(string, string) error { return nil }, 198 say: func(message string) {}, 199 error: func(e error) {}, 200 deleteManaged: func(context.Context, string, string) error { return nil }, 201 } 202 203 stateBag := new(multistep.BasicStateBag) 204 stateBag.Put(constants.ArmOSDiskVhd, "subscriptions/123-456-789/resourceGroups/existingresourcegroup/providers/Microsoft.Compute/disks/osdisk") 205 stateBag.Put(constants.ArmIsManagedImage, true) 206 stateBag.Put(constants.ArmIsExistingResourceGroup, true) 207 stateBag.Put(constants.ArmResourceGroupName, "testgroup") 208 209 var result = testSubject.Run(context.Background(), stateBag) 210 if result != multistep.ActionContinue { 211 t.Fatalf("Expected the step to return 'ActionContinue', but got '%d'.", result) 212 } 213 214 if _, ok := stateBag.GetOk(constants.Error); ok == true { 215 t.Fatalf("Expected the step to not set stateBag['%s'], but it was.", constants.Error) 216 } 217 } 218 219 func DeleteTestStateBagStepDeleteOSDisk(osDiskVhd string) multistep.StateBag { 220 stateBag := new(multistep.BasicStateBag) 221 stateBag.Put(constants.ArmOSDiskVhd, osDiskVhd) 222 stateBag.Put(constants.ArmIsManagedImage, false) 223 stateBag.Put(constants.ArmIsExistingResourceGroup, false) 224 stateBag.Put(constants.ArmResourceGroupName, "testgroup") 225 226 return stateBag 227 }