ya2 · news · projects · code · about

support for itch.io
[pmachines.git] / tests / test_functional.py
CommitLineData
0f9675ba 1from pathlib import Path
8ce16d6c 2from datetime import datetime
0f9675ba
FC
3from itertools import product
4from logging import info
5import sys
6if '' in sys.path: sys.path.remove('')
7sys.path.append(str(Path(__file__).parent.parent.parent))
8from unittest import TestCase
8ce16d6c 9from shutil import rmtree, copy
0f9675ba
FC
10from time import sleep
11from os import system, remove, environ
12from os.path import exists, basename, join
13from glob import glob
14from panda3d.core import Filename
15from lib.build.build import exec_cmd, _branch, ver
16
17
18class FunctionalTests(TestCase):
19
20 def __clean(self):
21 paths = [
22 'tests/functional',
edeef6f9
FC
23 str(Path.home()) + '/.local/share/pmachines/tests/functional/',
24 str(Path.home()) + '/.var/app/it.ya2.Pmachines/data/pmachines/tests/functional/',
25 str(Path.home()) + '/.wine/drive_c/users/flavio/AppData/Local/pmachines/tests/functional/']
0f9675ba
FC
26 for path in paths:
27 rmtree(path, ignore_errors=True)
28 dirs = [
29 Filename().get_user_appdata_directory(),
edeef6f9 30 '/home/flavio/.var/app/it.ya2.Pmachines/data',
68f6c184 31 '/home/flavio/.wine/drive_c/users/flavio/AppData/Local']
0f9675ba 32 files = [
edeef6f9
FC
33 'pmachines/options.ini',
34 'pmachines/obs_version.txt']
0f9675ba
FC
35 for dir_file in product(dirs, files):
36 _file = join(*dir_file)
37 if exists(_file):
38 remove(_file)
39 info('%s removed' % _file)
40 else:
41 info('%s does not exist' % _file)
edeef6f9 42 system('pkill -f "pmachines.exe"')
0f9675ba
FC
43
44 def __awake(self):
45 system('xdotool key shift')
46
47 def setUp(self):
48 self.__clean()
49
50 def tearDown(self):
8ce16d6c 51 pass # self.__clean()
0f9675ba
FC
52
53 def test_ref(self):
edeef6f9
FC
54 info('test_ref')
55 path = 'pmachines/tests/functional_ref_%s/*.png' % _branch()
0f9675ba
FC
56 files = glob(join(Filename().get_user_appdata_directory(), path))
57 self.assertGreater(len(files), 1)
58
59 def __similar_images(self, ref_img, tst_img):
60 cmd = 'magick compare -metric NCC %s %s diff.png' % (ref_img, tst_img)
61 res = exec_cmd(cmd)
62 if exists('diff.png'): remove('diff.png')
63 print('compare %s %s: %s' % (ref_img, tst_img, res))
8ce16d6c 64 return float(res) > .8
0f9675ba
FC
65
66 def __test_template(self, cmd, path):
67 if environ.get('FUNCTIONAL') != '1':
68 self.skipTest('skipped functional tests')
69 self.__clean()
70 self.__awake()
71 system('amixer sset Master 0%')
72 ret = system(cmd)
1e689176 73 self.assertEqual(ret, 0, 'error while executing ' + cmd)
ad5ef398
FC
74 files = glob(str(Path.home()) + '/.local/share/pmachines/tests/functional_ref_%s/*.png' % _branch())
75 self.assertGreater(len(files), 1)
0f9675ba 76 for fname in files:
ad5ef398 77 self.assertTrue(exists(path + basename(fname)), '%s does not exist' % (path + basename(fname)))
8ce16d6c
FC
78 similar = self.__similar_images(
79 str(Path.home()) + '/.local/share/pmachines/tests/functional_ref_%s/' % _branch() + basename(fname),
80 path + basename(fname)),
81 'error while comparing %s and %s' % (
82 str(Path.home()) + '/.local/share/pmachines/tests/functional_ref_%s/' % _branch() + basename(fname),
83 path + basename(fname))
84 if not similar:
85 timestamp = datetime.now().strftime('%y%m%d%H%M%S%f')
86 copy(path + basename(fname), '~/Desktop/' + basename(fname)[:-4] + timestamp + '.png')
87 self.assertTrue(similar)
0f9675ba 88
ad5ef398
FC
89 def test_code(self):
90 info('test_code')
91 self.__test_template(
361d3942
FC
92 'timeout 720s ~/venv/bin/python main.py --functional-test & '
93 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 1; sleep 5; '
94 'timeout 720s ~/venv/bin/python main.py --functional-test & '
95 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 2',
ad5ef398 96 str(Path.home()) + '/.local/share/pmachines/tests/functional/')
edeef6f9 97
1e689176
FC
98 def test_appimage(self):
99 info('test_appimage')
100 bld_branch = {'master': 'alpha', 'rc': 'rc', 'stable': 'stable'}[_branch()]
101 bld_branch = '' if bld_branch == 'stable' else ('-' + bld_branch)
102 self.__test_template(
361d3942
FC
103 'timeout 720s ./dist/Pmachines%s-x86_64.AppImage --functional-test & '
104 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 1; sleep 5; '
105 'timeout 720s ./dist/Pmachines%s-x86_64.AppImage --functional-test & ' % (bld_branch, bld_branch) +
106 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 2',
1e689176 107 str(Path.home()) + '/.local/share/pmachines/tests/functional/')
edeef6f9 108
fa3662a6
FC
109 def test_flatpak(self):
110 info('test_flatpak')
111 if environ.get('FUNCTIONALPOST') != '1':
112 self.skipTest('skipped functional-post tests')
113 bld_branch = {'master': 'alpha', 'rc': 'rc', 'stable': 'stable'}[_branch()]
114 cmd = 'flatpak update -y it.ya2.Pmachines//%s' % bld_branch
115 info('executing: %s' % cmd)
116 system(cmd)
117 info('executed: %s' % cmd)
118 self.__test_template(
361d3942
FC
119 'timeout 720s flatpak run it.ya2.Pmachines//%s --functional-test & '
120 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 1; sleep 5; '
121 'timeout 720s flatpak run it.ya2.Pmachines//%s --functional-test & ' % (bld_branch, bld_branch) +
122 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 2',
fa3662a6 123 str(Path.home()) + '/.var/app/it.ya2.Pmachines/data/pmachines/tests/functional/')
addec9c9 124
c8e3e941
FC
125 def __update_itchio(self):
126 system('/home/flavio/.itch/itch')
127 sleep(5)
128 system('xdotool mousemove 860 620')
129 sleep(1)
130 system('xdotool click 1')
131 sleep(300)
132 system('killall itch')
133
134 def test_itchio(self):
135 info('test_itchio')
136 if environ.get('FUNCTIONALPOST') != '1':
137 self.skipTest('skipped functional-post tests')
138 if _branch() != 'master':
139 return
140 self.__update_itchio()
141 self.__test_template(
142 'timeout 720s /home/flavio/.config/itch/apps/pmachines/pmachines --functional-test & '
143 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 1; sleep 5; '
144 'timeout 720s /home/flavio/.config/itch/apps/pmachines/pmachines --functional-test & '
145 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 2',
146 str(Path.home()) + '/.local/share/pmachines/tests/functional/')
addec9c9 147
2e5f0efc
FC
148 def test_windows(self):
149 info('test_windows')
150 system('pkill -f "pmachines.exe"')
151 abspath = str(Path(__file__).parent.parent) + '/build/win_amd64/pmachines.exe'
152 self.__test_template(
153 'timeout 720s wine %s --functional-test & ' % abspath +
154 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 1; sleep 5; '
155 'timeout 720s wine %s --functional-test & ' % abspath +
156 'timeout 720s ~/venv/bin/python -m lib.tools.functional_test.py 2',
157 str(Path.home()) + '/.wine/drive_c/users/flavio/AppData/Local/pmachines/tests/functional/')
edeef6f9 158
8ce16d6c
FC
159 def test_versions(self):
160 info('test_versions')
161 if environ.get('FUNCTIONAL') != '1':
162 self.skipTest('skipped functional tests')
163 bld_branch = {'master': 'alpha', 'rc': 'rc', 'stable': 'stable'}[_branch()]
164 with open('/home/flavio/builders/pmachines_builder/last_bld.txt') as f:
165 lines = f.readlines()
166 for line in lines:
167 if line.strip().split()[0] == _branch():
168 commit = line.strip().split()[1][:7]
169 _ver = ver
170 if _branch() == 'stable':
171 with open('/home/flavio/builders/pmachines_builder/pmachines/assets/version.txt') as fver:
172 _ver = fver.read().strip() + '-'
173 exp = '%s-%s' % (_ver, commit)
174 cmds = [
26e35eb5
FC
175 ('timeout 720s ./build/manylinux2010_x86_64/pmachines --version', str(Filename.get_user_appdata_directory()) + '/pmachines/obs_version.txt'),
176 ('timeout 720s ./dist/Pmachines-%s-x86_64.AppImage --version' % bld_branch, str(Filename.get_user_appdata_directory()) + '/pmachines/obs_version.txt'),
c8e3e941
FC
177 ('timeout 720s wine ./build/win_amd64/pmachines.exe --version', '/home/flavio/.wine/drive_c/users/flavio/AppData/Local/pmachines/obs_version.txt')
178 ]
179 if environ.get('FUNCTIONALPOST') == '1':
180 if _branch() == 'master':
181 self.__update_itchio()
182 cmds += [('timeout 720s /home/flavio/.config/itch/apps/pmachines/pmachines --version', str(Filename.get_user_appdata_directory()) + '/pmachines/obs_version.txt')]
183 cmds += [('timeout 720s flatpak run it.ya2.Pmachines//%s --version' % bld_branch, '/home/flavio/.var/app/it.ya2.Pmachines/data/pmachines/obs_version.txt')]
8ce16d6c
FC
184 system('flatpak update -y it.ya2.Pmachines//%s' % bld_branch)
185 for cmd in cmds:
186 if exists(cmd[1]):
187 remove(cmd[1])
188 info('launching %s' % cmd[0])
189 exec_cmd(cmd[0])
190 with open(cmd[1]) as f:
191 obs = f.read().strip()
192 self.assertEqual(obs, exp, 'during ' + cmd[0])