def _test_exception_on_import(self, code): f = self.write_temp_py(code) sandbox = SubprocessSandbox([f.name]) players = sandbox.get_players() self.assertEqual(len(players), 1) self.run_players(players) self.assertEqual(self.server.crashed, 2) self.assertEqual(self.server.stopped, 2) self.assertEqual(len(self.server.crash_report), 2) self.assertTrue("Traceback" in self.server.crash_report[0])
def test_new_names(self): f = self.write_temp_py("""from spectrumwars import Transceiver class Destination(Transceiver): pass class Source(Transceiver): pass """) sandbox = SubprocessSandbox([f.name]) players = sandbox.get_players() self.assertEqual(len(players), 1) self.run_players(players) self.assertEqual(self.server.crashed, 0)
def test_simple(self): f = self.write_temp_py("""from spectrumwars import Transceiver class Receiver(Transceiver): pass class Transmitter(Transceiver): pass """) sandbox = SubprocessSandbox([f.name]) players = sandbox.get_players() self.assertEqual(len(players), 1) self.run_players(players) self.assertEqual(self.server.stopped, 2) self.assertEqual(self.server.crashed, 0)
def run(args): logging.basicConfig(level=logging.DEBUG) logging.getLogger('jsonrpc2_zeromq').setLevel(logging.WARNING) testbed = get_testbed(args.testbed, args.testbed_options) sandbox = SubprocessSandbox(args.player_paths) packet_limit = args.packet_limit if args.packet_limit > 0 else None time_limit = args.time_limit if args.time_limit > 0 else None game = Game(testbed, sandbox, packet_limit=packet_limit, time_limit=time_limit) ctl = GameController() log.info("Running game...") results = ctl.run(game) log.info("Done.") game_time = game.end_time - game.start_time print "Results:" for i, result in enumerate(results): if result.src_transmit_packets > 0: packet_loss = 100. * ( result.src_transmit_packets - result.dst_received_packets) / result.src_transmit_packets packet_loss_str = "(%.0f%% packet loss)" % (packet_loss, ) else: packet_loss_str = "" print "Player %d:" % (i + 1, ) print " crashed : %s" % (result.crashed, ) print " transmitted packets : %d" % (result.src_transmit_packets, ) print " received packets : %d" % ( result.dst_received_packets, ), packet_loss_str print " transferred payload : %d bytes (avg %.1f bytes/s)" % ( result.payload_bytes, result.payload_bytes / game_time) print if result.crashed: print " Crash reports:" for desc in result.crash_report: print desc print print "Game time: %.1f seconds" % (game_time, ) if args.log_path: pickle.dump(game.log, open(args.log_path, "wb"))
def test_loop(self): f = self.write_temp_py("""from spectrumwars import Transceiver class Receiver(Transceiver): def start(self): while True: pass class Transmitter(Transceiver): pass """) sandbox = SubprocessSandbox([f.name]) players = sandbox.get_players() self.assertEqual(len(players), 1) player = players[0] player.dst.init(1.) player.src.init(1.) player.dst.start(self.endpoint) player.src.start(self.endpoint) now = time.time() deadline = now + 1 player.dst.join(deadline=deadline) player.src.join(deadline=deadline) self.assertEqual(self.server.crashed, 1) self.assertEqual(self.server.stopped, 2) self.assertEqual(len(self.server.crash_report), 1) self.assertTrue("Time" in self.server.crash_report[0])