コード例 #1
0
ファイル: __init__.py プロジェクト: Linaro/lava-server
def testjob(request, job):
    job = get_restricted_job(request.user, pk=job, request=request)
    data = ResultsView(request, model=TestSuite,
                       table_class=TestJobResultsTable)
    suite_table = TestJobResultsTable(
        data.get_table_data().filter(job=job)
    )
    failed_definitions = []
    yaml_dict = OrderedDict()
    if TestData.objects.filter(testjob=job).exists():
        # some duplicates can exist, so get would fail here and [0] is quicker than try except.
        testdata = TestData.objects.filter(
            testjob=job).prefetch_related('actionlevels__testcase', 'actionlevels__testcase__suite')[0]
        if job.state == TestJob.STATE_FINISHED:
            # returns something like ['singlenode-advanced', 'smoke-tests-basic', 'smoke-tests-basic']
            executed = [
                {
                    case.action_metadata['test_definition_start']:
                        case.action_metadata.get('success', '')}
                for case in TestCase.objects.filter(
                    suite__in=TestSuite.objects.filter(job=job))
                if case.action_metadata and 'test_definition_start' in
                case.action_metadata and case.suite.name == 'lava']

            submitted = [
                actiondata.testcase.action_metadata for actiondata in
                testdata.actionlevels.all() if actiondata.testcase and
                'test-runscript-overlay' in actiondata.action_name]
            # compare with a dict similar to created in executed
            for item in submitted:
                if executed and {item['name']: item['success']} not in executed:
                    comparison = {}
                    if item['from'] != 'inline':
                        comparison['repository'] = item['repository']
                    comparison['path'] = item['path']
                    comparison['name'] = item['name']
                    comparison['uuid'] = item['success']
                    failed_definitions.append(comparison)

        # hide internal python objects, like OrderedDict
        for data in testdata.attributes.all().order_by('name'):
            yaml_dict[str(data.name)] = str(data.value)

    RequestConfig(request, paginate={"per_page": suite_table.length}).configure(suite_table)
    template = loader.get_template("lava_results_app/job.html")
    return HttpResponse(template.render(
        {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(testjob, job=job.id),
            'job': job,
            'job_link': pklink(job),
            'suite_table': suite_table,
            'metadata': yaml_dict,
            'failed_definitions': failed_definitions,
            'condition_choices': simplejson.dumps(
                QueryCondition.get_condition_choices(job)
            ),
            'available_content_types': simplejson.dumps(
                QueryCondition.get_similar_job_content_types()
            ),
        }, request=request))
コード例 #2
0
def testcase(request, job, pk, case):
    """
    Each testcase can appear multiple times in the same testsuite and testjob,
    the action_data.action_level distinguishes each testcase.
    :param request: http request object
    :param job: ID of the TestJob
    :param pk: the name of the TestSuite
    :param case: the name of one or more TestCase objects in the TestSuite
    """
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    job = get_object_or_404(TestJob, pk=job)
    test_cases = TestCase.objects.filter(name=case, suite=test_suite)
    return render_to_response(
        "lava_results_app/case.html", {
            'bread_crumb_trail':
            BreadCrumbTrail.leading_to(testcase, pk=pk, job=job.id, case=case),
            'job':
            job,
            'suite':
            test_suite,
            'job_link':
            pklink(job),
            'test_cases':
            test_cases,
        }, RequestContext(request))
コード例 #3
0
def suite(request, job, pk):
    job = get_object_or_404(TestJob, pk=job)
    check_request_auth(request, job)
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    data = SuiteView(request, model=TestCase, table_class=SuiteTable)
    suite_table = SuiteTable(data.get_table_data().filter(suite=test_suite))
    RequestConfig(request, paginate={
        "per_page": suite_table.length
    }).configure(suite_table)
    template = loader.get_template("lava_results_app/suite.html")
    return HttpResponse(
        template.render(
            {
                'bread_crumb_trail':
                BreadCrumbTrail.leading_to(suite, pk=pk, job=job.id),
                'job':
                job,
                'job_link':
                pklink(job),
                'content_type_id':
                ContentType.objects.get_for_model(TestCase).id,
                'suite_name':
                pk,
                'suite_table':
                suite_table,
                'bug_links':
                BugLink.objects.filter(
                    object_id=test_suite.id,
                    content_type_id=ContentType.objects.get_for_model(
                        TestSuite).id,
                )
            },
            request=request))
