1import os
2
3import infra.basetest
4
5
6class TestOla(infra.basetest.BRTest):
7    config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \
8        """
9        BR2_PACKAGE_OLA=y
10        BR2_PACKAGE_OLA_EXAMPLES=y
11        BR2_PACKAGE_OLA_PLUGIN_DUMMY=y
12        BR2_PACKAGE_OLA_PYTHON_BINDINGS=y
13        BR2_PACKAGE_OLA_WEB=y
14        BR2_PACKAGE_PYTHON3=y
15        BR2_ROOTFS_OVERLAY="{}"
16        BR2_TARGET_ROOTFS_CPIO=y
17        # BR2_TARGET_ROOTFS_TAR is not set
18        """.format(
19           # overlay to add a script to test ola python bindings
20           infra.filepath("tests/package/test_ola/rootfs-overlay"))
21
22    def test_run(self):
23        cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
24        self.emulator.boot(arch="armv5",
25                           kernel="builtin",
26                           options=["-initrd", cpio_file])
27        self.emulator.login()
28
29        # Check program executes
30        cmd = "olad --version"
31        self.assertRunOk(cmd)
32
33        # Start the daemon and wait a bit for it to settle
34        cmd = "olad --daemon && sleep 2"
35        self.assertRunOk(cmd)
36
37        # Check dummy plugin is loaded
38        cmd = "ola_plugin_info | grep -Fi dummy"
39        self.assertRunOk(cmd)
40
41        # Check dummy device and port are listed
42        cmd = "ola_dev_info"
43        output, exit_code = self.emulator.run(cmd)
44        self.assertEqual(exit_code, 0)
45        self.assertIn("Device 1: Dummy Device", output[0])
46        self.assertIn("port 0, OUT Dummy Port", output[1])
47
48        # Create Universe 0
49        cmd = "ola_patch --device 1 --port 0 --universe 0"
50        self.assertRunOk(cmd)
51
52        # Check Universe 0 is created
53        cmd = "ola_dev_info"
54        output, exit_code = self.emulator.run(cmd)
55        self.assertEqual(exit_code, 0)
56        self.assertIn("patched to universe 0", output[1])
57
58        # Discover Dummy device RDM UID
59        cmd = "ola_rdm_discover --universe 0 | head -1"
60        output, exit_code = self.emulator.run(cmd)
61        self.assertEqual(exit_code, 0)
62        rdm_uid = output[0]
63
64        # Get RDM manufacturer_label PID
65        cmd = "ola_rdm_get --universe 0 --uid {} manufacturer_label".format(rdm_uid)
66        output, exit_code = self.emulator.run(cmd)
67        self.assertEqual(exit_code, 0)
68        self.assertEqual(output[0], "Open Lighting Project")
69
70        # Get RDM dmx_start_address PID, checks default value is 1
71        cmd = "ola_rdm_get --universe 0 --uid {} dmx_start_address".format(rdm_uid)
72        output, exit_code = self.emulator.run(cmd)
73        self.assertEqual(exit_code, 0)
74        self.assertEqual(output[0], "DMX Address: 1")
75
76        # Set RDM dmx_start_address PID to 2
77        cmd = "ola_rdm_set --universe 0 --uid {} dmx_start_address 2".format(rdm_uid)
78        self.assertRunOk(cmd)
79
80        # Get the new RDM dmx_start_address PID, checks value is now 2
81        cmd = "ola_rdm_get --universe 0 --uid {} dmx_start_address".format(rdm_uid)
82        output, exit_code = self.emulator.run(cmd)
83        self.assertEqual(exit_code, 0)
84        self.assertEqual(output[0], "DMX Address: 2")
85
86        # Perform a full RDM discovery using python bindings. The test
87        # expect to find the same UID detected with the C client.
88        cmd = "sample_ola_rdm_discovery.py | head -1"
89        output, exit_code = self.emulator.run(cmd)
90        self.assertEqual(exit_code, 0)
91        self.assertEqual(output[0], rdm_uid)
92
93        # Test olad web interface
94        cmd = "wget -q -O - http://127.0.0.1:9090/ola.html | grep -F '<title>OLA Admin</title>'"
95        self.assertRunOk(cmd)
96