github.phpd.cn/hashicorp/packer@v1.3.2/builder/azure/arm/step_get_ip_address_test.go (about)

     1  package arm
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"testing"
     7  
     8  	"github.com/hashicorp/packer/builder/azure/common/constants"
     9  	"github.com/hashicorp/packer/helper/multistep"
    10  )
    11  
    12  func TestStepGetIPAddressShouldFailIfGetFails(t *testing.T) {
    13  	endpoints := []EndpointType{PublicEndpoint, PublicEndpointInPrivateNetwork}
    14  
    15  	for _, endpoint := range endpoints {
    16  		var testSubject = &StepGetIPAddress{
    17  			get: func(context.Context, string, string, string) (string, error) {
    18  				return "", fmt.Errorf("!! Unit Test FAIL !!")
    19  			},
    20  			endpoint: endpoint,
    21  			say:      func(message string) {},
    22  			error:    func(e error) {},
    23  		}
    24  
    25  		stateBag := createTestStateBagStepGetIPAddress()
    26  
    27  		var result = testSubject.Run(context.Background(), stateBag)
    28  		if result != multistep.ActionHalt {
    29  			t.Fatalf("Expected the step to return 'ActionHalt', but got '%d'.", result)
    30  		}
    31  
    32  		if _, ok := stateBag.GetOk(constants.Error); ok == false {
    33  			t.Fatalf("Expected the step to set stateBag['%s'], but it was not.", constants.Error)
    34  		}
    35  	}
    36  }
    37  
    38  func TestStepGetIPAddressShouldPassIfGetPasses(t *testing.T) {
    39  	endpoints := []EndpointType{PublicEndpoint, PublicEndpointInPrivateNetwork}
    40  
    41  	for _, endpoint := range endpoints {
    42  		var testSubject = &StepGetIPAddress{
    43  			get:      func(context.Context, string, string, string) (string, error) { return "", nil },
    44  			endpoint: endpoint,
    45  			say:      func(message string) {},
    46  			error:    func(e error) {},
    47  		}
    48  
    49  		stateBag := createTestStateBagStepGetIPAddress()
    50  
    51  		var result = testSubject.Run(context.Background(), stateBag)
    52  		if result != multistep.ActionContinue {
    53  			t.Fatalf("Expected the step to return 'ActionContinue', but got '%d'.", result)
    54  		}
    55  
    56  		if _, ok := stateBag.GetOk(constants.Error); ok == true {
    57  			t.Fatalf("Expected the step to not set stateBag['%s'], but it was.", constants.Error)
    58  		}
    59  	}
    60  }
    61  
    62  func TestStepGetIPAddressShouldTakeStepArgumentsFromStateBag(t *testing.T) {
    63  	var actualResourceGroupName string
    64  	var actualIPAddressName string
    65  	var actualNicName string
    66  	endpoints := []EndpointType{PublicEndpoint, PublicEndpointInPrivateNetwork}
    67  
    68  	for _, endpoint := range endpoints {
    69  		var testSubject = &StepGetIPAddress{
    70  			get: func(ctx context.Context, resourceGroupName string, ipAddressName string, nicName string) (string, error) {
    71  				actualResourceGroupName = resourceGroupName
    72  				actualIPAddressName = ipAddressName
    73  				actualNicName = nicName
    74  
    75  				return "127.0.0.1", nil
    76  			},
    77  			endpoint: endpoint,
    78  			say:      func(message string) {},
    79  			error:    func(e error) {},
    80  		}
    81  
    82  		stateBag := createTestStateBagStepGetIPAddress()
    83  		var result = testSubject.Run(context.Background(), stateBag)
    84  
    85  		if result != multistep.ActionContinue {
    86  			t.Fatalf("Expected the step to return 'ActionContinue', but got '%d'.", result)
    87  		}
    88  
    89  		var expectedResourceGroupName = stateBag.Get(constants.ArmResourceGroupName).(string)
    90  		var expectedIPAddressName = stateBag.Get(constants.ArmPublicIPAddressName).(string)
    91  		var expectedNicName = stateBag.Get(constants.ArmNicName).(string)
    92  
    93  		if actualIPAddressName != expectedIPAddressName {
    94  			t.Fatal("Expected StepGetIPAddress to source 'constants.ArmIPAddressName' from the state bag, but it did not.")
    95  		}
    96  
    97  		if actualResourceGroupName != expectedResourceGroupName {
    98  			t.Fatal("Expected StepGetIPAddress to source 'constants.ArmResourceGroupName' from the state bag, but it did not.")
    99  		}
   100  
   101  		if actualNicName != expectedNicName {
   102  			t.Fatalf("Expected StepGetIPAddress to source 'constants.ArmNetworkInterfaceName' from the state bag, but it did not.")
   103  		}
   104  
   105  		expectedIPAddress, ok := stateBag.GetOk(constants.SSHHost)
   106  		if !ok {
   107  			t.Fatalf("Expected the state bag to have a value for '%s', but it did not.", constants.SSHHost)
   108  		}
   109  
   110  		if expectedIPAddress != "127.0.0.1" {
   111  			t.Fatalf("Expected the value of stateBag[%s] to be '127.0.0.1', but got '%s'.", constants.SSHHost, expectedIPAddress)
   112  		}
   113  	}
   114  }
   115  
   116  func createTestStateBagStepGetIPAddress() multistep.StateBag {
   117  	stateBag := new(multistep.BasicStateBag)
   118  
   119  	stateBag.Put(constants.ArmPublicIPAddressName, "Unit Test: PublicIPAddressName")
   120  	stateBag.Put(constants.ArmNicName, "Unit Test: NicName")
   121  	stateBag.Put(constants.ArmResourceGroupName, "Unit Test: ResourceGroupName")
   122  
   123  	return stateBag
   124  }