Browse Source

Added DnsLabel and associated tests; refactored tests

develop
Robin Thoni 6 years ago
parent
commit
910b06df7b
1 changed files with 263 additions and 0 deletions
  1. 263
    0
      tests/DnsHeader.cpp

+ 263
- 0
tests/DnsHeader.cpp View File

@@ -0,0 +1,263 @@
1
+//
2
+// Created by robin on 1/9/18.
3
+//
4
+
5
+#include <gtest/gtest.h>
6
+#include <QByteArray>
7
+#include <QString>
8
+
9
+#include "dns/QDnsHeader.h"
10
+
11
+struct DnsHeaderTestParams
12
+{
13
+    bool isValid;
14
+    const char* hexData;
15
+    quint16 id;
16
+
17
+    quint16 flags;
18
+    bool flagQuery;
19
+    quint8 flagOpcode;
20
+    bool flagAuthoritative;
21
+    bool flagTruncated;
22
+    bool flagRecursionDesired;
23
+    bool flagRecursionAvailable;
24
+    bool flagReserved0;
25
+    bool flagAnswerAuthenticated;
26
+    bool flagNonAuthenticatedAcceptable;
27
+    quint8 flagReplyCode;
28
+
29
+    quint16 questionCount;
30
+    quint16 answerCount;
31
+    quint16 authorityCount;
32
+    quint16 additionalCount;
33
+};
34
+
35
+class DnsHeaderTest : public ::testing::TestWithParam<DnsHeaderTestParams>
36
+{
37
+};
38
+
39
+TEST_P(DnsHeaderTest, parseAndGetters)
40
+{
41
+    auto params = GetParam();
42
+    auto data = QByteArray::fromHex(params.hexData);
43
+    auto header = QDns::QDnsHeader::parse(data);
44
+    ASSERT_EQ(header.isValid(), params.isValid);
45
+
46
+    if (header.isValid())
47
+    {
48
+        ASSERT_EQ(header.getId(), params.id);
49
+
50
+        ASSERT_EQ(header.getFlags(), params.flags);
51
+        ASSERT_EQ(header.isQuery(), params.flagQuery);
52
+        ASSERT_EQ(header.getOpcode(), params.flagOpcode);
53
+        ASSERT_EQ(header.isAuthoritative(), params.flagAuthoritative);
54
+        ASSERT_EQ(header.isTruncated(), params.flagTruncated);
55
+        ASSERT_EQ(header.isRecursionDesired(), params.flagRecursionDesired);
56
+        ASSERT_EQ(header.isRecursionAvailable(), params.flagRecursionAvailable);
57
+        ASSERT_EQ(header.isAnswerAuthenticated(), params.flagAnswerAuthenticated);
58
+        ASSERT_EQ(header.isNonAuthenticatedAcceptable(), params.flagNonAuthenticatedAcceptable);
59
+        ASSERT_EQ(header.getReplyCode(), params.flagReplyCode);
60
+
61
+        ASSERT_EQ(header.getQuestionCount(), params.questionCount);
62
+        ASSERT_EQ(header.getAnswerCount(), params.answerCount);
63
+        ASSERT_EQ(header.getAuthorityCount(), params.authorityCount);
64
+        ASSERT_EQ(header.getAdditionalCount(), params.additionalCount);
65
+
66
+        ASSERT_EQ(header.serialize().toHex(), QString(params.hexData).remove(" "));
67
+    }
68
+}
69
+
70
+TEST_P(DnsHeaderTest, settersAndGetters1)
71
+{
72
+    auto params = GetParam();
73
+
74
+    if (!params.isValid)
75
+    {
76
+        return;
77
+    }
78
+
79
+    auto data = QByteArray::fromHex(params.hexData);
80
+    QDns::QDnsHeader header;
81
+
82
+    header.setId(params.id);
83
+    header.setFlags(params.flags);
84
+    header.setQuestionCount(params.questionCount);
85
+    header.setAnswerCount(params.answerCount);
86
+    header.setAuthorityCount(params.authorityCount);
87
+    header.setAdditionalCount(params.additionalCount);
88
+
89
+    ASSERT_EQ(header.getId(), params.id);
90
+
91
+    ASSERT_EQ(header.getFlags(), params.flags);
92
+    ASSERT_EQ(header.isQuery(), params.flagQuery);
93
+    ASSERT_EQ(header.getOpcode(), params.flagOpcode);
94
+    ASSERT_EQ(header.isAuthoritative(), params.flagAuthoritative);
95
+    ASSERT_EQ(header.isTruncated(), params.flagTruncated);
96
+    ASSERT_EQ(header.isRecursionDesired(), params.flagRecursionDesired);
97
+    ASSERT_EQ(header.isRecursionAvailable(), params.flagRecursionAvailable);
98
+    ASSERT_EQ(header.isAnswerAuthenticated(), params.flagAnswerAuthenticated);
99
+    ASSERT_EQ(header.isNonAuthenticatedAcceptable(), params.flagNonAuthenticatedAcceptable);
100
+    ASSERT_EQ(header.getReplyCode(), params.flagReplyCode);
101
+
102
+    ASSERT_EQ(header.getQuestionCount(), params.questionCount);
103
+    ASSERT_EQ(header.getAnswerCount(), params.answerCount);
104
+    ASSERT_EQ(header.getAuthorityCount(), params.authorityCount);
105
+    ASSERT_EQ(header.getAdditionalCount(), params.additionalCount);
106
+
107
+    ASSERT_EQ(header.serialize().toHex(), QString(params.hexData).remove(" "));
108
+}
109
+
110
+TEST_P(DnsHeaderTest, settersAndGetters2)
111
+{
112
+    auto params = GetParam();
113
+
114
+    if (!params.isValid)
115
+    {
116
+        return;
117
+    }
118
+
119
+    auto data = QByteArray::fromHex(params.hexData);
120
+    QDns::QDnsHeader header;
121
+
122
+    header.setId(params.id);
123
+    header.setIsQuery(params.flagQuery);
124
+    header.setOpcode(params.flagOpcode);
125
+    header.setIsAuthoritative(params.flagAuthoritative);
126
+    header.setIsTruncated(params.flagTruncated);
127
+    header.setIsRecursionDesired(params.flagRecursionDesired);
128
+    header.setIsRecursionAvailable(params.flagRecursionAvailable);
129
+    header.setFlagBits(9, (quint16) params.flagReserved0, 1);
130
+    header.setIsAnswerAuthenticated(params.flagAnswerAuthenticated);
131
+    header.setNonAuthenticatedAcceptable(params.flagNonAuthenticatedAcceptable);
132
+    header.setReplyCode(params.flagReplyCode);
133
+    header.setQuestionCount(params.questionCount);
134
+    header.setAnswerCount(params.answerCount);
135
+    header.setAuthorityCount(params.authorityCount);
136
+    header.setAdditionalCount(params.additionalCount);
137
+
138
+    ASSERT_EQ(header.getId(), params.id);
139
+
140
+    ASSERT_EQ(header.getFlags(), params.flags);
141
+    ASSERT_EQ(header.isQuery(), params.flagQuery);
142
+    ASSERT_EQ(header.getOpcode(), params.flagOpcode);
143
+    ASSERT_EQ(header.isAuthoritative(), params.flagAuthoritative);
144
+    ASSERT_EQ(header.isTruncated(), params.flagTruncated);
145
+    ASSERT_EQ(header.isRecursionDesired(), params.flagRecursionDesired);
146
+    ASSERT_EQ(header.isRecursionAvailable(), params.flagRecursionAvailable);
147
+    ASSERT_EQ(header.isAnswerAuthenticated(), params.flagAnswerAuthenticated);
148
+    ASSERT_EQ(header.isNonAuthenticatedAcceptable(), params.flagNonAuthenticatedAcceptable);
149
+    ASSERT_EQ(header.getReplyCode(), params.flagReplyCode);
150
+
151
+    ASSERT_EQ(header.getQuestionCount(), params.questionCount);
152
+    ASSERT_EQ(header.getAnswerCount(), params.answerCount);
153
+    ASSERT_EQ(header.getAuthorityCount(), params.authorityCount);
154
+    ASSERT_EQ(header.getAdditionalCount(), params.additionalCount);
155
+
156
+    ASSERT_EQ(header.serialize().toHex(), QString(params.hexData).remove(" "));
157
+}
158
+
159
+INSTANTIATE_TEST_CASE_P(DnsHeaderTestInst,
160
+                        DnsHeaderTest,
161
+                        ::testing::Values(
162
+                                DnsHeaderTestParams {false, ""},
163
+                                DnsHeaderTestParams {false, "00"},
164
+                                DnsHeaderTestParams {true,
165
+                                                     "3c dc 01 00 00 01 00 00  00 00 00 00",
166
+                                                     0x3cdc,
167
+
168
+                                                     0x0100,
169
+                                                     false,
170
+                                                     0,
171
+                                                     false,
172
+                                                     false,
173
+                                                     true,
174
+                                                     false,
175
+                                                     false,
176
+                                                     false,
177
+                                                     false,
178
+                                                     0,
179
+
180
+                                                     1,
181
+                                                     0,
182
+                                                     0,
183
+                                                     0
184
+                                },
185
+                                DnsHeaderTestParams {true,
186
+                                                     "3c dc 81 80 00 01 00 01  00 00 00 00",
187
+                                                     0x3cdc,
188
+                                                     0x8180,
189
+                                                     true,
190
+                                                     0,
191
+                                                     false,
192
+                                                     false,
193
+                                                     true,
194
+                                                     true,
195
+                                                     false,
196
+                                                     false,
197
+                                                     false,
198
+                                                     0,
199
+
200
+                                                     1,
201
+                                                     1,
202
+                                                     0,
203
+                                                     0
204
+                                },
205
+
206
+                                DnsHeaderTestParams {true,
207
+                                                     "3c dc aa aa aa aa 55 55  55 ff ff 55",
208
+                                                     0x3cdc,
209
+                                                     0xaaaa,
210
+                                                     true,
211
+                                                     5,
212
+                                                     false,
213
+                                                     true,
214
+                                                     false,
215
+                                                     true,
216
+                                                     false,
217
+                                                     true,
218
+                                                     false,
219
+                                                     10,
220
+
221
+                                                     43690,
222
+                                                     21845,
223
+                                                     22015,
224
+                                                     65365
225
+                                },
226
+                                DnsHeaderTestParams {true,
227
+                                                     "3c dc 55 55 55 ff aa aa  ff 55 55 55",
228
+                                                     0x3cdc,
229
+                                                     0x5555,
230
+                                                     false,
231
+                                                     10,
232
+                                                     true,
233
+                                                     false,
234
+                                                     true,
235
+                                                     false,
236
+                                                     true,
237
+                                                     false,
238
+                                                     true,
239
+                                                     5,
240
+
241
+                                                     22015,
242
+                                                     43690,
243
+                                                     65365,
244
+                                                     21845
245
+                                }
246
+                        ));
247
+
248
+TEST(DnsHeaderTest, getFlagBits)
249
+{
250
+    QDns::QDnsHeader header;
251
+
252
+    header.setFlags(0x5555);
253
+    ASSERT_EQ(header.getFlagBits(0, 1), 0);
254
+    ASSERT_EQ(header.getFlagBits(3, 4), 5);
255
+}
256
+
257
+TEST(DnsHeaderTest, getFlagBitIndex)
258
+{
259
+    ASSERT_EQ(QDns::QDnsHeader::getFlagBitIndex(0), 15);
260
+    ASSERT_EQ(QDns::QDnsHeader::getFlagBitIndex(1), 14);
261
+    ASSERT_EQ(QDns::QDnsHeader::getFlagBitIndex(14), 1);
262
+    ASSERT_EQ(QDns::QDnsHeader::getFlagBitIndex(15), 0);
263
+}

Loading…
Cancel
Save