コード例 #4
0
ファイル: __init__.py プロジェクト: mytxyang/lava
def testjob(request, job):
    job = get_restricted_job(request.user, pk=job, request=request)
    data = ResultsView(request, model=TestSuite, table_class=TestJobResultsTable)
    suite_table = TestJobResultsTable(
        data.get_table_data().filter(job=job), request=request
    )
    failed_definitions = []
    yaml_dict = OrderedDict()

    if hasattr(job, "testdata"):
        for data in job.testdata.attributes.all().order_by("name"):
            yaml_dict[str(data.name)] = str(data.value)

    RequestConfig(request, paginate={"per_page": suite_table.length}).configure(
        suite_table
    )
    template = loader.get_template("lava_results_app/job.html")
    return HttpResponse(
        template.render(
            {
                "bread_crumb_trail": BreadCrumbTrail.leading_to(testjob, job=job.id),
                "job": job,
                "job_link": pklink(job),
                "suite_table": suite_table,
                "metadata": yaml_dict,
                "condition_choices": simplejson.dumps(
                    QueryCondition.get_condition_choices(job)
                ),
                "available_content_types": simplejson.dumps(
                    QueryCondition.get_similar_job_content_types()
                ),
            },
            request=request,
        )
    )
コード例 #5
0
def testcase(request, job, pk, case):
    """
    Each testcase can appear multiple times in the same testsuite and testjob,
    the action_data.action_level distinguishes each testcase.
    :param request: http request object
    :param job: ID of the TestJob
    :param pk: the name of the TestSuite
    :param case: the name of one or more TestCase objects in the TestSuite
    """
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    job = get_restricted_job(request.user, pk=job, request=request)
    test_cases = TestCase.objects.filter(name=case, suite=test_suite)
    template = loader.get_template("lava_results_app/case.html")
    return HttpResponse(
        template.render(
            {
                'bread_crumb_trail':
                BreadCrumbTrail.leading_to(
                    testcase, pk=pk, job=job.id, case=case),
                'job':
                job,
                'suite':
                test_suite,
                'job_link':
                pklink(job),
                'test_cases':
                test_cases,
                'bug_links':
                BugLink.objects.filter(
                    object_id__in=test_cases.values_list('id', flat=True),
                    content_type_id=ContentType.objects.get_for_model(
                        TestCase).id,
                )
            },
            request=request))
コード例 #6
0
def suite(request, job, pk):
    job = get_restricted_job(request.user, pk=job, request=request)
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    data = SuiteView(request, model=TestCase, table_class=SuiteTable)
    suite_table = SuiteTable(data.get_table_data().filter(suite=test_suite))
    RequestConfig(request, paginate={"per_page": suite_table.length}).configure(
        suite_table
    )
    template = loader.get_template("lava_results_app/suite.html")
    return HttpResponse(
        template.render(
            {
                "bread_crumb_trail": BreadCrumbTrail.leading_to(
                    suite, pk=pk, job=job.id
                ),
                "job": job,
                "job_link": pklink(job),
                "testsuite_content_type_id": ContentType.objects.get_for_model(
                    TestSuite
                ).id,
                "suite_name": pk,
                "suite_id": test_suite.id,
                "suite_table": suite_table,
                "bug_links": BugLink.objects.filter(
                    object_id=test_suite.id,
                    content_type_id=ContentType.objects.get_for_model(TestSuite).id,
                ),
            },
            request=request,
        )
    )
コード例 #7
0
ファイル: __init__.py プロジェクト: Linaro/lava-server
def suite(request, job, pk):
    job = get_restricted_job(request.user, pk=job, request=request)
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    data = SuiteView(request, model=TestCase, table_class=SuiteTable)
    suite_table = SuiteTable(
        data.get_table_data().filter(suite=test_suite)
    )
    RequestConfig(request, paginate={"per_page": suite_table.length}).configure(suite_table)
    template = loader.get_template("lava_results_app/suite.html")
    return HttpResponse(template.render(
        {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(suite, pk=pk, job=job.id),
            'job': job,
            'job_link': pklink(job),
            'testsuite_content_type_id': ContentType.objects.get_for_model(
                TestSuite).id,
            'suite_name': pk,
            'suite_id': test_suite.id,
            'suite_table': suite_table,
            'bug_links': BugLink.objects.filter(
                object_id=test_suite.id,
                content_type_id=ContentType.objects.get_for_model(
                    TestSuite).id,
            )
        }, request=request))
