Beispiel #1
0
    def test_defconfig_set_metadata_wrong(self):
        build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                         "branch", "build_environment")

        self.assertRaises(TypeError, setattr, build_doc, "metadata", ())
        self.assertRaises(TypeError, setattr, build_doc, "metadata", [])
        self.assertRaises(TypeError, setattr, build_doc, "metadata", "")
Beispiel #2
0
    def test_defconfig_set_build_platform_wrong(self):
        build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                         "branch", "build_environment")

        self.assertRaises(TypeError, setattr, build_doc, "build_platform", ())
        self.assertRaises(TypeError, setattr, build_doc, "build_platform", {})
        self.assertRaises(TypeError, setattr, build_doc, "build_platform", "")
    def test_import_single_build(self, mock_dir, mock_find, mock_tr, mock_up,
                                 mock_save, mock_db):
        mock_db = self.db
        mock_dir.return_value = True

        job_doc = {
            "job": "ajob",
            "kernel": "kernel",
            "_id": "job_id",
            "git_branch": "branch"
        }
        build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                         "branch")
        build_doc.git_branch = "branch"

        mock_tr.return_value = build_doc
        mock_find.return_value = job_doc
        mock_up.return_value = 201
        mock_save.return_value = (201, "build_id")

        json_obj = {
            "job": "ajob",
            "kernel": "akernel",
            "defconfig": "defconfig",
            "git_branch": "branch",
            "arch": "arch"
        }
        build_id, job_id, errors = utils.build.import_single_build(
            json_obj, {})

        self.assertDictEqual({}, errors)
        self.assertIsNotNone(build_id)
        self.assertIsNotNone(job_id)
        self.assertEqual("build_id", build_id)
        self.assertEqual("job_id", job_id)
Beispiel #4
0
    def test_parse_build_log_no_file(self):
        build_dir = None
        errors = {}
        try:
            build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                             "branch")
            build_dir = tempfile.mkdtemp()
            log_file = os.path.join(build_dir, utils.BUILD_LOG_FILE)

            status, e_l, w_l, m_l = lparser._parse_log(build_doc, log_file,
                                                       build_dir, errors)

            self.assertEqual(500, status)

            self.assertIsInstance(errors, types.DictionaryType)
            self.assertIsInstance(e_l, types.ListType)
            self.assertIsInstance(w_l, types.ListType)
            self.assertIsInstance(m_l, types.ListType)

            self.assertDictEqual({}, errors)
            self.assertEqual(0, len(e_l))
            self.assertEqual(0, len(w_l))
            self.assertEqual(0, len(m_l))
        finally:
            shutil.rmtree(build_dir, ignore_errors=True)
Beispiel #5
0
    def test_parse_build_log(self):
        build_dir = None
        errors = {}

        try:
            build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                             "branch")
            build_dir = tempfile.mkdtemp()
            log_file = os.path.join(os.path.abspath(os.path.dirname(__file__)),
                                    "assets", "build_log_0.log")

            status, e_l, w_l, m_l = lparser._parse_log(build_doc, log_file,
                                                       build_dir, errors)

            self.assertEqual(200, status)

            self.assertIsInstance(errors, types.DictionaryType)
            self.assertIsInstance(e_l, types.ListType)
            self.assertIsInstance(w_l, types.ListType)
            self.assertIsInstance(m_l, types.ListType)

            self.assertEqual(0, len(errors.keys()))
            self.assertEqual(22, len(e_l))
            self.assertEqual(2, len(w_l))
            self.assertEqual(0, len(m_l))
        finally:
            shutil.rmtree(build_dir, ignore_errors=True)
