github.com/mcuckson/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  }