Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions pkg/env/terraform_env.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,10 +169,16 @@ func (e *TerraformEnvPrinter) generateBackendOverrideTf() error {

backend := e.configHandler.GetString("terraform.backend.type", "local")

backendOverridePath := filepath.Join(currentPath, "backend_override.tf")
var backendConfig string

switch backend {
case "none":
backendOverridePath := filepath.Join(currentPath, "backend_override.tf")
if _, err := e.shims.Stat(backendOverridePath); err == nil {
if err := e.shims.Remove(backendOverridePath); err != nil {
return fmt.Errorf("error removing backend_override.tf: %w", err)
}
}
return nil
case "local":
backendConfig = fmt.Sprintf(`terraform {
backend "local" {}
Expand All @@ -189,6 +195,7 @@ func (e *TerraformEnvPrinter) generateBackendOverrideTf() error {
return fmt.Errorf("unsupported backend: %s", backend)
}

backendOverridePath := filepath.Join(currentPath, "backend_override.tf")
err = e.shims.WriteFile(backendOverridePath, []byte(backendConfig), os.ModePerm)
if err != nil {
return fmt.Errorf("error writing backend_override.tf: %w", err)
Expand Down
106 changes: 106 additions & 0 deletions pkg/env/terraform_env_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -805,6 +805,112 @@ func TestTerraformEnv_generateBackendOverrideTf(t *testing.T) {
t.Errorf("Expected no error, got %v", err)
}
})

t.Run("NoneBackend", func(t *testing.T) {
// Given a TerraformEnvPrinter with "none" backend configuration
printer, mocks := setup(t)
mocks.ConfigHandler.SetContextValue("terraform.backend.type", "none")

// Mock Stat and Remove to verify file deletion
fileExists := true
mocks.Shims.Stat = func(name string) (os.FileInfo, error) {
if strings.Contains(name, "backend_override.tf") {
if fileExists {
return nil, nil
}
return nil, os.ErrNotExist
}
return nil, os.ErrNotExist
}

var fileRemoved bool
mocks.Shims.Remove = func(name string) error {
if strings.Contains(name, "backend_override.tf") {
fileRemoved = true
fileExists = false
return nil
}
return nil
}

// When generateBackendOverrideTf is called
err := printer.generateBackendOverrideTf()

// Then no error should occur and the file should be removed
if err != nil {
t.Errorf("Expected no error, got %v", err)
}
if !fileRemoved {
t.Error("Expected backend_override.tf to be removed")
}
})

t.Run("NoneBackendFileNotExists", func(t *testing.T) {
// Given a TerraformEnvPrinter with "none" backend configuration and no existing file
printer, mocks := setup(t)
mocks.ConfigHandler.SetContextValue("terraform.backend.type", "none")

// Mock Stat to return file not exists
mocks.Shims.Stat = func(name string) (os.FileInfo, error) {
if strings.Contains(name, "backend_override.tf") {
return nil, os.ErrNotExist
}
return nil, os.ErrNotExist
}

var fileRemoved bool
mocks.Shims.Remove = func(name string) error {
if strings.Contains(name, "backend_override.tf") {
fileRemoved = true
return nil
}
return nil
}

// When generateBackendOverrideTf is called
err := printer.generateBackendOverrideTf()

// Then no error should occur and Remove should not be called
if err != nil {
t.Errorf("Expected no error, got %v", err)
}
if fileRemoved {
t.Error("Expected Remove to not be called when file doesn't exist")
}
})

t.Run("NoneBackendRemoveError", func(t *testing.T) {
// Given a TerraformEnvPrinter with "none" backend configuration and failing Remove
printer, mocks := setup(t)
mocks.ConfigHandler.SetContextValue("terraform.backend.type", "none")

// Mock Stat to return file exists
mocks.Shims.Stat = func(name string) (os.FileInfo, error) {
if strings.Contains(name, "backend_override.tf") {
return nil, nil
}
return nil, os.ErrNotExist
}

// Mock Remove to return error
mocks.Shims.Remove = func(name string) error {
if strings.Contains(name, "backend_override.tf") {
return fmt.Errorf("mock error removing file")
}
return nil
}

// When generateBackendOverrideTf is called
err := printer.generateBackendOverrideTf()

// Then an error should be returned
if err == nil {
t.Error("Expected error, got nil")
}
if !strings.Contains(err.Error(), "error removing backend_override.tf") {
t.Errorf("Expected error message to contain 'error removing backend_override.tf', got %v", err)
}
})
}

func TestTerraformEnv_generateBackendConfigArgs(t *testing.T) {
Expand Down
Loading