예제 #1
0
    def test_bad_trace_demos(self):
        """Ensure that bad demo traces produce errors."""
        check = CheckNTPMon()
#        for d in demodata:
#            self.assertEqual(check.trace(d.split("\n")), 2, 'Demo data not detected as bad trace')
        for d in baddemotrace:
            self.assertEqual(check.trace(d.split("\n")), 2, 'Invalid trace not detected')
예제 #2
0
 def test_bad_trace_demos(self):
     """Ensure that bad demo traces produce errors."""
     check = CheckNTPMon()
     #        for d in demodata:
     #            self.assertEqual(check.trace(d.split("\n")), 2, 'Demo data not detected as bad trace')
     for d in baddemotrace:
         self.assertEqual(check.trace(d.split("\n")), 2,
                          'Invalid trace not detected')
예제 #3
0
    def test_NTPPeer1(self):
        # check the parsing done by NTPPeers
        ntp = NTPPeers(testdata[1].split("\n"))
        self.assertEqual(ntp.ntpdata['syncpeer'], '202.60.94.11')
        self.assertEqual(ntp.ntpdata['offsetsyncpeer'], 0.259)
        self.assertEqual(ntp.ntpdata['survivors'], 3)
        self.assertEqual(ntp.ntpdata['averageoffsetsurvivors'], 0.21133333333333335)
        self.assertEqual(ntp.ntpdata['discards'], 3)
        self.assertEqual(ntp.ntpdata['averageoffsetdiscards'], 1.024)
        self.assertEqual(ntp.ntpdata['peers'], 6)
        self.assertEqual(ntp.ntpdata['averageoffset'], 0.6176666666666667)
        self.assertEqual(ntp.ntpdata['reachability'], 100)

        # run checks on the data
        check = CheckNTPMon()
        self.assertEqual(check.sync(ntp.ntpdata['syncpeer']), 0, 'Sync peer not detected')
        self.assertEqual(check.offset(ntp.ntpdata['offsetsyncpeer']), 0, 'Low offset non-OK')
        self.assertEqual(check.offset(ntp.ntpdata['averageoffsetsurvivors']), 0, 'Low offset non-OK')
        self.assertEqual(check.offset(ntp.ntpdata['averageoffsetdiscards']), 0, 'Low offset non-OK')
        self.assertEqual(check.offset(ntp.ntpdata['averageoffset']), 0, 'Low offset non-OK')
        self.assertEqual(check.peers(ntp.ntpdata['peers']), 0, 'High peers non-OK')
        self.assertEqual(check.reachability(ntp.ntpdata['reachability']), 0,
                         'High reachability non-OK')

        # run overall health checks
        self.assertEqual(ntp.check_sync(), 0, 'Sync peer not detected')
        self.assertEqual(ntp.check_offset(), 0, 'Low offset non-OK')
        self.assertEqual(ntp.check_peers(), 0, 'High peers non-OK')
        self.assertEqual(ntp.check_reachability(), 0, 'High reachability non-OK')
예제 #4
0
    def test_peers(self):
        check = CheckNTPMon()

        for i in [-100, -10, -1, 0, 1]:
            self.assertEqual(check.peers(i), 2, 'Low peers non-critical')

        for i in [2, 3]:
            self.assertEqual(check.peers(i), 1, 'Few peers non-warning')

        for i in [4, 5, 6, 10, 100]:
            self.assertEqual(check.peers(i), 0, 'High peers non-OK')
예제 #5
0
 def test_clone(self):
     ch = CheckNTPMon()
     self.assertFalse(ch.is_silent())
     c = CheckNTPMonSilent.clone(ch)
     self.assertTrue(c.is_silent())
     self.assertEqual(c.warnpeers, 2)
     self.assertEqual(c.okpeers, 4)
     self.assertEqual(c.warnoffset, 10)
     self.assertEqual(c.critoffset, 50)
     self.assertEqual(c.warnreach, 75)
     self.assertEqual(c.critreach, 50)
