def versioned_mender_image(request, prepared_test_build, latest_mender_image,
                           bitbake_variables, bitbake_image):
    """Gets the correct version of the artifact, whether it's the one we
    build by default, or one we have to produce ourselves.
    Returns a tuple of version and built image."""

    global LAST_BUILD_VERSION

    version = request.param

    if version == 1:
        pytest.fail()

    if (version >= 2 and not version_is_minimum(
            bitbake_variables, "mender-artifact", "2.0.0")) or (
                version >= 3 and not version_is_minimum(
                    bitbake_variables, "mender-artifact", "3.0.0")):
        pytest.skip("Requires version %d of mender-artifact format." % version)

    if version_is_minimum(bitbake_variables, "mender-artifact", "3.0.0"):
        default_version = 3
    elif version_is_minimum(bitbake_variables, "mender-artifact", "2.0.0"):
        default_version = 2
    else:
        default_version = 2

    if LAST_BUILD_VERSION != version:
        # Run a separate build for this artifact. This doesn't conflict with the
        # above version because the non-default version ends up in a different
        # directory.
        if version != default_version:
            build_image(
                prepared_test_build["build_dir"],
                prepared_test_build["bitbake_corebase"],
                bitbake_image,
                ['MENDER_ARTIFACT_EXTRA_ARGS = "-v %d"' % version],
            )
        else:
            build_image(
                prepared_test_build["build_dir"],
                prepared_test_build["bitbake_corebase"],
                bitbake_image,
            )

        LAST_BUILD_VERSION = version
    return (
        version,
        latest_build_artifact(prepared_test_build["build_dir"],
                              "core-image*.mender"),
    )
Exemple #2
0
    def test_multiple_device_types_compatible(self, prepared_test_build,
                                              bitbake_path, bitbake_variables,
                                              bitbake_image):
        """Tests that we can include multiple device_types in the artifact."""

        build_image(
            prepared_test_build["build_dir"],
            prepared_test_build["bitbake_corebase"],
            bitbake_image,
            ['MENDER_DEVICE_TYPES_COMPATIBLE = "machine1 machine2"'],
        )

        image = latest_build_artifact(prepared_test_build["build_dir"],
                                      "core-image*.mender")

        output = run_verbose("mender-artifact read %s" % image, capture=True)
        assert b"Compatible devices: '[machine1 machine2]'" in output

        output = subprocess.check_output(
            "tar xOf %s header.tar.gz | tar xOz header-info" % image,
            shell=True).decode()
        data = json.loads(output)
        if version_is_minimum(bitbake_variables, "mender-artifact", "3.0.0"):
            assert data["artifact_depends"]["device_type"] == [
                "machine1", "machine2"
            ]
        else:
            assert data["device_types_compatible"] == ["machine1", "machine2"]
Exemple #3
0
def min_mender_version(request, bitbake_variables):
    version_mark = request.node.get_closest_marker("min_mender_version")
    if version_mark is None:
        pytest.fail((
            '%s must be marked with @pytest.mark.min_mender_version("<VERSION>") to '
            + "indicate lowest Mender version for which the test will work.") %
                    str(request.node))

    test_version = version_mark.args[0]
    if not version_is_minimum(bitbake_variables, "mender-client",
                              test_version):
        pytest.skip("Test requires Mender client %s or newer" % test_version)
Exemple #4
0
 def get_file_flag(bitbake_variables):
     if version_is_minimum(bitbake_variables, "mender-artifact", "3.0.0"):
         return "-f"
     else:
         return "-u"