Coverage for tests/e2e/fuzz/test_fuzz_kof.py : 94%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# -*- coding: utf-8 -*-
2from __future__ import annotations
4# -- stdlib --
5# -- third party --
6import gevent
8# -- own --
9from ..mock import Environ, EventTap
10from utils.misc import BatchList
11from .common import UserInputFuzzingHandler, let_it_go
14# -- code --
15class GameEnded(Exception):
16 pass
19def wait():
20 gevent.idle(-100)
21 gevent.sleep(0.01)
22 gevent.idle(-100)
25class TestFuzzTHBattleKOF(object):
26 def testFuzzTHBattleKOF(self):
27 env = Environ()
28 t = EventTap()
30 me = gevent.getcurrent()
32 def fail_crash(g):
33 e = Exception('GAME CRASH')
34 e.__cause__ = g.runner.exception
35 gevent.kill(me, e)
36 return g
38 s = env.server_core()
39 cl = BatchList([env.client_core() for _ in range(2)])
40 t.tap(s, *cl)
42 c1r = BatchList(cl[1:])
43 c = cl[0]
44 names = (
45 'Reimu', 'Marisa', 'Youmu', 'Sakuya',
46 'Satori', 'Koishi', 'Remilia', 'Flandre',
47 )
48 for i, name in zip(cl, names):
49 i.auth.login(name)
50 wait()
51 assert all(cl.auth.uid)
52 c.room.create('Test1', 'THBattleKOF', {})
53 wait()
54 gid = c.game.gid_of(t[c.events.game_joined])
55 c1r.room.join(gid)
56 wait()
57 assert [gid] * 2 == [i.game.gid_of(t[i.events.game_joined]) for i in cl]
59 s.events.game_crashed += fail_crash
60 for i in cl:
61 g = t[i.events.game_joined]
62 i.events.game_crashed += fail_crash
63 g.event_observer = UserInputFuzzingHandler(g)
65 cl.room.get_ready()
66 wait()
67 assert [gid] * 2 == [i.game.gid_of(t[i.events.game_started]) for i in cl]
69 wait()
71 def game_ended(g):
72 gevent.kill(me, GameEnded())
73 return g
75 s.events.game_ended += game_ended
77 [i.game.start_game(t[i.events.game_started]) for i in cl]
79 try:
80 let_it_go(*cl)
81 except GameEnded:
82 pass