Beispiel #6
0
    def test_deconfig_set_status_wrong_and_right(self):
        build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                         "branch", "build_environment")

        self.assertRaises(ValueError, setattr, build_doc, "status", "foo")
        self.assertRaises(ValueError, setattr, build_doc, "status", [])
        self.assertRaises(ValueError, setattr, build_doc, "status", {})
        self.assertRaises(ValueError, setattr, build_doc, "status", ())

        build_doc.status = "FAIL"
        self.assertEqual(build_doc.status, "FAIL")
        build_doc.status = "PASS"
        self.assertEqual(build_doc.status, "PASS")
        build_doc.status = "UNKNOWN"
        self.assertEqual(build_doc.status, "UNKNOWN")
        build_doc.status = "BUILD"
        self.assertEqual(build_doc.status, "BUILD")
    def test_update_job_doc(self):
        job_doc = mjob.JobDocument("job", "kernel", "branch")
        build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                         "branch")
        build_doc.git_branch = "branch"
        build_doc.git_commit = "1234567890"
        build_doc.git_describe = "kernel.version"
        build_doc.git_url = "git://url.git"

        utils.build._update_job_doc(job_doc, "job_id", "PASS", build_doc,
                                    self.db)

        self.assertIsInstance(job_doc, mjob.JobDocument)
        self.assertIsNotNone(job_doc.id)
        self.assertIsNotNone(job_doc.git_branch)
        self.assertIsNotNone(job_doc.git_commit)
        self.assertIsNotNone(job_doc.git_describe)
        self.assertIsNotNone(job_doc.git_url)
        self.assertEqual("job_id", job_doc.id)
        self.assertEqual("1234567890", job_doc.git_commit)
        self.assertEqual("kernel.version", job_doc.git_describe)
        self.assertEqual("git://url.git", job_doc.git_url)