コード例 #8
0
def testcase(request, job, pk, case):
    """
    Each testcase can appear multiple times in the same testsuite and testjob,
    the action_data.action_level distinguishes each testcase.
    :param request: http request object
    :param job: ID of the TestJob
    :param pk: the name of the TestSuite
    :param case: the name of one or more TestCase objects in the TestSuite
    """
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    job = get_restricted_job(request.user, pk=job, request=request)
    test_cases = TestCase.objects.filter(name=case, suite=test_suite)
    test_sets = TestSet.objects.filter(name=case, suite=test_suite)
    extra_source = {}
    logger = logging.getLogger('dispatcher-master')
    for extra_case in test_cases:
        try:
            f_metadata = yaml.load(extra_case.metadata, Loader=yaml.CLoader)
        except TypeError:
            logger.info("Unable to load extra case metadata for %s",
                        extra_case)
            f_metadata = {}
        extra_data = f_metadata.get('extra', None)
        if extra_data and isinstance(extra_data,
                                     unicode) and os.path.exists(extra_data):
            with open(f_metadata['extra'], 'r') as extra_file:
                items = yaml.load(extra_file, Loader=yaml.CLoader)
            # hide the !!python OrderedDict prefix from the output.
            for key, value in items.items():
                extra_source.setdefault(extra_case.id, '')
                extra_source[extra_case.id] += "%s: %s\n" % (key, value)
    template = loader.get_template("lava_results_app/case.html")
    return HttpResponse(
        template.render(
            {
                'bread_crumb_trail':
                BreadCrumbTrail.leading_to(
                    testcase, pk=pk, job=job.id, case=case),
                'job':
                job,
                'sets':
                test_sets,
                'suite':
                test_suite,
                'job_link':
                pklink(job),
                'extra_source':
                extra_source,
                'test_cases':
                test_cases,
                'bug_links':
                BugLink.objects.filter(
                    object_id__in=test_cases.values_list('id', flat=True),
                    content_type_id=ContentType.objects.get_for_model(
                        TestCase).id,
                )
            },
            request=request))
コード例 #9
0
def testjob(request, job):
    job = get_object_or_404(TestJob, pk=job)
    data = ResultsView(request, model=TestSuite, table_class=ResultsTable)
    suite_table = ResultsTable(
        data.get_table_data().filter(job=job)
    )
    RequestConfig(request, paginate={"per_page": suite_table.length}).configure(suite_table)
    return render_to_response(
        "lava_results_app/job.html", {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(testjob, job=job.id),
            'job': job,
            'job_link': pklink(job),
            'suite_table': suite_table,
        }, RequestContext(request))
コード例 #10
0
ファイル: __init__.py プロジェクト: pevik/lava-server
def testjob(request, job):
    job = get_object_or_404(TestJob, pk=job)
    data = ResultsView(request, model=TestSuite, table_class=ResultsTable)
    suite_table = ResultsTable(
        data.get_table_data().filter(job=job)
    )
    RequestConfig(request, paginate={"per_page": suite_table.length}).configure(suite_table)
    return render_to_response(
        "lava_results_app/job.html", {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(testjob, job=job.id),
            'job': job,
            'job_link': pklink(job),
            'suite_table': suite_table,
        }, RequestContext(request))
コード例 #11
0
ファイル: __init__.py プロジェクト: pevik/lava-server
def testset(request, job, ts, pk, case):
    job = get_object_or_404(TestJob, pk=job)
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    test_set = get_object_or_404(TestSet, name=ts, suite=test_suite)
    test_cases = TestCase.objects.filter(name=case, test_set=test_set)
    return render_to_response(
        "lava_results_app/case.html", {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(
                testset, pk=pk, job=job.id, ts=ts, case=case),
            'job': job,
            'suite': test_suite,
            'job_link': pklink(job),
            'test_cases': test_cases,
        }, RequestContext(request))
