Example #1
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))
Example #2
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()

    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,
        )
    )
Example #3
0
def _parse_conditions(content_type, conditions):
    # Parse conditions from request.

    conditions_objects = []
    for condition_str in conditions.split(","):
        condition = QueryCondition()
        condition_fields = condition_str.split("__")
        if len(condition_fields) == 3:
            condition.table = content_type
            condition.field = condition_fields[0]
            condition.operator = condition_fields[1]
            condition.value = condition_fields[2]
        elif len(condition_fields) == 4:
            content_type = ContentType.objects.get(
                model=condition_fields[0],
                app_label=_get_app_label_for_model(condition_fields[0])
            )
            condition.table = content_type
            condition.field = condition_fields[1]
            condition.operator = condition_fields[2]
            condition.value = condition_fields[3]

        else:
            # TODO: more validation for conditions?.
            raise InvalidConditionsError("Conditions URL incorrect.")

        conditions_objects.append(condition)

    return conditions_objects
Example #4
0
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        if "query" in self.initial and self.initial["query"].__class__ == Query:
            condition_choices = QueryCondition.get_condition_choices()

            self.fields["condition_choices"].initial = simplejson.dumps(
                condition_choices)
Example #5
0
    def __init__(self, *args, **kwargs):
        super(QueryConditionForm, self).__init__(*args, **kwargs)

        if "query" in self.initial and \
           self.initial['query'].__class__ == Query:
            condition_choices = QueryCondition.get_condition_choices()

            self.fields['condition_choices'].initial = simplejson.dumps(
                condition_choices)
Example #6
0
    def __init__(self, *args, **kwargs):
        super(QueryConditionForm, self).__init__(*args, **kwargs)

        if "query" in self.initial and \
           self.initial['query'].__class__ == Query:
            condition_choices = QueryCondition.get_condition_choices()

            self.fields['condition_choices'].initial = simplejson.dumps(
                condition_choices)
Example #7
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,
        ))
Example #8
0
def _parse_conditions(content_type, conditions):
    # Parse conditions from text representation.

    if not conditions:
        return []

    conditions_objects = []
    for condition_str in conditions.split(CONDITIONS_SEPARATOR):
        condition = QueryCondition()
        condition_fields = condition_str.split(CONDITION_DIVIDER)
        if len(condition_fields) == 3:
            condition.table = content_type
            condition.field = condition_fields[0]
            condition.operator = condition_fields[1]
            condition.value = condition_fields[2]
        elif len(condition_fields) == 4:

            try:
                content_type = _get_content_type(condition_fields[0])
            except ContentType.DoesNotExist:
                raise InvalidContentTypeError(
                    "Wrong table name in conditions parameter. " +
                    "Please refer to query docs.")

            condition.table = content_type
            condition.field = condition_fields[1]
            condition.operator = condition_fields[2]
            condition.value = condition_fields[3]

        else:
            # TODO: more validation for conditions?.
            raise InvalidConditionsError("Conditions URL incorrect. Please "
                                         "refer to query docs.")

        conditions_objects.append(condition)

    return conditions_objects
Example #9
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,
        )
    )
Example #10
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))