Пример #1
0
    def testInit(self):
        ns = mocks.MockNameServer(mocks.GOOD_IP)
        self.assertEquals(ns.ip, mocks.GOOD_IP)
        self.assertEquals(ns.name, None)

        ns = mocks.MockNameServer(mocks.NO_RESPONSE_IP, name='Broked')
        self.assertEquals(ns.ip, mocks.NO_RESPONSE_IP)
        self.assertEquals(ns.name, 'Broked')
Пример #2
0
    def testDigestion(self):
        ns_list = (mocks.MockNameServer(mocks.GOOD_IP),
                   mocks.MockNameServer(mocks.PERFECT_IP),
                   mocks.MockNameServer(mocks.BROKEN_IP),
                   mocks.MockNameServer(mocks.SLOW_IP))
        b = benchmark.Benchmark(ns_list)
        good = ns_list[0].FakeAnswer(None)
        bad = ns_list[0].FakeAnswer(None, no_answer=True)

        b.results = {
            ns_list[0]: [[('www.google.com.', 'A', 2.90, bad),
                          ('google.com.', 'A', 9.80, good),
                          ('www.google.com.', 'A', 9.90, good)],
                         [('www.google.com.', 'A', 9.90, bad),
                          ('google.com.', 'A', 9.90, good),
                          ('www.google.com.', 'A', 9.80, good)]],
            ns_list[1]: [[('www.google.com.', 'A', 3.40, good),
                          ('google.com.', 'A', 3.40, good),
                          ('www.google.com.', 'A', 3.60, good)],
                         [('www.google.com.', 'A', 3.30, good),
                          ('google.com.', 'A', 3.30, good),
                          ('www.google.com.', 'A', 3.40, good)]],
            ns_list[2]: [[('www.google.com.', 'A', 60, None),
                          ('google.com.', 'A', 60, None),
                          ('www.google.com.', 'A', 60, None)],
                         [('www.google.com.', 'A', 60, None),
                          ('google.com.', 'A', 60, None),
                          ('www.google.com.', 'A', 60, None)]],
            ns_list[3]: [[('www.google.com.', 'A', 26.25, good),
                          ('google.com.', 'A', 26.30, good),
                          ('www.google.com.', 'A', 26.10, good)],
                         [('www.google.com.', 'A', 26.40, good),
                          ('google.com.', 'A', 12.40, bad),
                          ('www.google.com.', 'A', 26.80, good)]]
        }

        expected = []
        averages = dict([(x[0].ip, x[1]) for x in b.ComputeAverages()])
        self.assertEquals(averages[mocks.GOOD_IP], 8.7000000000000011)
        self.assertEquals(averages[mocks.PERFECT_IP], 3.4000000000000004)
        self.assertEquals(averages[mocks.BROKEN_IP], 60)
        self.assertEquals(averages[mocks.SLOW_IP], 24.041666666666664)

        expected = [('127.127.127.127', 3.2999999999999998),
                    ('127.0.0.1', 9.80), ('9.9.9.9', 26.10),
                    ('192.168.0.1', 60)]
        fastest = [(x[0].ip, x[1]) for x in b.FastestNameServerResult()]
        self.assertEquals(fastest, expected)

        expected = [
            (None, '####', 3.2999999999999998),
            (None, '##########', 9.8000000000000007),
            (None, '###########################', 26.100000000000001),
            (None,
             '############################################################',
             60)
        ]
        self.assertEquals(b._LowestLatencyAsciiChart(), expected)
Пример #3
0
 def testSharedCacheNoMatch(self):
     ns = mocks.MockNameServer(mocks.GOOD_IP)
     other_ns = mocks.MockNameServer(mocks.PERFECT_IP)
     ns.QueryWildcardCache(save=True)
     other_ns.QueryWildcardCache(save=True)
     (shared, slower, faster) = ns.TestSharedCache(other_ns)
     self.assertEquals(shared, False)
     self.assertEquals(slower, None)
     self.assertEquals(faster, None)
