blob: 112d623c268938816f0d426249b6b4c32c7f2086 [file] [log] [blame]
Zhiyi Zhangcea58d52015-08-26 10:19:56 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Zhiyi Zhang19a11d22018-04-12 22:58:20 -07003 * Copyright (c) 2014-2018, Regents of the University of California
Zhiyi Zhangcea58d52015-08-26 10:19:56 -07004 *
Alexander Afanasyev9091d832018-04-18 17:21:08 -04005 * This file is part of NAC (Name-Based Access Control for NDN).
6 * See AUTHORS.md for complete list of NAC authors and contributors.
Zhiyi Zhangcea58d52015-08-26 10:19:56 -07007 *
Alexander Afanasyev9091d832018-04-18 17:21:08 -04008 * NAC is free software: you can redistribute it and/or modify it under the terms
Zhiyi Zhangcea58d52015-08-26 10:19:56 -07009 * of the GNU General Public License as published by the Free Software Foundation,
10 * either version 3 of the License, or (at your option) any later version.
11 *
Alexander Afanasyev9091d832018-04-18 17:21:08 -040012 * NAC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070013 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
Alexander Afanasyev9091d832018-04-18 17:21:08 -040017 * NAC, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070018 *
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070019 * @author Zhiyi Zhang <zhiyi@cs.ucla.edu>
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070020 */
21
22#include "schedule.hpp"
23#include "boost-test.hpp"
24
25namespace ndn {
Alexander Afanasyev9091d832018-04-18 17:21:08 -040026namespace nac {
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070027namespace tests {
28
29using namespace boost::posix_time;
30
31BOOST_AUTO_TEST_SUITE(TestSchedule)
32
Zhiyi Zhang2f9efa62015-11-23 19:02:28 +080033BOOST_AUTO_TEST_CASE(CalIntervalWithBlackAndWhite)
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070034{
35 Schedule schedule;
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070036 RepetitiveInterval interval1(from_iso_string("20150825T000000"),
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070037 from_iso_string("20150827T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070038 5,
39 10,
40 2,
41 RepetitiveInterval::RepeatUnit::DAY);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070042 RepetitiveInterval interval2(from_iso_string("20150825T000000"),
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070043 from_iso_string("20150827T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070044 6,
45 8,
46 1,
47 RepetitiveInterval::RepeatUnit::DAY);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070048 RepetitiveInterval interval3(from_iso_string("20150827T000000"),
49 from_iso_string("20150827T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070050 7,
51 8);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070052 RepetitiveInterval interval4(from_iso_string("20150825T000000"),
53 from_iso_string("20150825T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -070054 4,
55 7);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070056
57 schedule.addWhiteInterval(interval1);
58 schedule.addWhiteInterval(interval2);
59 schedule.addWhiteInterval(interval4);
60 schedule.addBlackInterval(interval3);
61
62 Interval resultInterval;
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070063 bool isPositive;
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070064
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070065 // tp1 --> positive 8.25 4-10
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070066 TimeStamp tp1 = from_iso_string("20150825T063000");
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070067 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp1);
68 BOOST_CHECK_EQUAL(isPositive, true);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070069 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T040000");
70 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150825T100000");
71
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070072 // tp2 --> positive 8.26 6-8
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070073 TimeStamp tp2 = from_iso_string("20150826T073000");
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070074 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp2);
75 BOOST_CHECK_EQUAL(isPositive, true);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070076 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150826T060000");
77 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150826T080000");
78
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070079 // tp3 --> positive 8.27 5-7
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070080 TimeStamp tp3 = from_iso_string("20150827T053000");
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070081 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp3);
82 BOOST_CHECK_EQUAL(isPositive, true);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070083 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150827T050000");
84 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150827T070000");
85
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070086 // tp4 --> positive 8.27 5-7
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070087 TimeStamp tp4 = from_iso_string("20150827T063000");
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070088 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp4);
89 BOOST_CHECK_EQUAL(isPositive, true);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070090 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150827T050000");
91 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150827T070000");
92
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070093 // tp5 --> negative 8.27 7-8
Zhiyi Zhangcea58d52015-08-26 10:19:56 -070094 TimeStamp tp5 = from_iso_string("20150827T073000");
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -070095 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp5);
96 BOOST_CHECK_EQUAL(isPositive, false);
97 BOOST_CHECK_EQUAL(resultInterval.isEmpty(), false);
98 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150827T070000");
99 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150827T080000");
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700100
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -0700101 // tp6 --> negative 8.25 10-24
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700102 TimeStamp tp6 = from_iso_string("20150825T113000");
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -0700103 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp6);
104 BOOST_CHECK_EQUAL(isPositive, false);
105 BOOST_CHECK_EQUAL(resultInterval.isEmpty(), false);
106 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T100000");
107 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150826T000000");
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700108}
109
Zhiyi Zhang2f9efa62015-11-23 19:02:28 +0800110BOOST_AUTO_TEST_CASE(CalIntervalWithoutBlack)
111{
112 Schedule schedule;
113 RepetitiveInterval interval1(from_iso_string("20150825T000000"),
114 from_iso_string("20150827T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -0700115 5,
116 10,
117 2,
118 RepetitiveInterval::RepeatUnit::DAY);
Zhiyi Zhang2f9efa62015-11-23 19:02:28 +0800119 RepetitiveInterval interval2(from_iso_string("20150825T000000"),
120 from_iso_string("20150827T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -0700121 6,
122 8,
123 1,
124 RepetitiveInterval::RepeatUnit::DAY);
Zhiyi Zhang2f9efa62015-11-23 19:02:28 +0800125 RepetitiveInterval interval3(from_iso_string("20150825T000000"),
126 from_iso_string("20150825T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -0700127 4,
128 7);
Zhiyi Zhang2f9efa62015-11-23 19:02:28 +0800129
130 schedule.addWhiteInterval(interval1);
131 schedule.addWhiteInterval(interval2);
132 schedule.addWhiteInterval(interval3);
133
134 Interval resultInterval;
135 bool isPositive;
136
137 // tp1 --> positive 8.25 4-10
138 TimeStamp tp1 = from_iso_string("20150825T063000");
139 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp1);
140 BOOST_CHECK_EQUAL(isPositive, true);
141 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T040000");
142 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150825T100000");
143
144 // tp2 --> positive 8.26 6-8
145 TimeStamp tp2 = from_iso_string("20150826T073000");
146 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp2);
147 BOOST_CHECK_EQUAL(isPositive, true);
148 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150826T060000");
149 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150826T080000");
150
151 // tp3 --> positive 8.27 5-10
152 TimeStamp tp3 = from_iso_string("20150827T053000");
153 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp3);
154 BOOST_CHECK_EQUAL(isPositive, true);
155 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150827T050000");
156 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150827T100000");
157
158 // tp4 --> negative 8.25 10-24
159 TimeStamp tp4 = from_iso_string("20150825T113000");
160 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp4);
161 BOOST_CHECK_EQUAL(isPositive, false);
162 BOOST_CHECK_EQUAL(resultInterval.isEmpty(), false);
163 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T100000");
164 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150826T000000");
165
166 // tp5 --> negative 8.25 0-4
167 TimeStamp tp5 = from_iso_string("20150825T013000");
168 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp5);
169 BOOST_CHECK_EQUAL(isPositive, false);
170 BOOST_CHECK_EQUAL(resultInterval.isEmpty(), false);
171 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T000000");
172 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150825T040000");
173}
174
175BOOST_AUTO_TEST_CASE(CalIntervalWithoutWhite)
176{
177 Schedule schedule;
178 RepetitiveInterval interval1(from_iso_string("20150825T000000"),
179 from_iso_string("20150827T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -0700180 5,
181 10,
182 2,
183 RepetitiveInterval::RepeatUnit::DAY);
Zhiyi Zhang2f9efa62015-11-23 19:02:28 +0800184 RepetitiveInterval interval2(from_iso_string("20150825T000000"),
185 from_iso_string("20150827T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -0700186 6,
187 8,
188 1,
189 RepetitiveInterval::RepeatUnit::DAY);
Zhiyi Zhang2f9efa62015-11-23 19:02:28 +0800190
191 schedule.addBlackInterval(interval1);
192 schedule.addBlackInterval(interval2);
193
194 Interval resultInterval;
195 bool isPositive;
196
197 // tp1 --> negative 8.25 4-10
198 TimeStamp tp1 = from_iso_string("20150825T063000");
199 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp1);
200 BOOST_CHECK_EQUAL(isPositive, false);
201 BOOST_CHECK_EQUAL(resultInterval.isEmpty(), false);
202 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T050000");
203 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150825T100000");
204
205 // tp2 --> negative 8.25 0-4
206 TimeStamp tp2 = from_iso_string("20150825T013000");
207 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp2);
208 BOOST_CHECK_EQUAL(isPositive, false);
209 BOOST_CHECK_EQUAL(resultInterval.isEmpty(), false);
210 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T000000");
211 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150826T000000");
212}
213
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700214const uint8_t SCHEDULE[] = {
215 0x8f, 0xc4,// Schedule
216 0x8d, 0x90,// WhiteIntervalList
217 /////
218 0x8c, 0x2e, // RepetitiveInterval
219 0x86, 0x0f,
220 0x32, 0x30, 0x31, 0x35, 0x30, 0x38, 0x32, 0x35, 0x54, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
221 0x87, 0x0f,
Yingdi Yud263c8a2016-03-09 16:53:19 -0800222 0x32, 0x30, 0x31, 0x35, 0x30, 0x38, 0x32, 0x35, 0x54, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700223 0x88, 0x01,
Yingdi Yud263c8a2016-03-09 16:53:19 -0800224 0x04,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700225 0x89, 0x01,
Yingdi Yud263c8a2016-03-09 16:53:19 -0800226 0x07,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700227 0x8a, 0x01,
Yingdi Yud263c8a2016-03-09 16:53:19 -0800228 0x00,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700229 0x8b, 0x01,
Yingdi Yud263c8a2016-03-09 16:53:19 -0800230 0x00,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700231 /////
232 0x8c, 0x2e, // RepetitiveInterval
233 0x86, 0x0f,
234 0x32, 0x30, 0x31, 0x35, 0x30, 0x38, 0x32, 0x35, 0x54, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
235 0x87, 0x0f,
236 0x32, 0x30, 0x31, 0x35, 0x30, 0x38, 0x32, 0x38, 0x54, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
237 0x88, 0x01,
Yingdi Yua717b882016-03-09 17:56:42 -0800238 0x05,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700239 0x89, 0x01,
Yingdi Yua717b882016-03-09 17:56:42 -0800240 0x0a,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700241 0x8a, 0x01,
Yingdi Yua717b882016-03-09 17:56:42 -0800242 0x02,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700243 0x8b, 0x01,
244 0x01,
245 /////
246 0x8c, 0x2e, // RepetitiveInterval
247 0x86, 0x0f,
248 0x32, 0x30, 0x31, 0x35, 0x30, 0x38, 0x32, 0x35, 0x54, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
249 0x87, 0x0f,
Yingdi Yud263c8a2016-03-09 16:53:19 -0800250 0x32, 0x30, 0x31, 0x35, 0x30, 0x38, 0x32, 0x38, 0x54, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700251 0x88, 0x01,
Yingdi Yud263c8a2016-03-09 16:53:19 -0800252 0x06,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700253 0x89, 0x01,
Yingdi Yud263c8a2016-03-09 16:53:19 -0800254 0x08,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700255 0x8a, 0x01,
Yingdi Yud263c8a2016-03-09 16:53:19 -0800256 0x01,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700257 0x8b, 0x01,
Yingdi Yud263c8a2016-03-09 16:53:19 -0800258 0x01,
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700259 /////
260 0x8e, 0x30, // BlackIntervalList
261 /////
262 0x8c, 0x2e, // RepetitiveInterval
263 0x86, 0x0f,
264 0x32, 0x30, 0x31, 0x35, 0x30, 0x38, 0x32, 0x37, 0x54, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
265 0x87, 0x0f,
266 0x32, 0x30, 0x31, 0x35, 0x30, 0x38, 0x32, 0x37, 0x54, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
267 0x88, 0x01,
268 0x07,
269 0x89, 0x01,
270 0x08,
271 0x8a, 0x01,
272 0x00,
273 0x8b, 0x01,
274 0x00
275};
276
277BOOST_AUTO_TEST_CASE(EncodeAndDecode)
278{
279 Schedule schedule;
280
281 RepetitiveInterval interval1(from_iso_string("20150825T000000"),
282 from_iso_string("20150828T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -0700283 5,
284 10,
285 2,
286 RepetitiveInterval::RepeatUnit::DAY);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700287 RepetitiveInterval interval2(from_iso_string("20150825T000000"),
288 from_iso_string("20150828T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -0700289 6,
290 8,
291 1,
292 RepetitiveInterval::RepeatUnit::DAY);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700293 RepetitiveInterval interval3(from_iso_string("20150827T000000"),
294 from_iso_string("20150827T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -0700295 7,
296 8);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700297 RepetitiveInterval interval4(from_iso_string("20150825T000000"),
298 from_iso_string("20150825T000000"),
Zhiyi Zhang19a11d22018-04-12 22:58:20 -0700299 4,
300 7);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700301
302 schedule.addWhiteInterval(interval1);
303 schedule.addWhiteInterval(interval2);
304 schedule.addWhiteInterval(interval4);
305 schedule.addBlackInterval(interval3);
306
307 Block block = schedule.wireEncode();
308 Block block2(SCHEDULE, sizeof(SCHEDULE));
309 BOOST_CHECK(block == block2);
310
311 Schedule schedule2(block);
312 Interval resultInterval;
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -0700313 bool isPositive;
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700314
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -0700315 // tp1 --> positive 8.25 4-10
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700316 TimeStamp tp1 = from_iso_string("20150825T063000");
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -0700317 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp1);
318 BOOST_CHECK_EQUAL(isPositive, true);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700319 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150825T040000");
320 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150825T100000");
321
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -0700322 // tp2 --> positive 8.26 6-8
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700323 TimeStamp tp2 = from_iso_string("20150826T073000");
Zhiyi Zhang7cc09fc2015-09-01 13:40:32 -0700324 std::tie(isPositive, resultInterval) = schedule.getCoveringInterval(tp2);
325 BOOST_CHECK_EQUAL(isPositive, true);
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700326 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getStartTime()), "20150826T060000");
327 BOOST_CHECK_EQUAL(to_iso_string(resultInterval.getEndTime()), "20150826T080000");
328}
329
330BOOST_AUTO_TEST_SUITE_END()
331
332} // namespace tests
Alexander Afanasyev9091d832018-04-18 17:21:08 -0400333} // namespace nac
Zhiyi Zhangcea58d52015-08-26 10:19:56 -0700334} // namespace ndn