コード例 #12
0
ファイル: __init__.py プロジェクト: margam2410/lava-server
def testset(request, job, ts, pk, case):
    job = get_restricted_job(request.user, pk=job, request=request)
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    test_set = get_object_or_404(TestSet, name=ts, suite=test_suite)
    test_cases = TestCase.objects.filter(name=case, test_set=test_set)
    template = loader.get_template("lava_results_app/case.html")
    return HttpResponse(template.render(
        {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(
                testset, pk=pk, job=job.id, ts=ts, case=case),
            'job': job,
            'suite': test_suite,
            'job_link': pklink(job),
            'test_cases': test_cases,
        }, request=request))
コード例 #13
0
def suite(request, job, pk):
    job = get_object_or_404(TestJob, pk=job)
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    data = SuiteView(request, model=TestCase, table_class=SuiteTable)
    suite_table = SuiteTable(
        data.get_table_data().filter(suite=test_suite)
    )
    RequestConfig(request, paginate={"per_page": suite_table.length}).configure(suite_table)
    return render_to_response(
        "lava_results_app/suite.html", {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(suite, pk=pk, job=job.id),
            'job': job,
            'job_link': pklink(job),
            'suite_name': pk,
            'suite_table': suite_table,
        }, RequestContext(request))
コード例 #14
0
ファイル: __init__.py プロジェクト: pevik/lava-server
def suite(request, job, pk):
    job = get_object_or_404(TestJob, pk=job)
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    data = SuiteView(request, model=TestCase, table_class=SuiteTable)
    suite_table = SuiteTable(
        data.get_table_data().filter(suite=test_suite)
    )
    RequestConfig(request, paginate={"per_page": suite_table.length}).configure(suite_table)
    return render_to_response(
        "lava_results_app/suite.html", {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(suite, pk=pk, job=job.id),
            'job': job,
            'job_link': pklink(job),
            'suite_name': pk,
            'suite_table': suite_table,
        }, RequestContext(request))
コード例 #15
0
ファイル: __init__.py プロジェクト: dl9pf/lava-server
def testcase(request, job, pk, case):
    """
    Each testcase can appear multiple times in the same testsuite and testjob,
    the action_data.action_level distinguishes each testcase.
    :param request: http request object
    :param job: ID of the TestJob
    :param pk: the name of the TestSuite
    :param case: the name of one or more TestCase objects in the TestSuite
    """
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    job = get_restricted_job(request.user, pk=job, request=request)
    test_cases = TestCase.objects.filter(name=case, suite=test_suite)
    test_sets = TestSet.objects.filter(name=case, suite=test_suite)
    extra_source = ''
    logger = logging.getLogger('dispatcher-master')
    for extra_case in test_cases:
        try:
            f_metadata = yaml.load(extra_case.metadata, Loader=yaml.CLoader)
        except TypeError:
            logger.info("Unable to load extra case metadata for %s", extra_case)
            f_metadata = {}
        extra_data = f_metadata.get('extra', None)
        if extra_data and isinstance(extra_data, unicode) and os.path.exists(extra_data):
            with open(f_metadata['extra'], 'r') as extra_file:
                items = yaml.load(extra_file, Loader=yaml.CLoader)
            # hide the !!python OrderedDict prefix from the output.
            for key, value in items.items():
                extra_source += "%s: %s\n" % (key, value)
    template = loader.get_template("lava_results_app/case.html")
    return HttpResponse(template.render(
        {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(testcase, pk=pk, job=job.id, case=case),
            'job': job,
            'sets': test_sets,
            'suite': test_suite,
            'job_link': pklink(job),
            'extra_source': extra_source,
            'test_cases': test_cases,
            'bug_links': BugLink.objects.filter(
                object_id__in=test_cases.values_list('id', flat=True),
                content_type_id=ContentType.objects.get_for_model(
                    TestCase).id,
            )
        }, request=request))