Пример #4
0
    def testFastest(self):
        ns_list = (mocks.MockNameServer('X', name='X'),
                   mocks.MockNameServer('O', name='O'),
                   mocks.MockNameServer('U', name='U'))
        b = benchmark.Benchmark(ns_list)
        good = ns_list[0].FakeAnswer(None)
        b.results = {
            ns_list[0]:
            [[('www.microsoft.com.', 'A', 3.0879974365234375, good),
              ('www.youku.com.', 'A', 2.2590160369873047, good),
              ('www.orkut.co.in.', 'A', 25.511980056762695, good),
              ('cache-9.ku6.com.', 'A', 1013.6392116546631, good),
              ('wsj.com.', 'A', 2.3639202117919922, good),
              ('www.imagevenue.com.', 'A', 2.6688575744628906, good),
              ('www.travian.ae.', 'A', 2.5160312652587891, good),
              ('www.fotolog.net.', 'A', 2.6750564575195312, good),
              ('www.torrentz.com.', 'A', 2.7811527252197266, good),
              ('www.wer-kennt-wen.de.', 'A', 2.7070045471191406, good)]],
            ns_list[1]:
            [[('www.microsoft.com.', 'A', 82.499980926513672, good),
              ('www.youku.com.', 'A', 81.991195678710938, good),
              ('www.orkut.co.in.', 'A', 82.377910614013672, good),
              ('cache-9.ku6.com.', 'A', 1141.1499977111816, good),
              ('wsj.com.', 'A', 84.334135055541992, good),
              ('www.imagevenue.com.', 'A', 84.282875061035156, good),
              ('www.travian.ae.', 'A', 84.036111831665039, good),
              ('www.fotolog.net.', 'A', 84.750175476074219, good),
              ('www.torrentz.com.', 'A', 84.517002105712891, good),
              ('www.wer-kennt-wen.de.', 'A', 83.980083465576172, good)]],
            ns_list[2]:
            [[('www.microsoft.com.', 'A', 12.507915496826172, good),
              ('www.youku.com.', 'A', 357.06806182861328, good),
              ('www.orkut.co.in.', 'A', 46.499967575073242, good),
              ('cache-9.ku6.com.', 'A', 697.60799407958984, good),
              ('wsj.com.', 'A', 87.159872055053711, good),
              ('www.imagevenue.com.', 'A', 11.99793815612793, good),
              ('www.travian.ae.', 'A', 11.492013931274414, good),
              ('www.fotolog.net.', 'A', 12.087106704711914, good),
              ('www.torrentz.com.', 'A', 12.598991394042969, good),
              ('www.wer-kennt-wen.de.', 'A', 11.770963668823242, good)]]
        }

        expected = [('G', 2.2590160369873047), ('U', 11.492013931274414),
                    ('O', 81.991195678710938)]
        fastest = [(x[0].ip, x[1]) for x in b.FastestNameServerResult()]
        self.assertEquals(fastest, expected)

        expected = [
            ('X', '##', 2.2590160369873047),
            ('U', '########', 11.492013931274414),
            ('O', '#####################################################',
             81.991195678710938)
        ]
        self.assertEquals(b._LowestLatencyAsciiChart(), expected)
Пример #5
0
    def testQUeryWildcardCacheSaving(self):
        ns = mocks.MockNameServer(mocks.GOOD_IP)
        other_ns = mocks.MockNameServer(mocks.PERFECT_IP)
        ns.QueryWildcardCache(save=True)
        other_ns.QueryWildcardCache(save=True)

        # Test our cache-sharing mechanisms
        (hostname, ttl) = ns.cache_check
        self.assertTrue(hostname.startswith('namebench'))
        self.assertEquals(ttl, 159)
        (other_hostname, other_ttl) = other_ns.cache_check
        self.assertTrue(other_hostname.startswith('namebench'))
        self.assertNotEqual(hostname, other_hostname)
        self.assertEquals(other_ttl, 159)
Пример #6
0
 def testWildcardCache(self):
     ns = mocks.MockNameServer(mocks.GOOD_IP)
     (response, is_broken, warning, duration) = ns.QueryWildcardCache()
     self.assertEquals(is_broken, False)
     question = str(response.question[0])
     self.assertTrue(question.startswith('namebench'))
     self.assertEquals(warning, None)
Пример #7
0
 def testCreateTestsChunkRecords(self):
     b = benchmark.Benchmark([mocks.MockNameServer(mocks.GOOD_IP)],
                             test_count=100)
     results = b.CreateTests(('A mail.google.com', 'CNAME test.live.com'),
                             select_mode='chunk')
     self.assertEquals(
         results, [['A', 'mail.google.com'], ['CNAME', 'test.live.com']])
Пример #8
0
 def testGoogleComResponse(self):
     ns = mocks.MockNameServer(mocks.GOOD_IP)
     (is_broken, warning, duration) = ns.TestGoogleComResponse()
     self.assertEquals(is_broken, False)
     self.assertEquals(
         warning, 'google.com. is hijacked (66.211.169.65 + 66.211.169.2)')
     self.assertTrue(duration > 0 and duration < 3600)
