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  }