squad 1.96__tar.gz → 1.97__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {squad-1.96 → squad-1.97}/CHANGELOG.md +10 -0
- {squad-1.96/squad.egg-info → squad-1.97}/PKG-INFO +1 -1
- {squad-1.96 → squad-1.97}/squad/ci/backend/tuxsuite.py +32 -8
- {squad-1.96 → squad-1.97}/squad/ci/management/commands/testfetch.py +8 -1
- {squad-1.96 → squad-1.97}/squad/frontend/views.py +8 -1
- {squad-1.96 → squad-1.97}/squad/plugins/linux_log_parser.py +15 -8
- {squad-1.96 → squad-1.97}/squad/settings.py +3 -0
- squad-1.97/squad/version.py +1 -0
- {squad-1.96 → squad-1.97/squad.egg-info}/PKG-INFO +1 -1
- {squad-1.96 → squad-1.97}/test/ci/backend/test_tuxsuite.py +37 -8
- {squad-1.96 → squad-1.97}/test/ci/backend/tuxsuite_test_result_sample.json +25 -13
- {squad-1.96 → squad-1.97}/test/frontend/test_basics.py +6 -0
- {squad-1.96 → squad-1.97}/test/plugins/test_linux_log_parser.py +18 -18
- {squad-1.96 → squad-1.97}/test/plugins/test_log_parser_base.py +1 -1
- squad-1.96/squad/version.py +0 -1
- {squad-1.96 → squad-1.97}/.ackrc +0 -0
- {squad-1.96 → squad-1.97}/.coveragerc +0 -0
- {squad-1.96 → squad-1.97}/.ctags +0 -0
- {squad-1.96 → squad-1.97}/.dockerignore +0 -0
- {squad-1.96 → squad-1.97}/.gitignore +0 -0
- {squad-1.96 → squad-1.97}/.mailmap +0 -0
- {squad-1.96 → squad-1.97}/.readthedocs.yml +0 -0
- {squad-1.96 → squad-1.97}/.reuse/dep5 +0 -0
- {squad-1.96 → squad-1.97}/COPYING +0 -0
- {squad-1.96 → squad-1.97}/COPYRIGHTS +0 -0
- {squad-1.96 → squad-1.97}/Dockerfile +0 -0
- {squad-1.96 → squad-1.97}/LICENSES/GPL-3.0-or-later.txt +0 -0
- {squad-1.96 → squad-1.97}/LICENSES/MIT.txt +0 -0
- {squad-1.96 → squad-1.97}/LICENSES/OFL-1.1.txt +0 -0
- {squad-1.96 → squad-1.97}/MANIFEST.in +0 -0
- {squad-1.96 → squad-1.97}/Procfile +0 -0
- {squad-1.96 → squad-1.97}/README.rst +0 -0
- {squad-1.96 → squad-1.97}/babel.cfg +0 -0
- {squad-1.96 → squad-1.97}/dev-docker +0 -0
- {squad-1.96 → squad-1.97}/doc/.gitignore +0 -0
- {squad-1.96 → squad-1.97}/doc/Makefile +0 -0
- {squad-1.96 → squad-1.97}/doc/api.rst +0 -0
- {squad-1.96 → squad-1.97}/doc/ci.rst +0 -0
- {squad-1.96 → squad-1.97}/doc/conf.py +0 -0
- {squad-1.96 → squad-1.97}/doc/hacking.rst +0 -0
- {squad-1.96 → squad-1.97}/doc/index.rst +0 -0
- {squad-1.96 → squad-1.97}/doc/install.rst +0 -0
- {squad-1.96 → squad-1.97}/doc/intro.rst +0 -0
- {squad-1.96 → squad-1.97}/doc/lava_usecase.rst +0 -0
- {squad-1.96 → squad-1.97}/doc/plugins.rst +0 -0
- {squad-1.96 → squad-1.97}/doc/quickstart.rst +0 -0
- {squad-1.96 → squad-1.97}/doc/translating.rst +0 -0
- {squad-1.96 → squad-1.97}/doc/tuxsuite_usecase.rst +0 -0
- {squad-1.96 → squad-1.97}/docker/db-dumped +0 -0
- {squad-1.96 → squad-1.97}/docker/db-to-be-restored +0 -0
- {squad-1.96 → squad-1.97}/docker/docker-compose.yml +0 -0
- {squad-1.96 → squad-1.97}/docker/extra_settings.py +0 -0
- {squad-1.96 → squad-1.97}/docker/init-db.sh +0 -0
- {squad-1.96 → squad-1.97}/docker/rabbitmq.config +0 -0
- {squad-1.96 → squad-1.97}/docker/squad-apache.conf +0 -0
- {squad-1.96 → squad-1.97}/docker-compose.yaml +0 -0
- {squad-1.96 → squad-1.97}/manage.py +0 -0
- {squad-1.96 → squad-1.97}/package-lock.json +0 -0
- {squad-1.96 → squad-1.97}/package.json +0 -0
- {squad-1.96 → squad-1.97}/pytest.ini +0 -0
- {squad-1.96 → squad-1.97}/requirements-dev.txt +0 -0
- {squad-1.96 → squad-1.97}/requirements.txt +0 -0
- {squad-1.96 → squad-1.97}/scripts/build +0 -0
- {squad-1.96 → squad-1.97}/scripts/check-ci +0 -0
- {squad-1.96 → squad-1.97}/scripts/check-ignore +0 -0
- {squad-1.96 → squad-1.97}/scripts/community_connector/main.js +0 -0
- {squad-1.96 → squad-1.97}/scripts/community_connector/manifest.json +0 -0
- {squad-1.96 → squad-1.97}/scripts/dogfood +0 -0
- {squad-1.96 → squad-1.97}/scripts/get-metrics +0 -0
- {squad-1.96 → squad-1.97}/scripts/get-tests +0 -0
- {squad-1.96 → squad-1.97}/scripts/git-build +0 -0
- {squad-1.96 → squad-1.97}/scripts/pytest +0 -0
- {squad-1.96 → squad-1.97}/scripts/rabbitmq-server +0 -0
- {squad-1.96 → squad-1.97}/scripts/release +0 -0
- {squad-1.96 → squad-1.97}/scripts/release-docker +0 -0
- {squad-1.96 → squad-1.97}/scripts/squad-config +0 -0
- {squad-1.96 → squad-1.97}/scripts/test-ci +0 -0
- {squad-1.96 → squad-1.97}/scripts/test-docker +0 -0
- {squad-1.96 → squad-1.97}/scripts/testdata/gen-ci-jobs +0 -0
- {squad-1.96 → squad-1.97}/scripts/testdata/gen-metrics +0 -0
- {squad-1.96 → squad-1.97}/scripts/testdata/gen-test-data +0 -0
- {squad-1.96 → squad-1.97}/scripts/testdata/gen-tests +0 -0
- {squad-1.96 → squad-1.97}/scripts/testdata/setup-dev +0 -0
- {squad-1.96 → squad-1.97}/scripts/testdata/submit-ci-jobs +0 -0
- {squad-1.96 → squad-1.97}/scripts/testdata/submit-test-data +0 -0
- {squad-1.96 → squad-1.97}/scripts/translate +0 -0
- {squad-1.96 → squad-1.97}/scripts/travis-lava +0 -0
- {squad-1.96 → squad-1.97}/scripts/update-translation-files +0 -0
- {squad-1.96 → squad-1.97}/setup.cfg +0 -0
- {squad-1.96 → squad-1.97}/setup.py +0 -0
- {squad-1.96 → squad-1.97}/squad/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/admin.py +0 -0
- {squad-1.96 → squad-1.97}/squad/api/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/api/apps.py +0 -0
- {squad-1.96 → squad-1.97}/squad/api/ci.py +0 -0
- {squad-1.96 → squad-1.97}/squad/api/data.py +0 -0
- {squad-1.96 → squad-1.97}/squad/api/filters.py +0 -0
- {squad-1.96 → squad-1.97}/squad/api/prometheus.py +0 -0
- {squad-1.96 → squad-1.97}/squad/api/rest.py +0 -0
- {squad-1.96 → squad-1.97}/squad/api/urls.py +0 -0
- {squad-1.96 → squad-1.97}/squad/api/utils.py +0 -0
- {squad-1.96 → squad-1.97}/squad/api/views.py +0 -0
- {squad-1.96 → squad-1.97}/squad/celery.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/admin.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/apps.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/backend/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/backend/fake.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/backend/lava.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/backend/null.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/exceptions.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/management/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/management/commands/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/management/commands/create_tuxsuite_boot_tests.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/management/commands/listen.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0001_initial.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0002_auto_20170406_1252.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0003_backend_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0004_testjob_failure.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0005_remove_listener_data.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0006_simplify_backend_loading.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0007_auto_20170517_1736.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0008_testjob_testrun.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0009_slug_pattern.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0010_testjob_can_resubmit.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0011_testjob_resubmitted_count.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0012_testjob_build.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0013_testjob_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0014_testjob_target_build.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0015_testjob_populate_target_build.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0016_backend_max_fetch_attempts.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0017_testjob_fetch_attempts.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0018_testjob_dates.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0019_add_fake_backend.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0020_backend_settings_field.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0021_testjob_parent_job.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0022_backend_poll_enabled.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0023_remove_testjob_build.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0024_fix_testjob_environment_validation.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0025_backend_listen_enabled.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0026_job_start_end_time.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0027_add_tuxsuite_implementation_type.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0028_create_testjob_indexes.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0029_create_testjob_results_input.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/0030_testjob_subtasks_count.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/migrations/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/models.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/tasks.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/templates/squad/ci/testjob_resubmit.html.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/templates/squad/ci/testjob_resubmit.txt.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/templatetags/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/templatetags/filter_jobs.py +0 -0
- {squad-1.96 → squad-1.97}/squad/ci/utils.py +0 -0
- {squad-1.96 → squad-1.97}/squad/compat.py +0 -0
- {squad-1.96 → squad-1.97}/squad/container_settings.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/admin.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/apps.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/callback.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/comparison.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/data.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/failures.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/history.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/locale/django.pot +0 -0
- {squad-1.96 → squad-1.97}/squad/core/locale/es_MX/LC_MESSAGES/django.po +0 -0
- {squad-1.96 → squad-1.97}/squad/core/locale/pl/LC_MESSAGES/django.po +0 -0
- {squad-1.96 → squad-1.97}/squad/core/locale/pt/LC_MESSAGES/django.po +0 -0
- {squad-1.96 → squad-1.97}/squad/core/locale/pt_BR/LC_MESSAGES/django.po +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/compute_build_summaries.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/compute_project_statuses.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/fill_test_metadata.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/fix_squadplugin_data.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/import_data.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/import_data.rst +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/migrate_test_runs.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/populate_metric_build_and_environment.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/populate_test_build_and_environment.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/prepdump.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/run_log_parser.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/send-email.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/update_project_statuses.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/management/commands/users.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0001_initial.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0002_auto_20160525_1403.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0003_testrun_log_file.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0004_group_user_groups.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0005_token.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0006_auto_20160826_2242.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0007_testrun_data_processed.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0008_status.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0009_testrun_status_recorded.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0010_testrun_datetime.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0011_testrun_metadata_fields.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0012_build_datetime.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0013_testrun_resubmit_url.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0014_testrun_metadata_file.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0015_attachment.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0016_project_is_public.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0017_slug_validator.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0018_build_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0019_build_version.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0020_build_ordering.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0021_global_tokens.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0022_projectstatus.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0023_subscription.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0024_project_build_completion_threshold.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0025_unique_testrun_job_id.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0026_testrun_result_accept_null.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0027_project_notification_strategy.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0028_suite_and_test_name_length.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0029_subscription_email_formats.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0030_remove_project_build_completion_threshold.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0031_environment_expected_test_runs.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0032_testrun_completed.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0033_drop_debversion.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0034_prepare_to_remove_build_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0035_remove_build_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0036_status_tests_skip.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0037_project_status_test_summary_fields.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0038_populate_project_status_cache.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0039_orderings.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0040_remove_subscription_html.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0041_projectstatus_notified.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0042_set_projectstatus_notified.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0043_project_status_build.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0044_project_html_mail.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0045_adminsubscription.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0046_projectstatus_last_updated.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0047_populate_projectstatus_last_updated.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0048_moderate_notifications.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0049_projectstatus_plural.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0050_projectstatus_finished.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0051_build_status.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0052_recreate_projectstatus_data.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0053_remove_projectstatus_previous.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0054_custom_email_template.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0055_emailtemplate_subject.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0056_project_description.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0057_projectstatus_has_metrics.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0058_populate_projectstatus_has_metrics.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0059_project_important_metadata_keys.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0060_test_log.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0061_project_enabled_plugins_list.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0062_project_allow_empty_enabled_plugin_list.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0063_project_wait_before_notification.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0064_project_notification_timeout.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0065_projectstatus_notified_on_timeout.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0066_environment_description.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0067_accept_blank_suite_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0068_suite_version.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0069_suite_metadata.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0070_create_suite_test_and_metric_metadata.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0071_migrate_old_tokens.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0072_group_description.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0073_auto_20180420_1643.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0074_add_indexes.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0075_update_project_enabled_plugin_list.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0076_patch_builds.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0077_knownissue.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0078_cache_test_run_counts.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0079_init_cache_test_run_counts.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0080_auto_20180810_0047.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0081_status_has_metrics.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0082_populate_status_has_metrics.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0083_rename_knownissue_environments.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0084_projectstatus_regressions_fixes.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0085_projectstatus_defaults.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0086_xfail.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0087_test_known_issues.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0088_user_subscriptions.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0089_test_has_known_issues.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0090_populate_test_has_known_issues.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0091_notification_delivery_remove_unique_status.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0092_annotation.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0093_historicalemailtemplate.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0094_populatehistoricalemailtemplate.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0095_project_data_retention_days.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0096_build_keep_data.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0097_build_placeholder.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0098_blank_annotation.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0099_metricthreshold.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0100_metric_is_outlier.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0101_project_project_settings.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0102_projectstatus_null_metric_summary.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0103_populate_project_status.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0104_delayedreport.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0105_delayed_report_error_message.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0106_delayedreport_output_subject.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0107_move_notification_strategy.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0108_add_email_template_validator.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0109_group_member.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0110_move_users_from_django_groups_to_squad_groups.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0111_remove_group_user_groups.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0112_user_namespaces.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0113_group_project_blank_name_and_description.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0114_project_enabled_plugin_list_can_be_blank.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0115_fix_slug_validation.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0116_make_group_membership_unique.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0117_drop_obsolete_token_model.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0118_project_is_archived.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0119_i18n.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0120_buildsummary.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0121_add_password_patchsource.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0122_fix_patchsource_url_and_token.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0123_django_upgrade_missing_migrations.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0124_set_default_expected_test_runs_to_zero.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0125_fix_missing_status_has_metrics_for_testruns.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0126_metricthreshold_environment.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0127_metric_thresholds_migrate_data.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0128_metric_thresholds_remove_proj_col.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0129_projectstatus_nullable_notified_on_timeout.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0130_project_status_baseline_next.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0131_create_squad_auth_group_and_add_users.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0132_attachment_mimetype.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0133_append_project_permissions_to_squad_auth_group.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0134_longer_metric_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0135_add_privileged_access_level.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0136_migrate_submitters_to_privileged.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0137_patchsource_token_null.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0138_metric_unit.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0139_nullable_test_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0140_increase_gerrit_password_length.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0141_remove_test_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0142_add_testrun_file_storage.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0143_attachment_storage.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0144_attachment_data_null.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0145_pluginscratch.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0146_deprecate_testrun_and_attachment_data_fields.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0147_add_build_and_environment_to_test.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0148_remove_legacy_storage_fields.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0149_build_patch_url.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0150_add_new_notification_strategy.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0151_callback.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0152_add_build_patch_notified.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0153_callback_make_response_content_blob.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0154_project_add_force_finishing_builds_field.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0155_add_build_and_environment_to_metric.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0156_nullable_metric_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0157_remove_metric_name.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0158_add_metric_comparison_to_projectstatus.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0159_nullable_metricthreshold_value.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0160_add_project_to_metricthreshold.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0161_add_metricthreshold_perm_to_squad_group.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0162_project_add_build_confidence_settings.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0163_hirtoricalemailtemplate_update.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0164_django_update.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0165_buildsummary_uniqueness.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0166_build_is_release.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0167_add_project_datetime.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0168_add_group_settings.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/0169_userpreferences.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/migrations/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/models.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/notification.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/plugins.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/queries.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/statistics.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/tasks/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/tasks/exceptions.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/tasks/notification.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/base.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/diff.html.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/diff.txt.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/failed_test_jobs.html.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/failed_test_jobs.txt.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/moderation.html.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/moderation.txt.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/core/templatetags/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/templatetags/squad_notification.py +0 -0
- {squad-1.96 → squad-1.97}/squad/core/utils.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/__main__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/admin.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/apps.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/badges.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/build_settings.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/ci.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/comparison.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/extract.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/forms.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/group_settings.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/locale/django.pot +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/locale/pl/LC_MESSAGES/django.po +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/locale/pt/LC_MESSAGES/django.po +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/locale/pt_BR/LC_MESSAGES/django.po +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/management/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/management/commands/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/management/commands/get_token.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/metrics.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/project_settings.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/queries.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/setup.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/compare.css +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/download +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/download.conf +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/favicon.ico +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/main.css +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/attach_select2.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/build.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/build_compare.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/build_list.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/charts.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/common.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/compare.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/config.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/annotation.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/build_compare.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/build_list_compare.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/build_release.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/cancel.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/charts.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/compare.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/fetch.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/filter.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/metricThreshold.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/project_compare.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/resubmit.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/testjobs_progress.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/metric.threshold.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/project_compare.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/showHide.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad/table.js +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/static/squad_sign.svg +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/401.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/404.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/django/rest_framework/api.html +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/django/squad/_user_menu.html +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_builds_table.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_env_suite_data.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_metadata.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_pagination.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_permissions.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_project_list.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_regressions_and_fixes.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_results_table.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_results_transitions_filter.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_subscribe.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_results_envbox.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_results_suitebox.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_results_summary.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_results_table.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_run_metric.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_run_test.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_unfinished_build.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_user_menu.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/base.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build-nav.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build_callbacks.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build_metadata.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build_metrics.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build_settings.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/builds.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/compare.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/compare_builds.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/compare_projects.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group-nav.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/advanced.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/base.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/delete.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/index.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/members.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/new_group.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/new_project.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/index.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/knownissues.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/login.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/metrics.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project-nav.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/_threshold_table.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/advanced.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/base.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/build_confidence.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/delete.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/environments.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/index.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/thresholds.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/test_history.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/test_run.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/test_run_suite_metrics.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/test_run_suite_test_details.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/test_run_suite_tests.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/testjob.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/testjobs.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/testjobs_progress.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/tests-details-nav.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/tests.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/api_token.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/base.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/profile.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/projects.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/subscriptions.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/user_preferences.jinja2 +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templatetags/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/templatetags/squad.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/tests.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/urls.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/user_settings.py +0 -0
- {squad-1.96 → squad-1.97}/squad/frontend/utils.py +0 -0
- {squad-1.96 → squad-1.97}/squad/http.py +0 -0
- {squad-1.96 → squad-1.97}/squad/jinja2.py +0 -0
- {squad-1.96 → squad-1.97}/squad/mail.py +0 -0
- {squad-1.96 → squad-1.97}/squad/manage.py +0 -0
- {squad-1.96 → squad-1.97}/squad/plugins/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/plugins/example.py +0 -0
- {squad-1.96 → squad-1.97}/squad/plugins/gerrit.py +0 -0
- {squad-1.96 → squad-1.97}/squad/plugins/github.py +0 -0
- {squad-1.96 → squad-1.97}/squad/plugins/lib/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/plugins/lib/base_log_parser.py +0 -0
- {squad-1.96 → squad-1.97}/squad/plugins/linux_log_parser_build.py +0 -0
- {squad-1.96 → squad-1.97}/squad/run/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/run/__main__.py +0 -0
- {squad-1.96 → squad-1.97}/squad/run/listener.py +0 -0
- {squad-1.96 → squad-1.97}/squad/run/scheduler.py +0 -0
- {squad-1.96 → squad-1.97}/squad/run/worker.py +0 -0
- {squad-1.96 → squad-1.97}/squad/socialaccount.py +0 -0
- {squad-1.96 → squad-1.97}/squad/urls.py +0 -0
- {squad-1.96 → squad-1.97}/squad/wsgi.py +0 -0
- {squad-1.96 → squad-1.97}/squad.egg-info/SOURCES.txt +0 -0
- {squad-1.96 → squad-1.97}/squad.egg-info/dependency_links.txt +0 -0
- {squad-1.96 → squad-1.97}/squad.egg-info/entry_points.txt +0 -0
- {squad-1.96 → squad-1.97}/squad.egg-info/requires.txt +0 -0
- {squad-1.96 → squad-1.97}/squad.egg-info/top_level.txt +0 -0
- {squad-1.96 → squad-1.97}/squad.svg +0 -0
- {squad-1.96 → squad-1.97}/test/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/test/api/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/test/api/benchmarks.csv +0 -0
- {squad-1.96 → squad-1.97}/test/api/benchmarks.json +0 -0
- {squad-1.96 → squad-1.97}/test/api/definition.yaml +0 -0
- {squad-1.96 → squad-1.97}/test/api/metadata.json +0 -0
- {squad-1.96 → squad-1.97}/test/api/test_ci.py +0 -0
- {squad-1.96 → squad-1.97}/test/api/test_data.py +0 -0
- {squad-1.96 → squad-1.97}/test/api/test_rest.py +0 -0
- {squad-1.96 → squad-1.97}/test/api/test_run.log +0 -0
- {squad-1.96 → squad-1.97}/test/api/tests.csv +0 -0
- {squad-1.96 → squad-1.97}/test/api/tests.json +0 -0
- {squad-1.96 → squad-1.97}/test/api/tests.py +0 -0
- {squad-1.96 → squad-1.97}/test/api/tests_log.json +0 -0
- {squad-1.96 → squad-1.97}/test/api/tests_two.json +0 -0
- {squad-1.96 → squad-1.97}/test/api/twoline_definition.yaml +0 -0
- {squad-1.96 → squad-1.97}/test/ci/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/test/ci/backend/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/test/ci/backend/example-broken-log.yaml +0 -0
- {squad-1.96 → squad-1.97}/test/ci/backend/example-lava-log.yaml +0 -0
- {squad-1.96 → squad-1.97}/test/ci/backend/lava.json +0 -0
- {squad-1.96 → squad-1.97}/test/ci/backend/test_fake.py +0 -0
- {squad-1.96 → squad-1.97}/test/ci/backend/test_lava.py +0 -0
- {squad-1.96 → squad-1.97}/test/ci/backend/test_real_lava.py +0 -0
- {squad-1.96 → squad-1.97}/test/ci/backend/tuxsuite_test_failed_result_sample.json +0 -0
- {squad-1.96 → squad-1.97}/test/ci/test_listen.py +0 -0
- {squad-1.96 → squad-1.97}/test/ci/test_models.py +0 -0
- {squad-1.96 → squad-1.97}/test/ci/test_tasks.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_attachment.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_build.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_build_summary.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_callback.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_emailtemplate.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_failures.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_group.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_historical_emailtemplate.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_history.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_import_data.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_import_data_input/1/default/1/metadata.json +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_import_data_input/1/default/1/metrics.json +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_import_data_input/2/default/2/metadata.json +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_import_data_input/2/default/2/metrics.json +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_import_data_input/2/default/2/screenshot.png +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_import_data_input/2/default/2/tests.json +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_import_data_missing_metadata/1/1/tests.json +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_known_issues.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_metric.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_metric_comparison.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_metric_threshold.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_metrics_data.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_metrics_summary.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_notification.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_notification_delivery.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_patch_source.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_project.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_project_status.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_statistics.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_tasks.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_tasks_notification.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_test.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_test_comparison.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_test_data.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_test_run.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_test_summary.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_update_project_statuses.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_user_namespace.py +0 -0
- {squad-1.96 → squad-1.97}/test/core/test_utils.py +0 -0
- {squad-1.96 → squad-1.97}/test/frontend/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/test/frontend/test_comparison.py +0 -0
- {squad-1.96 → squad-1.97}/test/frontend/test_get_token_command.py +0 -0
- {squad-1.96 → squad-1.97}/test/frontend/test_group_settings.py +0 -0
- {squad-1.96 → squad-1.97}/test/frontend/test_history.py +0 -0
- {squad-1.96 → squad-1.97}/test/frontend/test_template_tags.py +0 -0
- {squad-1.96 → squad-1.97}/test/frontend/test_test_job.py +0 -0
- {squad-1.96 → squad-1.97}/test/frontend/test_tests.py +0 -0
- {squad-1.96 → squad-1.97}/test/frontend/test_utils.py +0 -0
- {squad-1.96 → squad-1.97}/test/integration/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/test/integration/test_build_notification_from_ci.py +0 -0
- {squad-1.96 → squad-1.97}/test/javascript.py +0 -0
- {squad-1.96 → squad-1.97}/test/karma.conf.js +0 -0
- {squad-1.96 → squad-1.97}/test/mock.py +0 -0
- {squad-1.96 → squad-1.97}/test/performance.py +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/__init__.py +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/different-numbers-in-function-name-oops.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/duplicated-oops.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/internal-error-oops.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kasan.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kcsan_full_log.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kcsan_simple.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kernel_bug_and_invalid_opcode.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kernelexceptiontrace.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kernelexceptiontrace_without_squarebraces.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kernelpanic-multiline.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kernelpanic-single-and-multiline.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kfence.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/multiple_issues_dmesg.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/oops.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/rcu_warning.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_arm64_25103120.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_arm64_2957859.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_arm_24958120.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_arm_26001178.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_i386_25043392.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_i386_25431539.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_riscv_24688299.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_x86_64_25086964.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_x86_64_26103794.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_arm64_24934206.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_arm_24951924.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_arm_25044425.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_arm_25078650.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_i386_25044475.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_riscv_24715191.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_s390_26103313.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_sh_26103296.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_x86_64_24932905.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_x86_64_26103833.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_x86_64_26788931.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_x86_64_26861563.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/log_parser_base/kfence-seconds-expected.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/log_parser_base/kfence-seconds.log +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/test_gerrit.py +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/test_github.py +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/test_linux_log_parser_build.py +0 -0
- {squad-1.96 → squad-1.97}/test/plugins/test_plugin.py +0 -0
- {squad-1.96 → squad-1.97}/test/settings.py +0 -0
- {squad-1.96 → squad-1.97}/test/test_architecture.py +0 -0
- {squad-1.96 → squad-1.97}/test/test_code_quality.py +0 -0
- {squad-1.96 → squad-1.97}/test/test_cors.py +0 -0
- {squad-1.96 → squad-1.97}/test/test_i18n.py +0 -0
- {squad-1.96 → squad-1.97}/test/test_mail.py +0 -0
- {squad-1.96 → squad-1.97}/test/test_pending_migrations.py +0 -0
- {squad-1.96 → squad-1.97}/test/unit/test_annotation.js +0 -0
- {squad-1.96 → squad-1.97}/test/unit/test_cancel.js +0 -0
- {squad-1.96 → squad-1.97}/test/unit/test_charts.js +0 -0
- {squad-1.96 → squad-1.97}/test/unit/test_compare.js +0 -0
- {squad-1.96 → squad-1.97}/test/unit/test_filter.js +0 -0
- {squad-1.96 → squad-1.97}/test/unit/test_resubmit.js +0 -0
@@ -1,3 +1,13 @@
|
|
1
|
+
# 1.97
|
2
|
+
|
3
|
+
This release adds an optional feature for checking authentication on the home page. This can
|
4
|
+
be helpful on installations that get hit by crawlers.
|
5
|
+
|
6
|
+
# 1.96.1
|
7
|
+
|
8
|
+
This release fixes small bugs in the previous release regarding picking up log snippets
|
9
|
+
from Tuxsuite jobs.
|
10
|
+
|
1
11
|
# 1.96
|
2
12
|
|
3
13
|
This release takes in LAVA logs in Tuxsuite.
|
@@ -392,9 +392,12 @@ class Backend(BaseBackend):
|
|
392
392
|
if 'unknown' == results['results']['boot']:
|
393
393
|
return None
|
394
394
|
|
395
|
-
# Retrieve
|
395
|
+
# Retrieve plain text log
|
396
396
|
logs = self.fetch_url(job_url + '/', 'logs?format=txt').text
|
397
|
-
|
397
|
+
|
398
|
+
# Retrieve YAML log
|
399
|
+
log_structured = self.fetch_url(results["download_url"], 'lava-logs.yaml').text
|
400
|
+
log_data = yaml.safe_load(log_structured)
|
398
401
|
|
399
402
|
attachment_list = ["reproducer", "tux_plan.yaml"]
|
400
403
|
attachments = {}
|
@@ -410,6 +413,13 @@ class Backend(BaseBackend):
|
|
410
413
|
boot_test_name = 'boot/' + (metadata.get('build_name') or 'boot')
|
411
414
|
tests[boot_test_name] = {'result': results['results']['boot']}
|
412
415
|
|
416
|
+
lava_signal = re.compile("^<LAVA_SIGNAL_")
|
417
|
+
|
418
|
+
def filter_log(line):
|
419
|
+
return type(line["msg"]) is str \
|
420
|
+
and line["lvl"] == "target" \
|
421
|
+
and not lava_signal.match(line["msg"])
|
422
|
+
|
413
423
|
# Really fetch test results
|
414
424
|
tests_results = self.fetch_url(job_url + '/', 'results').json()
|
415
425
|
if tests_results.get('error', None) is None:
|
@@ -417,16 +427,30 @@ class Backend(BaseBackend):
|
|
417
427
|
suite_name = re.sub(r'^[0-9]+_', '', suite)
|
418
428
|
for name, test_data in suite_tests.items():
|
419
429
|
test_name = f'{suite_name}/{name}'
|
420
|
-
result = test_data
|
430
|
+
result = test_data.get('result')
|
431
|
+
if not result:
|
432
|
+
continue
|
421
433
|
if "starttc" in test_data:
|
422
|
-
|
434
|
+
try:
|
435
|
+
# LAVA data counts from 1, we count from 0
|
436
|
+
starttc = int(test_data["starttc"]) - 1
|
437
|
+
except ValueError:
|
438
|
+
continue
|
423
439
|
if "endtc" in test_data:
|
424
|
-
|
425
|
-
|
426
|
-
|
440
|
+
try:
|
441
|
+
# no -1 as the second index of the slice needs to be
|
442
|
+
# greater than the first to get at least one item.
|
443
|
+
endtc = int(test_data["endtc"])
|
444
|
+
except ValueError:
|
445
|
+
endtc = starttc + 2
|
427
446
|
else:
|
428
447
|
endtc = starttc + 2
|
429
|
-
|
448
|
+
log_lines = [
|
449
|
+
line["msg"].replace("\x00", "")
|
450
|
+
for line in log_data[starttc:endtc]
|
451
|
+
if filter_log(line)
|
452
|
+
]
|
453
|
+
log_snippet = "\n".join(log_lines)
|
430
454
|
else:
|
431
455
|
log_snippet = None
|
432
456
|
tests[test_name] = {"result": result, "log": log_snippet}
|
@@ -31,17 +31,24 @@ class Command(BaseCommand):
|
|
31
31
|
type=str,
|
32
32
|
help='Project to fetch the data into (Format: foo/bar)',
|
33
33
|
)
|
34
|
+
parser.add_argument(
|
35
|
+
'BUILD',
|
36
|
+
type=str,
|
37
|
+
nargs="?",
|
38
|
+
help='Build to fetch the data into',
|
39
|
+
)
|
34
40
|
|
35
41
|
def handle(self, *args, **options):
|
36
42
|
backend_name = options.get("BACKEND")
|
37
43
|
job_id = options.get("JOBID")
|
38
44
|
group_slug, project_slug = options.get("PROJECT").split('/')
|
45
|
+
_build = options.get("BUILD") or str(time.time())
|
39
46
|
|
40
47
|
backend = Backend.objects.get(name=backend_name)
|
41
48
|
|
42
49
|
group, _ = Group.objects.get_or_create(slug=group_slug)
|
43
50
|
project, _ = group.projects.get_or_create(slug=project_slug)
|
44
|
-
build = project.builds.
|
51
|
+
build, _ = project.builds.get_or_create(version=_build)
|
45
52
|
|
46
53
|
testjob = backend.test_jobs.create(target=project, job_id=job_id, target_build=build)
|
47
54
|
|
@@ -2,7 +2,9 @@ import json
|
|
2
2
|
import mimetypes
|
3
3
|
|
4
4
|
from django.db.models import Case, When, Prefetch, Max
|
5
|
+
from django.core.exceptions import PermissionDenied
|
5
6
|
from django.core.paginator import Paginator, EmptyPage
|
7
|
+
from django.conf import settings
|
6
8
|
from django.contrib.auth.decorators import login_required
|
7
9
|
from django.http import HttpResponse, Http404
|
8
10
|
from django.shortcuts import render, get_object_or_404, redirect, reverse
|
@@ -16,7 +18,7 @@ from squad.core.models import Build, Subscription, TestRun, SuiteMetadata, UserP
|
|
16
18
|
from squad.core.queries import get_metric_data, test_confidence
|
17
19
|
from squad.frontend.queries import get_metrics_list
|
18
20
|
from squad.frontend.utils import file_type, alphanum_sort
|
19
|
-
from squad.http import auth
|
21
|
+
from squad.http import auth, auth_user_from_request
|
20
22
|
from collections import OrderedDict
|
21
23
|
|
22
24
|
|
@@ -76,6 +78,11 @@ def get_build_testrun_or_404(build, test_run_id):
|
|
76
78
|
|
77
79
|
def home(request):
|
78
80
|
|
81
|
+
if settings.LOCK_HOME_PAGE:
|
82
|
+
user = auth_user_from_request(request, request.user)
|
83
|
+
if not user.is_authenticated:
|
84
|
+
raise PermissionDenied()
|
85
|
+
|
79
86
|
ordering = request.GET.get('order')
|
80
87
|
if ordering not in ['by_name', 'last_updated']:
|
81
88
|
ordering = 'last_updated'
|
@@ -29,16 +29,23 @@ REGEXES = MULTILINERS + ONELINERS
|
|
29
29
|
|
30
30
|
class Plugin(BasePlugin, BaseLogParser):
|
31
31
|
def __cutoff_boot_log(self, log):
|
32
|
-
|
33
|
-
|
32
|
+
split_patterns = [r" login:", r"console:/", r"root@(.*):[/~]#"]
|
33
|
+
split_index = None
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
for pattern in split_patterns:
|
36
|
+
match = re.search(pattern, log)
|
37
|
+
if match:
|
38
|
+
# Find the earliest split point
|
39
|
+
if split_index is None or match.start() < split_index:
|
40
|
+
split_index = match.start()
|
38
41
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
+
if split_index is not None:
|
43
|
+
boot_log = log[:split_index]
|
44
|
+
test_log = log[split_index:]
|
45
|
+
return boot_log, test_log
|
46
|
+
|
47
|
+
# No match found; return whole log as boot log
|
48
|
+
return log, ""
|
42
49
|
|
43
50
|
def __kernel_msgs_only(self, log):
|
44
51
|
kernel_msgs = re.findall(f'({tstamp}{pid}? .*?)$', log, re.S | re.M) # noqa
|
@@ -444,6 +444,9 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 10485760 # 10MB
|
|
444
444
|
# Django requires that this specification is present in settings.py
|
445
445
|
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
|
446
446
|
|
447
|
+
# Force SQUAD to require login to access home page. This should reduce the risk of crawlers bots.
|
448
|
+
LOCK_HOME_PAGE = False
|
449
|
+
|
447
450
|
try:
|
448
451
|
from squad.local_settings import * # noqa: F401,F403
|
449
452
|
except ImportError:
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = '1.97'
|
@@ -893,6 +893,7 @@ class TuxSuiteTest(TestCase):
|
|
893
893
|
testjob = self.build.test_jobs.create(target=self.project, backend=self.backend, job_id=job_id)
|
894
894
|
test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/123')
|
895
895
|
build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/456')
|
896
|
+
storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
|
896
897
|
|
897
898
|
# Only fetch when finished
|
898
899
|
with requests_mock.Mocker() as fake_request:
|
@@ -901,6 +902,7 @@ class TuxSuiteTest(TestCase):
|
|
901
902
|
self.assertEqual(None, results)
|
902
903
|
|
903
904
|
test_logs = "\n".join([f"line {i}" for i in range(1, 1000)])
|
905
|
+
yaml_logs = "\n".join([f"- {{\"dt\": \"2025-04-09T13:15:59.421673\", \"lvl\": \"target\", \"msg\": \"line {i}\\0\"}}" for i in range(1, 1000)])
|
904
906
|
test_results = {
|
905
907
|
'project': 'tuxgroup/tuxproject',
|
906
908
|
'device': 'qemu-armv7',
|
@@ -929,7 +931,8 @@ class TuxSuiteTest(TestCase):
|
|
929
931
|
'finished_time': '2022-03-25T15:52:42.672483',
|
930
932
|
'retries': 0,
|
931
933
|
'retries_messages': [],
|
932
|
-
'duration': 151
|
934
|
+
'duration': 151,
|
935
|
+
'download_url': storage_url,
|
933
936
|
}
|
934
937
|
build_results = {
|
935
938
|
'toolchain': 'gcc-10',
|
@@ -974,6 +977,7 @@ class TuxSuiteTest(TestCase):
|
|
974
977
|
fake_request.get(test_url, json=test_results)
|
975
978
|
fake_request.get(build_url, json=build_results)
|
976
979
|
fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
|
980
|
+
fake_request.get(urljoin(storage_url + '/', 'lava-logs.yaml'), text=yaml_logs)
|
977
981
|
fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
|
978
982
|
fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
|
979
983
|
fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
|
@@ -995,6 +999,7 @@ class TuxSuiteTest(TestCase):
|
|
995
999
|
testjob = self.build.test_jobs.create(target=self.project, backend=self.backend, job_id=job_id)
|
996
1000
|
test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/123')
|
997
1001
|
build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/456')
|
1002
|
+
storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
|
998
1003
|
|
999
1004
|
# Only fetch when finished
|
1000
1005
|
with requests_mock.Mocker() as fake_request:
|
@@ -1003,6 +1008,7 @@ class TuxSuiteTest(TestCase):
|
|
1003
1008
|
self.assertEqual(None, results)
|
1004
1009
|
|
1005
1010
|
test_logs = 'dummy test log'
|
1011
|
+
yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dummy test log"}'
|
1006
1012
|
test_results = {
|
1007
1013
|
'project': 'tuxgroup/tuxproject',
|
1008
1014
|
'device': 'qemu-armv7',
|
@@ -1032,7 +1038,8 @@ class TuxSuiteTest(TestCase):
|
|
1032
1038
|
'finished_time': '2022-03-25T15:52:42.672483',
|
1033
1039
|
'retries': 0,
|
1034
1040
|
'retries_messages': [],
|
1035
|
-
'duration': 151
|
1041
|
+
'duration': 151,
|
1042
|
+
'download_url': storage_url,
|
1036
1043
|
}
|
1037
1044
|
build_results = {
|
1038
1045
|
'toolchain': 'gcc-10',
|
@@ -1077,6 +1084,7 @@ class TuxSuiteTest(TestCase):
|
|
1077
1084
|
fake_request.get(test_url, json=test_results)
|
1078
1085
|
fake_request.get(build_url, json=build_results)
|
1079
1086
|
fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
|
1087
|
+
fake_request.get(urljoin(storage_url + '/', 'lava-logs.yaml'), text=yaml_logs)
|
1080
1088
|
fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
|
1081
1089
|
fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
|
1082
1090
|
fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
|
@@ -1097,8 +1105,10 @@ class TuxSuiteTest(TestCase):
|
|
1097
1105
|
job_id = 'TEST:tuxgroup@tuxproject#1234'
|
1098
1106
|
testjob = self.build.test_jobs.create(target=self.project, backend=self.backend, job_id=job_id)
|
1099
1107
|
test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/1234')
|
1108
|
+
storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
|
1100
1109
|
|
1101
1110
|
test_logs = 'dummy test log'
|
1111
|
+
yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dummy test log"}'
|
1102
1112
|
test_results = {
|
1103
1113
|
'project': 'tuxgroup/tuxproject',
|
1104
1114
|
'device': 'qemu-armv7',
|
@@ -1127,7 +1137,8 @@ class TuxSuiteTest(TestCase):
|
|
1127
1137
|
'finished_time': '2022-03-25T15:52:42.672483',
|
1128
1138
|
'retries': 0,
|
1129
1139
|
'retries_messages': [],
|
1130
|
-
'duration': 151
|
1140
|
+
'duration': 151,
|
1141
|
+
'download_url': storage_url,
|
1131
1142
|
}
|
1132
1143
|
|
1133
1144
|
expected_metadata = {
|
@@ -1163,6 +1174,7 @@ class TuxSuiteTest(TestCase):
|
|
1163
1174
|
with requests_mock.Mocker() as fake_request:
|
1164
1175
|
fake_request.get(test_url, json=test_results)
|
1165
1176
|
fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
|
1177
|
+
fake_request.get(urljoin(storage_url + '/', 'lava-logs.yaml'), text=yaml_logs)
|
1166
1178
|
fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
|
1167
1179
|
fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
|
1168
1180
|
fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
|
@@ -1183,8 +1195,10 @@ class TuxSuiteTest(TestCase):
|
|
1183
1195
|
testjob = self.build.test_jobs.create(target=self.project, backend=self.backend, job_id=job_id)
|
1184
1196
|
test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/123')
|
1185
1197
|
build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/456')
|
1198
|
+
storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
|
1186
1199
|
|
1187
1200
|
test_logs = 'dummy test log'
|
1201
|
+
yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dummy test log"}'
|
1188
1202
|
test_results = {
|
1189
1203
|
'project': 'tuxgroup/tuxproject',
|
1190
1204
|
'device': 'qemu-armv7',
|
@@ -1213,7 +1227,8 @@ class TuxSuiteTest(TestCase):
|
|
1213
1227
|
'finished_time': '2022-03-25T15:52:42.672483',
|
1214
1228
|
'retries': 0,
|
1215
1229
|
'retries_messages': [],
|
1216
|
-
'duration': 151
|
1230
|
+
'duration': 151,
|
1231
|
+
'download_url': storage_url,
|
1217
1232
|
}
|
1218
1233
|
build_results = {
|
1219
1234
|
'toolchain': 'gcc-10',
|
@@ -1262,6 +1277,7 @@ class TuxSuiteTest(TestCase):
|
|
1262
1277
|
with requests_mock.Mocker() as fake_request:
|
1263
1278
|
fake_request.get(build_url, json=build_results)
|
1264
1279
|
fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
|
1280
|
+
fake_request.get(urljoin(storage_url + '/', 'lava-logs.yaml'), text=yaml_logs)
|
1265
1281
|
fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
|
1266
1282
|
fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
|
1267
1283
|
fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
|
@@ -1283,6 +1299,7 @@ class TuxSuiteTest(TestCase):
|
|
1283
1299
|
testjob = self.build.test_jobs.create(target=self.project, backend=self.backend, job_id=job_id)
|
1284
1300
|
test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/125')
|
1285
1301
|
build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/567')
|
1302
|
+
storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
|
1286
1303
|
|
1287
1304
|
# Only fetch when finished
|
1288
1305
|
with requests_mock.Mocker() as fake_request:
|
@@ -1291,6 +1308,7 @@ class TuxSuiteTest(TestCase):
|
|
1291
1308
|
self.assertEqual(None, results)
|
1292
1309
|
|
1293
1310
|
test_logs = 'dummy test log'
|
1311
|
+
yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dummy test log"}'
|
1294
1312
|
test_results = {
|
1295
1313
|
'project': 'tuxgroup/tuxproject',
|
1296
1314
|
'device': 'qemu-armv7',
|
@@ -1319,7 +1337,8 @@ class TuxSuiteTest(TestCase):
|
|
1319
1337
|
'finished_time': '2022-03-25T15:52:42.672483',
|
1320
1338
|
'retries': 0,
|
1321
1339
|
'retries_messages': [],
|
1322
|
-
'duration': 151
|
1340
|
+
'duration': 151,
|
1341
|
+
'download_url': storage_url,
|
1323
1342
|
}
|
1324
1343
|
build_results = {
|
1325
1344
|
'toolchain': 'gcc-10',
|
@@ -1365,6 +1384,7 @@ class TuxSuiteTest(TestCase):
|
|
1365
1384
|
fake_request.get(test_url, json=test_results)
|
1366
1385
|
fake_request.get(build_url, json=build_results)
|
1367
1386
|
fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
|
1387
|
+
fake_request.get(urljoin(storage_url + '/', 'lava-logs.yaml'), text=yaml_logs)
|
1368
1388
|
fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
|
1369
1389
|
fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
|
1370
1390
|
fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
|
@@ -1585,8 +1605,10 @@ class TuxSuiteTest(TestCase):
|
|
1585
1605
|
test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/124')
|
1586
1606
|
sanity_test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/123')
|
1587
1607
|
build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/456')
|
1608
|
+
storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
|
1588
1609
|
|
1589
1610
|
test_logs = 'dummy test log'
|
1611
|
+
yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dumumy test log"}'
|
1590
1612
|
test_results = {
|
1591
1613
|
'project': 'tuxgroup/tuxproject',
|
1592
1614
|
'uid': '124',
|
@@ -1596,6 +1618,7 @@ class TuxSuiteTest(TestCase):
|
|
1596
1618
|
'results': {'boot': 'pass', 'ltp-smoke': 'pass'},
|
1597
1619
|
'plan': None,
|
1598
1620
|
'waiting_for': 'TEST#123',
|
1621
|
+
'download_url': storage_url,
|
1599
1622
|
}
|
1600
1623
|
sanity_test_results = {
|
1601
1624
|
'project': 'tuxgroup/tuxproject',
|
@@ -1646,6 +1669,7 @@ class TuxSuiteTest(TestCase):
|
|
1646
1669
|
fake_request.get(sanity_test_url, json=sanity_test_results)
|
1647
1670
|
fake_request.get(build_url, json=build_results)
|
1648
1671
|
fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
|
1672
|
+
fake_request.get(urljoin(storage_url, 'lava-logs.yaml'), text=yaml_logs)
|
1649
1673
|
fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
|
1650
1674
|
fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
|
1651
1675
|
fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
|
@@ -1659,7 +1683,7 @@ class TuxSuiteTest(TestCase):
|
|
1659
1683
|
self.assertEqual(sorted(expected_metrics.items()), sorted(metrics.items()))
|
1660
1684
|
self.assertEqual(test_logs, logs)
|
1661
1685
|
|
1662
|
-
self.assertEqual(
|
1686
|
+
self.assertEqual(9, fake_request.call_count)
|
1663
1687
|
|
1664
1688
|
self.assertEqual('ltp-smoke', testjob.name)
|
1665
1689
|
|
@@ -1671,8 +1695,10 @@ class TuxSuiteTest(TestCase):
|
|
1671
1695
|
test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/124')
|
1672
1696
|
sanity_test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/112233')
|
1673
1697
|
build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/456')
|
1698
|
+
storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
|
1674
1699
|
|
1675
1700
|
test_logs = 'dummy test log'
|
1701
|
+
yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dummy test log"}'
|
1676
1702
|
test_results = {
|
1677
1703
|
'project': 'tuxgroup/tuxproject',
|
1678
1704
|
'uid': '124',
|
@@ -1682,6 +1708,7 @@ class TuxSuiteTest(TestCase):
|
|
1682
1708
|
'results': {'boot': 'pass', 'ltp-smoke': 'pass'},
|
1683
1709
|
'plan': None,
|
1684
1710
|
'waiting_for': 'TEST#112233',
|
1711
|
+
'download_url': storage_url,
|
1685
1712
|
}
|
1686
1713
|
sanity_test_results = {
|
1687
1714
|
'project': 'tuxgroup/tuxproject',
|
@@ -1693,6 +1720,7 @@ class TuxSuiteTest(TestCase):
|
|
1693
1720
|
'result': 'pass',
|
1694
1721
|
'results': {'boot': 'pass', 'ltp-smoke': 'pass'},
|
1695
1722
|
'plan': None,
|
1723
|
+
'download_url': storage_url,
|
1696
1724
|
}
|
1697
1725
|
build_results = {
|
1698
1726
|
'toolchain': 'gcc-10',
|
@@ -1711,6 +1739,7 @@ class TuxSuiteTest(TestCase):
|
|
1711
1739
|
fake_request.get(build_url, json=build_results)
|
1712
1740
|
fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
|
1713
1741
|
fake_request.get(urljoin(sanity_test_url + '/', 'logs'), text=test_logs)
|
1742
|
+
fake_request.get(urljoin(storage_url, 'lava-logs.yaml'), text=yaml_logs)
|
1714
1743
|
fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
|
1715
1744
|
fake_request.get(urljoin(sanity_test_url + '/', 'results'), json=test_results_json)
|
1716
1745
|
fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
|
@@ -1731,12 +1760,12 @@ class TuxSuiteTest(TestCase):
|
|
1731
1760
|
completed=completed,
|
1732
1761
|
attachments=attachments,
|
1733
1762
|
)
|
1734
|
-
self.assertEqual(
|
1763
|
+
self.assertEqual(8, fake_request.call_count)
|
1735
1764
|
|
1736
1765
|
# Now fetch test, and make sure no extra requests were made
|
1737
1766
|
_, _, metadata, _, _, _, _ = self.tuxsuite.fetch(testjob)
|
1738
1767
|
self.assertEqual(build_name, metadata['build_name'])
|
1739
|
-
self.assertEqual(
|
1768
|
+
self.assertEqual(15, fake_request.call_count)
|
1740
1769
|
|
1741
1770
|
self.assertEqual('ltp-smoke', testjob.name)
|
1742
1771
|
|
@@ -4,18 +4,30 @@
|
|
4
4
|
"result": "pass"
|
5
5
|
},
|
6
6
|
"file-download": {
|
7
|
-
"
|
8
|
-
|
9
|
-
"
|
10
|
-
"
|
11
|
-
"
|
12
|
-
"
|
13
|
-
|
7
|
+
"url_repo": {
|
8
|
+
"namespace": "common",
|
9
|
+
"level": "1.1.3.1.1.1",
|
10
|
+
"duration": "0.44",
|
11
|
+
"result": "pass",
|
12
|
+
"extra": {
|
13
|
+
"label": "url_repo",
|
14
|
+
"size": 13697125,
|
15
|
+
"sha256sum": "2b93882efdc3ea9db81de6e9aeeabab6d35dcf95a898aeaa995db44583b29062"
|
16
|
+
}
|
14
17
|
},
|
15
|
-
"
|
16
|
-
|
17
|
-
|
18
|
-
|
18
|
+
"rootfs": {
|
19
|
+
"namespace": "common",
|
20
|
+
"level": "1.5.1",
|
21
|
+
"duration": "8.99",
|
22
|
+
"result": "pass",
|
23
|
+
"extra": {
|
24
|
+
"label": "rootfs",
|
25
|
+
"size": 111407012,
|
26
|
+
"sha256sum": "71bcc7bc8dbd4ac7d02d52aed8886662999d6e6c790f9b9e5220beaf580ccfc1"
|
27
|
+
},
|
28
|
+
"url": "https://storage.tuxboot.com/debian/trixie/arm64/rootfs.ext4.xz"
|
29
|
+
}
|
30
|
+
},
|
19
31
|
"test-overlay": {
|
20
32
|
"duration": "0.00",
|
21
33
|
"extra": {
|
@@ -183,9 +195,9 @@
|
|
183
195
|
"starttc": 994
|
184
196
|
},
|
185
197
|
"ping602": {
|
186
|
-
"endtc": 997,
|
198
|
+
"endtc": "997",
|
187
199
|
"result": "skip",
|
188
|
-
"starttc": 997
|
200
|
+
"starttc": "997"
|
189
201
|
}
|
190
202
|
}
|
191
203
|
}
|
@@ -77,6 +77,12 @@ class FrontendTest(TestCase):
|
|
77
77
|
self.assertContains(response, '<strong>mygroup</strong>', html=True, count=1)
|
78
78
|
self.assertIsNotNone(re.search(r'2</span>\s*projects', response.content.decode()))
|
79
79
|
|
80
|
+
def test_home_unauthenticated(self):
|
81
|
+
client = Client()
|
82
|
+
with self.settings(LOCK_HOME_PAGE=True):
|
83
|
+
response = client.get('/')
|
84
|
+
self.assertEqual(401, response.status_code)
|
85
|
+
|
80
86
|
def test_home_project_count(self):
|
81
87
|
# Test with a logged in user that is not part of the group
|
82
88
|
client = Client()
|
@@ -33,7 +33,7 @@ class TestLinuxLogParser(TestCase):
|
|
33
33
|
|
34
34
|
with self.assertRaises(Exception) as ctx:
|
35
35
|
testrun.tests.get(suite__slug='log-parser-boot')
|
36
|
-
testrun.tests.get(suite__slug='log-parser-
|
36
|
+
testrun.tests.get(suite__slug='log-parser-boot')
|
37
37
|
|
38
38
|
self.assertEqual("Test matching query does not exist.", str(ctx.exception))
|
39
39
|
|
@@ -64,7 +64,7 @@ class TestLinuxLogParser(TestCase):
|
|
64
64
|
testrun = self.new_testrun('kernelexceptiontrace.log')
|
65
65
|
self.plugin.postprocess_testrun(testrun)
|
66
66
|
|
67
|
-
test = testrun.tests.get(suite__slug='log-parser-
|
67
|
+
test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='exception-warning-cpu-pid-at-kernelsmp-smp_call_function_many_cond')
|
68
68
|
self.assertFalse(test.result)
|
69
69
|
self.assertIsNotNone(test.log)
|
70
70
|
self.assertNotIn('Booting Linux', test.log)
|
@@ -76,7 +76,7 @@ class TestLinuxLogParser(TestCase):
|
|
76
76
|
testrun = self.new_testrun('kernelexceptiontrace_without_squarebraces.log')
|
77
77
|
self.plugin.postprocess_testrun(testrun)
|
78
78
|
|
79
|
-
test = testrun.tests.get(suite__slug='log-parser-
|
79
|
+
test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='exception-warning-cpu-pid-at-kernelsmp-smp_call_function_many_cond')
|
80
80
|
self.assertFalse(test.result)
|
81
81
|
self.assertIsNotNone(test.log)
|
82
82
|
self.assertNotIn('Booting Linux', test.log)
|
@@ -88,7 +88,7 @@ class TestLinuxLogParser(TestCase):
|
|
88
88
|
testrun = self.new_testrun('kasan.log')
|
89
89
|
self.plugin.postprocess_testrun(testrun)
|
90
90
|
|
91
|
-
test = testrun.tests.get(suite__slug='log-parser-
|
91
|
+
test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='kasan-bug-kasan-slab-out-of-bounds-in-kmalloc_oob_right')
|
92
92
|
self.assertFalse(test.result)
|
93
93
|
self.assertIsNotNone(test.log)
|
94
94
|
self.assertNotIn('Booting Linux', test.log)
|
@@ -101,7 +101,7 @@ class TestLinuxLogParser(TestCase):
|
|
101
101
|
testrun = self.new_testrun('kcsan_simple.log')
|
102
102
|
self.plugin.postprocess_testrun(testrun)
|
103
103
|
|
104
|
-
test = testrun.tests.get(suite__slug='log-parser-
|
104
|
+
test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='kcsan-bug-kcsan-data-race-in-do_page_fault-spectre_v4_enable_task_mitigation')
|
105
105
|
|
106
106
|
self.assertFalse(test.result)
|
107
107
|
self.assertIsNotNone(test.log)
|
@@ -128,7 +128,7 @@ class TestLinuxLogParser(TestCase):
|
|
128
128
|
testrun = self.new_testrun('kernelpanic-multiline.log')
|
129
129
|
self.plugin.postprocess_testrun(testrun)
|
130
130
|
|
131
|
-
test = testrun.tests.get(suite__slug='log-parser-
|
131
|
+
test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='panic-multiline-kernel-panic-not-syncing-attempted-to-kill-init-exitcode')
|
132
132
|
self.assertFalse(test.result)
|
133
133
|
self.assertIsNotNone(test.log)
|
134
134
|
self.assertNotIn('Booting Linux', test.log)
|
@@ -200,11 +200,11 @@ class TestLinuxLogParser(TestCase):
|
|
200
200
|
self.plugin.postprocess_testrun(testrun)
|
201
201
|
|
202
202
|
tests = testrun.tests
|
203
|
-
test_panic = tests.get(suite__slug='log-parser-
|
204
|
-
test_exception = tests.get(suite__slug='log-parser-
|
205
|
-
test_warning = tests.get(suite__slug='log-parser-
|
206
|
-
test_oops = tests.get(suite__slug='log-parser-
|
207
|
-
test_fault = tests.get(suite__slug='log-parser-
|
203
|
+
test_panic = tests.get(suite__slug='log-parser-boot', metadata__name='panic-multiline-kernel-panic-not-syncing-stack-protector-kernel-stack-is-corrupted-in')
|
204
|
+
test_exception = tests.get(suite__slug='log-parser-boot', metadata__name='exception-warning-cpu-pid-at-driversgpudrmradeonradeon_object-radeon_ttm_bo_destroy')
|
205
|
+
test_warning = tests.get(suite__slug='log-parser-boot', metadata__name='warning-warning-cpu-pid-at-driversregulatorcore-_regulator_putpart')
|
206
|
+
test_oops = tests.get(suite__slug='log-parser-boot', metadata__name='oops-oops-preempt-smp')
|
207
|
+
test_fault = tests.get(suite__slug='log-parser-boot', metadata__name='fault-unhandled-fault-external-abort-on-non-linefetch-at')
|
208
208
|
|
209
209
|
self.assertFalse(test_panic.result)
|
210
210
|
self.assertNotIn('Boot CPU', test_panic.log)
|
@@ -252,7 +252,7 @@ class TestLinuxLogParser(TestCase):
|
|
252
252
|
self.plugin.postprocess_testrun(testrun)
|
253
253
|
|
254
254
|
tests = testrun.tests
|
255
|
-
test_warning = tests.get(suite__slug='log-parser-
|
255
|
+
test_warning = tests.get(suite__slug='log-parser-boot', metadata__name='warning-warning-suspicious-rcu-usage')
|
256
256
|
|
257
257
|
self.assertFalse(test_warning.result)
|
258
258
|
|
@@ -271,7 +271,7 @@ class TestLinuxLogParser(TestCase):
|
|
271
271
|
testrun.save_log_file(log)
|
272
272
|
self.plugin.postprocess_testrun(testrun)
|
273
273
|
|
274
|
-
test = testrun.tests.get(suite__slug='log-parser-
|
274
|
+
test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='panic-kernel-panic-not-syncing')
|
275
275
|
self.assertIsNotNone(test.metadata)
|
276
276
|
|
277
277
|
def test_boot_log(self):
|
@@ -309,11 +309,11 @@ class TestLinuxLogParser(TestCase):
|
|
309
309
|
|
310
310
|
tests = testrun.tests
|
311
311
|
|
312
|
-
test_panic = tests.get(suite__slug='log-parser-
|
313
|
-
test_exception = tests.get(suite__slug='log-parser-
|
314
|
-
test_warning = tests.get(suite__slug='log-parser-
|
315
|
-
test_oops = tests.get(suite__slug='log-parser-
|
316
|
-
test_fault = tests.get(suite__slug='log-parser-
|
312
|
+
test_panic = tests.get(suite__slug='log-parser-boot', metadata__name='panic-multiline-kernel-panic-not-syncing-stack-protector-kernel-stack-is-corrupted-in-630e6949dbf4d18f6ab71c0864524cf3e60da1380fe7fd5acbb99d8f5d01ab21')
|
313
|
+
test_exception = tests.get(suite__slug='log-parser-boot', metadata__name='exception-warning-cpu-pid-at-driversgpudrmradeonradeon_object-radeon_ttm_bo_destroy-51fc34b6c857dfc70f7ee985b21731cc1745e97a216193a258a1ad90a6cbb9c8')
|
314
|
+
test_warning = tests.get(suite__slug='log-parser-boot', metadata__name='warning-warning-cpu-pid-at-driversgpudrmradeonradeon_object-radeon_ttm_bo_destroy-dc992cca96cada94f4930abe87d60c6de25d404f11313bd64f2217d9408e15ef')
|
315
|
+
test_oops = tests.get(suite__slug='log-parser-boot', metadata__name='oops-oops-preempt-smp-4e1ddddb2c142178a8977e7d973c2a13db2bb978aa471c0049ee39fe3fe4d74c')
|
316
|
+
test_fault = tests.get(suite__slug='log-parser-boot', metadata__name='fault-unhandled-fault-external-abort-on-non-linefetch-at-6f9e3ab8f97e35c1e9167fed1e01c6149986819c54451064322b7d4208528e07')
|
317
317
|
|
318
318
|
self.assertFalse(test_panic.result)
|
319
319
|
self.assertNotIn('Boot CPU', test_panic.log)
|
@@ -362,7 +362,7 @@ class TestBaseLogParser(TestCase):
|
|
362
362
|
tests = testrun.tests
|
363
363
|
expected_output = read_sample_file('kfence-seconds-expected.log')
|
364
364
|
|
365
|
-
test_kfence_seconds = tests.get(suite__slug='log-parser-
|
365
|
+
test_kfence_seconds = tests.get(suite__slug='log-parser-boot', metadata__name='kfence-bug-kfence-use-after-free-read-in-test_use_after_free_read-12cdfd85b20ffda2c398b1d6f97a7d5230cd4f2caf19ef0fb38bbc98469d3bde')
|
366
366
|
numbers_and_time_removed = self.log_parser.remove_numbers_and_time(test_kfence_seconds.log)
|
367
367
|
|
368
368
|
self.assertEqual(numbers_and_time_removed.strip(), expected_output.strip())
|
squad-1.96/squad/version.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
__version__ = '1.96'
|
{squad-1.96 → squad-1.97}/.ackrc
RENAMED
File without changes
|
File without changes
|
{squad-1.96 → squad-1.97}/.ctags
RENAMED
File without changes
|
File without changes
|