874b6f20c2
Основа — Horizon (MIT). История апстрима не переносится: этот репозиторий ведёт свою.
50 lines
2.3 KiB
Python
50 lines
2.3 KiB
Python
import unittest
|
|
|
|
import re
|
|
|
|
from tools.server_bench import DONE, TICK_AVERAGE, TICK_PERCENTILES, work
|
|
|
|
|
|
def run(server, bots, sent, new, waited=0.0, behaviour="mixed"):
|
|
return {"server": server, "behaviour": behaviour, "bots": bots, "chunks_per_second": sent,
|
|
"unique_per_second": new, "waited_ticks_per_second": waited}
|
|
|
|
|
|
class ServerBenchWorkTests(unittest.TestCase):
|
|
def test_shares_of_the_busiest_server(self):
|
|
[row] = work([run("horizon", 10, 98.2, 36.5), run("vanilla", 10, 24.3, 19.1, 12.0)])
|
|
self.assertFalse(row["equal"])
|
|
self.assertEqual(row["servers"]["horizon"]["chunks_per_second"], {"value": 98.2, "share": 1.0})
|
|
self.assertEqual(row["servers"]["vanilla"]["chunks_per_second"]["share"], 0.247)
|
|
self.assertEqual(row["servers"]["vanilla"]["waited_ticks_per_second"], 12.0)
|
|
|
|
def test_equal_within_ten_percent_or_a_chunk(self):
|
|
[row] = work([run("horizon", 25, 236, 28.9), run("vanilla", 25, 252, 28.9)])
|
|
self.assertTrue(row["equal"])
|
|
# One bot: 0.3 against 1.1 new chunks a second is within a chunk.
|
|
[row] = work([run("horizon", 1, 9.9, 0.3), run("vanilla", 1, 9.9, 1.1)])
|
|
self.assertTrue(row["equal"])
|
|
|
|
def test_only_counts_run_on_several_servers(self):
|
|
failed = dict(run("vanilla", 50, 0, 0), error="watchdog")
|
|
self.assertEqual(work([run("horizon", 50, 450, 10), failed, run("horizon", 1, 9, 0.3)]), [])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|
|
|
|
|
|
class ServerBenchLogTests(unittest.TestCase):
|
|
def test_every_server_says_it_is_up_the_same_way(self):
|
|
for line in ['[05:16:10] [Server thread/INFO]: Done (9.762s)! For help, type "help"',
|
|
'[02:53:58 INFO]: Done (29.649s)! For help, type "help"']:
|
|
self.assertTrue(re.search(DONE, line), line)
|
|
self.assertFalse(re.search(DONE, '[02:53:58 INFO]: Preparing spawn area: Done (12%)'))
|
|
|
|
def test_paper_answers_tick_query_as_vanilla_does(self):
|
|
# Paper 26.3 build 205, from a smoke run of this tool.
|
|
self.assertEqual(TICK_AVERAGE.search("Average time per tick: 14.4ms (Target: 50.0ms)").group(1), "14.4")
|
|
self.assertEqual(TICK_PERCENTILES.search(
|
|
"[02:54:10 INFO]: System chat: Percentiles: P50: 1.0ms P95: 34.6ms P99: 764.4ms. Sample: 100").groups(),
|
|
("1.0", "34.6", "764.4"))
|