github.com/someshkoli/terratest@v0.41.1/modules/terraform/init_test.go (about) 1 package terraform 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/gruntwork-io/terratest/modules/files" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestInitBackendConfig(t *testing.T) { 14 t.Parallel() 15 16 stateDirectory := t.TempDir() 17 18 remoteStateFile := filepath.Join(stateDirectory, "backend.tfstate") 19 20 testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-backend", t.Name()) 21 if err != nil { 22 t.Fatal(err) 23 } 24 25 options := &Options{ 26 TerraformDir: testFolder, 27 BackendConfig: map[string]interface{}{ 28 "path": remoteStateFile, 29 }, 30 } 31 32 InitAndApply(t, options) 33 34 assert.FileExists(t, remoteStateFile) 35 } 36 37 func TestInitPluginDir(t *testing.T) { 38 t.Parallel() 39 40 testingDir := t.TempDir() 41 42 terraformFixture := "../../test/fixtures/terraform-basic-configuration" 43 44 initializedFolder, err := files.CopyTerraformFolderToTemp(terraformFixture, t.Name()) 45 require.NoError(t, err) 46 defer os.RemoveAll(initializedFolder) 47 48 testFolder, err := files.CopyTerraformFolderToTemp(terraformFixture, t.Name()) 49 require.NoError(t, err) 50 defer os.RemoveAll(testFolder) 51 52 terraformOptions := &Options{ 53 TerraformDir: initializedFolder, 54 } 55 56 terraformOptionsPluginDir := &Options{ 57 TerraformDir: testFolder, 58 PluginDir: testingDir, 59 } 60 61 Init(t, terraformOptions) 62 63 _, err = InitE(t, terraformOptionsPluginDir) 64 require.Error(t, err) 65 66 // In Terraform 0.13, the directory is "plugins" 67 initializedPluginDir := initializedFolder + "/.terraform/plugins" 68 69 // In Terraform 0.14, the directory is "providers" 70 initializedProviderDir := initializedFolder + "/.terraform/providers" 71 72 files.CopyFolderContents(initializedPluginDir, testingDir) 73 files.CopyFolderContents(initializedProviderDir, testingDir) 74 75 initOutput := Init(t, terraformOptionsPluginDir) 76 77 assert.Contains(t, initOutput, "(unauthenticated)") 78 } 79 80 func TestInitReconfigureBackend(t *testing.T) { 81 t.Parallel() 82 83 stateDirectory := t.TempDir() 84 85 testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-backend", t.Name()) 86 require.NoError(t, err) 87 defer os.RemoveAll(testFolder) 88 89 options := &Options{ 90 TerraformDir: testFolder, 91 BackendConfig: map[string]interface{}{ 92 "path": filepath.Join(stateDirectory, "backend.tfstate"), 93 "workspace_dir": "current", 94 }, 95 } 96 97 Init(t, options) 98 99 options.BackendConfig["workspace_dir"] = "new" 100 _, err = InitE(t, options) 101 assert.Error(t, err, "Backend initialization with changed configuration should fail without -reconfigure option") 102 103 options.Reconfigure = true 104 _, err = InitE(t, options) 105 assert.NoError(t, err, "Backend initialization with changed configuration should success with -reconfigure option") 106 } 107 108 func TestInitBackendMigration(t *testing.T) { 109 t.Parallel() 110 111 stateDirectory := t.TempDir() 112 113 testFolder, err := files.CopyTerraformFolderToTemp("../../test/fixtures/terraform-backend", t.Name()) 114 require.NoError(t, err) 115 defer os.RemoveAll(testFolder) 116 117 options := &Options{ 118 TerraformDir: testFolder, 119 BackendConfig: map[string]interface{}{ 120 "path": filepath.Join(stateDirectory, "backend.tfstate"), 121 "workspace_dir": "current", 122 }, 123 } 124 125 Init(t, options) 126 127 options.BackendConfig["workspace_dir"] = "new" 128 _, err = InitE(t, options) 129 assert.Error(t, err, "Backend initialization with changed configuration should fail without -migrate-state option") 130 131 options.MigrateState = true 132 _, err = InitE(t, options) 133 assert.NoError(t, err, "Backend initialization with changed configuration should success with -migrate-state option") 134 }