Skip to content

Commit

Permalink
make linter happy
Browse files Browse the repository at this point in the history
add more tests for json model
  • Loading branch information
dmachard committed Nov 22, 2023
1 parent 6420186 commit 65a7ef9
Show file tree
Hide file tree
Showing 4 changed files with 132 additions and 7 deletions.
4 changes: 3 additions & 1 deletion dnsutils/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -383,12 +383,14 @@ func (dm *DNSMessage) handleExtractedDirectives(directives []string, s *strings.
}

func (dm *DNSMessage) handleFilteringDirectives(directives []string, s *strings.Builder) {
if dm.Reducer == nil {
if dm.Filtering == nil {
s.WriteString("-")
} else {
switch directive := directives[0]; {
case directive == "filtering-samplerate":
s.WriteString(strconv.Itoa(dm.Filtering.SampleRate))
default:
log.Fatalf("unsupport directive for text format: %s", directive)
}
}
}
Expand Down
127 changes: 125 additions & 2 deletions dnsutils/message_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,9 @@ func TestDnsMessage_Json_Reference(t *testing.T) {
if !reflect.DeepEqual(dmMap, refMap) {
t.Errorf("json format different from reference")
}

}

func TestDnsMessage_Json_Flatten_Reference(t *testing.T) {
func TestDnsMessage_JsonFlatten_Reference(t *testing.T) {
dm := DNSMessage{}
dm.Init()

Expand Down Expand Up @@ -135,7 +134,94 @@ func TestDnsMessage_Json_Flatten_Reference(t *testing.T) {
if !reflect.DeepEqual(dmFlat, refMap) {
t.Errorf("flatten json format different from reference")
}
}

func TestDnsMessage_Json_Transforms_Reference(t *testing.T) {

testcases := []struct {
transform string
dmRef DNSMessage
jsonRef string
}{
{
transform: "filtering",
dmRef: DNSMessage{Filtering: &TransformFiltering{SampleRate: 22}},
jsonRef: `{
"filtering": {
"sample-rate": 22
}
}`,
},
{
transform: "reducer",
dmRef: DNSMessage{Reducer: &TransformReducer{Occurences: 10, CumulativeLength: 47}},
jsonRef: `{
"reducer": {
"occurences": 10,
"cumulative-length": 47
}
}`,
},
{
transform: "normalize",
dmRef: DNSMessage{
PublicSuffix: &TransformPublicSuffix{
QnamePublicSuffix: "com",
QnameEffectiveTLDPlusOne: "hello.com",
},
},
jsonRef: `{
"publicsuffix": {
"tld": "com",
"etld+1": "hello.com"
}
}`,
},
{
transform: "geoip",
dmRef: DNSMessage{
Geo: &TransformDNSGeo{
City: "Paris",
Continent: "Europe",
CountryIsoCode: "FR",
AutonomousSystemNumber: "1234",
AutonomousSystemOrg: "Internet",
},
},
jsonRef: `{
"geoip": {
"city": "Paris",
"continent": "Europe",
"country-isocode": "FR",
"as-number": "1234",
"as-owner": "Internet"
}
}`,
},
}

for _, tc := range testcases {
t.Run(tc.transform, func(t *testing.T) {

tc.dmRef.Init()

var dmMap map[string]interface{}
err := json.Unmarshal([]byte(tc.dmRef.ToJSON()), &dmMap)
if err != nil {
t.Fatalf("could not unmarshal dm json: %s\n", err)
}

var refMap map[string]interface{}
err = json.Unmarshal([]byte(tc.jsonRef), &refMap)
if err != nil {
t.Fatalf("could not unmarshal ref json: %s\n", err)
}

if !reflect.DeepEqual(dmMap[tc.transform], refMap[tc.transform]) {
t.Errorf("json format different from reference, Get=%s Want=%s", dmMap[tc.transform], refMap[tc.transform])
}
})
}
}

func TestDnsMessage_TextFormat_ToString(t *testing.T) {
Expand Down Expand Up @@ -573,3 +659,40 @@ func TestDnsMessage_TextFormat_Directives_Extracted(t *testing.T) {
})
}
}

func TestDnsMessage_TextFormat_Directives_Filtering(t *testing.T) {
config := GetFakeConfig()

testcases := []struct {
name string
format string
dm DNSMessage
expected string
}{
{
name: "undefined",
format: "filtering-samplerate",
dm: DNSMessage{},
expected: "-",
},
{
name: "default",
format: "filtering-samplerate",
dm: DNSMessage{Filtering: &TransformFiltering{SampleRate: 22}},
expected: "22",
},
}

for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
line := tc.dm.String(
strings.Fields(tc.format),
config.Global.TextFormatDelimiter,
config.Global.TextFormatBoundary,
)
if line != tc.expected {
t.Errorf("Want: %s, got: %s", tc.expected, line)
}
})
}
}
4 changes: 2 additions & 2 deletions docs/transformers/transform_geoip.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ Example:
"city": "-",
"continent": "-",
"country-isocode": "-",
"as-number": 1234,
"as-owner": "Orange",
"as-number": "1234",
"as-owner": "Orange"
},
```

Expand Down
4 changes: 2 additions & 2 deletions docs/transformers/transform_latency.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Example of DNS messages in text format
- **latency**
```
```bash
2023-04-11T18:23:45.564128Z unbound CLIENT_QUERY NOERROR 127.0.0.1 35255 IPv4 UDP 50b google.fr A 0.000000
2023-04-11T18:23:45.56424Z unbound FORWARDER_QUERY NOERROR 0.0.0.0 34329 IPv4 UDP 38b google.fr A 0.000000
2023-04-11T18:23:45.57501Z unbound FORWARDER_RESPONSE NOERROR 0.0.0.0 34329 IPv4 UDP 54b google.fr A 0.010770
Expand All @@ -30,7 +30,7 @@ Example of DNS messages in text format

- **unanswered queries**

```
```bash
2023-04-11T18:42:50.939138364Z dnsdist1 CLIENT_QUERY NOERROR 127.0.0.1 52376 IPv4 UDP 54b www.google.fr A 0.000000
2023-04-11T18:42:50.939138364Z dnsdist1 CLIENT_QUERY TIMEOUT 127.0.0.1 52376 IPv4 UDP 54b www.google.fr A -
```

0 comments on commit 65a7ef9

Please sign in to comment.