// ---------------------------------------------------------------------- // add dynamic leap second (like from peer/clock) TEST(leapsec, addDynamic) { bool rc; int idx; static const uint32_t insns[] = { 2982009600u, // 29 # 1 Jul 1994 3029443200u, // 30 # 1 Jan 1996 3076704000u, // 31 # 1 Jul 1997 3124137600u, // 32 # 1 Jan 1999 3345062400u, // 33 # 1 Jan 2006 3439756800u, // 34 # 1 Jan 2009 3550089600u, // 35 # 1 Jul 2012 0 // sentinel }; rc = setup_load_table(leap2, 0); TEST_ASSERT_TRUE(rc); for (idx=1; insns[idx]; ++idx) { rc = leapsec_add_dyn(true, insns[idx] - 20*SECSPERDAY - 100, NULL); TEST_ASSERT_TRUE(rc); } // try to slip in a previous entry rc = leapsec_add_dyn(true, insns[0] - 20*SECSPERDAY - 100, NULL); TEST_ASSERT_FALSE(rc); //leapsec_dump(pt, (leapsec_dumper)fprintf, stdout); }
// ---------------------------------------------------------------------- // add dynamic leap second (like from peer/clock) void test_addDynamic(void) { int rc; leap_result_t qr; static const uint32_t insns[] = { 2982009600u, // 29 # 1 Jul 1994 3029443200u, // 30 # 1 Jan 1996 3076704000u, // 31 # 1 Jul 1997 3124137600u, // 32 # 1 Jan 1999 3345062400u, // 33 # 1 Jan 2006 3439756800u, // 34 # 1 Jan 2009 3550089600u, // 35 # 1 Jul 2012 0 // sentinel }; rc = setup_load_table(leap2, FALSE); TEST_ASSERT_EQUAL(1, rc); leap_table_t * pt = leapsec_get_table(0); int idx; for (idx=1; insns[idx]; ++idx) { rc = leapsec_add_dyn(TRUE, insns[idx] - 20*SECSPERDAY - 100, NULL); TEST_ASSERT_EQUAL(TRUE, rc); } // try to slip in a previous entry rc = leapsec_add_dyn(TRUE, insns[0] - 20*SECSPERDAY - 100, NULL); TEST_ASSERT_EQUAL(FALSE, rc); //leapsec_dump(pt, (leapsec_dumper)fprintf, stdout); }
// ---------------------------------------------------------------------- // test adjustment with a dynamic entry already there in dead zone void test_taiTableDynamicDeadZone(void) { int rc; rc = leapsec_add_dyn(TRUE, lsec2015-20*SECSPERDAY, NULL); TEST_ASSERT_EQUAL(TRUE, rc); rc = leapsec_autokey_tai(35, lsec2015-5, NULL); TEST_ASSERT_EQUAL(FALSE, rc); rc = leapsec_autokey_tai(35, lsec2015+5, NULL); TEST_ASSERT_EQUAL(FALSE, rc); }
// ---------------------------------------------------------------------- // test adjustment with a dynamic entry already there void test_taiTableDynamic(void) { int rc; leap_era_t era; rc = leapsec_add_dyn(TRUE, lsec2015-20*SECSPERDAY, NULL); TEST_ASSERT_EQUAL(TRUE, rc); leapsec_query_era(&era, lsec2015-10, NULL); TEST_ASSERT_EQUAL(0, era.taiof); leapsec_query_era(&era, lsec2015+10, NULL); TEST_ASSERT_EQUAL(1, era.taiof); rc = leapsec_autokey_tai(35, lsec2015-19*86400, NULL); TEST_ASSERT_EQUAL(TRUE, rc); rc = leapsec_autokey_tai(35, lsec2015-19*86400, NULL); TEST_ASSERT_EQUAL(FALSE, rc); leapsec_query_era(&era, lsec2015-10, NULL); TEST_ASSERT_EQUAL(35, era.taiof); leapsec_query_era(&era, lsec2015+10, NULL); TEST_ASSERT_EQUAL(36, era.taiof); }