예제 #6
0
 def test_clone_non_default(self):
     ch = CheckNTPMon(1, 2, 9, 49, 80, 60)
     self.assertFalse(ch.is_silent())
     c = CheckNTPMonSilent.clone(ch)
     self.assertTrue(c.is_silent())
     self.assertEqual(c.warnpeers, 1)
     self.assertEqual(c.okpeers, 2)
     self.assertEqual(c.warnoffset, 9)
     self.assertEqual(c.critoffset, 49)
     self.assertEqual(c.warnreach, 80)
     self.assertEqual(c.critreach, 60)
예제 #7
0
    def test_reach(self):
        check = CheckNTPMon()

        for i in [0, 0.01, 1, 25, 49, 49.99, 50]:
            self.assertEqual(check.reachability(i), 2, 'Low reachability non-critical')
        for i in [50.01, 50.1, 74.99, 75]:
            self.assertEqual(check.reachability(i), 1, 'Moderate reachability non-warning')
        for i in [75.01, 76, 99, 100]:
            self.assertEqual(check.reachability(i), 0, 'High reachability non-OK')
        # check that invalid percentage causes exception
        for i in [-100, -1, 100.01, 101, 1000]:
            self.assertRaises(ValueError, check.reachability, (i))
예제 #8
0
    def test_NTPPeer2(self):
        # check the parsing done by NTPPeers
        ntp = NTPPeers(testdata[2].split("\n"))
        self.assertEqual(ntp.ntpdata['syncpeer'], '91.189.94.4')
        self.assertEqual(ntp.ntpdata['offsetsyncpeer'], 194.54)
        self.assertEqual(ntp.ntpdata['survivors'], 1)
        self.assertEqual(ntp.ntpdata['averageoffsetsurvivors'], 194.54)
        self.assertEqual(ntp.ntpdata['discards'], 0)
        self.assertEqual(ntp.ntpdata.get('averageoffsetdiscards'), None)
        self.assertEqual(ntp.ntpdata['peers'], 1)
        self.assertEqual(ntp.ntpdata['averageoffset'], 194.54)
        self.assertEqual(ntp.ntpdata['reachability'], 100)

        # run checks on the data
        check = CheckNTPMon()
        self.assertEqual(check.sync(ntp.ntpdata['syncpeer']), 0, 'Sync peer not detected')
        self.assertEqual(check.offset(ntp.ntpdata['offsetsyncpeer']), 2, 'High offset non-critical')
        self.assertEqual(check.offset(ntp.ntpdata['averageoffsetsurvivors']), 2, 'High offset non-critical')
        self.assertEqual(ntp.ntpdata.get('averageoffsetdiscards'), None)
        self.assertEqual(check.offset(ntp.ntpdata['averageoffset']), 2, 'High offset non-critical')
        self.assertEqual(check.peers(ntp.ntpdata['peers']), 2, 'Low peers non-critical')
        self.assertEqual(check.reachability(ntp.ntpdata['reachability']), 0,
                         'High reachability non-OK')

        # run overall health checks
        self.assertEqual(ntp.check_sync(), 0, 'Sync peer not detected')
        self.assertEqual(ntp.check_offset(), 2, 'High offset non-critical')
        self.assertEqual(ntp.check_peers(), 2, 'Low peers non-critical')
        self.assertEqual(ntp.check_reachability(), 0, 'High reachability non-OK')
예제 #9
0
    def test_sync(self):
        check = CheckNTPMon()

        self.assertEqual(check.sync(''), 2, 'Invalid sync peer not detected')
        self.assertEqual(check.sync('    '), 2, 'Invalid sync peer not detected')
        self.assertEqual(check.sync('!@#$%^&*()'), 2, 'Invalid sync peer not detected')
        self.assertEqual(check.sync('blah.example.com'), 0, 'Sync peer not detected')
        self.assertEqual(check.sync('192.168.2.1'), 0, 'Sync peer not detected')
        self.assertEqual(check.sync('fe80::1'), 0, 'Sync peer not detected')
        self.assertEqual(check.sync('ds002.dedicated'), 0, 'Sync peer not detected')
        self.assertEqual(check.sync('node01.au.serve'), 0, 'Sync peer not detected')
