github.phpd.cn/hashicorp/packer@v1.3.2/builder/googlecompute/step_create_image_test.go (about) 1 package googlecompute 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 8 "github.com/hashicorp/packer/helper/multistep" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestStepCreateImage_impl(t *testing.T) { 13 var _ multistep.Step = new(StepCreateImage) 14 } 15 16 func TestStepCreateImage(t *testing.T) { 17 state := testState(t) 18 step := new(StepCreateImage) 19 defer step.Cleanup(state) 20 21 c := state.Get("config").(*Config) 22 d := state.Get("driver").(*DriverMock) 23 24 // These are the values of the image the driver will return. 25 d.CreateImageResultProjectId = "test-project" 26 d.CreateImageResultSizeGb = 100 27 28 // run the step 29 action := step.Run(context.Background(), state) 30 assert.Equal(t, action, multistep.ActionContinue, "Step did not pass.") 31 32 uncastImage, ok := state.GetOk("image") 33 assert.True(t, ok, "State does not have resulting image.") 34 image, ok := uncastImage.(*Image) 35 assert.True(t, ok, "Image in state is not an Image.") 36 37 // Verify created Image results. 38 assert.Equal(t, image.Name, c.ImageName, "Created image does not match config name.") 39 assert.Equal(t, image.ProjectId, d.CreateImageResultProjectId, "Created image project does not match driver project.") 40 assert.Equal(t, image.SizeGb, d.CreateImageResultSizeGb, "Created image size does not match the size returned by the driver.") 41 42 // Verify proper args passed to driver.CreateImage. 43 assert.Equal(t, d.CreateImageName, c.ImageName, "Incorrect image name passed to driver.") 44 assert.Equal(t, d.CreateImageDesc, c.ImageDescription, "Incorrect image description passed to driver.") 45 assert.Equal(t, d.CreateImageFamily, c.ImageFamily, "Incorrect image family passed to driver.") 46 assert.Equal(t, d.CreateImageZone, c.Zone, "Incorrect image zone passed to driver.") 47 assert.Equal(t, d.CreateImageDisk, c.DiskName, "Incorrect disk passed to driver.") 48 assert.Equal(t, d.CreateImageLabels, c.ImageLabels, "Incorrect image_labels passed to driver.") 49 assert.Equal(t, d.CreateImageLicenses, c.ImageLicenses, "Incorrect image_licenses passed to driver.") 50 } 51 52 func TestStepCreateImage_errorOnChannel(t *testing.T) { 53 state := testState(t) 54 step := new(StepCreateImage) 55 defer step.Cleanup(state) 56 57 errCh := make(chan error, 1) 58 errCh <- errors.New("error") 59 60 driver := state.Get("driver").(*DriverMock) 61 driver.CreateImageErrCh = errCh 62 63 // run the step 64 action := step.Run(context.Background(), state) 65 assert.Equal(t, action, multistep.ActionHalt, "Step should not have passed.") 66 _, ok := state.GetOk("error") 67 assert.True(t, ok, "State should have an error.") 68 _, ok = state.GetOk("image_name") 69 assert.False(t, ok, "State should not have a resulting image.") 70 }