Skip to content

Commit 7805d09

Browse files
authored
feat: process the processor_overrides diagnostics (#154)
1 parent 8e8ce16 commit 7805d09

File tree

5 files changed

+90
-10
lines changed

5 files changed

+90
-10
lines changed

builder_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ func TestBuilder(t *testing.T) {
317317
resp, err := http.DefaultClient.Do(req)
318318
require.NoError(t, err)
319319
defer resp.Body.Close()
320-
require.Equal(t, http.StatusOK, resp.StatusCode)
320+
require.Equal(t, http.StatusOK, resp.StatusCode, "failed to get latest release of DataDog/appsec-event-rules: %s", resp.Status)
321321

322322
var release struct {
323323
TagName string `json:"tag_name"`

decoder.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ func decodeDiagnostics(obj *bindings.WAFObject) (Diagnostics, error) {
7676
diags.RulesOverrides, err = decodeFeature(objElem)
7777
case "processors":
7878
diags.Processors, err = decodeFeature(objElem)
79+
case "processor_overrides":
80+
diags.ProcessorOverrides, err = decodeFeature(objElem)
7981
case "scanners":
8082
diags.Scanners, err = decodeFeature(objElem)
8183
case "ruleset_version":

diagnostics.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ type Diagnostics struct {
2929
ExclusionData *Feature
3030
// Processors contains information about the loaded processors.
3131
Processors *Feature
32+
// ProcessorOverrides contains information about the loaded processor overrides.
33+
ProcessorOverrides *Feature
3234
// Scanners contains information about the loaded scanners.
3335
Scanners *Feature
3436
// Version is the version of the parsed ruleset if available.
@@ -38,15 +40,16 @@ type Diagnostics struct {
3840
// EachFeature calls the provided callback for each (non-nil) feature in this diagnostics object.
3941
func (d *Diagnostics) EachFeature(cb func(string, *Feature)) {
4042
byName := map[string]*Feature{
41-
"rules": d.Rules,
42-
"custom_rules": d.CustomRules,
43-
"actions": d.Actions,
44-
"exclusions": d.Exclusions,
45-
"rules_overrides": d.RulesOverrides,
46-
"rules_data": d.RulesData,
47-
"exclusion_data": d.ExclusionData,
48-
"processors": d.Processors,
49-
"scanners": d.Scanners,
43+
"rules": d.Rules,
44+
"custom_rules": d.CustomRules,
45+
"actions": d.Actions,
46+
"exclusions": d.Exclusions,
47+
"rules_overrides": d.RulesOverrides,
48+
"rules_data": d.RulesData,
49+
"exclusion_data": d.ExclusionData,
50+
"processors": d.Processors,
51+
"processor_overrides": d.ProcessorOverrides,
52+
"scanners": d.Scanners,
5053
}
5154

5255
for name, feat := range byName {

diagnostics_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,23 @@ func TestDecodeDiagnosticsExclusionData(t *testing.T) {
3333
require.NotNil(t, diags.ExclusionData)
3434
require.Contains(t, diags.ExclusionData.Loaded, "id1")
3535
}
36+
37+
func TestDecodeProcessorOverrides(t *testing.T) {
38+
var pinner runtime.Pinner
39+
defer pinner.Unpin()
40+
41+
encoder, err := newEncoder(newUnlimitedEncoderConfig(&pinner))
42+
require.NoError(t, err)
43+
44+
obj, err := encoder.Encode(map[string]any{
45+
"processor_overrides": map[string]any{
46+
"loaded": []any{"id1"},
47+
},
48+
})
49+
require.NoError(t, err)
50+
51+
diags, err := decodeDiagnostics(obj)
52+
require.NoError(t, err)
53+
require.NotNil(t, diags.ProcessorOverrides)
54+
require.Contains(t, diags.ProcessorOverrides.Loaded, "id1")
55+
}

waf_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"github.com/DataDog/go-libddwaf/v4/internal/lib"
2727
"github.com/DataDog/go-libddwaf/v4/timer"
2828
"github.com/DataDog/go-libddwaf/v4/waferrors"
29+
"github.com/stretchr/testify/assert"
2930
"github.com/stretchr/testify/require"
3031
)
3132

@@ -1286,3 +1287,57 @@ func BenchmarkEncoder(b *testing.B) {
12861287
})
12871288
}
12881289
}
1290+
1291+
func TestProcessorOverrides(t *testing.T) {
1292+
rules := `{
1293+
"processor_overrides": [
1294+
{
1295+
"target": [{ "id": "extract-content" }],
1296+
"scanners": {
1297+
"include": [
1298+
{ "id": "test-scanner-001" },
1299+
{ "id": "test-scanner-custom-001" }
1300+
],
1301+
"exclude": []
1302+
}
1303+
}
1304+
],
1305+
"scanners": [
1306+
{
1307+
"id": "test-scanner-custom-001",
1308+
"name": "Custom scanner",
1309+
"key": {
1310+
"operator": "match_regex",
1311+
"parameters": {
1312+
"regex": "\\btestcard\\b",
1313+
"options": { "case_sensitive": false, "min_length": 2 }
1314+
}
1315+
},
1316+
"value": {
1317+
"operator": "match_regex",
1318+
"parameters": {
1319+
"regex": "\\b1234567890\\b",
1320+
"options": { "case_sensitive": false, "min_length": 5 }
1321+
}
1322+
},
1323+
"tags": { "type": "card", "category": "testcategory" }
1324+
}
1325+
]
1326+
}`
1327+
1328+
builder, err := NewBuilder("", "")
1329+
require.NoError(t, err)
1330+
1331+
var parsed map[string]any
1332+
require.NoError(t, json.Unmarshal([]byte(rules), &parsed))
1333+
diag, err := builder.AddOrUpdateConfig("/", parsed)
1334+
require.NoError(t, err)
1335+
assert.Equal(t, &Feature{
1336+
Errors: nil,
1337+
Warnings: nil,
1338+
Error: "",
1339+
Loaded: []string{"index:0"},
1340+
Failed: nil,
1341+
Skipped: nil,
1342+
}, diag.ProcessorOverrides)
1343+
}

0 commit comments

Comments
 (0)