Пример #9
0
 def testCreateTestsSingle(self):
     b = benchmark.Benchmark([mocks.MockNameServer(mocks.GOOD_IP)],
                             test_count=1)
     results = b.CreateTests(('A mail.google.com', ))
     self.assertEquals(results, [['A', 'mail.google.com']])
     # Oops, this isn't a real tuple.
     self.assertRaises(AssertionError, b.CreateTests, 'google.com')
Пример #10
0
 def testTestAnswers(self):
     ns = mocks.MockNameServer(mocks.GOOD_IP)
     (is_broken, warning,
      duration) = ns.TestAnswers('A', 'www.paypal.com', '10.0.0.1')
     self.assertEquals(is_broken, False)
     self.assertEquals(warning, None)
     self.assertTrue(duration > 0 and duration < 3600)
Пример #11
0
 def testRun(self):
     ns_list = (mocks.MockNameServer(mocks.GOOD_IP),
                mocks.MockNameServer(mocks.PERFECT_IP),
                mocks.MockNameServer(mocks.BROKEN_IP),
                mocks.MockNameServer(mocks.SLOW_IP))
     b = benchmark.Benchmark(ns_list, test_count=3, run_count=2)
     self.assertRaises(AssertionError, b.Run)
     b.CreateTests(['A www.google.com'])
     self.assertEquals(b.test_data,
                       [['A', 'www.google.com'], ['A', 'www.google.com'],
                        ['A', 'www.google.com']])
     b.Run()
     ips_tested = sorted([x.ip for x in b.results])
     expected = ['127.0.0.1', '127.127.127.127', '192.168.0.1', '9.9.9.9']
     self.assertEquals(ips_tested, expected)
     self.assertEquals(len(b.results[ns_list[0]]), 2)
     self.assertEquals(len(b.results[ns_list[0]][0]), 3)
Пример #12
0
 def testCreateTestsWeighted(self):
     b = benchmark.Benchmark([mocks.MockNameServer(mocks.GOOD_IP)],
                             test_count=1000)
     results = b.CreateTests(('google.com', 'live.com'))
     self.assertEquals(len(results), 1000)
     self.assertTrue(('A', 'www.google.com.') in results)
     caches = [x for x in results if 'cache' in x[1]]
     self.assertTrue(len(caches) > 0 and len(caches) < 50)
Пример #13
0
 def testResponseToAscii(self):
     ns = mocks.MockNameServer(mocks.GOOD_IP)
     (response, duration,
      exception) = ns.TimedRequest('A', 'www.paypal.com')
     self.assertEquals(nameserver.ResponseToAscii(response),
                       '66.211.169.65 + 66.211.169.2')
     response.answer = None
     self.assertEquals(nameserver.ResponseToAscii(response), 'no answer')
Пример #14
0
 def testCheckHealthGood(self):
     ns = mocks.MockNameServer(mocks.GOOD_IP)
     ns.CheckHealth()
     self.assertEquals(ns.CheckHealth(), False)
     self.assertEquals(ns.warnings, ['No answer'])
     self.assertEquals(len(ns.checks), 1)
     self.assertEquals(ns.failure[0], 'TestWwwGoogleComResponse')
     self.assertEquals(ns.checks[0][0:3],
                       ('TestWwwGoogleComResponse', True, 'No answer'))
Пример #15
0
 def testNormalRun(self):
     ns_list = (mocks.MockNameServer(mocks.GOOD_IP),
                mocks.MockNameServer(mocks.PERFECT_IP),
                mocks.MockNameServer(mocks.BROKEN_IP),
                mocks.MockNameServer(mocks.SLOW_IP))
     b = benchmark.Benchmark(ns_list, test_count=3, run_count=2)
     b.CreateTests(['google.com', 'live.com'])
     b.Run()
     expected = ['127.0.0.1', '127.127.127.127', '192.168.0.1', '9.9.9.9']
     averages = dict([(x[0].ip, x[1]) for x in b.ComputeAverages()])
     self.assertEquals(len(averages), 4)
     self.assertTrue(averages[mocks.GOOD_IP] >= 8)
     self.assertTrue(averages[mocks.PERFECT_IP] <= 5)
     self.assertTrue(averages[mocks.BROKEN_IP] >= 59)
     self.assertTrue(averages[mocks.SLOW_IP] >= 20)
     self.assertEquals(b.BestOverallNameServer(), ns_list[1])
     self.assertEquals(b.NearestNameServers(count=2),
                       [ns_list[1], ns_list[0]])