예제 #10
0
 def test_non_default(self):
     c = CheckNTPMon(1, 2, 9, 49, 80, 60)
     self.assertEqual(c.warnpeers, 1)
     self.assertEqual(c.okpeers, 2)
     self.assertEqual(c.warnoffset, 9)
     self.assertEqual(c.critoffset, 49)
     self.assertEqual(c.warnreach, 80)
     self.assertEqual(c.critreach, 60)
예제 #11
0
 def test_defaults(self):
     c = CheckNTPMon()
     self.assertEqual(c.warnpeers, 2)
     self.assertEqual(c.okpeers, 4)
     self.assertEqual(c.warnoffset, 10)
     self.assertEqual(c.critoffset, 50)
     self.assertEqual(c.warnreach, 75)
     self.assertEqual(c.critreach, 50)
예제 #12
0
 def test_sync(self):
     check = CheckNTPMon()
     self.assertEqual(check.sync(''), 2, 'Invalid sync peer not detected')
     self.assertEqual(check.sync('    '), 2, 'Invalid sync peer not detected')
     self.assertEqual(check.sync('!@#$%^&*()'), 2, 'Invalid sync peer not detected')
     self.assertEqual(check.sync('blah.example.com'), 0, 'Sync peer not detected')
     self.assertEqual(check.sync('192.168.2.1'), 0, 'Sync peer not detected')
     self.assertEqual(check.sync('fe80::1'), 0, 'Sync peer not detected')
     self.assertEqual(check.sync('ds002.dedicated'), 0, 'Sync peer not detected')
     self.assertEqual(check.sync('node01.au.serve'), 0, 'Sync peer not detected')
예제 #13
0
    def test_NTPPeer4(self):
        # check the parsing done by NTPPeers
        ntp = NTPPeers(testdata[4].split("\n"))
        self.assertEqual(ntp.ntpdata.get('syncpeer'), None)
        self.assertEqual(ntp.ntpdata.get('offsetsyncpeer'), None)
        self.assertEqual(ntp.ntpdata['survivors'], 2)
        self.assertEqual(ntp.ntpdata.get('averageoffsetsurvivors'), 2.7969999999999997)
        self.assertEqual(ntp.ntpdata['discards'], 2)
        self.assertEqual(ntp.ntpdata['averageoffsetdiscards'], 14.9545)
        self.assertEqual(ntp.ntpdata['peers'], 4)
        self.assertEqual(ntp.ntpdata['averageoffset'], 8.87575)
        self.assertEqual(ntp.ntpdata['reachability'], 62.5)

        # run checks on the data
        check = CheckNTPMon()
        self.assertEqual(check.offset(ntp.ntpdata['averageoffsetdiscards']), 1, 'Discards offset non-warning')
        self.assertEqual(check.offset(ntp.ntpdata['averageoffset']), 0, 'Offset non-OK')
        self.assertEqual(check.peers(ntp.ntpdata['peers']), 0, 'Peers non-OK')
        self.assertEqual(check.reachability(ntp.ntpdata['reachability']), 1, 'Reachability non-warning')

        # run overall health checks
        self.assertEqual(ntp.check_sync(), 1, 'Missing sync peer non-warning')
        self.assertEqual(ntp.check_offset(), 0, 'Normal offset non-OK')
        self.assertEqual(ntp.check_peers(), 0, 'OK peer count non-OK')
        self.assertEqual(ntp.check_reachability(), 1, 'Low reachability non-critical')
예제 #14
0
    def test_NTPPeer3(self):
        # check the parsing done by NTPPeers
        ntp = NTPPeers(testdata[3].split("\n"))
        self.assertEqual(ntp.ntpdata.get('syncpeer'), None)
        self.assertEqual(ntp.ntpdata.get('offsetsyncpeer'), None)
        self.assertEqual(ntp.ntpdata['survivors'], 0)
        self.assertEqual(ntp.ntpdata.get('averageoffsetsurvivors'), None)
        self.assertEqual(ntp.ntpdata['discards'], 1)
        self.assertEqual(ntp.ntpdata['averageoffsetdiscards'], 0.913)
        self.assertEqual(ntp.ntpdata['peers'], 1)
        self.assertEqual(ntp.ntpdata['averageoffset'], 0.913)
        self.assertEqual(ntp.ntpdata['reachability'], 37.5)

        # run checks on the data
        check = CheckNTPMon()
        self.assertEqual(check.offset(ntp.ntpdata['averageoffsetdiscards']), 0, 'Low offset non-OK')
        self.assertEqual(check.offset(ntp.ntpdata['averageoffset']), 0, 'Low offset non-OK')
        self.assertEqual(check.peers(ntp.ntpdata['peers']), 2, 'Low peers non-critical')
        self.assertEqual(check.reachability(ntp.ntpdata['reachability']), 2,
                         'Low reachability non-critical')

        # run overall health checks
        self.assertEqual(ntp.check_sync(), 2, 'Missing sync peer not detected')
        self.assertEqual(ntp.check_offset(), 1, 'Missing sync peer/survivor offset non-warning')
        self.assertEqual(ntp.check_peers(), 2, 'Low peers non-critical')
        self.assertEqual(ntp.check_reachability(), 2, 'Low reachability non-critical')
