summaryrefslogtreecommitdiffstats
path: root/meta/lib/oeqa/runtime/cases/weston.py
blob: ac29eca6e40547e7cbb1d46974743473ce2776f3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#
# 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))