Files
aquasecurity-trivy/pkg/iac/adapters/terraform/aws/dynamodb/adapt_test.go
2026-01-14 19:44:33 +00:00

163 lines
4.0 KiB
Go

package dynamodb
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/aquasecurity/trivy/internal/testutil"
"github.com/aquasecurity/trivy/pkg/iac/adapters/terraform/tftestutil"
"github.com/aquasecurity/trivy/pkg/iac/providers/aws/dynamodb"
iacTypes "github.com/aquasecurity/trivy/pkg/iac/types"
)
func Test_adaptCluster(t *testing.T) {
tests := []struct {
name string
terraform string
expected dynamodb.DAXCluster
}{
{
name: "cluster",
terraform: `
resource "aws_dax_cluster" "example" {
server_side_encryption {
enabled = true
}
}
`,
expected: dynamodb.DAXCluster{
ServerSideEncryption: dynamodb.ServerSideEncryption{
Enabled: iacTypes.BoolTest(true),
},
},
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
adapted := adaptCluster(modules.GetBlocks()[0], modules[0])
testutil.AssertDefsecEqual(t, test.expected, adapted)
})
}
}
func Test_adaptTable(t *testing.T) {
tests := []struct {
name string
terraform string
expected dynamodb.Table
}{
{
name: "table",
terraform: `
resource "aws_dynamodb_table" "example" {
name = "example"
server_side_encryption {
enabled = true
kms_key_arn = "key-string"
}
point_in_time_recovery {
enabled = true
}
}
`,
expected: dynamodb.Table{
ServerSideEncryption: dynamodb.ServerSideEncryption{
Enabled: iacTypes.BoolTest(true),
KMSKeyID: iacTypes.StringTest("key-string"),
},
PointInTimeRecovery: iacTypes.BoolTest(true),
},
},
{
name: "table no kms",
terraform: `
resource "aws_dax_cluster" "example" {
server_side_encryption {
enabled = true
}
}
`,
expected: dynamodb.Table{
ServerSideEncryption: dynamodb.ServerSideEncryption{
Enabled: iacTypes.BoolTest(true),
KMSKeyID: iacTypes.StringTest(dynamodb.DefaultKMSKeyID),
},
},
},
{
name: "reference key",
terraform: `
resource "aws_dynamodb_table" "example" {
name = "example"
server_side_encryption {
enabled = true
kms_key_arn = aws_kms_key.a.arn
}
}
resource "aws_kms_key" "a" {
}
`,
expected: dynamodb.Table{
ServerSideEncryption: dynamodb.ServerSideEncryption{
Enabled: iacTypes.BoolTest(true),
KMSKeyID: iacTypes.StringTest("aws_kms_key.a"),
},
},
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
modules := tftestutil.CreateModulesFromSource(t, test.terraform, ".tf")
adapted := adaptTable(modules.GetBlocks()[0], modules[0])
testutil.AssertDefsecEqual(t, test.expected, adapted)
})
}
}
func TestLines(t *testing.T) {
src := `
resource "aws_dynamodb_table" "example" {
name = "example"
server_side_encryption {
enabled = true
kms_key_arn = "key-string"
}
point_in_time_recovery {
enabled = true
}
}`
modules := tftestutil.CreateModulesFromSource(t, src, ".tf")
adapted := Adapt(modules)
require.Empty(t, adapted.DAXClusters)
require.Len(t, adapted.Tables, 1)
table := adapted.Tables[0]
assert.Equal(t, 2, table.Metadata.Range().GetStartLine())
assert.Equal(t, 13, table.Metadata.Range().GetEndLine())
assert.Equal(t, 5, table.ServerSideEncryption.Metadata.Range().GetStartLine())
assert.Equal(t, 8, table.ServerSideEncryption.Metadata.Range().GetEndLine())
assert.Equal(t, 6, table.ServerSideEncryption.Enabled.GetMetadata().Range().GetStartLine())
assert.Equal(t, 6, table.ServerSideEncryption.Enabled.GetMetadata().Range().GetEndLine())
assert.Equal(t, 7, table.ServerSideEncryption.KMSKeyID.GetMetadata().Range().GetStartLine())
assert.Equal(t, 7, table.ServerSideEncryption.KMSKeyID.GetMetadata().Range().GetEndLine())
assert.Equal(t, 11, table.PointInTimeRecovery.GetMetadata().Range().GetStartLine())
assert.Equal(t, 11, table.PointInTimeRecovery.GetMetadata().Range().GetEndLine())
}