github.com/vtorhonen/terraform@v0.9.0-beta2.0.20170307220345-5d894e4ffda7/builtin/providers/aws/resource_aws_instance_migrate_test.go (about)

     1  package aws
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/hashicorp/terraform/terraform"
     7  )
     8  
     9  func TestAWSInstanceMigrateState(t *testing.T) {
    10  	cases := map[string]struct {
    11  		StateVersion int
    12  		Attributes   map[string]string
    13  		Expected     map[string]string
    14  		Meta         interface{}
    15  	}{
    16  		"v0.3.6 and earlier": {
    17  			StateVersion: 0,
    18  			Attributes: map[string]string{
    19  				// EBS
    20  				"block_device.#":                                "2",
    21  				"block_device.3851383343.delete_on_termination": "true",
    22  				"block_device.3851383343.device_name":           "/dev/sdx",
    23  				"block_device.3851383343.encrypted":             "false",
    24  				"block_device.3851383343.snapshot_id":           "",
    25  				"block_device.3851383343.virtual_name":          "",
    26  				"block_device.3851383343.volume_size":           "5",
    27  				"block_device.3851383343.volume_type":           "standard",
    28  				// Ephemeral
    29  				"block_device.3101711606.delete_on_termination": "false",
    30  				"block_device.3101711606.device_name":           "/dev/sdy",
    31  				"block_device.3101711606.encrypted":             "false",
    32  				"block_device.3101711606.snapshot_id":           "",
    33  				"block_device.3101711606.virtual_name":          "ephemeral0",
    34  				"block_device.3101711606.volume_size":           "",
    35  				"block_device.3101711606.volume_type":           "",
    36  				// Root
    37  				"block_device.56575650.delete_on_termination": "true",
    38  				"block_device.56575650.device_name":           "/dev/sda1",
    39  				"block_device.56575650.encrypted":             "false",
    40  				"block_device.56575650.snapshot_id":           "",
    41  				"block_device.56575650.volume_size":           "10",
    42  				"block_device.56575650.volume_type":           "standard",
    43  			},
    44  			Expected: map[string]string{
    45  				"ebs_block_device.#":                                 "1",
    46  				"ebs_block_device.3851383343.delete_on_termination":  "true",
    47  				"ebs_block_device.3851383343.device_name":            "/dev/sdx",
    48  				"ebs_block_device.3851383343.encrypted":              "false",
    49  				"ebs_block_device.3851383343.snapshot_id":            "",
    50  				"ebs_block_device.3851383343.volume_size":            "5",
    51  				"ebs_block_device.3851383343.volume_type":            "standard",
    52  				"ephemeral_block_device.#":                           "1",
    53  				"ephemeral_block_device.2458403513.device_name":      "/dev/sdy",
    54  				"ephemeral_block_device.2458403513.virtual_name":     "ephemeral0",
    55  				"root_block_device.#":                                "1",
    56  				"root_block_device.3018388612.delete_on_termination": "true",
    57  				"root_block_device.3018388612.device_name":           "/dev/sda1",
    58  				"root_block_device.3018388612.snapshot_id":           "",
    59  				"root_block_device.3018388612.volume_size":           "10",
    60  				"root_block_device.3018388612.volume_type":           "standard",
    61  			},
    62  		},
    63  		"v0.3.7": {
    64  			StateVersion: 0,
    65  			Attributes: map[string]string{
    66  				// EBS
    67  				"block_device.#":                                "2",
    68  				"block_device.3851383343.delete_on_termination": "true",
    69  				"block_device.3851383343.device_name":           "/dev/sdx",
    70  				"block_device.3851383343.encrypted":             "false",
    71  				"block_device.3851383343.snapshot_id":           "",
    72  				"block_device.3851383343.virtual_name":          "",
    73  				"block_device.3851383343.volume_size":           "5",
    74  				"block_device.3851383343.volume_type":           "standard",
    75  				"block_device.3851383343.iops":                  "",
    76  				// Ephemeral
    77  				"block_device.3101711606.delete_on_termination": "false",
    78  				"block_device.3101711606.device_name":           "/dev/sdy",
    79  				"block_device.3101711606.encrypted":             "false",
    80  				"block_device.3101711606.snapshot_id":           "",
    81  				"block_device.3101711606.virtual_name":          "ephemeral0",
    82  				"block_device.3101711606.volume_size":           "",
    83  				"block_device.3101711606.volume_type":           "",
    84  				"block_device.3101711606.iops":                  "",
    85  				// Root
    86  				"root_block_device.#":                                "1",
    87  				"root_block_device.3018388612.delete_on_termination": "true",
    88  				"root_block_device.3018388612.device_name":           "/dev/sda1",
    89  				"root_block_device.3018388612.snapshot_id":           "",
    90  				"root_block_device.3018388612.volume_size":           "10",
    91  				"root_block_device.3018388612.volume_type":           "io1",
    92  				"root_block_device.3018388612.iops":                  "1000",
    93  			},
    94  			Expected: map[string]string{
    95  				"ebs_block_device.#":                                 "1",
    96  				"ebs_block_device.3851383343.delete_on_termination":  "true",
    97  				"ebs_block_device.3851383343.device_name":            "/dev/sdx",
    98  				"ebs_block_device.3851383343.encrypted":              "false",
    99  				"ebs_block_device.3851383343.snapshot_id":            "",
   100  				"ebs_block_device.3851383343.volume_size":            "5",
   101  				"ebs_block_device.3851383343.volume_type":            "standard",
   102  				"ephemeral_block_device.#":                           "1",
   103  				"ephemeral_block_device.2458403513.device_name":      "/dev/sdy",
   104  				"ephemeral_block_device.2458403513.virtual_name":     "ephemeral0",
   105  				"root_block_device.#":                                "1",
   106  				"root_block_device.3018388612.delete_on_termination": "true",
   107  				"root_block_device.3018388612.device_name":           "/dev/sda1",
   108  				"root_block_device.3018388612.snapshot_id":           "",
   109  				"root_block_device.3018388612.volume_size":           "10",
   110  				"root_block_device.3018388612.volume_type":           "io1",
   111  				"root_block_device.3018388612.iops":                  "1000",
   112  			},
   113  		},
   114  	}
   115  
   116  	for tn, tc := range cases {
   117  		is := &terraform.InstanceState{
   118  			ID:         "i-abc123",
   119  			Attributes: tc.Attributes,
   120  		}
   121  		is, err := resourceAwsInstanceMigrateState(
   122  			tc.StateVersion, is, tc.Meta)
   123  
   124  		if err != nil {
   125  			t.Fatalf("bad: %s, err: %#v", tn, err)
   126  		}
   127  
   128  		for k, v := range tc.Expected {
   129  			if is.Attributes[k] != v {
   130  				t.Fatalf(
   131  					"bad: %s\n\n expected: %#v -> %#v\n got: %#v -> %#v\n in: %#v",
   132  					tn, k, v, k, is.Attributes[k], is.Attributes)
   133  			}
   134  		}
   135  	}
   136  }
   137  
   138  func TestAWSInstanceMigrateState_empty(t *testing.T) {
   139  	var is *terraform.InstanceState
   140  	var meta interface{}
   141  
   142  	// should handle nil
   143  	is, err := resourceAwsInstanceMigrateState(0, is, meta)
   144  
   145  	if err != nil {
   146  		t.Fatalf("err: %#v", err)
   147  	}
   148  	if is != nil {
   149  		t.Fatalf("expected nil instancestate, got: %#v", is)
   150  	}
   151  
   152  	// should handle non-nil but empty
   153  	is = &terraform.InstanceState{}
   154  	is, err = resourceAwsInstanceMigrateState(0, is, meta)
   155  
   156  	if err != nil {
   157  		t.Fatalf("err: %#v", err)
   158  	}
   159  }