コード例 #16
0
def testjob(request, job):
    job = get_restricted_job(request.user, pk=job, request=request)
    data = ResultsView(request,
                       model=TestSuite,
                       table_class=TestJobResultsTable)
    suite_table = TestJobResultsTable(data.get_table_data().filter(job=job),
                                      request=request)
    failed_definitions = []
    yaml_dict = OrderedDict()
    with contextlib.suppress(TestData.DoesNotExist):
        # some duplicates can exist, so get would fail here and [0] is quicker than try except.
        testdata = TestData.objects.filter(testjob=job)[0]

        # hide internal python objects, like OrderedDict
        for data in testdata.attributes.all().order_by("name"):
            yaml_dict[str(data.name)] = str(data.value)

    RequestConfig(request, paginate={
        "per_page": suite_table.length
    }).configure(suite_table)
    template = loader.get_template("lava_results_app/job.html")
    return HttpResponse(
        template.render(
            {
                "bread_crumb_trail":
                BreadCrumbTrail.leading_to(testjob, job=job.id),
                "job":
                job,
                "job_link":
                pklink(job),
                "suite_table":
                suite_table,
                "metadata":
                yaml_dict,
                "condition_choices":
                simplejson.dumps(QueryCondition.get_condition_choices(job)),
                "available_content_types":
                simplejson.dumps(
                    QueryCondition.get_similar_job_content_types()),
            },
            request=request,
        ))
コード例 #17
0
def testset(request, job, ts, pk, case):
    job = get_restricted_job(request.user, pk=job, request=request)
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    test_set = get_object_or_404(TestSet, name=ts, suite=test_suite)
    test_cases = TestCase.objects.filter(name=case, test_set=test_set)
    template = loader.get_template("lava_results_app/case.html")
    return HttpResponse(
        template.render(
            {
                "bread_crumb_trail": BreadCrumbTrail.leading_to(
                    testset, pk=pk, job=job.id, ts=ts, case=case
                ),
                "job": job,
                "suite": test_suite,
                "job_link": pklink(job),
                "test_cases": test_cases,
            },
            request=request,
        )
    )
コード例 #18
0
ファイル: __init__.py プロジェクト: pevik/lava-server
def testcase(request, job, pk, case):
    """
    Each testcase can appear multiple times in the same testsuite and testjob,
    the action_data.action_level distinguishes each testcase.
    :param request: http request object
    :param job: ID of the TestJob
    :param pk: the name of the TestSuite
    :param case: the name of one or more TestCase objects in the TestSuite
    """
    test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    job = get_object_or_404(TestJob, pk=job)
    test_cases = TestCase.objects.filter(name=case, suite=test_suite)
    return render_to_response(
        "lava_results_app/case.html", {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(testcase, pk=pk, job=job.id, case=case),
            'job': job,
            'suite': test_suite,
            'job_link': pklink(job),
            'test_cases': test_cases,
        }, RequestContext(request))
コード例 #19
0
def testjob(request, job):
    job = get_restricted_job(request.user, pk=job, request=request)
    data = ResultsView(request, model=TestSuite, table_class=TestJobResultsTable)
    suite_table = TestJobResultsTable(data.get_table_data().filter(job=job))
    failed_definitions = []
    yaml_dict = OrderedDict()
    if TestData.objects.filter(testjob=job).exists():
        # some duplicates can exist, so get would fail here and [0] is quicker than try except.
        testdata = TestData.objects.filter(testjob=job).prefetch_related(
            "actionlevels__testcase", "actionlevels__testcase__suite"
        )[0]
        if job.state == TestJob.STATE_FINISHED:
            # returns something like ['singlenode-advanced', 'smoke-tests-basic', 'smoke-tests-basic']
            executed = [
                {
                    case.action_metadata[
                        "test_definition_start"
                    ]: case.action_metadata.get("success", "")
                }
                for case in TestCase.objects.filter(
                    suite__in=TestSuite.objects.filter(job=job)
                )
                if case.action_metadata
                and "test_definition_start" in case.action_metadata
                and case.suite.name == "lava"
            ]

            submitted = [
                actiondata.testcase.action_metadata
                for actiondata in testdata.actionlevels.all()
                if actiondata.testcase
                and "test-runscript-overlay" in actiondata.action_name
            ]
            # compare with a dict similar to created in executed
            for item in submitted:
                if executed and {item["name"]: item["success"]} not in executed:
                    comparison = {}
                    if item["from"] != "inline":
                        comparison["repository"] = item["repository"]
                    comparison["path"] = item["path"]
                    comparison["name"] = item["name"]
                    comparison["uuid"] = item["success"]
                    failed_definitions.append(comparison)

        # hide internal python objects, like OrderedDict
        for data in testdata.attributes.all().order_by("name"):
            yaml_dict[str(data.name)] = str(data.value)

    RequestConfig(request, paginate={"per_page": suite_table.length}).configure(
        suite_table
    )
    template = loader.get_template("lava_results_app/job.html")
    return HttpResponse(
        template.render(
            {
                "bread_crumb_trail": BreadCrumbTrail.leading_to(testjob, job=job.id),
                "job": job,
                "job_link": pklink(job),
                "suite_table": suite_table,
                "metadata": yaml_dict,
                "failed_definitions": failed_definitions,
                "condition_choices": simplejson.dumps(
                    QueryCondition.get_condition_choices(job)
                ),
                "available_content_types": simplejson.dumps(
                    QueryCondition.get_similar_job_content_types()
                ),
            },
            request=request,
        )
    )
