github.com/jonasi/terraform@v0.6.10-0.20160125170522-e865c342cc1f/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 }