diff --git a/pkg/cmd/scan.go b/pkg/cmd/scan.go index 2fe5a7f0f..28c51035d 100644 --- a/pkg/cmd/scan.go +++ b/pkg/cmd/scan.go @@ -387,7 +387,7 @@ func retrieveBackendsFromHCL(workdir string) ([]config.SupplierConfig, error) { if err != nil { return nil, err } - var supplierConfigs []config.SupplierConfig + supplierConfigs := make([]config.SupplierConfig, 0) for _, match := range matches { body, err := hcl.ParseTerraformFromHCL(match) diff --git a/pkg/cmd/scan_test.go b/pkg/cmd/scan_test.go index 91a093bf2..232fb90bb 100644 --- a/pkg/cmd/scan_test.go +++ b/pkg/cmd/scan_test.go @@ -4,6 +4,9 @@ import ( "testing" "github.com/snyk/driftctl/pkg" + "github.com/snyk/driftctl/pkg/iac/config" + "github.com/snyk/driftctl/pkg/iac/terraform/state" + "github.com/snyk/driftctl/pkg/iac/terraform/state/backend" "github.com/snyk/driftctl/test" "github.com/spf13/cobra" "github.com/stretchr/testify/assert" @@ -156,3 +159,37 @@ func Test_Options(t *testing.T) { }) } } + +func Test_RetrieveBackendsFromHCL(t *testing.T) { + cases := []struct { + name string + dir string + expected []config.SupplierConfig + wantErr error + }{ + { + name: "should parse s3 backend and ignore invalid file", + dir: "testdata/backend/s3", + expected: []config.SupplierConfig{ + { + Key: state.TerraformStateReaderSupplier, + Backend: backend.BackendKeyS3, + Path: "terraform-state-prod/network/terraform.tfstate", + }, + }, + }, + { + name: "should not find any match and return empty slice", + dir: "testdata/backend", + expected: []config.SupplierConfig{}, + }, + } + + for _, tt := range cases { + t.Run(tt.name, func(t *testing.T) { + configs, err := retrieveBackendsFromHCL(tt.dir) + assert.Equal(t, tt.wantErr, err) + assert.Equal(t, tt.expected, configs) + }) + } +} diff --git a/pkg/cmd/testdata/backend/s3/invalid.tf b/pkg/cmd/testdata/backend/s3/invalid.tf new file mode 100644 index 000000000..06608d73e --- /dev/null +++ b/pkg/cmd/testdata/backend/s3/invalid.tf @@ -0,0 +1 @@ +invalid {} diff --git a/pkg/cmd/testdata/backend/s3/s3.tf b/pkg/cmd/testdata/backend/s3/s3.tf new file mode 100644 index 000000000..fbc1c9831 --- /dev/null +++ b/pkg/cmd/testdata/backend/s3/s3.tf @@ -0,0 +1,7 @@ +terraform { + backend "s3" { + bucket = "terraform-state-prod" + key = "network/terraform.tfstate" + region = "us-east-1" + } +}