1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "net/dns/record_parsed.h"
7 #include "net/dns/dns_protocol.h"
8 #include "net/dns/dns_response.h"
9 #include "net/dns/dns_test_util.h"
10 #include "net/dns/record_rdata.h"
11 #include "testing/gtest/include/gtest/gtest.h"
15 static const uint8 kT1ResponseWithCacheFlushBit
[] = {
16 0x0a, 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w',
17 0x08, 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm',
20 0x00, 0x05, // TYPE is CNAME.
21 0x80, 0x01, // CLASS is IN with cache flush bit set.
22 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
24 0x00, 0x12, // RDLENGTH is 18 bytes.
25 // ghs.l.google.com in DNS format.
28 0x06, 'g', 'o', 'o', 'g', 'l', 'e',
33 TEST(RecordParsedTest
, ParseSingleRecord
) {
34 DnsRecordParser
parser(kT1ResponseDatagram
, sizeof(kT1ResponseDatagram
),
35 sizeof(dns_protocol::Header
));
36 scoped_ptr
<const RecordParsed
> record
;
37 const CnameRecordRdata
* rdata
;
39 parser
.SkipQuestion();
40 record
= RecordParsed::CreateFrom(&parser
, base::Time());
41 EXPECT_TRUE(record
!= NULL
);
43 ASSERT_EQ("codereview.chromium.org", record
->name());
44 ASSERT_EQ(dns_protocol::kTypeCNAME
, record
->type());
45 ASSERT_EQ(dns_protocol::kClassIN
, record
->klass());
47 rdata
= record
->rdata
<CnameRecordRdata
>();
48 ASSERT_TRUE(rdata
!= NULL
);
49 ASSERT_EQ(kT1CanonName
, rdata
->cname());
51 ASSERT_FALSE(record
->rdata
<SrvRecordRdata
>());
52 ASSERT_TRUE(record
->IsEqual(record
.get(), true));
55 TEST(RecordParsedTest
, CacheFlushBitCompare
) {
56 DnsRecordParser
parser1(kT1ResponseDatagram
, sizeof(kT1ResponseDatagram
),
57 sizeof(dns_protocol::Header
));
58 parser1
.SkipQuestion();
59 scoped_ptr
<const RecordParsed
> record1
=
60 RecordParsed::CreateFrom(&parser1
, base::Time());
62 DnsRecordParser
parser2(kT1ResponseWithCacheFlushBit
,
63 sizeof(kT1ResponseWithCacheFlushBit
),
66 scoped_ptr
<const RecordParsed
> record2
=
67 RecordParsed::CreateFrom(&parser2
, base::Time());
69 EXPECT_FALSE(record1
->IsEqual(record2
.get(), false));
70 EXPECT_TRUE(record1
->IsEqual(record2
.get(), true));
71 EXPECT_FALSE(record2
->IsEqual(record1
.get(), false));
72 EXPECT_TRUE(record2
->IsEqual(record1
.get(), true));