Пример #16
0
 def testTimedRequest(self):
     ns = mocks.MockNameServer(mocks.GOOD_IP)
     (response, duration,
      exception) = ns.TimedRequest('A', 'www.paypal.com')
     self.assertEquals(response.id, 999)
     expected = ('www.paypal.com. 159 IN A 66.211.169.65\n'
                 'www.paypal.com. 159 IN A 66.211.169.2')
     self.assertEquals(str(response.answer[0]), expected)
     self.assertTrue(duration > 0)
     self.assertEquals(exception, None)
Пример #17
0
    def testSharedCacheMatch(self):
        ns = mocks.MockNameServer(mocks.GOOD_IP)
        other_ns = mocks.MockNameServer(mocks.PERFECT_IP)
        ns.QueryWildcardCache(save=True)
        other_ns.QueryWildcardCache(save=True)
        # Increase the TTL of 'other'
        other_ns.cache_check = (other_ns.cache_check[0],
                                other_ns.cache_check[1] + 5)
        (shared, slower, faster) = ns.TestSharedCache(other_ns)
        self.assertEquals(shared, True)
        self.assertEquals(slower.ip, mocks.GOOD_IP)
        self.assertEquals(faster.ip, mocks.PERFECT_IP)

        # Increase the TTL of 'other' by a whole lot
        other_ns.cache_check = (other_ns.cache_check[0],
                                other_ns.cache_check[1] + 3600)
        (shared, slower, faster) = ns.TestSharedCache(other_ns)
        self.assertEquals(shared, False)
        self.assertEquals(slower, None)
        self.assertEquals(faster, None)
Пример #18
0
 def testCheckHealthPerfect(self):
     ns = mocks.MockNameServer(mocks.PERFECT_IP)
     ns.CheckHealth()
     self.assertEquals(ns.CheckHealth(), True)
     expected = [
         'www.google.com. is hijacked (66.211.169.65 + 66.211.169.2)',
         'google.com. is hijacked (66.211.169.65 + 66.211.169.2)',
         'NXDOMAIN Hijacking (66.211.169.65 + 66.211.169.2)'
     ]
     self.assertEquals(ns.warnings, expected)
     self.assertEquals(len(ns.checks), 5)
     self.assertEquals(ns.failure, None)
     self.assertTrue(ns.check_duration > 10)
Пример #19
0
 def testEmptyRun(self):
     ns_list = (mocks.MockNameServer(mocks.GOOD_IP), )
     b = benchmark.Benchmark(ns_list, test_count=3, run_count=2)
     self.assertRaises(AssertionError, b.Run)
Пример #20
0
 def testNegativeResponseHijacked(self):
     ns = mocks.MockNameServer(mocks.GOOD_IP)
     (is_broken, warning, duration) = ns.TestNegativeResponse()
     self.assertEquals(is_broken, False)
     self.assertEquals(warning,
                       'NXDOMAIN Hijacking (66.211.169.65 + 66.211.169.2)')
Пример #21
0
 def testNegativeResponse(self):
     ns = mocks.MockNameServer(mocks.NO_RESPONSE_IP)
     (is_broken, warning, duration) = ns.TestNegativeResponse()
     self.assertEquals(is_broken, False)
     self.assertEquals(warning, None)
Пример #22
0
 def testWwwGoogleComResponse(self):
     ns = mocks.MockNameServer(mocks.GOOD_IP)
     (is_broken, warning, duration) = ns.TestWwwGoogleComResponse()
     self.assertEquals(is_broken, True)
     self.assertEquals(warning, 'No answer')
     self.assertTrue(duration > 0 and duration < 3600)
Пример #23
0
 def testWwwPaypalComResponse(self):
     ns = mocks.MockNameServer(mocks.GOOD_IP)
     (is_broken, warning, duration) = ns.TestWwwPaypalComResponse()
     self.assertEquals(is_broken, False)
     self.assertEquals(warning, None)
Пример #24
0
 def testNegativeResponseBroken(self):
     ns = mocks.MockNameServer(mocks.BROKEN_IP)
     (is_broken, warning, duration) = ns.TestNegativeResponse()
     self.assertEquals(is_broken, True)
     self.assertEquals(warning, 'BadResponse')