1 // Copyright 2015 Intel Mobile Communications GmbH All Rights Reserved.
3 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
17 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
19 //Not supported on Arduino due lack of absolute time need to implement iCalendar
22 #include "gtest/gtest.h"
23 #include "iotvticalendar.h"
26 #define TAG PCF("CALENDAR-UT")
28 static void printPeriod(IotvtICalPeriod_t *period)
35 OC_LOG_V(INFO, TAG, PCF("period->startDateTime.tm_year = %d"),period->startDateTime.tm_year);
36 OC_LOG_V(INFO, TAG, PCF("period->startDateTime.tm_mon = %d"),period->startDateTime.tm_mon);
37 OC_LOG_V(INFO, TAG, PCF("period->startDateTime.tm_mday = %d"),period->startDateTime.tm_mday);
38 OC_LOG_V(INFO, TAG, PCF("period->startDateTime.tm_hour = %d"),period->startDateTime.tm_hour);
39 OC_LOG_V(INFO, TAG, PCF("period->startDateTime.tm_min = %d"),period->startDateTime.tm_min);
40 OC_LOG_V(INFO, TAG, PCF("period->startDateTime.tm_sec = %d"),period->startDateTime.tm_sec);
42 OC_LOG_V(INFO, TAG, PCF("period->endDateTime.tm_year = %d"),period->endDateTime.tm_year);
43 OC_LOG_V(INFO, TAG, PCF("period->endDateTime.tm_mon = %d"),period->endDateTime.tm_mon);
44 OC_LOG_V(INFO, TAG, PCF("period->endDateTime.tm_mday = %d"),period->endDateTime.tm_mday);
45 OC_LOG_V(INFO, TAG, PCF("period->endDateTime.tm_hour = %d"),period->endDateTime.tm_hour);
46 OC_LOG_V(INFO, TAG, PCF("period->endDateTime.tm_min = %d"),period->endDateTime.tm_min);
47 OC_LOG_V(INFO, TAG, PCF("period->startDateTime.tm_sec = %d"),period->endDateTime.tm_sec);
51 static void printRecur(IotvtICalRecur_t *recur)
53 OC_LOG_V(INFO, TAG, PCF("recur->freq = %d"), recur->freq);
54 OC_LOG_V(INFO, TAG, PCF("recur->until.tm_year = %d"), recur->until.tm_year);
55 OC_LOG_V(INFO, TAG, PCF("recur->until.tm_mon = %d"), recur->until.tm_mon);
56 OC_LOG_V(INFO, TAG, PCF("recur->until.tm_mday = %d"), recur->until.tm_mday);
58 if(recur->byDay & SUNDAY)
60 OC_LOG_V(INFO, TAG, PCF("recur->byDay = %s"), "Sunday");
62 if(recur->byDay & MONDAY)
64 OC_LOG_V(INFO, TAG, PCF("recur->byDay = %s"), "Monday");
66 if(recur->byDay & TUESDAY)
68 OC_LOG_V(INFO, TAG, PCF("recur->byDay = %s"), "Tuesday");
70 if(recur->byDay & WEDNESDAY)
72 OC_LOG_V(INFO, TAG, PCF("recur->byDay = %s"), "Wednesday");
74 if(recur->byDay & THURSDAY)
76 OC_LOG_V(INFO, TAG, PCF("recur->byDay = %s"), "Thursday");
78 if(recur->byDay & FRIDAY)
80 OC_LOG_V(INFO, TAG, PCF("recur->byDay = %s"), "Friday");
82 if(recur->byDay & SATURDAY)
84 OC_LOG_V(INFO, TAG, PCF("recur->byDay = %s"), "Saturday");
89 TEST(ParsePeriodTest, ParsePeriodValidDateTime)
91 char periodStr[] = "20150629T153050/20150630T233055";
92 IotvtICalPeriod_t period = IotvtICalPeriod_t();
93 EXPECT_EQ(IOTVTICAL_SUCCESS, ParsePeriod(periodStr,&period));
97 TEST(ParsePeriodTest, ParsePeriodValidDate)
99 char periodStr[] = "20150629/20150630";
100 IotvtICalPeriod_t period = IotvtICalPeriod_t();
101 EXPECT_EQ(IOTVTICAL_SUCCESS, ParsePeriod(periodStr,&period));
102 printPeriod(&period);
105 TEST(ParsePeriodTest, ParsePeriodMismatchStartDTEndDT1)
107 char periodStr[] = "20150629T153050/20150630";
108 IotvtICalPeriod_t period = IotvtICalPeriod_t();
109 EXPECT_EQ(IOTVTICAL_INVALID_PERIOD, ParsePeriod(periodStr,&period));
112 TEST(ParsePeriodTest, ParsePeriodMismatchStartDTEndDT2)
114 char periodStr[] = "20150629/20150630T203055";
115 IotvtICalPeriod_t period = IotvtICalPeriod_t();
116 EXPECT_EQ(IOTVTICAL_INVALID_PERIOD, ParsePeriod(periodStr,&period));
119 TEST(ParsePeriodTest, ParsePeriodInvalidStartDT1)
121 char periodStr[] = "20150629T1530/20150630T203055";
122 IotvtICalPeriod_t period = IotvtICalPeriod_t();
123 EXPECT_EQ(IOTVTICAL_INVALID_PERIOD, ParsePeriod(periodStr,&period));
126 TEST(ParsePeriodTest, ParsePeriodInvalidEndtDT2)
128 char periodStr[] = "20150629T153050/20150630203055";
129 IotvtICalPeriod_t period = IotvtICalPeriod_t();
130 EXPECT_EQ(IOTVTICAL_INVALID_PERIOD, ParsePeriod(periodStr,&period));
133 TEST(ParsePeriodTest, ParsePeriodInvalidStartD3)
135 char periodStr[] = "201506/20150630";
136 IotvtICalPeriod_t period = IotvtICalPeriod_t();
137 EXPECT_EQ(IOTVTICAL_INVALID_PERIOD, ParsePeriod(periodStr,&period));
140 TEST(ParsePeriodTest, ParsePeriodInvalidEndD4)
142 char periodStr[] = "20150629/201530";
143 IotvtICalPeriod_t period = IotvtICalPeriod_t();
144 EXPECT_EQ(IOTVTICAL_INVALID_PERIOD, ParsePeriod(periodStr,&period));
147 TEST(ParsePeriodTest, ParsePeriodEndDTBeforeStartDT)
149 char periodStr[] = "20150630T203055/20150629T153050";
150 IotvtICalPeriod_t period = IotvtICalPeriod_t();
151 EXPECT_EQ(IOTVTICAL_INVALID_PERIOD, ParsePeriod(periodStr,&period));
153 TEST(ParsePeriodTest, ParsePeriodEndDBeforeStartD)
155 char periodStr[] = "20150630/20150629";
156 IotvtICalPeriod_t period = IotvtICalPeriod_t();
157 EXPECT_EQ(IOTVTICAL_INVALID_PERIOD, ParsePeriod(periodStr,&period));
160 TEST(ParseRecurTest, ParseRecurValid1)
162 char recurStr[] = "FREQ=DAILY; UNTIL=20150703; BYDAY=MO, WE, FR";
163 IotvtICalRecur_t recur = IotvtICalRecur_t();
164 EXPECT_EQ(IOTVTICAL_SUCCESS, ParseRecur(recurStr, &recur));
168 TEST(ParseRecurTest, ParseRecurValid2)
170 char recurStr[] = "FREQ=DAILY";
171 IotvtICalRecur_t recur = IotvtICalRecur_t();
172 EXPECT_EQ(IOTVTICAL_SUCCESS, ParseRecur(recurStr, &recur));
176 TEST(ParseRecurTest, ParseRecurInValidFreq1)
178 char recurStr[] = "FREQ=WEEKLY; UNTIL=20150703; BYDAY=TU";
179 IotvtICalRecur_t recur = IotvtICalRecur_t();
180 EXPECT_EQ(IOTVTICAL_INVALID_RRULE, ParseRecur(recurStr, &recur));
183 TEST(ParseRecurTest, ParseRecurInValidFreq2)
185 char recurStr[] = "UNTIL=20150703; BYDAY=TU";
186 IotvtICalRecur_t recur = IotvtICalRecur_t();
187 EXPECT_EQ(IOTVTICAL_INVALID_RRULE, ParseRecur(recurStr, &recur));
190 TEST(ParseRecurTest, ParseRecurInValidUntil)
192 char recurStr[] = "FREQ=DAILY; UNTIL=20150703T095055; BYDAY=MO, WE, FR";
193 IotvtICalRecur_t recur = IotvtICalRecur_t();
194 EXPECT_EQ(IOTVTICAL_INVALID_RRULE, ParseRecur(recurStr, &recur));
197 TEST(ParseRecurTest, ParseRecurInValidByday)
199 char recurStr[] = "FREQ=DAILY; UNTIL=20150703; BYDAY=";
200 IotvtICalRecur_t recur = IotvtICalRecur_t();
201 EXPECT_EQ(IOTVTICAL_INVALID_RRULE, ParseRecur(recurStr, &recur));
204 //FIXME: ALL IsRequestWithinValidTime tests will fail after 20151230
205 TEST(IsRequestWithinValidTimeTest, IsRequestWithinValidTimeValidPeriod1)
207 char periodStr[] = "20150630/20151230";
208 EXPECT_EQ(IOTVTICAL_VALID_ACCESS, IsRequestWithinValidTime(periodStr, NULL));
211 TEST(IsRequestWithinValidTimeTest, IsRequestWithinValidTimeValidPeriodAndRecur1)
213 //Daily on days MO, WE & FR from 6:00:00am to 8:00:00pm until 20151230
214 char recurStr[] = "FREQ=DAILY; UNTIL=20151230; BYDAY=MO, WE, FR";
215 char periodStr[] = "20150630T060000/20150630T200000";
218 IotvtICalDateTime_t *ct = localtime(&rt);
220 int byDay = MONDAY | WEDNESDAY | FRIDAY;
221 int isValidWD = (0x1 << ct->tm_wday) & byDay;
223 if(isValidWD && 6 <= ct->tm_hour && 20>= ct->tm_hour)
225 EXPECT_EQ(IOTVTICAL_VALID_ACCESS, IsRequestWithinValidTime(periodStr, recurStr));
229 EXPECT_EQ(IOTVTICAL_INVALID_ACCESS, IsRequestWithinValidTime(periodStr, recurStr));
233 TEST(IsRequestWithinValidTimeTest, IsRequestWithinValidTimeValidPeriodAndRecur2)
235 //Daily forever from 6:00:00am to 8:00:00pm
236 char recurStr[] = "FREQ=DAILY";
237 char periodStr[] = "20150630T060000/20150630T200000";
240 IotvtICalDateTime_t *ct = localtime(&rt);
242 if(6 <= ct->tm_hour && 20>= ct->tm_hour)
244 EXPECT_EQ(IOTVTICAL_VALID_ACCESS, IsRequestWithinValidTime(periodStr, recurStr));
248 EXPECT_EQ(IOTVTICAL_INVALID_ACCESS, IsRequestWithinValidTime(periodStr, recurStr));
252 TEST(IsRequestWithinValidTimeTest, IsRequestWithinValidTimeValidPeriodAndRecur3)
254 //Daily until 20151230 from 6:00:00am to 8:00:00pm
255 char recurStr[] = "FREQ=DAILY; UNTIL=20151230";
256 char periodStr[] = "20150630T060000/20150630T200000";
259 IotvtICalDateTime_t *ct = localtime(&rt);
261 if(6 <= ct->tm_hour && 20>= ct->tm_hour)
263 EXPECT_EQ(IOTVTICAL_VALID_ACCESS, IsRequestWithinValidTime(periodStr, recurStr));
267 EXPECT_EQ(IOTVTICAL_INVALID_ACCESS, IsRequestWithinValidTime(periodStr, recurStr));
271 TEST(IsRequestWithinValidTimeTest, IsRequestWithinValidTimeValidPeriodAndRecur4)
273 //Daily forever on days MO, WE & Fr from 6:00:00am to 8:00:00pm
274 char recurStr[] = "FREQ=DAILY; BYDAY=MO, WE, FR";
275 char periodStr[] = "20150630T060000/20150630T200000";
278 IotvtICalDateTime_t *ct = localtime(&rt);
280 int byDay = MONDAY | WEDNESDAY | FRIDAY;
281 int isValidWD = (0x1 << ct->tm_wday) & byDay;
283 if(isValidWD && 6 <= ct->tm_hour && 20>= ct->tm_hour)
285 EXPECT_EQ(IOTVTICAL_VALID_ACCESS, IsRequestWithinValidTime(periodStr, recurStr));
289 EXPECT_EQ(IOTVTICAL_INVALID_ACCESS, IsRequestWithinValidTime(periodStr, recurStr));
293 TEST(IsRequestWithinValidTimeTest, IsRequestWithinValidTimeInValidPeriodAndValidRecur)
295 //Daily forever on days MO, WE & Fr
296 char recurStr[] = "FREQ=DAILY; BYDAY=MO, WE, FR";
297 char periodStr[] = "20150630/20150730";
299 EXPECT_EQ(IOTVTICAL_INVALID_ACCESS, IsRequestWithinValidTime(periodStr, recurStr));