- add sources.
[platform/framework/web/crosswalk.git] / src / net / dns / record_parsed_unittest.cc
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.
4
5 #include "net/dns/record_parsed.h"
6
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"
12
13 namespace net {
14
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',
18   0x03, 'o', 'r', 'g',
19   0x00,
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.
23   0x24, 0x74,
24   0x00, 0x12,        // RDLENGTH is 18 bytes.
25   // ghs.l.google.com in DNS format.
26   0x03, 'g', 'h', 's',
27   0x01, 'l',
28   0x06, 'g', 'o', 'o', 'g', 'l', 'e',
29   0x03, 'c', 'o', 'm',
30   0x00
31 };
32
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;
38
39   parser.SkipQuestion();
40   record = RecordParsed::CreateFrom(&parser, base::Time());
41   EXPECT_TRUE(record != NULL);
42
43   ASSERT_EQ("codereview.chromium.org", record->name());
44   ASSERT_EQ(dns_protocol::kTypeCNAME, record->type());
45   ASSERT_EQ(dns_protocol::kClassIN, record->klass());
46
47   rdata = record->rdata<CnameRecordRdata>();
48   ASSERT_TRUE(rdata != NULL);
49   ASSERT_EQ(kT1CanonName, rdata->cname());
50
51   ASSERT_FALSE(record->rdata<SrvRecordRdata>());
52   ASSERT_TRUE(record->IsEqual(record.get(), true));
53 }
54
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());
61
62   DnsRecordParser parser2(kT1ResponseWithCacheFlushBit,
63                           sizeof(kT1ResponseWithCacheFlushBit),
64                           0);
65
66   scoped_ptr<const RecordParsed> record2 =
67       RecordParsed::CreateFrom(&parser2, base::Time());
68
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));
73 }
74
75 }  //namespace net