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  }