コード例 #20
0
        except TypeError:
            # In some old version of LAVA, extra_data is not a string but an OrderedDict
            # In this case, just skip it.
            pass
    template = loader.get_template("lava_results_app/case.html")
    trail_id = case.id if case else test_sets.first().name
    return HttpResponse(
        template.render(
            {
                "bread_crumb_trail": BreadCrumbTrail.leading_to(
                    testcase, pk=test_suite.name, job=job.id, case_id=trail_id
                ),
                "job": job,
                "sets": test_sets,
                "suite": test_suite,
                "job_link": pklink(job),
                "extra_source": extra_source,
                "test_cases": test_cases,
                "bug_links": BugLink.objects.filter(
                    object_id__in=test_cases.values_list("id", flat=True),
                    content_type_id=ContentType.objects.get_for_model(TestCase).id,
                ),
            },
            request=request,
        )
    )


def testcase_yaml(request, pk):
    testcase = get_object_or_404(TestCase, pk=pk)
    check_request_auth(request, testcase.suite.job)
コード例 #21
0
ファイル: __init__.py プロジェクト: slawr/lava
    trail_id = case.id if case else test_sets.first().name
    return HttpResponse(
        template.render(
            {
                "bread_crumb_trail":
                BreadCrumbTrail.leading_to(
                    testcase, pk=test_suite.name, job=job.id,
                    case_id=trail_id),
                "job":
                job,
                "sets":
                test_sets,
                "suite":
                test_suite,
                "job_link":
                pklink(job),
                "extra_source":
                extra_source,
                "test_cases":
                test_cases,
                "bug_links":
                BugLink.objects.filter(
                    object_id__in=test_cases.values_list("id", flat=True),
                    content_type_id=ContentType.objects.get_for_model(
                        TestCase).id,
                ),
            },
            request=request,
        ))

コード例 #22
0
ファイル: tables.py プロジェクト: pevik/lava-server
 def render(self, record, table=None):
     # FIXME: handle job & device visibility
     return pklink(record.job)
コード例 #23
0
def testjob(request, job):
    job = get_restricted_job(request.user, pk=job, request=request)
    data = ResultsView(request, model=TestSuite, table_class=ResultsTable)
    suite_table = ResultsTable(data.get_table_data().filter(job=job))
    failed_definitions = []
    yaml_dict = OrderedDict()
    if TestData.objects.filter(testjob=job).exists():
        # some duplicates can exist, so get would fail here and [0] is quicker than try except.
        testdata = TestData.objects.filter(testjob=job).prefetch_related(
            'actionlevels__testcase', 'actionlevels__testcase__suite')[0]
        if job.status in [TestJob.INCOMPLETE, TestJob.COMPLETE]:
            # returns something like ['singlenode-advanced', 'smoke-tests-basic', 'smoke-tests-basic']
            executed = [{
                case.action_metadata['test_definition_start']:
                case.action_metadata.get('success', '')
            } for case in TestCase.objects.filter(
                suite__in=TestSuite.objects.filter(job=job))
                        if case.action_metadata and 'test_definition_start' in
                        case.action_metadata and case.suite.name == 'lava']

            submitted = [
                actiondata.testcase.action_metadata
                for actiondata in testdata.actionlevels.all()
                if actiondata.testcase
                and 'test-runscript-overlay' in actiondata.action_name
            ]
            # compare with a dict similar to created in executed
            for item in submitted:
                if executed and {
                        item['name']: item['success']
                } not in executed:
                    comparison = {}
                    if item['from'] != 'inline':
                        comparison['repository'] = item['repository']
                    comparison['path'] = item['path']
                    comparison['name'] = item['name']
                    comparison['uuid'] = item['success']
                    failed_definitions.append(comparison)

        # hide internal python objects, like OrderedDict
        for data in testdata.attributes.all().order_by('name'):
            yaml_dict[str(data.name)] = str(data.value)

    RequestConfig(request, paginate={
        "per_page": suite_table.length
    }).configure(suite_table)
    template = loader.get_template("lava_results_app/job.html")
    return HttpResponse(
        template.render(
            {
                'bread_crumb_trail':
                BreadCrumbTrail.leading_to(testjob, job=job.id),
                'job':
                job,
                'job_link':
                pklink(job),
                'suite_table':
                suite_table,
                'metadata':
                yaml_dict,
                'content_type_id':
                ContentType.objects.get_for_model(TestSuite).id,
                'failed_definitions':
                failed_definitions,
                'condition_choices':
                simplejson.dumps(QueryCondition.get_condition_choices(job)),
                'available_content_types':
                simplejson.dumps(
                    QueryCondition.get_similar_job_content_types()),
            },
            request=request))
