Commit | Line | Data |
---|---|---|
e65a09cf FC |
1 | from os import getcwd |
2 | from logging import info | |
8ee66edd FC |
3 | from shutil import rmtree |
4 | from os import makedirs | |
5 | from os.path import join, exists | |
158b04a8 | 6 | from xmlrpc.server import SimpleXMLRPCServer |
361d3942 | 7 | from threading import Thread |
8ee66edd FC |
8 | from panda3d.core import Filename |
9 | from direct.gui.OnscreenText import OnscreenText | |
53ddf3c3 | 10 | from ya2.build.build import _branch |
8ee66edd FC |
11 | |
12 | ||
158b04a8 FC |
13 | class RPCServer(SimpleXMLRPCServer): |
14 | ||
15 | def __init__(self, callbacks): | |
16 | super().__init__(('localhost', 6000), allow_none=True) | |
17 | self._callbacks = callbacks | |
18 | self.register_introspection_functions() | |
19 | self.register_function(self.screenshot, 'screenshot') | |
20 | self.register_function(self.enforce_res, 'enforce_res') | |
21 | self.register_function(self.verify, 'verify') | |
22 | self.register_function(self.set_idx, 'set_idx') | |
23 | self.register_function(self.enforce_resolution, 'enforce_resolution') | |
2d1773b1 | 24 | self.register_function(self.get_pos, 'get_pos') |
158b04a8 FC |
25 | self.register_function(self.destroy, 'destroy') |
26 | ||
27 | def screenshot(self, arg): | |
28 | taskMgr.doMethodLater(.01, self._callbacks[0], 'cb0', [arg]) | |
29 | ||
30 | def enforce_res(self, arg): | |
31 | taskMgr.doMethodLater(.01, self._callbacks[1], 'cb1', [arg]) | |
32 | ||
33 | def verify(self): | |
34 | taskMgr.doMethodLater(.01, self._callbacks[2], 'cb2') | |
35 | ||
36 | def set_idx(self, arg): | |
37 | taskMgr.doMethodLater(.01, self._callbacks[3], 'cb3', [arg]) | |
38 | ||
39 | def enforce_resolution(self, arg): | |
40 | taskMgr.doMethodLater(.01, self._callbacks[4], 'cb4', [arg]) | |
41 | ||
2d1773b1 FC |
42 | def get_pos(self, arg): |
43 | return self._callbacks[5](arg) | |
44 | ||
158b04a8 FC |
45 | def destroy(self): |
46 | self._BaseServer__shutdown_request = True | |
47 | ||
48 | ||
49 | class RPCServerThread(Thread): | |
361d3942 FC |
50 | |
51 | def __init__(self, callbacks): | |
52 | Thread.__init__(self) | |
361d3942 FC |
53 | self._callbacks = callbacks |
54 | ||
55 | def run(self): | |
158b04a8 FC |
56 | self.server = RPCServer(self._callbacks) |
57 | self.server.serve_forever() | |
8ee66edd | 58 | |
8ee66edd | 59 | |
aed9737a | 60 | class FunctionalTest: |
361d3942 | 61 | |
2d1773b1 | 62 | def __init__(self, ref, pos_mgr): |
8ee66edd | 63 | super().__init__() |
2d1773b1 | 64 | self._pos_mgr = pos_mgr |
e65a09cf FC |
65 | RPCServerThread([self._do_screenshot, self._do_enforce_res, |
66 | self.__verify, self._set_idx, | |
67 | self._do_enforce_resolution, self.__get_pos]).start() | |
8ee66edd | 68 | self.txt = OnscreenText('', fg=(1, 0, 0, 1), scale=.16) |
e65a09cf FC |
69 | # self._path = '' |
70 | # if self.eng.is_appimage: | |
8ee66edd | 71 | self._path = str(Filename().get_user_appdata_directory()) |
edeef6f9 | 72 | self._path += '/pmachines/' |
8ee66edd FC |
73 | self._path += 'tests/functional%s/' % ('_ref' if ref else '') |
74 | home = '/home/flavio' # we must force this for wine | |
e65a09cf FC |
75 | # if self._path.startswith('/c/users/') and exists(str(Path.home()) + |
76 | # '/.local/share/flatpak-wine601/default/'): | |
77 | # self._path = str(Path.home()) + | |
78 | # '/.local/share/flatpak-wine601/default/drive_' + self._path[1:] | |
8ee66edd FC |
79 | if self._path.startswith('/c/users/') and exists(home + '/.wine/'): |
80 | self._path = home + '/.wine/drive_' + self._path[1:] | |
81 | if ref: | |
82 | self._path = join( | |
83 | Filename().get_user_appdata_directory(), | |
edeef6f9 | 84 | 'pmachines/tests/functional_ref_%s/' % _branch()) |
8ee66edd | 85 | self._fnames = [] |
e65a09cf FC |
86 | # taskMgr.add(self.on_frame_unpausable, 'on-frame-unpausable') |
87 | # self._do_screenshots(idx) | |
8ee66edd | 88 | |
6d722600 FC |
89 | def _set_idx(self, idx): |
90 | if int(idx) == 1: | |
91 | rmtree(self._path, ignore_errors=True) | |
92 | info('creating dir: %s' % self._path) | |
93 | makedirs(self._path, exist_ok=True) | |
94 | ||
2d1773b1 FC |
95 | def __get_pos(self, tgt): |
96 | return self._pos_mgr.get(tgt) | |
97 | ||
361d3942 FC |
98 | def _do_screenshot(self, name): |
99 | self._fnames += [self._path + name] | |
e65a09cf FC |
100 | # time = datetime.datetime.now().strftime('%y%m%d%H%M%S') |
101 | # res = base.win.save_screenshot( | |
102 | # Filename(path or ("yocto%s.png" % time))) | |
103 | # debug('screenshot %s (%s)' % (path or ("yocto%s.png" % time), res)) | |
361d3942 FC |
104 | res = base.screenshot(self._path + name, False) |
105 | info('screenshot %s (%s; %s)' % (self._path + name, res, getcwd())) | |
edeef6f9 | 106 | |
361d3942 FC |
107 | def _do_enforce_res(self, res): |
108 | info('enforce_res %s' % res) | |
109 | messenger.send('enforce_res', [res]) | |
edeef6f9 | 110 | |
74ed9732 FC |
111 | def _do_enforce_resolution(self, res): |
112 | info('enforce resolution %s (callback)' % res) | |
113 | messenger.send('enforce_resolution', [res]) | |
114 | ||
361d3942 | 115 | def __verify(self, task): |
e65a09cf | 116 | # files = glob(self._path + '*') |
361d3942 FC |
117 | for fname in self._fnames: |
118 | info('verifying %s' % fname) | |
119 | assert exists(fname) |