X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lttng_ivc%2Ftests%2Fust_soname_vs_tools%2Ftest_ust_so_name_vs_tools.py;fp=lttng_ivc%2Ftests%2Fust_soname_vs_tools%2Ftest_ust_so_name_vs_tools.py;h=d3b1f1a07e9b8cd5e9e9a56fc9fd9e2eeeab27e7;hb=de9b991ba1163882d83d4b60030014fedb8300cc;hp=0000000000000000000000000000000000000000;hpb=872a9a9ba0ed1751f7862ef1e7222c5d11eaeacd;p=deliverable%2Flttng-ivc.git diff --git a/lttng_ivc/tests/ust_soname_vs_tools/test_ust_so_name_vs_tools.py b/lttng_ivc/tests/ust_soname_vs_tools/test_ust_so_name_vs_tools.py new file mode 100644 index 0000000..d3b1f1a --- /dev/null +++ b/lttng_ivc/tests/ust_soname_vs_tools/test_ust_so_name_vs_tools.py @@ -0,0 +1,123 @@ +import pytest +import subprocess + +import lttng_ivc.utils.ProjectFactory as ProjectFactory +import lttng_ivc.settings as project_settings + +""" +TODO: Document how the tests is donne and what it tests + +At configure time +At build time +At run time + +Always include a documentation matrix: +FC: Fully Compatible +BC: Backward Compatible +I: Incompatible + ++------------------------------------------------------------------+ +| LTTng UST control library vs LTTng Tools | ++-----------------------------------------+-----+-----+-----+------+ +| LTTng UST Control(soname) / LTTng Tools | 2.7 | 2.8 | 2.9 | 2.10 | ++-----------------------------------------+-----+-----+-----+------+ +| 2.7 (2.0.0) | FC | I | I | I | +| 2.8 (2.0.0) | BC | FC | I | I | +| 2.9 (2.0.0) | BC | BC | FC | I | +| 2.10 (4.0.0) | I | I | I | FC | ++-----------------------------------------+-----+-----+-----+------+ + +In this scenario: + +FC and BC must pass configure, build and run time +I must fail at configure, build and run time. + +""" + +""" +First tuple member: lttng-ust label +Second tuple member: lttng-tool label +Third tuple member: Success. + True -> expect success + False -> expect failure +""" + +test_matrix_label = [ + ("lttng-ust-2.7", "lttng-tools-2.7", "lttng-ust-2.7", True), + ("lttng-ust-2.7", "lttng-tools-2.8", "lttng-ust-2.8", False), + ("lttng-ust-2.7", "lttng-tools-2.9", "lttng-ust-2.9", False), + ("lttng-ust-2.7", "lttng-tools-2.10", "lttng-ust-2.10", False), + ("lttng-ust-2.8", "lttng-tools-2.7", "lttng-ust-2.7", True), + ("lttng-ust-2.8", "lttng-tools-2.8", "lttng-ust-2.8", True), + ("lttng-ust-2.8", "lttng-tools-2.9", "lttng-ust-2.9", False), + ("lttng-ust-2.8", "lttng-tools-2.10", "lttng-ust-2.10", False), + ("lttng-ust-2.9", "lttng-tools-2.7", "lttng-ust-2.7", True), + ("lttng-ust-2.9", "lttng-tools-2.8", "lttng-ust-2.8", True), + ("lttng-ust-2.9", "lttng-tools-2.9", "lttng-ust-2.9", True), + ("lttng-ust-2.9", "lttng-tools-2.10", "lttng-ust-2.10", False), + ("lttng-ust-2.10", "lttng-tools-2.7", "lttng-ust-2.7", False), + ("lttng-ust-2.10", "lttng-tools-2.8", "lttng-ust-2.8", False), + ("lttng-ust-2.10", "lttng-tools-2.9", "lttng-ust-2.9", False), + ("lttng-ust-2.10", "lttng-tools-2.10", "lttng-ust-2.10", True), +] + +runtime_matrix_label = [] +if not project_settings.test_only: + runtime_matrix_label = test_matrix_label +else: + for tup in test_matrix_label: + ust_label, tools_label = tup[0], tup[1] + if (ust_label in project_settings.test_only or tools_label in + project_settings.test_only): + runtime_matrix_label.append(tup) + + +@pytest.mark.parametrize("ust_label,tools_label,base_tools_ust_dep,should_pass", runtime_matrix_label) +def test_soname_configure(tmpdir, ust_label, tools_label, base_tools_ust_dep, should_pass): + ust = ProjectFactory.get(ust_label, str(tmpdir.mkdir("lttng-ust"))) + tools = ProjectFactory.get(tools_label, str(tmpdir.mkdir("lttng-tools"))) + + ust.autobuild() + + tools.dependencies.append(ust) + # TODO: Propose fixes to upstream regarding the check + if not should_pass: + # Making sure we get a error here + pytest.xfail("passing configure but should fail See todo") + with pytest.raises(subprocess.CalledProcessError) as error: + tools.configure() + print(error) + else: + # An exception is thrown on errors + # TODO MAYBE: wrap around a try and perform error printing + save + # stdout stderr etc. Or move all this handling inside the function and + # reraise the error (bubble up) + tools.configure() + + +@pytest.mark.parametrize("ust_label,tools_label,base_tools_ust_dep,should_pass", runtime_matrix_label) +def test_soname_build(tmpdir, ust_label, tools_label, base_tools_ust_dep, should_pass): + ust = ProjectFactory.get(ust_label, str(tmpdir.mkdir("lttng-ust"))) + tools = ProjectFactory.get(tools_label, str(tmpdir.mkdir("lttng-tools"))) + ust_configure_mockup = ProjectFactory.get(ust_label, str(tmpdir.mkdir("lttng-ust-base"))) + + ust.autobuild() + ust_configure_mockup.autobuild() + + # Fool configure + tools.dependencies.append(ust_configure_mockup) + tools.configure() + + # Use ust under test + tools.special_env_variables["CPPFLAGS"] = ust.get_cppflags() + tools.special_env_variables["LDFLAGS"] = ust.get_ldflags() + tools.special_env_variables["LD_LIBRARY_PATH"] = ust.get_ld_library_path() + + if not should_pass: + # Making sure we get a error here + with pytest.raises(subprocess.CalledProcessError) as error: + tools.build() + print(error) + else: + # An exception is thrown on errors + tools.build()