github.com/leeprovoost/terraform@v0.6.10-0.20160119085442-96f3f76118e7/command/hook_count_test.go (about)

     1  package command
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/terraform/terraform"
     8  )
     9  
    10  func TestCountHook_impl(t *testing.T) {
    11  	var _ terraform.Hook = new(CountHook)
    12  }
    13  
    14  func TestCountHookPostDiff_DestroyOnly(t *testing.T) {
    15  	h := new(CountHook)
    16  
    17  	resources := map[string]*terraform.InstanceDiff{
    18  		"foo":   &terraform.InstanceDiff{Destroy: true},
    19  		"bar":   &terraform.InstanceDiff{Destroy: true},
    20  		"lorem": &terraform.InstanceDiff{Destroy: true},
    21  		"ipsum": &terraform.InstanceDiff{Destroy: true},
    22  	}
    23  
    24  	n := &terraform.InstanceInfo{} // TODO
    25  
    26  	for _, d := range resources {
    27  		h.PostDiff(n, d)
    28  	}
    29  
    30  	expected := new(CountHook)
    31  	expected.ToAdd = 0
    32  	expected.ToChange = 0
    33  	expected.ToRemoveAndAdd = 0
    34  	expected.ToRemove = 4
    35  
    36  	if !reflect.DeepEqual(expected, h) {
    37  		t.Fatalf("Expected %#v, got %#v instead.",
    38  			expected, h)
    39  	}
    40  }
    41  
    42  func TestCountHookPostDiff_AddOnly(t *testing.T) {
    43  	h := new(CountHook)
    44  
    45  	resources := map[string]*terraform.InstanceDiff{
    46  		"foo": &terraform.InstanceDiff{
    47  			Attributes: map[string]*terraform.ResourceAttrDiff{
    48  				"foo": &terraform.ResourceAttrDiff{RequiresNew: true},
    49  			},
    50  		},
    51  		"bar": &terraform.InstanceDiff{
    52  			Attributes: map[string]*terraform.ResourceAttrDiff{
    53  				"foo": &terraform.ResourceAttrDiff{RequiresNew: true},
    54  			},
    55  		},
    56  		"lorem": &terraform.InstanceDiff{
    57  			Attributes: map[string]*terraform.ResourceAttrDiff{
    58  				"foo": &terraform.ResourceAttrDiff{RequiresNew: true},
    59  			},
    60  		},
    61  	}
    62  
    63  	n := &terraform.InstanceInfo{}
    64  
    65  	for _, d := range resources {
    66  		h.PostDiff(n, d)
    67  	}
    68  
    69  	expected := new(CountHook)
    70  	expected.ToAdd = 3
    71  	expected.ToChange = 0
    72  	expected.ToRemoveAndAdd = 0
    73  	expected.ToRemove = 0
    74  
    75  	if !reflect.DeepEqual(expected, h) {
    76  		t.Fatalf("Expected %#v, got %#v instead.",
    77  			expected, h)
    78  	}
    79  }
    80  
    81  func TestCountHookPostDiff_ChangeOnly(t *testing.T) {
    82  	h := new(CountHook)
    83  
    84  	resources := map[string]*terraform.InstanceDiff{
    85  		"foo": &terraform.InstanceDiff{
    86  			Destroy: false,
    87  			Attributes: map[string]*terraform.ResourceAttrDiff{
    88  				"foo": &terraform.ResourceAttrDiff{},
    89  			},
    90  		},
    91  		"bar": &terraform.InstanceDiff{
    92  			Destroy: false,
    93  			Attributes: map[string]*terraform.ResourceAttrDiff{
    94  				"foo": &terraform.ResourceAttrDiff{},
    95  			},
    96  		},
    97  		"lorem": &terraform.InstanceDiff{
    98  			Destroy: false,
    99  			Attributes: map[string]*terraform.ResourceAttrDiff{
   100  				"foo": &terraform.ResourceAttrDiff{},
   101  			},
   102  		},
   103  	}
   104  
   105  	n := &terraform.InstanceInfo{}
   106  
   107  	for _, d := range resources {
   108  		h.PostDiff(n, d)
   109  	}
   110  
   111  	expected := new(CountHook)
   112  	expected.ToAdd = 0
   113  	expected.ToChange = 3
   114  	expected.ToRemoveAndAdd = 0
   115  	expected.ToRemove = 0
   116  
   117  	if !reflect.DeepEqual(expected, h) {
   118  		t.Fatalf("Expected %#v, got %#v instead.",
   119  			expected, h)
   120  	}
   121  }
   122  
   123  func TestCountHookPostDiff_Mixed(t *testing.T) {
   124  	h := new(CountHook)
   125  
   126  	resources := map[string]*terraform.InstanceDiff{
   127  		"foo": &terraform.InstanceDiff{
   128  			Destroy: true,
   129  		},
   130  		"bar": &terraform.InstanceDiff{},
   131  		"lorem": &terraform.InstanceDiff{
   132  			Destroy: false,
   133  			Attributes: map[string]*terraform.ResourceAttrDiff{
   134  				"foo": &terraform.ResourceAttrDiff{},
   135  			},
   136  		},
   137  		"ipsum": &terraform.InstanceDiff{Destroy: true},
   138  	}
   139  
   140  	n := &terraform.InstanceInfo{}
   141  
   142  	for _, d := range resources {
   143  		h.PostDiff(n, d)
   144  	}
   145  
   146  	expected := new(CountHook)
   147  	expected.ToAdd = 0
   148  	expected.ToChange = 1
   149  	expected.ToRemoveAndAdd = 0
   150  	expected.ToRemove = 2
   151  
   152  	if !reflect.DeepEqual(expected, h) {
   153  		t.Fatalf("Expected %#v, got %#v instead.",
   154  			expected, h)
   155  	}
   156  }
   157  
   158  func TestCountHookPostDiff_NoChange(t *testing.T) {
   159  	h := new(CountHook)
   160  
   161  	resources := map[string]*terraform.InstanceDiff{
   162  		"foo":   &terraform.InstanceDiff{},
   163  		"bar":   &terraform.InstanceDiff{},
   164  		"lorem": &terraform.InstanceDiff{},
   165  		"ipsum": &terraform.InstanceDiff{},
   166  	}
   167  
   168  	n := &terraform.InstanceInfo{}
   169  
   170  	for _, d := range resources {
   171  		h.PostDiff(n, d)
   172  	}
   173  
   174  	expected := new(CountHook)
   175  	expected.ToAdd = 0
   176  	expected.ToChange = 0
   177  	expected.ToRemoveAndAdd = 0
   178  	expected.ToRemove = 0
   179  
   180  	if !reflect.DeepEqual(expected, h) {
   181  		t.Fatalf("Expected %#v, got %#v instead.",
   182  			expected, h)
   183  	}
   184  }