blob: 63320f742ddee13924755e051f3a4239c0a5ee2a [file] [log] [blame]
Yingdi Yuea382942015-07-17 23:20:44 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2013-2015 Regents of the University of California.
4 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
22#include "security/additional-description.hpp"
23
24#include "boost-test.hpp"
25
26namespace ndn {
27namespace security {
28namespace tests {
29
30BOOST_AUTO_TEST_SUITE(SecurityAdditionalDescription)
31
32static const uint8_t description[] = {
33 0xfd, 0x01, 0x02, 0x28,
34 0xfd, 0x02, 0x00, 0x10, // DescriptionEntry
35 0xfd, 0x02, 0x01, 0x04, // DescriptionKey
36 0x6b, 0x65, 0x79, 0x31, // "key1"
37 0xfd, 0x02, 0x02, 0x04, // DescriptionValue
38 0x76, 0x61, 0x6c, 0x31, // "val1"
39 0xfd, 0x02, 0x00, 0x10, // DescriptionEntry
40 0xfd, 0x02, 0x01, 0x04, // DescriptionKey
41 0x6b, 0x65, 0x79, 0x32, // "key2"
42 0xfd, 0x02, 0x02, 0x04, // DescriptionValue
43 0x76, 0x61, 0x6c, 0x32, // "val2"
44};
45
46static const std::string text = "((key1:val1), (key2:val2))";
47
48BOOST_AUTO_TEST_CASE(Basic)
49{
50 AdditionalDescription aDescription;
51
52 aDescription.set("key2", "val2");
53 aDescription.set("key1", "val1");
54
55 BOOST_REQUIRE_NO_THROW(aDescription.get("key1"));
56 BOOST_REQUIRE_NO_THROW(aDescription.get("key2"));
57 BOOST_REQUIRE_THROW(aDescription.get("key3"), AdditionalDescription::Error);
58
59 BOOST_CHECK_EQUAL(aDescription.has("key1"), true);
60 BOOST_CHECK_EQUAL(aDescription.has("key2"), true);
61 BOOST_CHECK_EQUAL(aDescription.has("key3"), false);
62
63 auto val1 = aDescription.get("key1");
64 auto val2 = aDescription.get("key2");
65
66 BOOST_CHECK_EQUAL(val1, "val1");
67 BOOST_CHECK_EQUAL(val2, "val2");
68
69 auto it = aDescription.begin();
70 BOOST_CHECK_EQUAL(it->second, "val1");
71 it++;
72 BOOST_CHECK_EQUAL(it->second, "val2");
73 it++;
74 BOOST_CHECK(it == aDescription.end());
75
76 BOOST_CHECK_EQUAL_COLLECTIONS(aDescription.wireEncode().wire(),
77 aDescription.wireEncode().wire() + aDescription.wireEncode().size(),
78 description,
79 description + sizeof(description));
80
81 BOOST_REQUIRE_NO_THROW(AdditionalDescription(Block(description, sizeof(description))));
82 AdditionalDescription aDescription2(Block(description, sizeof(description)));
83
84 BOOST_CHECK(aDescription2 == aDescription);
85
86 AdditionalDescription aDescription3;
87 aDescription3.set("key3", "val3");
88 aDescription3.set("key2", "val2");
89
90 BOOST_CHECK(aDescription2 != aDescription3);
91
92 std::ostringstream os;
93 os << aDescription;
94 BOOST_CHECK_EQUAL(os.str(), text);
95}
96
97BOOST_AUTO_TEST_SUITE_END()
98
99} // namespace tests
100} // namespace security
101} // namespace ndn