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