Beispiel #8
0
def parse_build_data(build_data, job, kernel, build_dir):
    """Parse the json build data and craete the corresponding document.

    :param build_data: The json build data.
    :type build_data: dictionary
    :param job: The name of the job.
    :type job: string
    :param kernel: The name of the kernel.
    :type kernel: string
    :param errors: The errors data structure.
    :type errors: dictionary
    :param build_dir: Full path to the build directory.
    :type build_dir: string
    :return A 2-tuple: (BuildDocument, a "artifact type": "artifact name"
    dictionary)
    """
    if not isinstance(build_data, types.DictionaryType):
        raise BuildError(500, "JSON data is not a dictionary")

    try:
        defconfig = build_data[models.DEFCONFIG_KEY]
        d_job = build_data.get(models.JOB_KEY, job)
        d_kernel = build_data.get(models.KERNEL_KEY, kernel)
        d_branch = build_data[models.GIT_BRANCH_KEY]
        d_build_environment = build_data[models.BUILD_ENVIRONMENT_KEY]
        defconfig_full = build_data.get(models.DEFCONFIG_FULL_KEY)
        kconfig_fragments = build_data.get(models.KCONFIG_FRAGMENTS_KEY)

        defconfig_full = utils.get_defconfig_full(build_dir, defconfig,
                                                  defconfig_full,
                                                  kconfig_fragments)

        build_doc = mbuild.BuildDocument(d_job,
                                         d_kernel,
                                         defconfig,
                                         d_branch,
                                         d_build_environment,
                                         defconfig_full=defconfig_full)

        build_doc.arch = build_data.get(models.ARCHITECTURE_KEY, None)
        build_doc.build_log = build_data.get(models.BUILD_LOG_KEY, None)
        build_doc.build_platform = build_data.get(models.BUILD_PLATFORM_KEY,
                                                  [])
        build_doc.build_time = build_data.get(models.BUILD_TIME_KEY, 0)
        build_doc.build_type = build_data.get(models.BUILD_TYPE_KEY,
                                              models.KERNEL_BUILD_TYPE)
        build_doc.dtb_dir = build_data.get(models.DTB_DIR_KEY, None)
        build_doc.errors = build_data.get(models.BUILD_ERRORS_KEY, 0)
        build_doc.file_server_resource = build_data.get(
            models.FILE_SERVER_RESOURCE_KEY, None)
        build_doc.file_server_url = build_data.get(models.FILE_SERVER_URL_KEY,
                                                   None)
        build_doc.git_commit = build_data.get(models.GIT_COMMIT_KEY, None)
        build_doc.git_describe = build_data.get(models.GIT_DESCRIBE_KEY, None)
        build_doc.git_url = build_data.get(models.GIT_URL_KEY, None)
        build_doc.kconfig_fragments = kconfig_fragments
        build_doc.kernel_config = build_data.get(models.KERNEL_CONFIG_KEY,
                                                 None)
        build_doc.kernel_image = build_data.get(models.KERNEL_IMAGE_KEY, None)
        build_doc.modules = build_data.get(models.MODULES_KEY, None)
        build_doc.modules_dir = build_data.get(models.MODULES_DIR_KEY, None)
        build_doc.status = build_data.get(models.STATUS_KEY,
                                          models.UNKNOWN_STATUS)
        build_doc.system_map = build_data.get(models.SYSTEM_MAP_KEY, None)
        build_doc.text_offset = build_data.get(models.TEXT_OFFSET_KEY, None)
        build_doc.version = build_data.get(models.VERSION_KEY, "1.1")
        build_doc.warnings = build_data.get(models.BUILD_WARNINGS_KEY, 0)
        build_doc.kernel_image_size = build_data.get(
            models.KERNEL_IMAGE_SIZE_KEY, None)
        build_doc.modules_size = build_data.get(models.MODULES_SIZE_KEY, None)
        build_doc.cross_compile = build_data.get(models.CROSS_COMPILE_KEY,
                                                 None)

        # ELF file data.
        build_doc.vmlinux_bss_size = build_data.get(
            models.VMLINUX_BSS_SIZE_KEY, None)
        build_doc.vmlinux_data_size = build_data.get(
            models.VMLINUX_DATA_SIZE_KEY, None)
        build_doc.vmlinux_file_size = build_data.get(
            models.VMLINUX_FILE_SIZE_KEY, None)
        build_doc.vmlinux_text_size = build_data.get(
            models.VMLINUX_TEXT_SIZE_KEY, None)

        build_doc.git_describe_v = build_data.get(models.GIT_DESCRIBE_V_KEY,
                                                  None)
        build_doc.kernel_version = _extract_kernel_version(
            build_doc.git_describe_v, build_doc.git_describe)

        build_doc.compiler = build_data.get(models.COMPILER_KEY)
        build_doc.compiler_version = build_data.get(
            models.COMPILER_VERSION_KEY)
        build_doc.compiler_version_full = build_data.get(
            models.COMPILER_VERSION_FULL_KEY)
        # ToDo: deprecate in the API and only keep compiler_version_full
        build_doc.compiler_version_ext = build_doc.compiler_version_full

        artifacts = {
            models.BUILD_LOG_SIZE_KEY: build_doc.build_log,
            models.KERNEL_CONFIG_SIZE_KEY: build_doc.kernel_config,
            models.KERNEL_IMAGE_SIZE_KEY: build_doc.kernel_image,
            models.MODULES_SIZE_KEY: build_doc.modules,
            models.SYSTEM_MAP_SIZE_KEY: build_doc.system_map,
        }
    except KeyError, ex:
        msg = "Missing mandatory key '%s' in build data (job: %s, kernel: %s)"
        raise BuildError(500, msg % (ex.args[0], job, kernel), from_exc=ex)