コード例 #24
0
ファイル: tables.py プロジェクト: cataglyphis/LAVA
 def render(self, record, table=None):
     # FIXME: handle job & device visibility
     return pklink(record.job)
コード例 #25
0
ファイル: __init__.py プロジェクト: Linaro/lava-server
def testcase(request, case_id, job=None, pk=None):
    """
    Each testcase can appear multiple times in the same testsuite and testjob,
    the action_data.action_level distinguishes each testcase.
    This view supports multiple ways to obtain test case/set. First is by
    test case ID, second by job ID, suite name and test case name and third by
    job ID, suite name and test set name.
    :param request: http request object
    :param job: ID of the TestJob
    :param pk: the name of the TestSuite
    :param case_id: the name or ID of one TestCase object in the TestSuite
    """
    test_sets = None
    try:
        case = TestCase.objects.get(pk=case_id)
    except (TestCase.DoesNotExist, ValueError):
        case = TestCase.objects.filter(name=case_id, suite__name=pk,
                                       suite__job__id=job).first()
        if not case:
            test_sets = TestSet.objects.filter(name=case_id)
            if not test_sets:
                raise Http404(
                    "No TestCase/TestSet matches the given parameters.")
    if not job:
        job = case.suite.job
        # Auth check purposes only.
        job = get_restricted_job(request.user, pk=job.id, request=request)
    else:
        job = get_restricted_job(request.user, pk=job, request=request)
    if not pk:
        test_suite = case.suite
    else:
        test_suite = get_object_or_404(TestSuite, name=pk, job=job)
    if test_sets:
        # No test case was found.
        test_sets = test_sets.filter(suite=test_suite)
        test_cases = TestCase.objects.none()
    else:
        test_cases = TestCase.objects.filter(name=case.name, suite=test_suite)
    extra_source = {}
    logger = logging.getLogger('lava-master')
    for extra_case in test_cases:
        try:
            f_metadata = yaml.load(extra_case.metadata, Loader=yaml.CLoader)
            if not f_metadata:
                continue
        except TypeError:
            logger.info("Unable to load extra case metadata for %s", extra_case)
            continue
        extra_data = f_metadata.get('extra')
        try:
            if extra_data and os.path.exists(extra_data):
                with open(f_metadata['extra'], 'r') as extra_file:
                    items = yaml.load(extra_file, Loader=yaml.CLoader)
                # hide the !!python OrderedDict prefix from the output.
                for key, value in items.items():
                    extra_source.setdefault(extra_case.id, '')
                    extra_source[extra_case.id] += "%s: %s\n" % (key, value)
        except TypeError:
            # In some old version of LAVA, extra_data is not a string but an OrderedDict
            # In this case, just skip it.
            pass
    template = loader.get_template("lava_results_app/case.html")
    trail_id = case.id if case else test_sets.first().name
    return HttpResponse(template.render(
        {
            'bread_crumb_trail': BreadCrumbTrail.leading_to(testcase, pk=test_suite.name, job=job.id, case_id=trail_id),
            'job': job,
            'sets': test_sets,
            'suite': test_suite,
            'job_link': pklink(job),
            'extra_source': extra_source,
            'test_cases': test_cases,
            'bug_links': BugLink.objects.filter(
                object_id__in=test_cases.values_list('id', flat=True),
                content_type_id=ContentType.objects.get_for_model(
                    TestCase).id,
            )
        }, request=request))