1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
package rfc1035label
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestLabelsFromBytes(t *testing.T) {
expected := []byte{
0x9, 's', 'l', 'a', 'c', 'k', 'w', 'a', 'r', 'e',
0x2, 'i', 't',
0x0,
}
labels, err := FromBytes(expected)
require.NoError(t, err)
require.Equal(t, 1, len(labels.Labels))
require.Equal(t, len(expected), labels.Length())
require.Equal(t, expected, labels.ToBytes())
require.Equal(t, "slackware.it", labels.Labels[0])
}
func TestLabelsFromBytesZeroLength(t *testing.T) {
labels, err := FromBytes([]byte{})
require.NoError(t, err)
require.Equal(t, 0, len(labels.Labels))
require.Equal(t, 0, labels.Length())
require.Equal(t, []byte{}, labels.ToBytes())
}
func TestLabelsFromBytesInvalidLength(t *testing.T) {
_, err := FromBytes([]byte{0x5, 0xaa, 0xbb}) // short length
require.Error(t, err)
}
func TestLabelsFromBytesInvalidLengthOffByOne(t *testing.T) {
_, err := FromBytes([]byte{0x3, 0xaa, 0xbb}) // short length
require.Error(t, err)
}
func TestLabelsToBytes(t *testing.T) {
expected := []byte{
9, 's', 'l', 'a', 'c', 'k', 'w', 'a', 'r', 'e',
2, 'i', 't',
0,
9, 'i', 'n', 's', 'o', 'm', 'n', 'i', 'a', 'c',
9, 's', 'l', 'a', 'c', 'k', 'w', 'a', 'r', 'e',
2, 'i', 't',
0,
}
labels := Labels{
Labels: []string{
"slackware.it",
"insomniac.slackware.it",
},
}
require.Equal(t, expected, labels.ToBytes())
}
func TestLabelToBytesZeroLength(t *testing.T) {
labels := Labels{
Labels: []string{""},
}
require.Equal(t, []byte{0}, labels.ToBytes())
}
func TestCompressedLabel(t *testing.T) {
data := []byte{
// slackware.it
9, 's', 'l', 'a', 'c', 'k', 'w', 'a', 'r', 'e',
2, 'i', 't',
0,
// insomniac.slackware.it
9, 'i', 'n', 's', 'o', 'm', 'n', 'i', 'a', 'c',
192, 0,
// mail.systemboot.org
4, 'm', 'a', 'i', 'l',
10, 's', 'y', 's', 't', 'e', 'm', 'b', 'o', 'o', 't',
3, 'o', 'r', 'g',
0,
// systemboot.org
192, 31,
}
expected := []string{
"slackware.it",
"insomniac.slackware.it",
"mail.systemboot.org",
"systemboot.org",
}
labels, err := FromBytes(data)
require.NoError(t, err)
require.Equal(t, 4, len(labels.Labels))
require.Equal(t, expected, labels.Labels)
require.Equal(t, len(data), labels.Length())
}
func TestShortCompressedLabel(t *testing.T) {
data := []byte{
// slackware.it
9, 's', 'l', 'a', 'c', 'k', 'w', 'a', 'r', 'e',
2, 'i', 't',
0,
// insomniac.slackware.it
9, 'i', 'n', 's', 'o', 'm', 'n', 'i', 'a', 'c',
192,
}
_, err := FromBytes(data)
require.Error(t, err)
}
func TestNestedCompressedLabel(t *testing.T) {
data := []byte{
// it
3, 'i', 't',
0,
// slackware.it
9, 's', 'l', 'a', 'c', 'k', 'w', 'a', 'r', 'e',
192, 0,
// insomniac.slackware.it
9, 'i', 'n', 's', 'o', 'm', 'n', 'i', 'a', 'c',
192, 5,
}
_, err := FromBytes(data)
require.Error(t, err)
}
|