예제 #15
0
    def test_offset(self):
        check = CheckNTPMon()

        for i in [50.01, 50.1, 51, 99, 100, 999]:
            self.assertEqual(check.offset(i), 2, 'High offset non-critical')
            self.assertEqual(check.offset(-i), 2, 'High offset non-critical')

        for i in [10.01, 10.1, 11, 49, 49.99, 50]:
            self.assertEqual(check.offset(i), 1, 'Moderate offset non-warning')
            self.assertEqual(check.offset(-i), 1, 'Moderate offset non-warning')

        for i in [0, 0.01, 1, 1.01, 9, 9.99, 10]:
            self.assertEqual(check.offset(i), 0, 'Low offset non-OK')
            self.assertEqual(check.offset(-i), 0, 'Low offset non-OK')
예제 #16
0
 def test_bad_trace(self):
     check = CheckNTPMon()
     self.assertEqual(check.trace(''), 1, 'Invalid trace not detected')
     self.assertEqual(check.trace('    '), 1, 'Invalid trace not detected')
     self.assertEqual(check.trace('!@#$%^&*()'), 1,
                      'Invalid trace not detected')
     self.assertEqual(check.trace('blah.example.com'), 1,
                      'Invalid trace not detected')
예제 #17
0
 def test_bad_trace(self):
     check = CheckNTPMon()
     self.assertEqual(check.trace(''), 1, 'Invalid trace not detected')
     self.assertEqual(check.trace('    '), 1, 'Invalid trace not detected')
     self.assertEqual(check.trace('!@#$%^&*()'), 1, 'Invalid trace not detected')
     self.assertEqual(check.trace('blah.example.com'), 1, 'Invalid trace not detected')
예제 #18
0
 def test_trace_demos(self):
     """Ensure that demo traces are parsed successfully and don't produce exceptions or unknown results."""
     for d in demotrace:
         check = CheckNTPMon()
         self.assertEqual(check.trace(d.split("\n")), 0,
                          'Error parsing demo trace data')
예제 #19
0
 def test_trace_demos(self):
     """Ensure that demo traces are parsed successfully and don't produce exceptions or unknown results."""
     for d in demotrace:
         check = CheckNTPMon()
         self.assertEqual(check.trace(d.split("\n")), 0, 'Error parsing demo trace data')
예제 #20
0
    """Duplicate of test_demos which shows full output"""
    i = 0
    for d in demodata:
        print("Parsing demo data %d: %s" % (i, d))
        ntp = NTPPeers(d.split("\n"))
        i += 1
        ntp.dump()
        methods = [ntp.check_offset, ntp.check_peers, ntp.check_reachability,
                   ntp.check_sync, ntp.checks]
        for method in methods:
            ret = method()
            if ret not in [0, 1, 2]:
                print("Method %s returned invalid result parsing demo data:\n%s" % (method, d))
                sys.exit(3)


if __name__ == "__main__":
    # object to store parsed arguments
    test_checkntpmon = CheckNTPMon()

    # parse command line
    parser = argparse.ArgumentParser(description='NTPmon test class')
    parser.add_argument('--show-demos', action='store_true',
        help='Show demo output.')
    args = parser.parse_args(namespace=test_checkntpmon)
    if test_checkntpmon.show_demos:
        demo()
    else:
        unittest.main()