def test_encode_and_decode(self): schedule = Schedule() interval1 = RepetitiveInterval(fromIsoString("20150825T000000"), fromIsoString("20150828T000000"), 5, 10, 2, RepetitiveInterval.RepeatUnit.DAY) interval2 = RepetitiveInterval(fromIsoString("20150825T000000"), fromIsoString("20150828T000000"), 6, 8, 1, RepetitiveInterval.RepeatUnit.DAY) interval3 = RepetitiveInterval(fromIsoString("20150827T000000"), fromIsoString("20150827T000000"), 7, 8) interval4 = RepetitiveInterval(fromIsoString("20150825T000000"), fromIsoString("20150825T000000"), 4, 7) schedule.addWhiteInterval(interval1) schedule.addWhiteInterval(interval2) schedule.addWhiteInterval(interval4) schedule.addBlackInterval(interval3) encoding = schedule.wireEncode() encoding2 = Blob(SCHEDULE, False) self.assertTrue(encoding.equals(encoding2)) schedule2 = Schedule() schedule2.wireDecode(encoding) # timePoint1 --> positive 8.25 4-10 timePoint1 = fromIsoString("20150825T063000") result = schedule.getCoveringInterval(timePoint1) self.assertEqual(result.isPositive, True) self.assertEqual(toIsoString(result.interval.getStartTime()), "20150825T040000") self.assertEqual(toIsoString(result.interval.getEndTime()), "20150825T100000") # timePoint2 --> positive 8.26 6-8 timePoint2 = fromIsoString("20150826T073000") result = schedule.getCoveringInterval(timePoint2) self.assertEqual(result.isPositive, True) self.assertEqual(toIsoString(result.interval.getStartTime()), "20150826T060000") self.assertEqual(toIsoString(result.interval.getEndTime()), "20150826T080000")
def test_encode_and_decode(self): schedule = Schedule() interval1 = RepetitiveInterval( fromIsoString("20150825T000000"), fromIsoString("20150828T000000"), 5, 10, 2, RepetitiveInterval.RepeatUnit.DAY) interval2 = RepetitiveInterval( fromIsoString("20150825T000000"), fromIsoString("20150828T000000"), 6, 8, 1, RepetitiveInterval.RepeatUnit.DAY) interval3 = RepetitiveInterval( fromIsoString("20150827T000000"), fromIsoString("20150827T000000"), 7, 8) interval4 = RepetitiveInterval( fromIsoString("20150825T000000"), fromIsoString("20150825T000000"), 4, 7) schedule.addWhiteInterval(interval1) schedule.addWhiteInterval(interval2) schedule.addWhiteInterval(interval4) schedule.addBlackInterval(interval3) encoding = schedule.wireEncode() encoding2 = Blob(SCHEDULE, False) self.assertTrue(encoding.equals(encoding2)) schedule2 = Schedule() schedule2.wireDecode(encoding) # timePoint1 --> positive 8.25 4-10 timePoint1 = fromIsoString("20150825T063000") result = schedule.getCoveringInterval(timePoint1) self.assertEqual(result.isPositive, True) self.assertEqual(toIsoString(result.interval.getStartTime()), "20150825T040000") self.assertEqual(toIsoString(result.interval.getEndTime()), "20150825T100000") # timePoint2 --> positive 8.26 6-8 timePoint2 = fromIsoString("20150826T073000") result = schedule.getCoveringInterval(timePoint2) self.assertEqual(result.isPositive, True) self.assertEqual(toIsoString(result.interval.getStartTime()), "20150826T060000") self.assertEqual(toIsoString(result.interval.getEndTime()), "20150826T080000")
def test_database_functions(self): scheduleBlob = Blob(SCHEDULE, False) # Create a schedule. schedule = Schedule() schedule.wireDecode(scheduleBlob) # Create a member. params = RsaKeyParams() decryptKey = RsaAlgorithm.generateKey(params) encryptKey = RsaAlgorithm.deriveEncryptKey(decryptKey.getKeyBits()) keyBlob = encryptKey.getKeyBits() name1 = Name("/ndn/BoyA/ksk-123") name2 = Name("/ndn/BoyB/ksk-1233") name3 = Name("/ndn/GirlC/ksk-123") name4 = Name("/ndn/GirlD/ksk-123") name5 = Name("/ndn/Hello/ksk-123") # Add schedules into the database. self.database.addSchedule("work-time", schedule) self.database.addSchedule("rest-time", schedule) self.database.addSchedule("play-time", schedule) self.database.addSchedule("boelter-time", schedule) # Throw an exception when adding a schedule with an existing name. with self.assertRaises(GroupManagerDb.Error): self.database.addSchedule("boelter-time", schedule) # Add members into the database. self.database.addMember("work-time", name1, keyBlob) self.database.addMember("rest-time", name2, keyBlob) self.database.addMember("play-time", name3, keyBlob) self.database.addMember("play-time", name4, keyBlob) # Throw an exception when adding a member with a non-existing schedule name. with self.assertRaises(GroupManagerDb.Error): self.database.addMember("false-time", name5, keyBlob) self.database.addMember("boelter-time", name5, keyBlob) # Throw an exception when adding a member having an existing identity. with self.assertRaises(GroupManagerDb.Error): self.database.addMember("work-time", name5, keyBlob) # Test has functions. self.assertEqual(True, self.database.hasSchedule("work-time")) self.assertEqual(True, self.database.hasSchedule("rest-time")) self.assertEqual(True, self.database.hasSchedule("play-time")) self.assertEqual(False, self.database.hasSchedule("sleep-time")) self.assertEqual(False, self.database.hasSchedule("")) self.assertEqual(True, self.database.hasMember(Name("/ndn/BoyA"))) self.assertEqual(True, self.database.hasMember(Name("/ndn/BoyB"))) self.assertEqual(False, self.database.hasMember(Name("/ndn/BoyC"))) # Get a schedule. scheduleResult = self.database.getSchedule("work-time") self.assertTrue(scheduleResult.wireEncode().equals(scheduleBlob)) scheduleResult = self.database.getSchedule("play-time") self.assertTrue(scheduleResult.wireEncode().equals(scheduleBlob)) # Throw an exception when when there is no such schedule in the database. with self.assertRaises(GroupManagerDb.Error): self.database.getSchedule("work-time-11") # List all schedule names. names = self.database.listAllScheduleNames() self.assertTrue("work-time" in names) self.assertTrue("play-time" in names) self.assertTrue("rest-time" in names) self.assertTrue(not ("sleep-time" in names)) # List members of a schedule. memberMap = self.database.getScheduleMembers("play-time") self.assertTrue(len(memberMap) != 0) # When there's no such schedule, the return map's size should be 0. self.assertEquals(0, len(self.database.getScheduleMembers("sleep-time"))) # List all members. members = self.database.listAllMembers() self.assertTrue(Name("/ndn/GirlC") in members) self.assertTrue(Name("/ndn/GirlD") in members) self.assertTrue(Name("/ndn/BoyA") in members) self.assertTrue(Name("/ndn/BoyB") in members) # Rename a schedule. self.assertEqual(True, self.database.hasSchedule("boelter-time")) self.database.renameSchedule("boelter-time", "rieber-time") self.assertEqual(False, self.database.hasSchedule("boelter-time")) self.assertEqual(True, self.database.hasSchedule("rieber-time")) self.assertEqual("rieber-time", self.database.getMemberSchedule(Name("/ndn/Hello"))) # Update a schedule. newSchedule = Schedule() newSchedule.wireDecode(scheduleBlob) repetitiveInterval = RepetitiveInterval( Schedule.fromIsoString("20150825T000000"), Schedule.fromIsoString("20150921T000000"), 2, 10, 5, RepetitiveInterval.RepeatUnit.DAY) newSchedule.addWhiteInterval(repetitiveInterval) self.database.updateSchedule("rieber-time", newSchedule) scheduleResult = self.database.getSchedule("rieber-time") self.assertTrue(not scheduleResult.wireEncode().equals(scheduleBlob)) self.assertTrue(scheduleResult.wireEncode().equals(newSchedule.wireEncode())) # Add a new schedule when updating a non-existing schedule. self.assertEquals(False, self.database.hasSchedule("ralphs-time")) self.database.updateSchedule("ralphs-time", newSchedule) self.assertEquals(True, self.database.hasSchedule("ralphs-time")) # Update the schedule of a member. self.database.updateMemberSchedule(Name("/ndn/Hello"), "play-time") self.assertEqual("play-time", self.database.getMemberSchedule(Name("/ndn/Hello"))) # Delete a member. self.assertEqual(True, self.database.hasMember(Name("/ndn/Hello"))) self.database.deleteMember(Name("/ndn/Hello")) self.assertEqual(False, self.database.hasMember(Name("/ndn/Hello"))) # Delete a non-existing member. try: self.database.deleteMember(Name("/ndn/notExisting")) except Exception as ex: self.fail("Unexpected error deleting a non-existing member: " + repr(ex)) # Delete a schedule. All the members using this schedule should be deleted. self.database.deleteSchedule("play-time") self.assertEqual(False, self.database.hasSchedule("play-time")) self.assertEqual(False, self.database.hasMember(Name("/ndn/GirlC"))) self.assertEqual(False, self.database.hasMember(Name("/ndn/GirlD"))) # Delete a non-existing schedule. try: self.database.deleteSchedule("not-existing-time") except Exception as ex: self.fail("Unexpected error deleting a non-existing schedule: " + repr(ex))