Skip to content

Commit

Permalink
chore: Fix nil panic, add test for language
Browse files Browse the repository at this point in the history
Ensuring that it is populated from compliance policy responses.

Adding the value to policy (violation policies) responses as well. This is for more-complete information purposes. It is only valid at this time to create a violation policy with LQL.
  • Loading branch information
gspofford-lw committed Apr 10, 2024
1 parent e3a8278 commit dde37aa
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 2 deletions.
96 changes: 96 additions & 0 deletions integration/resource_lacework_query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,92 @@ func TestQueryCreate(t *testing.T) {
assert.Equal(t, queryStringK8, actualQuery)
}

func TestQueryCreateRego(t *testing.T) {
queryID := fmt.Sprintf("Rego_Terraform_Module_%d", time.Now().UnixMilli())
var queryLanguage = regoStr
terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{
TerraformDir: "../examples/resource_lacework_query",
Vars: map[string]interface{}{
"query_id": queryID,
"query_language": &queryLanguage,
"query": queryStringRego},
})
defer terraform.Destroy(t, terraformOptions)

// Create new Query
create := terraform.InitAndApplyAndIdempotent(t, terraformOptions)
createProps := GetQueryProps(create)

assert.Equal(t, queryID, createProps.Data.QueryID)
assert.Equal(t, queryStringK8, createProps.Data.QueryText)
assert.NotNil(t, createProps.Data.QueryLanguage)
if createProps.Data.QueryLanguage != nil {
assert.Equal(t, regoStr, *createProps.Data.QueryLanguage)
}

actualQueryID := terraform.Output(t, terraformOptions, "query_id")
actualQuery := terraform.Output(t, terraformOptions, "query")
var actualQueryLanguage *string
terraform.OutputStruct(t, terraformOptions, "query_language", &actualQueryLanguage)

assert.Equal(t, queryID, actualQueryID)
assert.Equal(t, queryStringK8, actualQuery)
assert.NotNil(t, actualQueryLanguage)
if actualQueryLanguage != nil {
assert.Equal(t, regoStr, *actualQueryLanguage)
}

// Update Query
terraformOptions.Vars = map[string]interface{}{
"query_id": queryID,
"query": queryStringRego,
}

update := terraform.ApplyAndIdempotent(t, terraformOptions)
updateProps := GetQueryProps(update)

assert.Equal(t, queryID, updateProps.Data.QueryID)
assert.Equal(t, queryStringK8, updateProps.Data.QueryText)
assert.NotNil(t, updateProps.Data.QueryLanguage)
if updateProps.Data.QueryLanguage != nil {
assert.Equal(t, regoStr, *updateProps.Data.QueryLanguage)
}

actualQueryID = terraform.Output(t, terraformOptions, "query_id")
actualQuery = terraform.Output(t, terraformOptions, "query")
terraform.OutputStruct(t, terraformOptions, "query_language", &actualQueryLanguage)

assert.Equal(t, queryID, actualQueryID)
assert.Equal(t, queryStringK8, actualQuery)
assert.NotNil(t, actualQueryLanguage)
if actualQueryLanguage != nil {
assert.Equal(t, regoStr, *actualQueryLanguage)
}

// Run apply again
thirdApply := terraform.ApplyAndIdempotent(t, terraformOptions)

thirdApplyProps := GetQueryProps(thirdApply)

assert.Equal(t, queryID, thirdApplyProps.Data.QueryID)
assert.Equal(t, queryStringK8, thirdApplyProps.Data.QueryText)
assert.NotNil(t, thirdApplyProps.Data.QueryLanguage)
if thirdApplyProps.Data.QueryLanguage != nil {
assert.Equal(t, regoStr, *thirdApplyProps.Data.QueryLanguage)
}

actualQueryID = terraform.Output(t, terraformOptions, "query_id")
actualQuery = terraform.Output(t, terraformOptions, "query")
terraform.OutputStruct(t, terraformOptions, "query_language", &actualQueryLanguage)

assert.Equal(t, queryID, actualQueryID)
assert.Equal(t, queryStringK8, actualQuery)
assert.NotNil(t, actualQueryLanguage)
if actualQueryLanguage != nil {
assert.Equal(t, regoStr, *actualQueryLanguage)
}
}

func TestQueryDeprecatedSytaxWithID(t *testing.T) {
terraformOptions := terraform.WithDefaultRetryableErrors(t, &terraform.Options{
TerraformDir: "../examples/resource_lacework_query",
Expand Down Expand Up @@ -254,4 +340,14 @@ var (
filter { ERROR_CODE is null }
return distinct { EVENT }
}`

queryStringRego = `
package a_test
import future.keywords
import data.lacework
source := lacework.spm.aws.lists_all("s3", "list-buckets"
assess := "Compliant"
`

regoStr = "Rego"
)
7 changes: 5 additions & 2 deletions lacework/resource_lacework_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,13 @@ func resourceLaceworkQueryCreate(d *schema.ResourceData, meta interface{}) error
)

// TODOs get the query

var queryLanguage string
if queryLanguageRaw := d.Get("query_language"); queryLanguageRaw != nil {
queryLanguage = queryLanguageRaw.(string)
}
query := api.NewQuery{
QueryID: d.Get("query_id").(string),
QueryLanguage: d.Get("query_language").(*string),
QueryLanguage: &queryLanguage,
QueryText: d.Get("query").(string),
}

Expand Down

0 comments on commit dde37aa

Please sign in to comment.