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"), )
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"]
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)
def get_file_flag(bitbake_variables): if version_is_minimum(bitbake_variables, "mender-artifact", "3.0.0"): return "-f" else: return "-u"