rdata_unittest.cc 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. // Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC")
  2. //
  3. // Permission to use, copy, modify, and/or distribute this software for any
  4. // purpose with or without fee is hereby granted, provided that the above
  5. // copyright notice and this permission notice appear in all copies.
  6. //
  7. // THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
  8. // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  9. // AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
  10. // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  11. // LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
  12. // OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  13. // PERFORMANCE OF THIS SOFTWARE.
  14. // $Id: rrtype_unittest.cc 476 2010-01-19 00:29:28Z jinmei $
  15. #include <vector>
  16. #include "buffer.h"
  17. #include "messagerenderer.h"
  18. #include "rdata.h"
  19. #include "rdataclass.h"
  20. #include "rrclass.h"
  21. #include "rrtype.h"
  22. #include <gtest/gtest.h>
  23. #include "unittest_util.h"
  24. using isc::UnitTestUtil;
  25. using namespace std;
  26. using namespace isc::dns;
  27. using namespace isc::dns::rdata;
  28. namespace {
  29. class RdataTest : public ::testing::Test {
  30. protected:
  31. RdataTest() : obuffer(0), renderer(obuffer) {}
  32. static RdataPtr rdataFactoryFromFile(const RRType& rrtype,
  33. const RRClass& rrclass,
  34. const char* datafile,
  35. size_t position = 0);
  36. OutputBuffer obuffer;
  37. MessageRenderer renderer;
  38. static const in::A rdata_in_a;
  39. static const in::AAAA rdata_in_aaaa;
  40. static const uint8_t wiredata_in_a[];
  41. static const uint8_t wiredata_in_aaaa[];
  42. static const uint8_t wiredata_ns[];
  43. static const uint8_t wiredata_ns2[];
  44. static const uint8_t wiredata_cname[];
  45. static const uint8_t wiredata_cname2[];
  46. static const uint8_t wiredata_txt[];
  47. static const generic::NS rdata_ns, rdata_ns2;
  48. static const generic::SOA rdata_soa;
  49. static const generic::CNAME rdata_cname, rdata_cname2;
  50. static const generic::MX rdata_mx;
  51. static const generic::TXT rdata_txt;
  52. static const generic::TXT rdata_txt_quoated;
  53. };
  54. const in::A RdataTest::rdata_in_a("192.0.2.1");
  55. const in::AAAA RdataTest::rdata_in_aaaa("2001:db8::1234");
  56. const generic::NS RdataTest::rdata_ns("ns.example.com");
  57. const generic::NS RdataTest::rdata_ns2("ns2.example.com");
  58. const generic::SOA RdataTest::rdata_soa(Name("ns.example.com"),
  59. Name("root.example.com"),
  60. 2010012601, 3600, 300, 3600000, 1200);
  61. const generic::CNAME RdataTest::rdata_cname("cn.example.com");
  62. const generic::CNAME RdataTest::rdata_cname2("cn2.example.com");
  63. const generic::MX RdataTest::rdata_mx(10, Name("mx.example.com"));
  64. const generic::TXT RdataTest::rdata_txt("Test String");
  65. const generic::TXT RdataTest::rdata_txt_quoated("\"Test String\"");
  66. const uint8_t RdataTest::wiredata_in_a[] = { 192, 0, 2, 1 };
  67. const uint8_t RdataTest::wiredata_in_aaaa[] = {
  68. 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  69. 0x00, 0x00, 0x12, 0x34 };
  70. const uint8_t RdataTest::wiredata_ns[] = {
  71. 0x02, 0x6e, 0x73, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x03,
  72. 0x63, 0x6f, 0x6d, 0x00 };
  73. const uint8_t RdataTest::wiredata_ns2[] = {
  74. // first name: ns.example.com.
  75. 0x02, 0x6e, 0x73, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x03,
  76. 0x63, 0x6f, 0x6d, 0x00,
  77. // second name: ns2.example.com. all labels except the first should be
  78. // compressed.
  79. 0x03, 0x6e, 0x73, 0x32, 0xc0, 0x03 };
  80. const uint8_t RdataTest::wiredata_cname[] = {
  81. 0x02, 0x63, 0x6e, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x03,
  82. 0x63, 0x6f, 0x6d, 0x00 };
  83. const uint8_t RdataTest::wiredata_cname2[] = {
  84. // first name: cn.example.com.
  85. 0x02, 0x63, 0x6e, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x03,
  86. 0x63, 0x6f, 0x6d, 0x00,
  87. // second name: cn2.example.com. all labels except the first should be
  88. // compressed.
  89. 0x03, 0x63, 0x6e, 0x32, 0xc0, 0x03 };
  90. const uint8_t RdataTest::wiredata_txt[] = {
  91. sizeof("Test String") - 1,
  92. 'T', 'e', 's', 't', ' ', 'S', 't', 'r', 'i', 'n', 'g'
  93. };
  94. RdataPtr
  95. RdataTest::rdataFactoryFromFile(const RRType& rrtype, const RRClass& rrclass,
  96. const char* datafile, size_t position)
  97. {
  98. std::vector<unsigned char> data;
  99. UnitTestUtil::readWireData(datafile, data);
  100. InputBuffer buffer(&data[0], data.size());
  101. buffer.setPosition(position);
  102. uint16_t rdlen = buffer.readUint16();
  103. return (createRdata(rrtype, rrclass, buffer, rdlen));
  104. }
  105. TEST_F(RdataTest, createFromText_IN_A)
  106. {
  107. rdata_in_a.compare(in::A(string("192.0.2.1")));
  108. //EXPECT_EQ(0, rdata_in_a.compare(in::A("192.0.2.1")));
  109. // should reject an abbreviated form of IPv4 address
  110. EXPECT_THROW(in::A("10.1"), InvalidRdataText);
  111. // or an IPv6 address
  112. EXPECT_THROW(in::A("2001:db8::1234"), InvalidRdataText);
  113. // or any meaningless text as an IP address
  114. EXPECT_THROW(in::A("xxx"), InvalidRdataText);
  115. }
  116. TEST_F(RdataTest, createFromWire_IN_A)
  117. {
  118. // Valid data
  119. EXPECT_EQ(0, rdata_in_a.compare(
  120. *rdataFactoryFromFile(RRType("A"), RRClass("IN"),
  121. "testdata/rdata_in_a_fromWire")));
  122. // RDLENGTH is too short
  123. EXPECT_THROW(rdataFactoryFromFile(RRType("A"), RRClass("IN"),
  124. "testdata/rdata_in_a_fromWire", 6),
  125. InvalidRdataLength);
  126. // RDLENGTH is too long
  127. EXPECT_THROW(rdataFactoryFromFile(RRType("A"), RRClass("IN"),
  128. "testdata/rdata_in_a_fromWire", 12),
  129. InvalidRdataLength);
  130. // buffer too short. the error should be detected in buffer read
  131. EXPECT_THROW(rdataFactoryFromFile(RRType("A"), RRClass("IN"),
  132. "testdata/rdata_in_a_fromWire", 19),
  133. InvalidBufferPosition);
  134. }
  135. TEST_F(RdataTest, toWireBuffer_IN_A)
  136. {
  137. rdata_in_a.toWire(obuffer);
  138. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  139. obuffer.getData(), obuffer.getLength(),
  140. wiredata_in_a, sizeof(wiredata_in_a));
  141. }
  142. TEST_F(RdataTest, toWireRenderer_IN_A)
  143. {
  144. rdata_in_a.toWire(renderer);
  145. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  146. obuffer.getData(), obuffer.getLength(),
  147. wiredata_in_a, sizeof(wiredata_in_a));
  148. }
  149. TEST_F(RdataTest, toText_IN_A)
  150. {
  151. EXPECT_EQ("192.0.2.1", rdata_in_a.toText());
  152. string longaddr("255.255.255.255"); // this shouldn't make the code crash
  153. EXPECT_EQ(longaddr, in::A(longaddr).toText());
  154. }
  155. TEST_F(RdataTest, compare_IN_A)
  156. {
  157. in::A small1("1.1.1.1");
  158. in::A small2("1.2.3.4");
  159. in::A large1("255.255.255.255");
  160. in::A large2("4.3.2.1");
  161. // trivial case: self equivalence
  162. EXPECT_EQ(0, small1.compare(small1));
  163. // confirm these are compared as unsigned values
  164. EXPECT_GT(0, small1.compare(large1));
  165. EXPECT_LT(0, large1.compare(small1));
  166. // confirm these are compared in network byte order
  167. EXPECT_GT(0, small2.compare(large2));
  168. EXPECT_LT(0, large2.compare(small2));
  169. // comparison attempt between incompatible RR types should be rejected
  170. EXPECT_THROW(rdata_in_a.compare(rdata_ns), bad_cast);
  171. }
  172. TEST_F(RdataTest, createFromText_IN_AAAA)
  173. {
  174. rdata_in_aaaa.compare(in::AAAA(string("2001:db8::1234")));
  175. EXPECT_THROW(in::AAAA("192.0.2.1"), InvalidRdataText);
  176. EXPECT_THROW(in::AAAA("xxx"), InvalidRdataText);
  177. }
  178. TEST_F(RdataTest, createFromWire_IN_AAAA)
  179. {
  180. // Valid data
  181. EXPECT_EQ(0, rdata_in_aaaa.compare(
  182. *rdataFactoryFromFile(RRType("AAAA"), RRClass("IN"),
  183. "testdata/rdata_in_aaaa_fromWire")));
  184. //TBD: more tests
  185. }
  186. TEST_F(RdataTest, toWireBuffer_IN_AAAA)
  187. {
  188. rdata_in_aaaa.toWire(obuffer);
  189. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  190. obuffer.getData(), obuffer.getLength(),
  191. wiredata_in_aaaa, sizeof(wiredata_in_aaaa));
  192. }
  193. TEST_F(RdataTest, toWireRenderer_IN_AAAA)
  194. {
  195. rdata_in_aaaa.toWire(renderer);
  196. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  197. obuffer.getData(), obuffer.getLength(),
  198. wiredata_in_aaaa, sizeof(wiredata_in_aaaa));
  199. }
  200. TEST_F(RdataTest, toText_IN_AAAA)
  201. {
  202. EXPECT_EQ("2001:db8::1234", rdata_in_aaaa.toText());
  203. }
  204. TEST_F(RdataTest, compare_IN_AAAA)
  205. {
  206. in::AAAA small1("::1");
  207. in::AAAA small2("1:2:3:4:5:6:7:8");
  208. in::AAAA large1("ffff::");
  209. in::AAAA large2("8:7:6:5:4:3:2:1");
  210. // trivial case: self equivalence
  211. EXPECT_EQ(0, small1.compare(small1));
  212. // confirm these are compared as unsigned values
  213. EXPECT_GT(0, small1.compare(large1));
  214. EXPECT_LT(0, large1.compare(small1));
  215. // confirm these are compared in network byte order
  216. EXPECT_GT(0, small2.compare(large2));
  217. EXPECT_LT(0, large2.compare(small2));
  218. // comparison attempt between incompatible RR types should be rejected
  219. EXPECT_THROW(rdata_in_aaaa.compare(rdata_ns), bad_cast);
  220. }
  221. TEST_F(RdataTest, createFromText_NS)
  222. {
  223. EXPECT_EQ(0, rdata_ns.compare(generic::NS("ns.example.com")));
  224. // explicitly add a trailing dot. should be the same RDATA.
  225. EXPECT_EQ(0, rdata_ns.compare(generic::NS("ns.example.com.")));
  226. // should be case sensitive.
  227. EXPECT_EQ(0, rdata_ns.compare(generic::NS("NS.EXAMPLE.COM")));
  228. // RDATA of a class-independent type should be recognized for any
  229. // "unknown" class.
  230. EXPECT_EQ(0, rdata_ns.compare(*createRdata(RRType("NS"), RRClass(65000),
  231. "ns.example.com")));
  232. }
  233. TEST_F(RdataTest, createFromWire_NS)
  234. {
  235. EXPECT_EQ(0, rdata_ns.compare(
  236. *rdataFactoryFromFile(RRType("NS"), RRClass("IN"),
  237. "testdata/rdata_ns_fromWire")));
  238. // RDLENGTH is too short
  239. EXPECT_THROW(rdataFactoryFromFile(RRType("NS"), RRClass("IN"),
  240. "testdata/rdata_ns_fromWire", 18),
  241. InvalidRdataLength);
  242. // RDLENGTH is too long
  243. EXPECT_THROW(rdataFactoryFromFile(RRType("NS"), RRClass("IN"),
  244. "testdata/rdata_ns_fromWire", 36),
  245. InvalidRdataLength);
  246. // incomplete name. the error should be detected in the name constructor
  247. EXPECT_THROW(rdataFactoryFromFile(RRType("NS"), RRClass("IN"),
  248. "testdata/rdata_ns_fromWire", 71),
  249. IncompleteName);
  250. EXPECT_EQ(0, generic::NS("ns2.example.com").compare(
  251. *rdataFactoryFromFile(RRType("NS"), RRClass("IN"),
  252. "testdata/rdata_ns_fromWire", 55)));
  253. EXPECT_THROW(*rdataFactoryFromFile(RRType("NS"), RRClass("IN"),
  254. "testdata/rdata_ns_fromWire", 63),
  255. InvalidRdataLength);
  256. }
  257. TEST_F(RdataTest, toWireBuffer_NS)
  258. {
  259. rdata_ns.toWire(obuffer);
  260. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  261. obuffer.getData(), obuffer.getLength(),
  262. wiredata_ns, sizeof(wiredata_ns));
  263. }
  264. TEST_F(RdataTest, toWireRenderer_NS)
  265. {
  266. rdata_ns.toWire(renderer);
  267. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  268. obuffer.getData(), obuffer.getLength(),
  269. wiredata_ns, sizeof(wiredata_ns));
  270. rdata_ns2.toWire(renderer);
  271. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  272. obuffer.getData(), obuffer.getLength(),
  273. wiredata_ns2, sizeof(wiredata_ns2));
  274. }
  275. TEST_F(RdataTest, toText_NS)
  276. {
  277. EXPECT_EQ("ns.example.com.", rdata_ns.toText());
  278. }
  279. TEST_F(RdataTest, compare_NS)
  280. {
  281. generic::NS small("a.example");
  282. generic::NS large("example");
  283. EXPECT_EQ(true, Name("a.example") > Name("example"));
  284. EXPECT_GT(0, small.compare(large));
  285. }
  286. TEST_F(RdataTest, getNSName)
  287. {
  288. EXPECT_EQ(Name("ns.example.com"), rdata_ns.getNSName());
  289. }
  290. TEST_F(RdataTest, createFromText_SOA)
  291. {
  292. EXPECT_EQ(0, rdata_soa.compare(generic::SOA("ns.example.com. "
  293. "root.example.com. "
  294. "2010012601 3600 300 3600000 "
  295. "1200")));
  296. // TBD: more tests
  297. }
  298. TEST_F(RdataTest, createFromWire_SOA)
  299. {
  300. EXPECT_EQ(0, rdata_soa.compare(
  301. *rdataFactoryFromFile(RRType("SOA"), RRClass("IN"),
  302. "testdata/rdata_soa_fromWire")));
  303. // TBD: more tests
  304. }
  305. TEST_F(RdataTest, toWireRenderer_SOA)
  306. {
  307. renderer.skip(2);
  308. rdata_soa.toWire(renderer);
  309. vector<unsigned char> data;
  310. UnitTestUtil::readWireData("testdata/rdata_soa_fromWire", data);
  311. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  312. static_cast<const uint8_t *>(obuffer.getData()) + 2,
  313. obuffer.getLength() - 2, &data[0] + 2, data.size() - 2);
  314. }
  315. TEST_F(RdataTest, toText_SOA)
  316. {
  317. EXPECT_EQ("ns.example.com. root.example.com. "
  318. "2010012601 3600 300 3600000 1200", rdata_soa.toText());
  319. }
  320. TEST_F(RdataTest, createFromText_MX)
  321. {
  322. //TBD
  323. }
  324. TEST_F(RdataTest, createFromWire_MX)
  325. {
  326. EXPECT_EQ(0, rdata_mx.compare(
  327. *rdataFactoryFromFile(RRType("MX"), RRClass("IN"),
  328. "testdata/rdata_mx_fromWire")));
  329. // TBD: more tests
  330. }
  331. TEST_F(RdataTest, toWireRenderer_MX)
  332. {
  333. renderer.writeName(Name("example.com"));
  334. rdata_mx.toWire(renderer);
  335. vector<unsigned char> data;
  336. UnitTestUtil::readWireData("testdata/rdata_mx_toWire1", data);
  337. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData, obuffer.getData(),
  338. obuffer.getLength(), &data[0], data.size());
  339. }
  340. TEST_F(RdataTest, toText_MX)
  341. {
  342. EXPECT_EQ("10 mx.example.com.", rdata_mx.toText());
  343. }
  344. TEST_F(RdataTest, compare_IN_MX)
  345. {
  346. generic::MX small1(1, Name("mx.example.com"));
  347. generic::MX small2(10, Name("mx.example.com"));
  348. generic::MX large1(65535, Name("mx.example.com"));
  349. generic::MX large2(256, Name("mx.example.com"));
  350. // trivial case: self equivalence
  351. EXPECT_EQ(0, small1.compare(small1));
  352. // confirm these are compared as unsigned values
  353. EXPECT_GT(0, small1.compare(large1));
  354. EXPECT_LT(0, large1.compare(small1));
  355. // confirm these are compared in network byte order
  356. EXPECT_GT(0, small2.compare(large2));
  357. EXPECT_LT(0, large2.compare(small2));
  358. // comparison attempt between incompatible RR types should be rejected
  359. EXPECT_THROW(rdata_mx.compare(rdata_ns), bad_cast);
  360. }
  361. TEST_F(RdataTest, createFromText_TXT)
  362. {
  363. EXPECT_EQ(0, rdata_txt.compare(rdata_txt_quoated));
  364. }
  365. TEST_F(RdataTest, createFromWire_TXT)
  366. {
  367. EXPECT_EQ(0, rdata_txt.compare(
  368. *rdataFactoryFromFile(RRType("TXT"), RRClass("IN"),
  369. "testdata/rdata_txt_fromWire")));
  370. }
  371. TEST_F(RdataTest, toWireBuffer_TXT)
  372. {
  373. rdata_txt.toWire(obuffer);
  374. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  375. obuffer.getData(), obuffer.getLength(),
  376. wiredata_txt, sizeof(wiredata_txt));
  377. }
  378. TEST_F(RdataTest, toText_TXT)
  379. {
  380. EXPECT_EQ("\"Test String\"", rdata_txt.toText());
  381. }
  382. TEST_F(RdataTest, createFromText_CNAME)
  383. {
  384. EXPECT_EQ(0, rdata_cname.compare(generic::CNAME("cn.example.com")));
  385. // explicitly add a trailing dot. should be the same RDATA.
  386. EXPECT_EQ(0, rdata_cname.compare(generic::CNAME("cn.example.com.")));
  387. // should be case sensitive.
  388. EXPECT_EQ(0, rdata_cname.compare(generic::CNAME("CN.EXAMPLE.COM")));
  389. // RDATA of a class-independent type should be recognized for any
  390. // "unknown" class.
  391. EXPECT_EQ(0, rdata_cname.compare(*createRdata(RRType("CNAME"),
  392. RRClass(65000),
  393. "cn.example.com")));
  394. }
  395. TEST_F(RdataTest, createFromWire_CNAME)
  396. {
  397. EXPECT_EQ(0, rdata_cname.compare(
  398. *rdataFactoryFromFile(RRType("CNAME"), RRClass("IN"),
  399. "testdata/rdata_cname_fromWire")));
  400. // RDLENGTH is too short
  401. EXPECT_THROW(rdataFactoryFromFile(RRType("CNAME"), RRClass("IN"),
  402. "testdata/rdata_cname_fromWire", 18),
  403. InvalidRdataLength);
  404. // RDLENGTH is too long
  405. EXPECT_THROW(rdataFactoryFromFile(RRType("CNAME"), RRClass("IN"),
  406. "testdata/rdata_cname_fromWire", 36),
  407. InvalidRdataLength);
  408. // incomplete name. the error should be detected in the name constructor
  409. EXPECT_THROW(rdataFactoryFromFile(RRType("CNAME"), RRClass("IN"),
  410. "testdata/rdata_cname_fromWire", 71),
  411. IncompleteName);
  412. EXPECT_EQ(0, generic::CNAME("cn2.example.com").compare(
  413. *rdataFactoryFromFile(RRType("CNAME"), RRClass("IN"),
  414. "testdata/rdata_cname_fromWire", 55)));
  415. EXPECT_THROW(*rdataFactoryFromFile(RRType("CNAME"), RRClass("IN"),
  416. "testdata/rdata_cname_fromWire", 63),
  417. InvalidRdataLength);
  418. }
  419. TEST_F(RdataTest, toWireBuffer_CNAME)
  420. {
  421. rdata_cname.toWire(obuffer);
  422. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  423. obuffer.getData(), obuffer.getLength(),
  424. wiredata_cname, sizeof(wiredata_cname));
  425. }
  426. TEST_F(RdataTest, toWireRenderer_CNAME)
  427. {
  428. rdata_cname.toWire(renderer);
  429. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  430. obuffer.getData(), obuffer.getLength(),
  431. wiredata_cname, sizeof(wiredata_cname));
  432. rdata_cname2.toWire(renderer);
  433. EXPECT_PRED_FORMAT4(UnitTestUtil::matchWireData,
  434. obuffer.getData(), obuffer.getLength(),
  435. wiredata_cname2, sizeof(wiredata_cname2));
  436. }
  437. TEST_F(RdataTest, toText_CNAME)
  438. {
  439. EXPECT_EQ("cn.example.com.", rdata_cname.toText());
  440. }
  441. TEST_F(RdataTest, getCname_CNAME)
  442. {
  443. EXPECT_EQ(Name("cn.example.com."), rdata_cname.getCname());
  444. }
  445. TEST_F(RdataTest, fromText_RRSIG)
  446. {
  447. string rrsig_txt("A 5 4 43200 1264801134 191145710 8496 isc.org. "
  448. "evxhlGx13mpKLVkKsjpGzycS5twtIoxOmlN14w9t5AgzGBmz"
  449. "diGdLIrFabqr72af2rUq+UDBKMWXujwZTZUTws32sVldDPk/"
  450. "NbuacJM25fQXfv5mO3Af7TOoow3AjMaVG9icjCW0V55WcWQU"
  451. "f49t+sXKPzbipN9g+s1ZPiIyofc=");
  452. generic::RRSIG rdata_rrsig(rrsig_txt);
  453. EXPECT_EQ(rrsig_txt, rdata_rrsig.toText());
  454. }
  455. TEST_F(RdataTest, toWireRenderer_RRSIG)
  456. {
  457. string rrsig_txt("A 5 4 43200 1264801134 191145710 8496 isc.org. "
  458. "evxhlGx13mpKLVkKsjpGzycS5twtIoxOmlN14w9t5AgzGBmz"
  459. "diGdLIrFabqr72af2rUq+UDBKMWXujwZTZUTws32sVldDPk/"
  460. "NbuacJM25fQXfv5mO3Af7TOoow3AjMaVG9icjCW0V55WcWQU"
  461. "f49t+sXKPzbipN9g+s1ZPiIyofc=");
  462. generic::RRSIG rdata_rrsig(rrsig_txt);
  463. rdata_rrsig.toWire(renderer);
  464. }
  465. }