a go dns packet parser

start doing a general code review

Changed files
+18 -13
+16 -12
errors_test.go
···
package magna
import (
+
"fmt"
"testing"
"github.com/stretchr/testify/assert"
···
offset int
expected string
}{
-
{"basic overflow", 10, 15, "magna: offset 15 is past the buffer length 10"},
-
{"zero length", 0, 5, "magna: offset 5 is past the buffer length 0"},
-
{"negative offset", 10, -1, "magna: offset -1 is past the buffer length 10"},
+
{"PositiveOffset", 10, 15, "magna: offset 15 is past the buffer length 10"},
+
{"ZeroLengthBuffer", 0, 5, "magna: offset 5 is past the buffer length 0"},
+
{"NegativeOffset", 10, -1, "magna: offset -1 is past the buffer length 10"},
+
{"EqualOffset", 10, 10, "magna: offset 10 is past the buffer length 10"},
}
for _, tt := range tests {
···
length int
expected string
}{
-
{"zero length", 0, "magna: received invalid label length 0"},
-
{"negative length", -1, "magna: received invalid label length -1"},
-
{"large length", 1000, "magna: received invalid label length 1000"},
+
{"LengthTooLarge", 64, "magna: received invalid label length 64"},
+
{"LengthZero", 0, "magna: received invalid label length 0"},
+
{"NegativeLength", -1, "magna: received invalid label length -1"},
}
for _, tt := range tests {
···
}
func TestDomainCompressionError(t *testing.T) {
-
err := &DomainCompressionError{}
-
expected := "magna: loop detected in domain compression"
-
assert.Equal(t, expected, err.Error())
+
t.Run("Standard", func(t *testing.T) {
+
err := &DomainCompressionError{}
+
expected := "magna: loop detected in domain compression"
+
assert.Equal(t, expected, err.Error(), "Error() output mismatch")
+
})
}
func TestMagnaError(t *testing.T) {
···
message string
expected string
}{
-
{"empty message", "", "magna: "},
-
{"basic message", "test error", "magna: test error"},
-
{"message with punctuation", "error: invalid input!", "magna: error: invalid input!"},
+
{"EmptyMessage", "", "magna: "},
+
{"SimpleMessage", "test error", "magna: test error"},
+
{"MessageWithPunctuation", "error: invalid input!", "magna: error: invalid input!"},
}
for _, tt := range tests {
+2 -1
message.go
···
// TODO: set truncation bit if over 512 and udp is protocol
func (m *Message) Encode() []byte {
m.offsets = make(map[string]uint16)
-
bytes := m.Header.Encode()
+
bytes := make([]byte, 0, 512)
+
bytes = append(bytes, m.Header.Encode()...)
for _, question := range m.Question {
bytes = question.Encode(bytes, &m.offsets)