Beispiel #9
0
    def test_build_document_to_dict(self):
        build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                         "branch", "build_environment")

        build_doc.id = "build_id"
        build_doc.job_id = "job_id"
        build_doc.created_on = "now"
        build_doc.metadata = {}
        build_doc.status = "FAIL"
        build_doc.dirname = "defconfig"
        build_doc.boot_resul_description = []
        build_doc.errors = 1
        build_doc.warnings = 1
        build_doc.build_time = 1
        build_doc.arch = "foo"
        build_doc.git_url = "git_url"
        build_doc.git_commit = "git_commit"
        build_doc.git_describe = "git_describe"
        build_doc.git_describe_v = "git_describe_v"
        build_doc.version = "1.0"
        build_doc.modules = "modules-file"
        build_doc.dtb_dir = "dtb-dir"
        build_doc.dtb_dir_data = ["a-file"]
        build_doc.kernel_config = "kernel-config"
        build_doc.system_map = "system-map"
        build_doc.text_offset = "offset"
        build_doc.kernel_image = "kernel-image"
        build_doc.modules_dir = "modules-dir"
        build_doc.build_log = "build.log"
        build_doc.kconfig_fragments = "config-frag"
        build_doc.file_server_resource = "file-resource"
        build_doc.file_server_url = "server-url"
        build_doc.build_type = "foo"
        build_doc.defconfig_full = "defconfig_full"
        build_doc.kernel_image_size = 1024
        build_doc.modules_size = 1024
        build_doc.kernel_config_size = 1024
        build_doc.system_map_size = 1024
        build_doc.build_log_size = 1024
        build_doc.kernel_version = "kernel_version"
        build_doc.compiler = "gcc"
        build_doc.compiler_version = "4.7.8"
        build_doc.compiler_version_ext = "gcc 4.7.8"
        build_doc.compiler_version_full = "gcc 4.7.8 full"
        build_doc.cross_compile = "arm"
        build_doc.vmlinux_file_size = 1024
        build_doc.vmlinux_text_size = 1024
        build_doc.vmlinux_bss_size = 1024
        build_doc.vmlinux_data_size = 1024

        expected = {
            "_id": "build_id",
            "job": "job",
            "kernel": "kernel",
            "defconfig": "defconfig",
            "job_id": "job_id",
            "created_on": "now",
            "metadata": {},
            "status": "FAIL",
            "defconfig": "defconfig",
            "errors": 1,
            "warnings": 1,
            "build_time": 1,
            "arch": "foo",
            "dirname": "defconfig",
            "git_url": "git_url",
            "git_describe": "git_describe",
            "git_branch": "branch",
            "git_commit": "git_commit",
            "build_platform": [],
            "version": "1.0",
            "dtb_dir": "dtb-dir",
            "dtb_dir_data": ["a-file"],
            "kernel_config": "kernel-config",
            "kernel_image": "kernel-image",
            "system_map": "system-map",
            "text_offset": "offset",
            "modules": "modules-file",
            "modules_dir": "modules-dir",
            "build_log": "build.log",
            "kconfig_fragments": "config-frag",
            "defconfig_full": "defconfig_full",
            "file_server_resource": "file-resource",
            "file_server_url": "server-url",
            "build_type": "foo",
            "kernel_image_size": 1024,
            "modules_size": 1024,
            "kernel_config_size": 1024,
            "system_map_size": 1024,
            "build_log_size": 1024,
            "kernel_version": "kernel_version",
            "git_describe_v": "git_describe_v",
            "compiler": "gcc",
            "compiler_version": "4.7.8",
            "compiler_version_full": "gcc 4.7.8 full",
            "cross_compile": "arm",
            "compiler_version_ext": "gcc 4.7.8",
            "vmlinux_file_size": 1024,
            "vmlinux_text_size": 1024,
            "vmlinux_bss_size": 1024,
            "vmlinux_data_size": 1024,
            "build_environment": "build_environment"
        }

        self.assertDictEqual(expected, build_doc.to_dict())
Beispiel #10
0
 def test_build_document_collection(self):
     build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                      "branch", "build_environment")
     self.assertEqual(build_doc.collection, "build")
Beispiel #11
0
 def test_build_document_valid_instance(self):
     build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                      "branch", "build_environment")
     self.assertIsInstance(build_doc, modb.BaseDocument)
     self.assertIsInstance(build_doc, mbuild.BuildDocument)
Beispiel #12
0
    def test_defconfig_set_build_platform(self):
        build_doc = mbuild.BuildDocument("job", "kernel", "defconfig",
                                         "branch", "build_environment")
        build_doc.build_platform = ["a", "b"]

        self.assertListEqual(build_doc.build_platform, ["a", "b"])