mirror of
https://git.yoctoproject.org/poky
synced 2026-03-03 22:09:39 +01:00
Existing weston test available make sure that a process for weston-desktop-shell exist when image boot up. Enhance weston tests by: - execute weston-info to make sure weston interface(s) are initialized - execute weston and make sure it can initialize a new wayland compositor (retry checking for wayland processes up to 5 times) - enable weston logging for debugging when fail to initialize wayland compositor [YOCTO# 10690] (From OE-Core rev: d06552c588bde8fc15c23d8fc2eb00a4243cbc3b) Signed-off-by: Yeoh Ee Peng <ee.peng.yeoh@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
70 lines
3.0 KiB
Python
70 lines
3.0 KiB
Python
#
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
|
|
from oeqa.runtime.case import OERuntimeTestCase
|
|
from oeqa.core.decorator.depends import OETestDepends
|
|
from oeqa.core.decorator.data import skipIfNotFeature
|
|
from oeqa.runtime.decorator.package import OEHasPackage
|
|
import threading
|
|
import time
|
|
|
|
class WestonTest(OERuntimeTestCase):
|
|
weston_log_file = '/tmp/weston.log'
|
|
|
|
@classmethod
|
|
def tearDownClass(cls):
|
|
cls.tc.target.run('rm %s' % cls.weston_log_file)
|
|
|
|
@OETestDepends(['ssh.SSHTest.test_ssh'])
|
|
@OEHasPackage(['weston'])
|
|
def test_weston_running(self):
|
|
cmd ='%s | grep [w]eston-desktop-shell' % self.tc.target_cmds['ps']
|
|
status, output = self.target.run(cmd)
|
|
msg = ('Weston does not appear to be running %s' %
|
|
self.target.run(self.tc.target_cmds['ps'])[1])
|
|
self.assertEqual(status, 0, msg=msg)
|
|
|
|
def get_processes_of(self, target, error_msg):
|
|
status, output = self.target.run('pidof %s' % target)
|
|
self.assertEqual(status, 0, msg='Retrieve %s (%s) processes error: %s' % (target, error_msg, output))
|
|
return output.split(" ")
|
|
|
|
def get_weston_command(self, cmd):
|
|
return 'export XDG_RUNTIME_DIR=/run/user/0; export WAYLAND_DISPLAY=wayland-0; %s' % cmd
|
|
|
|
def run_weston_init(self):
|
|
self.target.run(self.get_weston_command('weston --log=%s' % self.weston_log_file))
|
|
|
|
def get_new_wayland_processes(self, existing_wl_processes):
|
|
try_cnt = 0
|
|
while try_cnt < 5:
|
|
time.sleep(5 + 5*try_cnt)
|
|
try_cnt += 1
|
|
wl_processes = self.get_processes_of('weston-desktop-shell', 'existing and new')
|
|
new_wl_processes = [x for x in wl_processes if x not in existing_wl_processes]
|
|
if new_wl_processes:
|
|
return new_wl_processes, try_cnt
|
|
|
|
return new_wl_processes, try_cnt
|
|
|
|
@OEHasPackage(['weston'])
|
|
def test_weston_info(self):
|
|
status, output = self.target.run(self.get_weston_command('weston-info'))
|
|
self.assertEqual(status, 0, msg='weston-info error: %s' % output)
|
|
|
|
@OEHasPackage(['weston'])
|
|
def test_weston_can_initialize_new_wayland_compositor(self):
|
|
existing_wl_processes = self.get_processes_of('weston-desktop-shell', 'existing')
|
|
existing_weston_processes = self.get_processes_of('weston', 'existing')
|
|
|
|
weston_thread = threading.Thread(target=self.run_weston_init)
|
|
weston_thread.start()
|
|
new_wl_processes, try_cnt = self.get_new_wayland_processes(existing_wl_processes)
|
|
existing_and_new_weston_processes = self.get_processes_of('weston', 'existing and new')
|
|
new_weston_processes = [x for x in existing_and_new_weston_processes if x not in existing_weston_processes]
|
|
for w in new_weston_processes:
|
|
self.target.run('kill -9 %s' % w)
|
|
__, weston_log = self.target.run('cat %s' % self.weston_log_file)
|
|
self.assertTrue(new_wl_processes, msg='Could not get new weston-desktop-shell processes (%s, try_cnt:%s) weston log: %s' % (new_wl_processes, try_cnt, weston_log))
|