a go dns packet parser

feature: add linting and test all fields for edns

+11
.golangci.toml
···
+
version = "2"
+
[linters.settings.govet]
+
enable_all = true
+
[linters.settings.staticcheck]
+
checks = ["all"]
+
[linters.settings.exhaustive]
+
check = ["switch"]
+
[linters.settings.exhaustruct]
+
[linters.settings.goconst]
+
[linters.settings.testifylint]
+
enable-all = true
+7
Justfile
···
+
format:
+
go fmt ./...
+
gofumpt -l -w $(fd .go)
+
+
verify:
+
go vet ./...
+
golangci-lint run
+20
message_test.go
···
name: "Valid DNS query message with one question",
input: buildQuery(1234, "www.example.com", AType, IN),
expected: Message{
+
HasEDNS: false,
Header: Header{
ID: 1234,
QR: false,
···
&A{Address: net.ParseIP("10.0.0.1").To4()},
),
expected: Message{
+
HasEDNS: false,
Header: Header{
ID: 5678,
QR: true,
···
input: []byte{0xea, 0x7c, 0x1, 0x20, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6, 0x6c, 0x6f, 0x62, 0x73, 0x74, 0x65, 0x2, 0x72, 0x73, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x29, 0x4, 0xd0, 0x0, 0x64, 0x0, 0x0, 0x0, 0x8, 0x0, 0x64, 0x0, 0x4, 0x66, 0x6f, 0x6f, 0xa},
wantErr: false,
expected: Message{
+
HasEDNS: true,
Header: Header{
ID: 0xea7c,
QR: false,
···
},
},
Authority: []ResourceRecord{},
+
EDNSOptions: []EDNSOption{
+
{
+
Code: 100,
+
Data: []byte("foo\n"),
+
},
+
},
+
EDNSVersion: 0x64,
+
UDPSize: 0x4d0,
},
},
}
···
assert.Equal(t, tt.expected.Answer, m.Answer, "Answer section mismatch")
assert.Equal(t, tt.expected.Authority, m.Authority, "Authority section mismatch")
assert.Equal(t, tt.expected.Additional, m.Additional, "Additional section mismatch")
+
+
assert.Equal(t, tt.expected.HasEDNS, m.HasEDNS, "HasEDNS mismatch")
+
if m.HasEDNS {
+
assert.Equal(t, tt.expected.EDNSOptions, m.EDNSOptions, "EDNS Options mismatch")
+
assert.Equal(t, tt.expected.ExtendedRCode, m.ExtendedRCode, "ExtendedRCode mismatch")
+
assert.Equal(t, tt.expected.EDNSVersion, m.EDNSVersion, "EDNSVersion mismatch")
+
assert.Equal(t, tt.expected.EDNSFlags, m.EDNSFlags, "EDNSFlags mismatch")
+
assert.Equal(t, tt.expected.UDPSize, m.UDPSize, "UDPSize mismatch")
+
}
b, err := m.Encode()
assert.NoError(t, err, "Expected no error on round trip")