github.com/gkze/tflint@v0.8.0/tflint/terraform_test.go (about) 1 package tflint 2 3 import ( 4 "os" 5 "path/filepath" 6 "reflect" 7 "testing" 8 9 "github.com/hashicorp/terraform/terraform" 10 "github.com/zclconf/go-cty/cty" 11 ) 12 13 func Test_getTFDataDir(t *testing.T) { 14 cases := []struct { 15 Name string 16 EnvVar map[string]string 17 Expected string 18 }{ 19 { 20 Name: "default", 21 Expected: ".terraform", 22 }, 23 { 24 Name: "environment variable", 25 EnvVar: map[string]string{"TF_DATA_DIR": ".tfdata"}, 26 Expected: ".tfdata", 27 }, 28 } 29 30 for _, tc := range cases { 31 for key, value := range tc.EnvVar { 32 err := os.Setenv(key, value) 33 if err != nil { 34 t.Fatal(err) 35 } 36 } 37 38 ret := getTFDataDir() 39 if ret != tc.Expected { 40 t.Fatalf("Failed `%s` test: expected value is %s, but get %s", tc.Name, tc.Expected, ret) 41 } 42 43 for key := range tc.EnvVar { 44 err := os.Unsetenv(key) 45 if err != nil { 46 t.Fatal(err) 47 } 48 } 49 } 50 } 51 52 func Test_getTFModuleDir(t *testing.T) { 53 cases := []struct { 54 Name string 55 EnvVar map[string]string 56 Expected string 57 }{ 58 { 59 Name: "default", 60 Expected: filepath.Join(".terraform", "modules"), 61 }, 62 { 63 Name: "environment variable", 64 EnvVar: map[string]string{"TF_DATA_DIR": ".tfdata"}, 65 Expected: filepath.Join(".tfdata", "modules"), 66 }, 67 } 68 69 for _, tc := range cases { 70 for key, value := range tc.EnvVar { 71 err := os.Setenv(key, value) 72 if err != nil { 73 t.Fatal(err) 74 } 75 } 76 77 ret := getTFModuleDir() 78 if ret != tc.Expected { 79 t.Fatalf("Failed `%s` test: expected value is %s, but get %s", tc.Name, tc.Expected, ret) 80 } 81 82 for key := range tc.EnvVar { 83 err := os.Unsetenv(key) 84 if err != nil { 85 t.Fatal(err) 86 } 87 } 88 } 89 } 90 91 func Test_getTFModuleManifestPath(t *testing.T) { 92 cases := []struct { 93 Name string 94 EnvVar map[string]string 95 Expected string 96 }{ 97 { 98 Name: "default", 99 Expected: filepath.Join(".terraform", "modules", "modules.json"), 100 }, 101 { 102 Name: "environment variable", 103 EnvVar: map[string]string{"TF_DATA_DIR": ".tfdata"}, 104 Expected: filepath.Join(".tfdata", "modules", "modules.json"), 105 }, 106 } 107 108 for _, tc := range cases { 109 for key, value := range tc.EnvVar { 110 err := os.Setenv(key, value) 111 if err != nil { 112 t.Fatal(err) 113 } 114 } 115 116 ret := getTFModuleManifestPath() 117 if ret != tc.Expected { 118 t.Fatalf("Failed `%s` test: expected value is %s, but get %s", tc.Name, tc.Expected, ret) 119 } 120 121 for key := range tc.EnvVar { 122 err := os.Unsetenv(key) 123 if err != nil { 124 t.Fatal(err) 125 } 126 } 127 } 128 } 129 130 func Test_getTFWorkspace(t *testing.T) { 131 currentDir, err := os.Getwd() 132 if err != nil { 133 t.Fatal(err) 134 } 135 136 cases := []struct { 137 Name string 138 Dir string 139 EnvVar map[string]string 140 Expected string 141 }{ 142 { 143 Name: "default", 144 Expected: "default", 145 }, 146 { 147 Name: "TF_WORKSPACE", 148 EnvVar: map[string]string{"TF_WORKSPACE": "dev"}, 149 Expected: "dev", 150 }, 151 { 152 Name: "environment file", 153 Dir: filepath.Join(currentDir, "test-fixtures", "with_environment_file"), 154 Expected: "staging", 155 }, 156 { 157 Name: "TF_DATA_DIR", 158 Dir: filepath.Join(currentDir, "test-fixtures", "with_environment_file"), 159 EnvVar: map[string]string{"TF_DATA_DIR": ".terraform_production"}, 160 Expected: "production", 161 }, 162 } 163 164 for _, tc := range cases { 165 if tc.Dir != "" { 166 err := os.Chdir(tc.Dir) 167 if err != nil { 168 t.Fatal(err) 169 } 170 } 171 172 for key, value := range tc.EnvVar { 173 err := os.Setenv(key, value) 174 if err != nil { 175 t.Fatal(err) 176 } 177 } 178 179 ret := getTFWorkspace() 180 if ret != tc.Expected { 181 t.Fatalf("Failed `%s` test: expected value is %s, but get %s", tc.Name, tc.Expected, ret) 182 } 183 184 for key := range tc.EnvVar { 185 err := os.Unsetenv(key) 186 if err != nil { 187 t.Fatal(err) 188 } 189 } 190 191 if tc.Dir != "" { 192 err := os.Chdir(currentDir) 193 if err != nil { 194 t.Fatal(err) 195 } 196 } 197 } 198 } 199 200 func Test_getTFEnvVariables(t *testing.T) { 201 cases := []struct { 202 Name string 203 EnvVar map[string]string 204 Expected terraform.InputValues 205 }{ 206 { 207 Name: "environment variable", 208 EnvVar: map[string]string{ 209 "TF_VAR_instance_type": "t2.micro", 210 "TF_VAR_count": "5", 211 }, 212 Expected: terraform.InputValues{ 213 "instance_type": &terraform.InputValue{ 214 Value: cty.StringVal("t2.micro"), 215 SourceType: terraform.ValueFromEnvVar, 216 }, 217 "count": &terraform.InputValue{ 218 Value: cty.StringVal("5"), 219 SourceType: terraform.ValueFromEnvVar, 220 }, 221 }, 222 }, 223 } 224 225 for _, tc := range cases { 226 for key, value := range tc.EnvVar { 227 err := os.Setenv(key, value) 228 if err != nil { 229 t.Fatal(err) 230 } 231 } 232 233 ret := getTFEnvVariables() 234 if !reflect.DeepEqual(tc.Expected, ret) { 235 t.Fatalf("Failed `%s` test:\n Expected: %#v\n Actual: %#v", tc.Name, tc.Expected, ret) 236 } 237 238 for key := range tc.EnvVar { 239 err := os.Unsetenv(key) 240 if err != nil { 241 t.Fatal(err) 242 } 243 } 244 } 245 }