Test Report

Summary

784
20 error 35 failed 666 passed 63 skipped

Warnings

WARNING
/usr/lib/python3/dist-packages/invoke/loader.py:3
the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
WARNING
/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1015
Unverified HTTPS request is being made to host 'mordor'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
WARNING
/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1015
Unverified HTTPS request is being made to host 'mordor'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
WARNING
/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1015
Unverified HTTPS request is being made to host 'mordor'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
WARNING
/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1015
Unverified HTTPS request is being made to host 'mordor'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
WARNING
/usr/lib/python3/dist-packages/urllib3/connectionpool.py:1015
Unverified HTTPS request is being made to host 'mordor'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

Tests

plinth/modules/apache/tests/test_components.py 12 0:00:00.042316

PASSED test_webserver_init 0:00:00.003732

Test that webserver component can be initialized.

Setup

Call

Teardown

PASSED test_webserver_is_enabled 0:00:00.004055

Test that checking webserver configuration enabled works.

Setup

Call

Teardown

PASSED test_webserver_enable 0:00:00.004152

Test that enabling webserver configuration works.

Setup

Call

Teardown

PASSED test_webserver_disable 0:00:00.004005

Test that disabling webserver configuration works.

Setup

Call

Teardown

PASSED test_webserver_diagnose 0:00:00.004425

Test running diagnostics.

Setup

Call

Teardown

PASSED test_uwsgi_init 0:00:00.003121

Test that uWSGI component can be initialized.

Setup

Call

Teardown

PASSED test_uwsgi_is_enabled 0:00:00.004368

Test that checking uwsgi configuration enabled works.

Setup

Call

Teardown

PASSED test_uwsgi_enable 0:00:00.003683

Test that enabling uwsgi configuration works.

Setup

Call

Teardown

PASSED test_uwsgi_disable 0:00:00.002451

Test that disabling uwsgi configuration works.

Setup

Call

Teardown

PASSED test_uwsgi_is_running 0:00:00.002565

Test checking whether uwsgi is running with a configuration.

Setup

Call

Teardown

PASSED test_diagnose_url 0:00:00.002775

Test diagnosing a URL.

Setup

Call

Teardown

PASSED test_check_url 0:00:00.002984

Test checking whether a URL is accessible.

Setup

Call

Teardown

plinth/modules/apache/tests/test_uws.py 1 0:00:00.001848

PASSED test_uws_namings 0:00:00.001848

Test name solvers for user, url and directory of UWS.

Setup

Call

Teardown

plinth/modules/avahi/tests/test_functional.py 3 0:01:15.597961

PASSED TestAvahiApp::test_enable_disable 0:00:50.840031

Test enabling and disabling the app.

Setup

Call

Teardown

PASSED TestAvahiApp::test_run_diagnostics 0:00:06.173316

Test that all app diagnostics are passing.

Setup

Call

Teardown

PASSED TestAvahiApp::test_backup_restore 0:00:18.584613

Test that backup and restore operations work on the app.

Setup

Call

Teardown

plinth/modules/backups/tests/test_api.py 11 0:00:00.045418

PASSED TestBackupProcesses::test_packet_init 0:00:00.003427

Test that packet is initialized properly.

Setup

Call

Teardown

PASSED TestBackupProcesses::test_packet_collected_files_directories 0:00:00.002850

Test that directories/files are collected from manifests.

Setup

Call

Teardown

PASSED TestBackupProcesses::test_backup_apps 0:00:00.005372

Test that backup_handler is called.

Setup

Call

Teardown

PASSED TestBackupProcesses::test_restore_apps 0:00:00.006595

Test that restore_handler is called.

Setup

Call

Teardown

PASSED TestBackupProcesses::test_get_all_components_for_backup 0:00:00.004178

Test listing components supporting backup and needing backup.

Setup

Call

Teardown

PASSED TestBackupProcesses::test_get_components_in_order 0:00:00.003652

Test that components are listed in correct dependency order.

Setup

Call

Teardown

PASSED TestBackupProcesses::test__lockdown_apps 0:00:00.002571

Test that locked flag is set for each app.

Setup

Call

Teardown

PASSED TestBackupProcesses::test__shutdown_services 0:00:00.004407

Test that services are stopped in correct order.

Setup

Call

Teardown

PASSED TestBackupProcesses::test__restore_services 0:00:00.003940

Test that services are restored in correct order.

Setup

Call

Teardown

PASSED TestBackupProcesses::test__run_operation 0:00:00.005987

Test that operation runs handler and app hooks.

Setup

Call

Teardown

PASSED TestBackupModule::test_file_upload 0:00:00.002439

Setup

Call

Teardown

plinth/modules/backups/tests/test_backups.py 9 0:00:00.004633

SKIPPED test_nonexisting_repository 0:00:00.000661

Test that non-existent directory as borg repository throws error.

Skipped: Needs to be root

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/conftest.py', 93, 'Skipped: Needs to be root')

Teardown

SKIPPED test_empty_dir 0:00:00.000536

Test that empty directory as borg repository throws error.

Skipped: Needs to be root

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/conftest.py', 93, 'Skipped: Needs to be root')

Teardown

SKIPPED test_create_unencrypted_repository 0:00:00.000492

Test creating an unencrypted repository.

Skipped: Needs to be root

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/conftest.py', 93, 'Skipped: Needs to be root')

Teardown

SKIPPED test_create_export_delete_archive 0:00:00.000552

  • Create a repo

  • Create an archive

  • Verify archive content

  • Delete archive

Skipped: Needs to be root

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/conftest.py', 93, 'Skipped: Needs to be root')

Teardown

SKIPPED test_remote_backup_actions 0:00:00.000477

Test creating an encrypted remote repository using borg directly.

This relies on borgbackups being installed on the remote machine.

Skipped: Needs to be root

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/conftest.py', 93, 'Skipped: Needs to be root')

Teardown

SKIPPED test_sshfs_mount_password 0:00:00.000482

Test (un)mounting if password for a remote location is given

Skipped: Needs to be root

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/conftest.py', 93, 'Skipped: Needs to be root')

Teardown

SKIPPED test_sshfs_mount_keyfile 0:00:00.000488

Test (un)mounting if keyfile for a remote location is given

Skipped: Needs to be root

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/conftest.py', 93, 'Skipped: Needs to be root')

Teardown

SKIPPED test_access_nonexisting_url 0:00:00.000474

Test accessing a non-existent URL.

Skipped: Needs to be root

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/conftest.py', 93, 'Skipped: Needs to be root')

Teardown

SKIPPED test_inaccessible_repo_url 0:00:00.000471

Test accessing an existing URL with wrong credentials.

Skipped: Needs to be root

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/conftest.py', 93, 'Skipped: Needs to be root')

Teardown

plinth/modules/backups/tests/test_components.py 47 0:00:00.818204

PASSED test_backup_restore_backup_pre 0:00:00.713763

Test running backup-pre hook.

Setup

Captured stderr setup
Creating test database for alias 'default'...

Call

Teardown

PASSED test_backup_restore_restore_post 0:00:00.004504

Test running restore-post hook.

Setup

Call

Teardown

PASSED test_valid_directories_and_files[None] 0:00:00.002083

Test that valid values of files and directories.

Setup

Call

Teardown

PASSED test_valid_directories_and_files[section1] 0:00:00.002245

Test that valid values of files and directories.

Setup

Call

Teardown

PASSED test_valid_directories_and_files[section2] 0:00:00.002142

Test that valid values of files and directories.

Setup

Call

Teardown

PASSED test_valid_directories_and_files[section3] 0:00:00.002205

Test that valid values of files and directories.

Setup

Call

Teardown

PASSED test_valid_directories_and_files[section4] 0:00:00.001985

Test that valid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[invalid] 0:00:00.002034

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[10] 0:00:00.002099

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[section2] 0:00:00.002275

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[section3] 0:00:00.002192

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[section4] 0:00:00.002113

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[section5] 0:00:00.002089

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[section6] 0:00:00.002013

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[section7] 0:00:00.002289

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[section8] 0:00:00.002252

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[section9] 0:00:00.002190

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_invalid_directories_and_files[section10] 0:00:00.002045

Test that invalid values of files and directories.

Setup

Call

Teardown

PASSED test_valid_services[None] 0:00:00.001960

Test that valid values of services.

Setup

Call

Teardown

PASSED test_valid_services[services1] 0:00:00.002064

Test that valid values of services.

Setup

Call

Teardown

PASSED test_valid_services[services2] 0:00:00.002190

Test that valid values of services.

Setup

Call

Teardown

PASSED test_valid_services[services3] 0:00:00.002867

Test that valid values of services.

Setup

Call

Teardown

PASSED test_valid_services[services4] 0:00:00.003157

Test that valid values of services.

Setup

Call

Teardown

PASSED test_valid_services[services5] 0:00:00.002179

Test that valid values of services.

Setup

Call

Teardown

PASSED test_valid_services[services6] 0:00:00.002043

Test that valid values of services.

Setup

Call

Teardown

PASSED test_valid_services[services7] 0:00:00.002200

Test that valid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[10] 0:00:00.002171

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[invalid] 0:00:00.002315

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[services2] 0:00:00.002237

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[services3] 0:00:00.002189

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[services4] 0:00:00.002368

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[services5] 0:00:00.002281

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[services6] 0:00:00.002286

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[services7] 0:00:00.002140

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[services8] 0:00:00.002216

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[services9] 0:00:00.002200

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[services10] 0:00:00.002199

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_invalid_services[services11] 0:00:00.002183

Test that invalid values of services.

Setup

Call

Teardown

PASSED test_backup_restore_init_default_arguments 0:00:00.002036

Test initialization of the backup restore object.

Setup

Call

Teardown

PASSED test_backup_restore_init[config] 0:00:00.002099

Test initialization of the backup restore object.

Setup

Call

Teardown

PASSED test_backup_restore_init[data] 0:00:00.003127

Test initialization of the backup restore object.

Setup

Call

Teardown

PASSED test_backup_restore_init[secrets] 0:00:00.002278

Test initialization of the backup restore object.

Setup

Call

Teardown

PASSED test_backup_restore_init_services 0:00:00.002050

Test initialization of the backup restore object.

Setup

Call

Teardown

PASSED test_backup_restore_init_settings 0:00:00.002091

Test initialization of the backup restore object.

Setup

Call

Teardown

PASSED test_backup_restore_equal 0:00:00.002111

Test equality operator on the backup restore object.

Setup

Call

Teardown

PASSED test_backup_restore_manifest 0:00:00.002221

Test manifest retrieval from backup restore object.

Setup

Call

Teardown

PASSED test_backup_restore_hooks 0:00:00.002230

Test running hooks on backup restore object.

Setup

Call

Teardown

plinth/modules/backups/tests/test_functional.py 3 0:01:42.955702

PASSED test_browser_waits_after_restore 0:01:05.016847

Test that browser waits for redirect after restoring a backup.

Setup

Call

Teardown

PASSED test_download_upload_restore 0:00:22.890771

Test download, upload, and restore a backup.

Setup

Call

Teardown

PASSED test_set_schedule 0:00:15.048085

Test set a schedule for a repository.

Setup

Call

Teardown

plinth/modules/backups/tests/test_schedule.py 29 0:00:00.216133

PASSED test_init_default_values 0:00:00.002058

Test initialization of schedule with default values.

Setup

Call

Teardown

PASSED test_init 0:00:00.001939

Test initialization with explicit values.

Setup

Call

Teardown

PASSED test_get_storage_format 0:00:00.003153

Test that storage format is properly returned.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params0-archives_data0-test_now0-run_periods0-cleanups0] 0:00:00.005314

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params1-archives_data1-test_now1-run_periods1-cleanups1] 0:00:00.006615

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params2-archives_data2-test_now2-run_periods2-cleanups2] 0:00:00.025773

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params3-archives_data3-test_now3-run_periods3-cleanups3] 0:00:00.008187

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params4-archives_data4-test_now4-run_periods4-cleanups4] 0:00:00.006521

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params5-archives_data5-test_now5-run_periods5-cleanups5] 0:00:00.007301

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params6-archives_data6-test_now6-run_periods6-cleanups6] 0:00:00.006422

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params7-archives_data7-test_now7-run_periods7-cleanups7] 0:00:00.008601

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params8-archives_data8-test_now8-run_periods8-cleanups8] 0:00:00.006371

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params9-archives_data9-test_now9-run_periods9-cleanups9] 0:00:00.007167

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params10-archives_data10-test_now10-run_periods10-cleanups10] 0:00:00.006438

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params11-archives_data11-test_now11-run_periods11-cleanups11] 0:00:00.008738

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params12-archives_data12-test_now12-run_periods12-cleanups12] 0:00:00.006669

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params13-archives_data13-test_now13-run_periods13-cleanups13] 0:00:00.007011

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params14-archives_data14-test_now14-run_periods14-cleanups14] 0:00:00.008363

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params15-archives_data15-test_now15-run_periods15-cleanups15] 0:00:00.006811

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params16-archives_data16-test_now16-run_periods16-cleanups16] 0:00:00.006663

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params17-archives_data17-test_now17-run_periods17-cleanups17] 0:00:00.007478

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params18-archives_data18-test_now18-run_periods18-cleanups18] 0:00:00.008355

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params19-archives_data19-test_now19-run_periods19-cleanups19] 0:00:00.006746

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params20-archives_data20-test_now20-run_periods20-cleanups20] 0:00:00.006568

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params21-archives_data21-test_now21-run_periods21-cleanups21] 0:00:00.006710

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params22-archives_data22-test_now22-run_periods22-cleanups22] 0:00:00.009029

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params23-archives_data23-test_now23-run_periods23-cleanups23] 0:00:00.007722

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params24-archives_data24-test_now24-run_periods24-cleanups24] 0:00:00.007836

Test that backups are run at expected time.

Setup

Call

Teardown

PASSED test_run_schedule[schedule_params25-archives_data25-test_now25-run_periods25-cleanups25] 0:00:00.009573

Test that backups are run at expected time.

Setup

Call

Teardown

plinth/modules/backups/tests/test_ssh_remotes.py 4 0:00:00.001479

SKIPPED test_user_setup 0:00:00.000396

Skipped: unconditional skip

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/modules/backups/tests/test_ssh_remotes.py', 71, 'Skipped: unconditional skip')

Teardown

SKIPPED test_add_repository_when_directory_is_missing 0:00:00.000368

Skipped: unconditional skip

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/modules/backups/tests/test_ssh_remotes.py', 77, 'Skipped: unconditional skip')

Teardown

SKIPPED test_add_repository_when_directory_exists_and_empty 0:00:00.000355

Skipped: unconditional skip

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/modules/backups/tests/test_ssh_remotes.py', 92, 'Skipped: unconditional skip')

Teardown

SKIPPED test_add_repository_when_directory_exists_and_not_empty 0:00:00.000359

Skipped: unconditional skip

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/modules/backups/tests/test_ssh_remotes.py', 108, 'Skipped: unconditional skip')

Teardown

plinth/modules/backups/tests/test_store.py 4 0:00:00.018647

PASSED test_add 0:00:00.004258

Add a storage item

Setup

Call

Teardown

PASSED test_add_invalid 0:00:00.002603

Add a storage item

Setup

Call

Teardown

PASSED test_remove 0:00:00.005753

Add and remove storage items

Setup

Call

Teardown

PASSED test_update 0:00:00.006032

Update existing storage items

Setup

Call

Teardown

plinth/modules/backups/tests/test_validators.py 5 0:00:00.013287

PASSED test_repository_paths_validation 0:00:00.002803

Test that repository strings are validated properly.

Setup

Call

Teardown

PASSED test_repository_username_validation 0:00:00.003595

Test that usernames in repository string are validated properly.

Setup

Call

Teardown

PASSED test_repository_hostname_validation 0:00:00.002702

Test that hostnames in repository string are validated properly.

Setup

Call

Teardown

PASSED test_repository_dir_path_validation 0:00:00.002279

Test that paths in repository string are validated properly.

Setup

Call

Teardown

PASSED test_repository_with_colon_path 0:00:00.001909

Test that a colon is possible in directory path.

Setup

Call

Teardown

plinth/modules/bepasty/tests/test_functional.py 8 0:05:31.101103

PASSED TestBepastyApp::test_set_default_permissions_list_and_read_all 0:02:53.867740

Setup

Call

Teardown

PASSED TestBepastyApp::test_set_default_permissions_read_files 0:00:12.062320

Setup

Call

Teardown

PASSED TestBepastyApp::test_add_password 0:00:21.262405

Setup

Call

Teardown

PASSED TestBepastyApp::test_remove_password 0:00:18.091495

Setup

Call

Teardown

PASSED TestBepastyApp::test_backup_and_restore 0:00:41.280101

Setup

Call

Captured stdout call
URL = https://mordor:4430/bepasty/ https://mordor:4430/bepasty Bepasty

Teardown

PASSED TestBepastyApp::test_enable_disable 0:00:19.576099

Test enabling and disabling the app.

Setup

Call

Captured stdout call
URL = https://mordor:4430/bepasty/ https://mordor:4430/bepasty 404 Not Found
URL = https://mordor:4430/bepasty/ https://mordor:4430/bepasty Bepasty

Teardown

PASSED TestBepastyApp::test_run_diagnostics 0:00:07.951709

Test that all app diagnostics are passing.

Setup

Call

Teardown

PASSED TestBepastyApp::test_backup_restore 0:00:37.009235

Test that backup and restore operations work on the app.

Setup

Call

Captured stdout call
URL = https://mordor:4430/bepasty/ https://mordor:4430/bepasty Bepasty

Teardown

plinth/modules/bind/tests/test_bind.py 3 0:00:00.113287

PASSED test_set_forwarders 0:00:00.005197

Test that setting forwarders works.

Setup

Call

Teardown

PASSED test_enable_dnssec 0:00:00.003879

Test that enabling DNSSEC works.

Setup

Call

Teardown

PASSED test_get_correct_served_domains 0:00:00.104210

Test that get_served_domains collects the right a/aaaa records from zone files

Setup

Call

Teardown

plinth/modules/bind/tests/test_functional.py 5 0:00:56.840601

PASSED TestBindApp::test_set_forwarders 0:00:06.165634

Test setting forwarders.

Setup

Call

Teardown

PASSED TestBindApp::test_enable_disable_dnssec 0:00:08.247434

Test enabling/disabling DNSSEC.

Setup

Call

Teardown

PASSED TestBindApp::test_backup_restore 0:00:25.133686

Test backup and restore.

Setup

Call

Teardown

PASSED TestBindApp::test_enable_disable 0:00:10.694678

Test enabling and disabling the app.

Setup

Call

Teardown

PASSED TestBindApp::test_run_diagnostics 0:00:06.599169

Test that all app diagnostics are passing.

Setup

Call

Teardown

plinth/modules/calibre/tests/test_actions.py 12 0:00:00.063751

PASSED test_list_libraries 0:00:00.036424

Test listing libraries.

Setup

Call

Teardown

FAILED test_create_library 0:00:00.011502

Test creating a library.

assert 16832 == 16877
  +16832
  -16877

Setup

Call

chown = <MagicMock name='chown' id='140662277492896'>
call_action = <function fixture_call_action.<locals>._call_action at 0x7fee7cd1bb80>
actions_module = <module 'calibre' from '/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/actions/calibre'>

    @patch('shutil.chown')
    def test_create_library(chown, call_action, actions_module):
        """Test creating a library."""
        call_action(['create-library', 'TestLibrary'])
        library = actions_module.LIBRARIES_PATH / 'TestLibrary'
        assert (library / 'metadata.db').exists()
>       assert library.stat().st_mode == 0o40755
E       assert 16832 == 16877
E         +16832
E         -16877

plinth/modules/calibre/tests/test_actions.py:52: AssertionError

Teardown

PASSED test_delete_library 0:00:00.015825

Test deleting a library.

Setup

Call

Teardown

plinth/modules/calibre/tests/test_functional.py 5 0:42:05.701637

PASSED TestCalibreApp::test_add_delete_library 0:40:34.799687

Test adding/deleting a new library.

Setup

Call

Teardown

PASSED TestCalibreApp::test_add_delete_book 0:00:28.434901

Test adding/delete book in the library.

Setup

Call

Teardown

PASSED TestCalibreApp::test_backup_restore 0:00:32.837218

Test backing up and restoring.

Setup

Call

Teardown

PASSED TestCalibreApp::test_enable_disable 0:00:20.913653

Test enabling and disabling the app.

Setup

Call

Captured stdout call
URL = https://mordor:4430/calibre https://mordor:4430/calibre 404 Not Found
URL = https://mordor:4430/calibre https://mordor:4430/calibre calibre

Teardown

PASSED TestCalibreApp::test_run_diagnostics 0:00:08.716178

Test that all app diagnostics are passing.

Setup

Call

Teardown

plinth/modules/calibre/tests/test_views.py 8 0:00:00.099742

PASSED test_create_library 0:00:00.041232

Test that create library view works.

Setup

Call

Teardown

PASSED test_create_library_failed 0:00:00.007626

Test that create library fails as expected.

Setup

Call

Teardown

PASSED test_create_library_existing_library 0:00:00.007084

Test that create library errors out for an existing library name.

Setup

Call

Teardown

PASSED test_create_library_invalid_name 0:00:00.008883

Test that create library errors out for invalid name.

Setup

Call

Teardown

PASSED test_delete_library_confirmation_view 0:00:00.005397

Test that deleting library confirmation shows correct name.

Setup

Call

Teardown

PASSED test_delete_library 0:00:00.021422

Test that deleting a library works.

Setup

Call

Teardown

PASSED test_delete_library_error 0:00:00.004652

Test that deleting a library shows error when operation fails.

Setup

Call

Teardown

PASSED test_delete_library_non_existing 0:00:00.003447

Test that deleting a library shows error when operation fails.

Setup

Call

Teardown

plinth/modules/cockpit/tests/test_functional.py 3 0:00:45.085567

PASSED TestCockpitApp::test_enable_disable 0:00:16.206742

Test enabling and disabling the app.

Setup

Call

Captured stdout call
URL = https://mordor:4430/_cockpit/ https://mordor:4430/_cockpit/ 404 Not Found
URL = https://mordor:4430/_cockpit/ https://mordor:4430/_cockpit/ freedombox

Teardown

PASSED TestCockpitApp::test_run_diagnostics 0:00:06.419139

Test that all app diagnostics are passing.

Setup

Call

Teardown

PASSED TestCockpitApp::test_backup_restore 0:00:22.459686

Test that backup and restore operations work on the app.

Setup

Call

Captured stdout call
URL = https://mordor:4430/_cockpit/ https://mordor:4430/_cockpit/ freedombox

Teardown

plinth/modules/config/tests/test_config.py 42 0:00:00.020493

PASSED test_hostname_field 0:00:00.006406

Test that hostname field accepts only valid hostnames.

Setup

Call

Teardown

PASSED test_domainname_field 0:00:00.007086

Test that domainname field accepts only valid domainnames.

Setup

Call

Teardown

PASSED test_homepage_mapping 0:00:00.001965

Basic tests for homepage functions.

Setup

Call

Teardown

SKIPPED test_homepage_mapping_skip_ci 0:00:00.001969

Special tests for homepage functions.

Skipped: Needs access to ~/ directory. CI sandboxed workspace doesn't provide it.

Setup

Call

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/modules/config/tests/test_config.py', 98, "Skipped: Needs access to ~/ directory. CI sandboxed workspace doesn't provide it.")

Teardown

SKIPPED test_homepage_field 0:00:00.000565

Test homepage changes.

Test Cases:
  1. FreedomBox Homepage (default),

  2. Apache default,

3) A user's website of an... 3.1) unexisting user 3.2) existing user without a page 3.3) existing user page. 4) A FreedomBox App. 4.1) unknown app 4.2) uninstalled app 4.3) disabled app 4.4) enabled app

Note: If run on a pristine unconfigured FreedomBox, this test will leave

the homepage default-configured. (Imperfect cleanup in such case).

Note: We take fbx as website user because of our testing container.

Pending: - Specific test cases to distinguish 4.1,2,3.

Currently they share the same test case.

  • Search for another valid user apart from fbx.

Skipped: Needs to be root

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/conftest.py', 93, 'Skipped: Needs to be root')

Teardown

PASSED test_locale_path 0:00:00.002502

Test that the 'locale' directory is in the same folder as __main__.py. This is required for detecting translated languages.

Setup

Call

Teardown

plinth/modules/config/tests/test_functional.py 3 0:01:07.213816

PASSED test_change_hostname 0:00:04.660829

Test changing the hostname.

Setup

Call

Teardown

PASSED test_change_domain_name 0:00:18.644960

Test changing the domain name.

Setup

Call

Teardown

PASSED test_change_home_page 0:00:43.908027

Test changing webserver home page.

Setup

Call

Teardown

plinth/modules/coturn/tests/test_components.py 4 0:00:00.012840

PASSED test_configuration_init 0:00:00.002441

Test creating configuration object.

Setup

Call

Teardown

PASSED test_component_init_and_list 0:00:00.003064

Test initializing and listing all the components.

Setup

Call

Teardown

PASSED test_notify_on_configuration_changed 0:00:00.004029

Test configuration change notifications.

Setup

Call

Teardown

PASSED test_get_configuration 0:00:00.003306

Test coturn configuration retrieval using component.

Setup

Call

Teardown

plinth/modules/coturn/tests/test_functional.py 21 0:01:55.129482

PASSED TestCoturnApp::test_enable_disable 0:01:24.994995

Test enabling and disabling the app.

Setup

Call

Teardown

SKIPPED TestCoturnApp::test_run_diagnostics 0:00:05.220545

Test that all app diagnostics are passing.

Skipped: Skipping diagnostics check for coturn.

Setup

Call

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/tests/functional/__init__.py', 643, 'Skipped: Skipping diagnostics check for coturn.')

Teardown

PASSED TestCoturnApp::test_backup_restore 0:00:24.913942

Test that backup and restore operations work on the app.

Setup

Call

Teardown

plinth/modules/datetime/tests/test_functional.py 3 0:00:23.971829

PASSED test_enable_disable 0:00:06.005627

Test enabling the app.

Setup

Call

Teardown

PASSED test_set_timezone 0:00:00.733594

Test setting the timezone.

Setup

Call

Teardown

PASSED test_backup_and_restore 0:00:17.232608

Test backup and restore of datetime settings.

Setup

Call

Teardown

plinth/modules/deluge/tests/test_functional.py 14 0:06:22.163724

PASSED TestDelugeApp::test_bittorrent_group 0:04:25.904104

Test if only users in bit-torrent group can access Deluge.

Setup

Call

Captured stdout call
URL = https://mordor:4430/deluge https://mordor:4430/deluge Deluge WebUI 2.0.3
URL = https://mordor:4430/plinth?next=https%3a%2f%2fmordor%3a4430%2fdeluge https://mordor:4430/deluge FreedomBox

Teardown

PASSED TestDelugeApp::test_upload_torrent 0:00:18.764663

Test uploading a torrent.

Setup

Call

Teardown

PASSED TestDelugeApp::test_backup_restore 0:00:51.710048

Test backup and restore.

Setup

Call

Teardown

ERROR TestDelugeApp::test_enable_disable 0:00:31.578781

Test enabling and disabling the app.

TypeError: expected string or bytes-like object

Setup

Call

Captured stdout call
URL = https://mordor:4430/deluge https://mordor:4430/deluge 404 Not Found
URL = https://mordor:4430/deluge https://mordor:4430/deluge Deluge WebUI 2.0.3

Teardown

self = <plinth.modules.deluge.tests.test_functional.TestDelugeApp object at 0x7fee7dc1c580>
session_browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>

    @pytest.fixture(autouse=True)
    def fixture_background(self, session_browser):
        """Login, install, and enable the app."""
        login(session_browser)
        install(session_browser, self.app_name)
        app_enable(session_browser, self.app_name)
        yield
        login(session_browser)
>       app_disable(session_browser, self.app_name)

plinth/tests/functional/__init__.py:630: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
plinth/tests/functional/__init__.py:387: in app_disable
    _change_app_status(browser, app_name, 'disabled')
plinth/tests/functional/__init__.py:370: in _change_app_status
    submit(browser, element=button)
plinth/tests/functional/__init__.py:203: in submit
    browser.find_by_css('input[type=submit]').click()
/usr/lib/python3.9/contextlib.py:124: in __exit__
    next(self.gen)
plinth/tests/functional/__init__.py:134: in wait_for_page_update
    WebDriverWait(browser, timeout).until(_PageLoaded(page_body, expected_url))
../../../../.local/lib/python3.9/site-packages/selenium/webdriver/support/wait.py:71: in until
    value = method(self._driver)
plinth/tests/functional/__init__.py:101: in __call__
    self.element.has_class('whatever_class')
../../../../.local/lib/python3.9/site-packages/splinter/driver/webdriver/__init__.py:917: in has_class
    re.search(r"(?:^|\s)" + re.escape(class_name) + r"(?:$|\s)", self["class"])
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

pattern = '(?:^|\\s)whatever_class(?:$|\\s)', string = None, flags = 0

    def search(pattern, string, flags=0):
        """Scan through string looking for a match to the pattern, returning
        a Match object, or None if no match was found."""
>       return _compile(pattern, flags).search(string)
E       TypeError: expected string or bytes-like object

/usr/lib/python3.9/re.py:201: TypeError

PASSED TestDelugeApp::test_run_diagnostics 0:00:14.206128

Test that all app diagnostics are passing.

Setup

Call

Teardown

plinth/modules/deluge/tests/test_utils.py 3 0:00:00.071901

PASSED test_initialization 0:00:00.003623

Test object initialization.

Setup

Call

Teardown

PASSED test_load 0:00:00.004189

Test loading the configuration file.

Setup

Call

Teardown

PASSED test_save 0:00:00.064089

Test save the configuration file.

Setup

Call

Teardown

plinth/modules/dynamicdns/tests/test_functional.py 81 0:02:15.359552

PASSED TestDynamicDNSApp::test_capitalized_domain_name 0:00:13.906356

Test handling of capitalized domain name.

Setup

Call

Teardown

PASSED TestDynamicDNSApp::test_various_form_values[gnudip1] 0:00:03.563125

Test feeding various values and check that they are saved.

Setup

Call

Teardown

PASSED TestDynamicDNSApp::test_various_form_values[gnudip2] 0:00:15.707514

Test feeding various values and check that they are saved.

Setup

Call

Teardown

PASSED TestDynamicDNSApp::test_various_form_values[noip.com] 0:00:16.364693

Test feeding various values and check that they are saved.

Setup

Call

Teardown

PASSED TestDynamicDNSApp::test_various_form_values[freedns.afraid.org] 0:00:16.353067

Test feeding various values and check that they are saved.

Setup

Call

Teardown

PASSED TestDynamicDNSApp::test_various_form_values[other] 0:00:17.025162

Test feeding various values and check that they are saved.

Setup

Call

Teardown

PASSED TestDynamicDNSApp::test_backup_restore 0:00:47.469504

Test backup and restore of configuration.

Setup

Call

Teardown

PASSED TestDynamicDNSApp::test_enable_disable 0:00:03.214004

Test enabling and disabling the app.

Setup

Call

Teardown

SKIPPED TestDynamicDNSApp::test_run_diagnostics 0:00:01.756127

Test that all app diagnostics are passing.

Skipped: Skipping diagnostics check for dynamicdns.

Setup

Call

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/tests/functional/__init__.py', 643, 'Skipped: Skipping diagnostics check for dynamicdns.')

Teardown

plinth/modules/ejabberd/tests/test_functional.py 13 0:11:47.843792

PASSED TestEjabberdApp::test_message_archive_management 0:05:36.324633

Test enabling message archive management.

Setup

Call

Teardown

FAILED TestEjabberdApp::test_backup_restore 0:05:21.897852

Test backup and restore of app data.

selenium.common.exceptions.TimeoutException: Message:

Setup

Call

self = <plinth.modules.ejabberd.tests.test_functional.TestEjabberdApp object at 0x7fee7cca37c0>
session_browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>

    @pytest.mark.backups
    def test_backup_restore(self, session_browser):
        """Test backup and restore of app data."""
        functional.app_enable(session_browser, 'ejabberd')
>       _jsxc_add_contact(session_browser)

plinth/modules/ejabberd/tests/test_functional.py:33: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
plinth/modules/ejabberd/tests/test_functional.py:87: in _jsxc_add_contact
    functional.set_domain_name(browser, 'localhost')
plinth/tests/functional/__init__.py:411: in set_domain_name
    submit(browser, element=update_setup)
plinth/tests/functional/__init__.py:203: in submit
    browser.find_by_css('input[type=submit]').click()
/usr/lib/python3.9/contextlib.py:124: in __exit__
    next(self.gen)
plinth/tests/functional/__init__.py:134: in wait_for_page_update
    WebDriverWait(browser, timeout).until(_PageLoaded(page_body, expected_url))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <[AttributeError("'WebDriver' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x7fee7cddd790>
method = <plinth.tests.functional._PageLoaded object at 0x7fee7cdc0cd0>
message = ''

    def until(self, method, message=''):
        """Calls the method provided with the driver as an argument until the \
        return value is not False."""
        screen = None
        stacktrace = None
    
        end_time = time.time() + self._timeout
        while True:
            try:
                value = method(self._driver)
                if value:
                    return value
            except self._ignored_exceptions as exc:
                screen = getattr(exc, 'screen', None)
                stacktrace = getattr(exc, 'stacktrace', None)
            time.sleep(self._poll)
            if time.time() > end_time:
                break
>       raise TimeoutException(message, screen, stacktrace)
E       selenium.common.exceptions.TimeoutException: Message:

../../../../.local/lib/python3.9/site-packages/selenium/webdriver/support/wait.py:80: TimeoutException

===========================
pytest-splinter screenshots
===========================
png:  /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.ejabberd.tests.test_functional.TestEjabberdApp/test_backup_restore-session_browser.png
html: /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.ejabberd.tests.test_functional.TestEjabberdApp/test_backup_restore-session_browser.html

Teardown

PASSED TestEjabberdApp::test_enable_disable 0:00:30.957654

Test enabling and disabling the app.

Setup

Call

Teardown

PASSED TestEjabberdApp::test_run_diagnostics 0:00:18.663653

Test that all app diagnostics are passing.

Setup

Call

Teardown

plinth/modules/ejabberd/tests/test_turn_config.py 3 0:00:00.676824

PASSED test_managed_turn_server_configuration 0:00:00.268776

Setup

Call

Teardown

PASSED test_overridden_turn_server_configuration 0:00:00.161296

Setup

Call

Teardown

PASSED test_remove_turn_configuration 0:00:00.246752

Setup

Call

Teardown

plinth/modules/email/tests/test_functional.py 12 0:07:05.290357

ERROR TestEmailApp::test_enable_disable 0:05:34.961236

Test enabling and disabling the app.

KeyError: 'email'

Setup

browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>
app_name = 'email'

    def app_enable(browser, app_name):
        nav_to_module(browser, app_name)
>       _change_app_status(browser, app_name, 'enabled')

plinth/tests/functional/__init__.py:382: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>
app_name = 'email', change_status_to = 'enabled'

    def _change_app_status(browser, app_name, change_status_to='enabled'):
        """Enable or disable application."""
        button = browser.find_by_css('button[name="app_enable_disable_button"]')
    
        if button:
            should_enable_field = browser.find_by_id('id_should_enable')
            if (should_enable_field.value == 'False' and change_status_to
                    == 'disabled') or (should_enable_field.value == 'True'
                                       and change_status_to == 'enabled'):
                submit(browser, element=button)
        else:
>           checkbox_id = _app_checkbox_id[app_name]
E           KeyError: 'email'

plinth/tests/functional/__init__.py:372: KeyError

===========================
pytest-splinter screenshots
===========================
png:  /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.email.tests.test_functional.TestEmailApp/test_enable_disable-session_browser.png
html: /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.email.tests.test_functional.TestEmailApp/test_enable_disable-session_browser.html

Teardown

PASSED TestEmailApp::test_run_diagnostics 0:00:20.950947

Test that all app diagnostics are passing.

Setup

Call

Teardown

PASSED TestEmailApp::test_backup_restore 0:01:09.378174

Test that backup and restore operations work on the app.

Setup

Call

Teardown

plinth/modules/firewall/tests/test_components.py 6 0:00:00.018750

PASSED test_init_without_arguments 0:00:00.002523

Test initializing the component without arguments.

Setup

Call

Teardown

PASSED test_init 0:00:00.001966

Test initializing the component.

Setup

Call

Teardown

PASSED test_port_details 0:00:00.002816

Test retrieving port details for a firewall component.

Setup

Call

Teardown

PASSED test_enable 0:00:00.003886

Test enabling a firewall component.

Setup

Call

Teardown

PASSED test_disable 0:00:00.004494

Test disabling a firewall component.

Setup

Call

Teardown

PASSED test_diagnose 0:00:00.003065

Test diagnosing open/closed firewall ports.

Setup

Call

Teardown

plinth/modules/gitweb/tests/test_actions.py 14 0:00:00.500511

PASSED test_create_repo 0:00:00.095379

Test creating a repository.

Setup

Call

Teardown

PASSED test_change_repo_medatada 0:00:00.075830

Test change a metadata of the repository.

Setup

Call

Teardown

PASSED test_rename_repository 0:00:00.067794

Test renaming a repository.

Setup

Call

Teardown

PASSED test_get_branches 0:00:00.055105

Test getting all the branches of the repository.

Setup

Call

Teardown

PASSED test_delete_repository 0:00:00.049072

Test deleting a repository.

Setup

Call

Teardown

PASSED test_action_create_repo_with_invalid_names[.Test-repo] 0:00:00.011991

Test that creating repository with invalid names fails.

Setup

Call

Teardown

PASSED test_action_create_repo_with_invalid_names[Test-repo.git.git] 0:00:00.011111

Test that creating repository with invalid names fails.

Setup

Call

Teardown

PASSED test_action_create_repo_with_invalid_names[/root/Test-repo] 0:00:00.011069

Test that creating repository with invalid names fails.

Setup

Call

Teardown

PASSED test_action_create_repo_with_invalid_names[Test-rep\xf6] 0:00:00.012462

Test that creating repository with invalid names fails.

Setup

Call

Teardown

PASSED test_action_create_repo_with_invalid_urls[Test-repo] 0:00:00.010906

Test that cloning repository with invalid URL fails.

Setup

Call

Teardown

PASSED test_action_create_repo_with_invalid_urls[file://root/Test-repo] 0:00:00.010878

Test that cloning repository with invalid URL fails.

Setup

Call

Teardown

PASSED test_action_create_repo_with_invalid_urls[localhost/Test-repo] 0:00:00.011013

Test that cloning repository with invalid URL fails.

Setup

Call

Teardown

PASSED test_action_create_repo_with_invalid_urls[ssh://localhost/Test-repo] 0:00:00.010904

Test that cloning repository with invalid URL fails.

Setup

Call

Teardown

PASSED test_action_create_repo_with_invalid_urls[https://localhost/.Test-repo] 0:00:00.066998

Test that cloning repository with invalid URL fails.

Setup

Call

Teardown

plinth/modules/gitweb/tests/test_functional.py 19 0:03:51.091119

PASSED TestGitwebApp::test_all_repos_private 0:02:26.188319

Test repo accessability when all repos are private.

Setup

Call

Captured stdout call
URL = https://mordor:4430/gitweb/ https://mordor:4430/gitweb mordor Git
URL = https://mordor:4430/plinth?next=https%3a%2f%2fmordor%3a4430%2fgitweb%2f https://mordor:4430/gitweb FreedomBox

Teardown

PASSED TestGitwebApp::test_backup_restore 0:00:24.096513

Test backing up and restoring.

Setup

Call

Captured stdout call
URL = https://mordor:4430/gitweb/ https://mordor:4430/gitweb mordor Git

Teardown

PASSED TestGitwebApp::test_create_delete_repo[Test-repo-public] 0:00:08.280688

Test creating and deleting a repo and accessing with a git client.

Setup

Call

Teardown

PASSED TestGitwebApp::test_create_delete_repo[Test-repo-private] 0:00:06.962270

Test creating and deleting a repo and accessing with a git client.

Setup

Call

Teardown

PASSED TestGitwebApp::test_create_delete_repo[Test-repo.git-public] 0:00:07.500611

Test creating and deleting a repo and accessing with a git client.

Setup

Call

Teardown

PASSED TestGitwebApp::test_create_delete_repo[Test-repo.git-private] 0:00:06.613964

Test creating and deleting a repo and accessing with a git client.

Setup

Call

Teardown

PASSED TestGitwebApp::test_both_private_and_public_repo_exist 0:00:10.352021

Tests when both private and public repo exist.

Setup

Call

Teardown

ERROR TestGitwebApp::test_edit_repo_metadata 0:00:05.373572

Test edit repo metadata.

splinter.exceptions.ElementDoesNotExist: no elements could be found with id "id_gitweb-name"
splinter.exceptions.ElementDoesNotExist: no elements could be found with name "username"

Setup

Call

self = <splinter.element_list.ElementList object at 0x7fee7cdf8be0>, index = 0

    def __getitem__(self, index):
        if not isinstance(index, int) and not isinstance(index, slice):
            return self.first[index]
        try:
>           return self._container[index]
E           IndexError: list index out of range

../../../../.local/lib/python3.9/site-packages/splinter/element_list.py:42: IndexError

During handling of the above exception, another exception occurred:

self = <plinth.modules.gitweb.tests.test_functional.TestGitwebApp object at 0x7fee7cd59220>
session_browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>

    def test_edit_repo_metadata(self, session_browser):
        """Test edit repo metadata."""
        _create_repo(session_browser, 'Test-repo2', 'public',
                     ok_if_exists=True)
        _delete_repo(session_browser, 'Test-repo', ignore_missing=True)
        repo_metadata = {
            'name': 'Test-repo',
            'description': 'Test Description',
            'owner': 'Test Owner',
            'access': 'private',
        }
>       _edit_repo_metadata(session_browser, 'Test-repo2', repo_metadata)

plinth/modules/gitweb/tests/test_functional.py:107: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
plinth/modules/gitweb/tests/test_functional.py:182: in _edit_repo_metadata
    browser.find_by_id('id_gitweb-name').fill(metadata['name'])
../../../../.local/lib/python3.9/site-packages/splinter/element_list.py:76: in __getattr__
    return getattr(self.first, name)
../../../../.local/lib/python3.9/site-packages/splinter/element_list.py:57: in first
    return self[0]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <splinter.element_list.ElementList object at 0x7fee7cdf8be0>, index = 0

    def __getitem__(self, index):
        if not isinstance(index, int) and not isinstance(index, slice):
            return self.first[index]
        try:
            return self._container[index]
        except IndexError:
>           raise ElementDoesNotExist(
                u'no elements could be found with {0} "{1}"'.format(
                    self.find_by, self.query
                )
            )
E           splinter.exceptions.ElementDoesNotExist: no elements could be found with id "id_gitweb-name"

../../../../.local/lib/python3.9/site-packages/splinter/element_list.py:44: ElementDoesNotExist

===========================
pytest-splinter screenshots
===========================
png:  /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.gitweb.tests.test_functional.TestGitwebApp/test_edit_repo_metadata-session_browser.png
html: /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.gitweb.tests.test_functional.TestGitwebApp/test_edit_repo_metadata-session_browser.html

Teardown

self = <splinter.element_list.ElementList object at 0x7fee7cda2ac0>, index = 0

    def __getitem__(self, index):
        if not isinstance(index, int) and not isinstance(index, slice):
            return self.first[index]
        try:
>           return self._container[index]
E           IndexError: list index out of range

../../../../.local/lib/python3.9/site-packages/splinter/element_list.py:42: IndexError

During handling of the above exception, another exception occurred:

self = <plinth.modules.gitweb.tests.test_functional.TestGitwebApp object at 0x7fee7cd59220>
session_browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>

    @pytest.fixture(autouse=True)
    def fixture_background(self, session_browser):
        """Login, install, and enable the app."""
        login(session_browser)
        install(session_browser, self.app_name)
        app_enable(session_browser, self.app_name)
        yield
>       login(session_browser)

plinth/tests/functional/__init__.py:629: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
plinth/tests/functional/__init__.py:253: in login
    login_with_account(browser, base_url, config['DEFAULT']['username'],
plinth/tests/functional/__init__.py:277: in login_with_account
    browser.fill('username', username)
../../../../.local/lib/python3.9/site-packages/splinter/driver/webdriver/__init__.py:596: in fill
    field = self.find_by_name(name).first
../../../../.local/lib/python3.9/site-packages/splinter/element_list.py:57: in first
    return self[0]
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <splinter.element_list.ElementList object at 0x7fee7cda2ac0>, index = 0

    def __getitem__(self, index):
        if not isinstance(index, int) and not isinstance(index, slice):
            return self.first[index]
        try:
            return self._container[index]
        except IndexError:
>           raise ElementDoesNotExist(
                u'no elements could be found with {0} "{1}"'.format(
                    self.find_by, self.query
                )
            )
E           splinter.exceptions.ElementDoesNotExist: no elements could be found with name "username"

../../../../.local/lib/python3.9/site-packages/splinter/element_list.py:44: ElementDoesNotExist

PASSED TestGitwebApp::test_enable_disable 0:00:10.608264

Test enabling and disabling the app.

Setup

Call

Captured stdout call
URL = https://mordor:4430/gitweb/ https://mordor:4430/gitweb 404 Not Found
URL = https://mordor:4430/gitweb/ https://mordor:4430/gitweb mordor Git

Teardown

PASSED TestGitwebApp::test_run_diagnostics 0:00:05.114898

Test that all app diagnostics are passing.

Setup

Call

Teardown

plinth/modules/gitweb/tests/test_views.py 17 0:00:00.118614

PASSED test_repos_view 0:00:00.023567

Test that a repo list has correct view data.

Setup

Call

Teardown

PASSED test_create_repo_view 0:00:00.009671

Test that repo create view sends correct success message.

Setup

Call

Teardown

PASSED test_create_repo_duplicate_name_view 0:00:00.007067

Test that repo create view shows correct error message.

Setup

Call

Teardown

PASSED test_create_repo_invalid_name_view 0:00:00.005038

Test that repo create view shows correct error message.

Setup

Call

Teardown

PASSED test_create_repo_failed_view 0:00:00.006365

Test that repo creation failure sends correct error message.

Setup

Call

Teardown

PASSED test_clone_repo_view 0:00:00.005743

Test that cloning repo sends correct succcess message.

Setup

Call

Teardown

PASSED test_clone_repo_missing_remote_view 0:00:00.005664

Test that cloning non-existing repo shows correct error message.

Setup

Call

Teardown

PASSED test_edit_repository_view 0:00:00.008125

Test that editing repo sends correct success message.

Setup

Call

Teardown

PASSED test_edit_nonexisting_repository_view 0:00:00.003852

Test that trying to edit non-existing repository raises 404.

Setup

Call

Teardown

PASSED test_edit_repository_duplicate_name_view 0:00:00.006124

Test that renaming to already existing repo name shows correct error message.

Setup

Call

Teardown

PASSED test_edit_repository_invalid_name_view 0:00:00.005227

Test that renaming repo to invalid name shows correct error message.

Setup

Call

Teardown

PASSED test_edit_repository_no_change_view 0:00:00.005950

Test that not changing any values don't edit the repo.

Setup

Call

Teardown

PASSED test_edit_repository_failed_view 0:00:00.006166

Test that failed repo editing sends correct error message.

Setup

Call

Teardown

PASSED test_delete_repository_confirmation_view 0:00:00.004396

Test that repo deletion confirmation shows correct repo name.

Setup

Call

Teardown

PASSED test_delete_repository_view 0:00:00.006808

Test that repo deletion sends correct success message.

Setup

Call

Teardown

PASSED test_delete_repository_fail_view 0:00:00.004860

Test that failed repository deletion sends correct error message.

Setup

Call

Teardown

PASSED test_delete_non_existing_repository_view 0:00:00.003993

Test that deleting non-existing repository raises 404.

Setup

Call

Teardown

plinth/modules/help/tests/test_functional.py 1 0:00:00.325462

PASSED test_view_status_logs 0:00:00.325462

Test viewing the status logs.

Setup

Call

Teardown

plinth/modules/help/tests/test_views.py 104 0:00:00.474156

PASSED test_simple_help_pages[contribute-contribute] 0:00:00.040222

Simple common test for certain help views.

Setup

Call

Teardown

PASSED test_simple_help_pages[feedback-feedback] 0:00:00.003915

Simple common test for certain help views.

Setup

Call

Teardown

PASSED test_simple_help_pages[support-support] 0:00:00.003175

Simple common test for certain help views.

Setup

Call

Teardown

PASSED test_simple_help_pages[index-index] 0:00:00.002936

Simple common test for certain help views.

Setup

Call

Teardown

PASSED test_about 0:00:00.286222

Test some expected items in about view.

Setup

Call

Teardown

PASSED test_full_default_manual[None] 0:00:00.005636

Test request for the full default manual.

Expected: Redirect to the full manual in the fallback language.

Setup

Call

Teardown

PASSED test_full_default_manual[-] 0:00:00.003220

Test request for the full default manual.

Expected: Redirect to the full manual in the fallback language.

Setup

Call

Teardown

PASSED test_default_manual_by_pages[None] 0:00:00.061883

Test page-specific requests for the (default) manual.

Expected: Redirect to their respective twins in the fallback language. Pending.: Redirect pages with plus-sign '+' in their name.

Setup

Call

Teardown

PASSED test_default_manual_by_pages[-] 0:00:00.061116

Test page-specific requests for the (default) manual.

Expected: Redirect to their respective twins in the fallback language. Pending.: Redirect pages with plus-sign '+' in their name.

Setup

Call

Teardown

SKIPPED test_specific_full_manual_translation 0:00:00.000440

Test request for specific translated manuals.

Expected: All return a page.

Skipped: Needs installed manual. CI speed-optimized workspace does not provide it.

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/modules/help/tests/test_views.py', 173, 'Skipped: Needs installed manual. CI speed-optimized workspace does not provide it.')

Teardown

SKIPPED test_specific_manual_translation_by_pages 0:00:00.000366

Test that translated-page-specific requests.

Expected: All known page names return pages.

Skipped: Needs installed manual. CI speed-optimized workspace does not provide it.

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/modules/help/tests/test_views.py', 186, 'Skipped: Needs installed manual. CI speed-optimized workspace does not provide it.')

Teardown

SKIPPED test_full_manual_requested_by_page_name 0:00:00.000398

Test requests for 'Manual'.

Note: 'Manual' is a file, not a manual page. Expected: Return a proper not found message (HTTP 404) Currently: Non fallback languages return a page.

This is wrong, but doesn't cause any harm.

Skipped: Needs installed manual. CI speed-optimized workspace does not provide it.

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/modules/help/tests/test_views.py', 200, 'Skipped: Needs installed manual. CI speed-optimized workspace does not provide it.')

Teardown

PASSED test_missing_page 0:00:00.003899

Test requests for missing pages.

Expected: - Unspecified language: Fall back to its fallback twin. - Translated languages: Fall back to its fallback twin. - Fallback language...: Return a proper not found message (HTTP 404) - Unknown languages...: Fall back to its fallback twin.

Setup

Call

Teardown

SKIPPED test_download_full_manual_file 0:00:00.000729

Test download of manual.

Design: - Downloads the default manual, a translated one and the

fallback translation. None should fail. Then compares them.

  • Call diff command for fast comparision. Comparing the over 10MB bytestrings in python is insanely slow.

Skipped: Needs installed manual. CI speed-optimized workspace does not provide it.

Setup

('/var/lib/buildbot/workers/bilbo/functional-tests-dev/build/plinth/modules/help/tests/test_views.py', 242, 'Skipped: Needs installed manual. CI speed-optimized workspace does not provide it.')

Teardown

plinth/modules/i2p/tests/test_functional.py 3 0:04:41.070108

ERROR TestI2pApp::test_enable_disable 0:04:40.584725

Test enabling and disabling the app.

KeyError: 'i2p'

Setup

self = <plinth.modules.i2p.tests.test_functional.TestI2pApp object at 0x7fee82bcfb80>
session_browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>

    @pytest.fixture(autouse=True)
    def fixture_background(self, session_browser):
        """Login, install, and enable the app."""
        login(session_browser)
        install(session_browser, self.app_name)
>       app_enable(session_browser, self.app_name)

plinth/tests/functional/__init__.py:627: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
plinth/tests/functional/__init__.py:382: in app_enable
    _change_app_status(browser, app_name, 'enabled')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>
app_name = 'i2p', change_status_to = 'enabled'

    def _change_app_status(browser, app_name, change_status_to='enabled'):
        """Enable or disable application."""
        button = browser.find_by_css('button[name="app_enable_disable_button"]')
    
        if button:
            should_enable_field = browser.find_by_id('id_should_enable')
            if (should_enable_field.value == 'False' and change_status_to
                    == 'disabled') or (should_enable_field.value == 'True'
                                       and change_status_to == 'enabled'):
                submit(browser, element=button)
        else:
>           checkbox_id = _app_checkbox_id[app_name]
E           KeyError: 'i2p'

plinth/tests/functional/__init__.py:372: KeyError

===========================
pytest-splinter screenshots
===========================
png:  /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.i2p.tests.test_functional.TestI2pApp/test_enable_disable-session_browser.png
html: /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.i2p.tests.test_functional.TestI2pApp/test_enable_disable-session_browser.html

Teardown

ERROR TestI2pApp::test_run_diagnostics 0:00:00.234479

Test that all app diagnostics are passing.

KeyError: 'i2p'

Setup

self = <plinth.modules.i2p.tests.test_functional.TestI2pApp object at 0x7fee7c7405e0>
session_browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>

    @pytest.fixture(autouse=True)
    def fixture_background(self, session_browser):
        """Login, install, and enable the app."""
        login(session_browser)
        install(session_browser, self.app_name)
>       app_enable(session_browser, self.app_name)

plinth/tests/functional/__init__.py:627: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
plinth/tests/functional/__init__.py:382: in app_enable
    _change_app_status(browser, app_name, 'enabled')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>
app_name = 'i2p', change_status_to = 'enabled'

    def _change_app_status(browser, app_name, change_status_to='enabled'):
        """Enable or disable application."""
        button = browser.find_by_css('button[name="app_enable_disable_button"]')
    
        if button:
            should_enable_field = browser.find_by_id('id_should_enable')
            if (should_enable_field.value == 'False' and change_status_to
                    == 'disabled') or (should_enable_field.value == 'True'
                                       and change_status_to == 'enabled'):
                submit(browser, element=button)
        else:
>           checkbox_id = _app_checkbox_id[app_name]
E           KeyError: 'i2p'

plinth/tests/functional/__init__.py:372: KeyError

===========================
pytest-splinter screenshots
===========================
png:  /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.i2p.tests.test_functional.TestI2pApp/test_run_diagnostics-session_browser.png
html: /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.i2p.tests.test_functional.TestI2pApp/test_run_diagnostics-session_browser.html

Teardown

ERROR TestI2pApp::test_backup_restore 0:00:00.250905

Test that backup and restore operations work on the app.

KeyError: 'i2p'

Setup

self = <plinth.modules.i2p.tests.test_functional.TestI2pApp object at 0x7fee7ccf3d30>
session_browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>

    @pytest.fixture(autouse=True)
    def fixture_background(self, session_browser):
        """Login, install, and enable the app."""
        login(session_browser)
        install(session_browser, self.app_name)
>       app_enable(session_browser, self.app_name)

plinth/tests/functional/__init__.py:627: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
plinth/tests/functional/__init__.py:382: in app_enable
    _change_app_status(browser, app_name, 'enabled')
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>
app_name = 'i2p', change_status_to = 'enabled'

    def _change_app_status(browser, app_name, change_status_to='enabled'):
        """Enable or disable application."""
        button = browser.find_by_css('button[name="app_enable_disable_button"]')
    
        if button:
            should_enable_field = browser.find_by_id('id_should_enable')
            if (should_enable_field.value == 'False' and change_status_to
                    == 'disabled') or (should_enable_field.value == 'True'
                                       and change_status_to == 'enabled'):
                submit(browser, element=button)
        else:
>           checkbox_id = _app_checkbox_id[app_name]
E           KeyError: 'i2p'

plinth/tests/functional/__init__.py:372: KeyError

===========================
pytest-splinter screenshots
===========================
png:  /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.i2p.tests.test_functional.TestI2pApp/test_backup_restore-session_browser.png
html: /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.i2p.tests.test_functional.TestI2pApp/test_backup_restore-session_browser.html

Teardown

plinth/modules/i2p/tests/test_helpers.py 5 0:00:00.109425

PASSED test_reading_conf 0:00:00.051782

Test reading configuration file.

Setup

Call

Teardown

PASSED test_setting_idx 0:00:00.022615

Test setting index for editing a tunnel.

Setup

Call

Teardown

PASSED test_setting_tunnel_props 0:00:00.013489

Test setting a tunnel property.

Setup

Call

Teardown

PASSED test_getting_nonexistent_props 0:00:00.010750

Test getting nonexistent property.

Setup

Call

Teardown

PASSED test_setting_new_props 0:00:00.010789

Test setting new properties.

Setup

Call

Teardown

plinth/modules/i2p/tests/test_router_editor.py 4 0:00:00.032298

PASSED test_count_favorites 0:00:00.015567

Test counting favorites.

Setup

Call

Teardown

PASSED test_add_normal_favorite 0:00:00.006217

Test adding a normal favorite.

Setup

Call

Teardown

PASSED test_add_favorite_with_comma 0:00:00.006141

Test adding a favorite with common in its name.

Setup

Call

Teardown

PASSED test_add_fav_to_empty_config 0:00:00.004372

Test adding favorite to empty configuration.

Setup

Call

Teardown

plinth/modules/ikiwiki/tests/test_functional.py 3 0:12:10.869722

PASSED TestIkiwikiApp::test_backup_restore 0:11:51.018872

Test backup and restore of app data.

Setup

Call

Teardown

PASSED TestIkiwikiApp::test_enable_disable 0:00:11.089838

Test enabling and disabling the app.

Setup

Call

Captured stdout call
URL = https://mordor:4430/ikiwiki https://mordor:4430/ikiwiki 404 Not Found
URL = https://mordor:4430/ikiwiki/ https://mordor:4430/ikiwiki Index of /ikiwiki

Teardown

PASSED TestIkiwikiApp::test_run_diagnostics 0:00:08.761013

Test that all app diagnostics are passing.

Setup

Call

Teardown

plinth/modules/infinoted/tests/test_functional.py 3 0:01:25.848008

PASSED TestInfinotedApp::test_enable_disable 0:00:56.238496

Test enabling and disabling the app.

Setup

Call

Teardown

PASSED TestInfinotedApp::test_run_diagnostics 0:00:05.345158

Test that all app diagnostics are passing.

Setup

Call

Teardown

PASSED TestInfinotedApp::test_backup_restore 0:00:24.264354

Test that backup and restore operations work on the app.

Setup

Call

Teardown

plinth/modules/jsxc/tests/test_functional.py 2 0:01:58.999906

PASSED test_install 0:01:40.956713

Test installing the app.

Setup

Call

Captured stdout call
URL = https://mordor:4430/plinth/apps/jsxc/jsxc/ https://mordor:4430/plinth/apps/jsxc/jsxc/ Jabber Chat (JSXC)

Teardown

PASSED test_backup 0:00:18.043193

Test backing up and restoring.

Setup

Call

Captured stdout call
URL = https://mordor:4430/plinth/apps/jsxc/jsxc/ https://mordor:4430/plinth/apps/jsxc/jsxc/ Jabber Chat (JSXC)

Teardown

plinth/modules/letsencrypt/tests/test_components.py 25 0:00:00.075909

PASSED test_init_without_arguments 0:00:00.002582

Test that component is initialized with defaults properly.

Setup

Call

Teardown

PASSED test_init 0:00:00.002259

Test initializing the component.

Setup

Call

Teardown

PASSED test_init_values 0:00:00.002375

Test initializing with invalid values.

Setup

Call

Teardown

PASSED test_domains 0:00:00.002034

Test getting domains.

Setup

Call

Teardown

PASSED test_list 0:00:00.002302

Test listing components.

Setup

Call

Teardown

PASSED test_setup_certificates 0:00:00.004110

Test that initial copying of certs for an app works.

Setup

Call

Captured stdout call
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path']), call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid.example/private.path', '--certificate-path', '/etc/test-app/invalid.example/certificate.path'])]
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid.example/private.path', '--certificate-path', '/etc/test-app/invalid.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path']), call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid.example/private.path', '--certificate-path', '/etc/test-app/invalid.example/certificate.path'])]

Teardown

PASSED test_setup_certificates_without_copy 0:00:00.003579

Test that initial copying of certs for an app works.

Setup

Call

Teardown

PASSED test_setup_certificates_with_app_domains 0:00:00.003632

Test that initial copying of certs for an app works.

Setup

Call

Captured stdout call
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path']), call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid.example/private.path', '--certificate-path', '/etc/test-app/invalid.example/certificate.path'])]
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid.example/private.path', '--certificate-path', '/etc/test-app/invalid.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path']), call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid.example/private.path', '--certificate-path', '/etc/test-app/invalid.example/certificate.path'])]

Teardown

PASSED test_setup_certificates_with_all_domains 0:00:00.004020

Test that initial copying for certs works when app domains is '*'.

Setup

Call

Captured stdout call
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path']), call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid2.example/private.path', '--certificate-path', '/etc/test-app/invalid2.example/certificate.path']), call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid1.example/private.path', '--certificate-path', '/etc/test-app/invalid1.example/certificate.path'])]
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid1.example/private.path', '--certificate-path', '/etc/test-app/invalid1.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path']), call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid2.example/private.path', '--certificate-path', '/etc/test-app/invalid2.example/certificate.path']), call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid1.example/private.path', '--certificate-path', '/etc/test-app/invalid1.example/certificate.path'])]
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid2.example/private.path', '--certificate-path', '/etc/test-app/invalid2.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path']), call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid2.example/private.path', '--certificate-path', '/etc/test-app/invalid2.example/certificate.path']), call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/invalid1.example/private.path', '--certificate-path', '/etc/test-app/invalid1.example/certificate.path'])]

Teardown

PASSED test_get_status 0:00:00.003047

Test that getting domain status works.

Setup

Call

Teardown

PASSED test_get_status_outdate_copy 0:00:00.003691

Test that getting domain status works with outdated copy.

Setup

Call

Teardown

PASSED test_get_status_without_copy 0:00:00.003067

Test that getting domain status works without copying.

Setup

Call

Teardown

PASSED test_on_certificate_obtained 0:00:00.002877

Test that certificate obtained event handler works.

Setup

Call

Captured stdout call
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])]

Teardown

PASSED test_on_certificate_obtained_with_all_domains 0:00:00.003047

Test that certificate obtained event handler works for app with all domains.

Setup

Call

Captured stdout call
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])]

Teardown

PASSED test_on_certificate_obtained_irrelevant 0:00:00.002675

Test that certificate obtained event handler works with irrelevant domain.

Setup

Call

Teardown

PASSED test_on_certificate_obtained_without_copy 0:00:00.003276

Test that certificate obtained event handler works without copying.

Setup

Call

Teardown

PASSED test_on_certificate_renewed 0:00:00.003076

Test that certificate renewed event handler works.

Setup

Call

Captured stdout call
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/letsencrypt/live/valid.example/privkey.pem', '--source-certificate-path', '/etc/letsencrypt/live/valid.example/fullchain.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])]

Teardown

PASSED test_on_certificate_renewed_irrelevant 0:00:00.002456

Test that certificate renewed event handler works for irrelevant domains.

Setup

Call

Teardown

PASSED test_on_certificate_renewed_without_copy 0:00:00.002947

Test that certificate renewed event handler works without copying.

Setup

Call

Teardown

PASSED test_on_certificate_revoked 0:00:00.003515

Test that certificate revoked event handler works.

Setup

Call

Captured stdout call
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])]

Teardown

PASSED test_on_certificate_revoked_irrelevant 0:00:00.003872

Test that certificate revoked event handler works for irrelevant domains.

Setup

Call

Teardown

PASSED test_on_certificate_revoked_without_copy 0:00:00.002636

Test that certificate revoked event handler works without copying.

Setup

Call

Teardown

PASSED test_on_certificate_deleted 0:00:00.002940

Test that certificate deleted event handler works.

Setup

Call

Captured stdout call
call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])
[call('letsencrypt', ['copy-certificate', '--managing-app', 'test-app', '--user-owner', 'test-user', '--group-owner', 'test-group', '--source-private-key-path', '/etc/ssl/private/ssl-cert-snakeoil.key', '--source-certificate-path', '/etc/ssl/certs/ssl-cert-snakeoil.pem', '--private-key-path', '/etc/test-app/valid.example/private.path', '--certificate-path', '/etc/test-app/valid.example/certificate.path'])]

Teardown

PASSED test_on_certificate_deleted_irrelevant 0:00:00.002790

Test that certificate deleted event handler works for irrelevant domains.

Setup

Call

Teardown

PASSED test_on_certificate_deleted_without_copy 0:00:00.003104

Test that certificate deleted event handler works without copying.

Setup

Call

Teardown

plinth/modules/letsencrypt/tests/test_domain_name_changes.py 7 0:00:00.026643

PASSED test_add_onion_domain 0:00:00.001931

Test that .onion domains are ignored when added/removed.

Setup

Call

Teardown

PASSED test_add_valid_domain[domain1.tld-status_input0-True-True] 0:00:00.004342

Test adding a domain that can have certificates.

Setup

Call

Teardown

PASSED test_add_valid_domain[domain2.tld-status_input1-True-True] 0:00:00.004676

Test adding a domain that can have certificates.

Setup

Call

Teardown

PASSED test_add_valid_domain[domain3.tld-status_input2-False-False] 0:00:00.004006

Test adding a domain that can have certificates.

Setup

Call

Teardown

PASSED test_add_valid_domain[-status_input3-False-True] 0:00:00.003645

Test adding a domain that can have certificates.

Setup

Call

Teardown

PASSED test_remove_domain[domain1.tld-True-True] 0:00:00.004158

Test removing a domain that can certificates.

Setup

Call

Teardown

PASSED test_remove_domain[-False-True] 0:00:00.003886

Test removing a domain that can certificates.

Setup

Call

Teardown

plinth/modules/matrixsynapse/tests/test_functional.py 3 0:05:06.255062

ERROR TestMatrixSynapseApp::test_enable_disable 0:05:06.252214

Test enabling and disabling the app.

selenium.common.exceptions.TimeoutException: Message:

Setup

browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>
domain_name = 'mydomain.example'

    def set_domain_name(browser, domain_name):
        nav_to_module(browser, 'config')
        browser.find_by_id('id_domainname').fill(domain_name)
        update_setup = browser.find_by_css('.btn-primary[type="submit"]')
>       submit(browser, element=update_setup)

plinth/tests/functional/__init__.py:411: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
plinth/tests/functional/__init__.py:203: in submit
    browser.find_by_css('input[type=submit]').click()
/usr/lib/python3.9/contextlib.py:124: in __exit__
    next(self.gen)
plinth/tests/functional/__init__.py:134: in wait_for_page_update
    WebDriverWait(browser, timeout).until(_PageLoaded(page_body, expected_url))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <[AttributeError("'WebDriver' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x7fee7cda2c10>
method = <plinth.tests.functional._PageLoaded object at 0x7fee7ce2cbb0>
message = ''

    def until(self, method, message=''):
        """Calls the method provided with the driver as an argument until the \
        return value is not False."""
        screen = None
        stacktrace = None
    
        end_time = time.time() + self._timeout
        while True:
            try:
                value = method(self._driver)
                if value:
                    return value
            except self._ignored_exceptions as exc:
                screen = getattr(exc, 'screen', None)
                stacktrace = getattr(exc, 'stacktrace', None)
            time.sleep(self._poll)
            if time.time() > end_time:
                break
>       raise TimeoutException(message, screen, stacktrace)
E       selenium.common.exceptions.TimeoutException: Message:

../../../../.local/lib/python3.9/site-packages/selenium/webdriver/support/wait.py:80: TimeoutException

Teardown

ERROR TestMatrixSynapseApp::test_run_diagnostics 0:00:00.001357

Test that all app diagnostics are passing.

selenium.common.exceptions.TimeoutException: Message:

Setup

browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>
domain_name = 'mydomain.example'

    def set_domain_name(browser, domain_name):
        nav_to_module(browser, 'config')
        browser.find_by_id('id_domainname').fill(domain_name)
        update_setup = browser.find_by_css('.btn-primary[type="submit"]')
>       submit(browser, element=update_setup)

plinth/tests/functional/__init__.py:411: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
plinth/tests/functional/__init__.py:203: in submit
    browser.find_by_css('input[type=submit]').click()
/usr/lib/python3.9/contextlib.py:124: in __exit__
    next(self.gen)
plinth/tests/functional/__init__.py:134: in wait_for_page_update
    WebDriverWait(browser, timeout).until(_PageLoaded(page_body, expected_url))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <[AttributeError("'WebDriver' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x7fee7cda2c10>
method = <plinth.tests.functional._PageLoaded object at 0x7fee7ce2cbb0>
message = ''

    def until(self, method, message=''):
        """Calls the method provided with the driver as an argument until the \
        return value is not False."""
        screen = None
        stacktrace = None
    
        end_time = time.time() + self._timeout
        while True:
            try:
                value = method(self._driver)
                if value:
                    return value
            except self._ignored_exceptions as exc:
                screen = getattr(exc, 'screen', None)
                stacktrace = getattr(exc, 'stacktrace', None)
            time.sleep(self._poll)
            if time.time() > end_time:
                break
>       raise TimeoutException(message, screen, stacktrace)
E       selenium.common.exceptions.TimeoutException: Message:

../../../../.local/lib/python3.9/site-packages/selenium/webdriver/support/wait.py:80: TimeoutException

Teardown

ERROR TestMatrixSynapseApp::test_backup_restore 0:00:00.001490

Test that backup and restore operations work on the app.

selenium.common.exceptions.TimeoutException: Message:

Setup

browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>
domain_name = 'mydomain.example'

    def set_domain_name(browser, domain_name):
        nav_to_module(browser, 'config')
        browser.find_by_id('id_domainname').fill(domain_name)
        update_setup = browser.find_by_css('.btn-primary[type="submit"]')
>       submit(browser, element=update_setup)

plinth/tests/functional/__init__.py:411: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
plinth/tests/functional/__init__.py:203: in submit
    browser.find_by_css('input[type=submit]').click()
/usr/lib/python3.9/contextlib.py:124: in __exit__
    next(self.gen)
plinth/tests/functional/__init__.py:134: in wait_for_page_update
    WebDriverWait(browser, timeout).until(_PageLoaded(page_body, expected_url))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <[AttributeError("'WebDriver' object has no attribute 'session_id'") raised in repr()] WebDriverWait object at 0x7fee7cda2c10>
method = <plinth.tests.functional._PageLoaded object at 0x7fee7ce2cbb0>
message = ''

    def until(self, method, message=''):
        """Calls the method provided with the driver as an argument until the \
        return value is not False."""
        screen = None
        stacktrace = None
    
        end_time = time.time() + self._timeout
        while True:
            try:
                value = method(self._driver)
                if value:
                    return value
            except self._ignored_exceptions as exc:
                screen = getattr(exc, 'screen', None)
                stacktrace = getattr(exc, 'stacktrace', None)
            time.sleep(self._poll)
            if time.time() > end_time:
                break
>       raise TimeoutException(message, screen, stacktrace)
E       selenium.common.exceptions.TimeoutException: Message:

../../../../.local/lib/python3.9/site-packages/selenium/webdriver/support/wait.py:80: TimeoutException

Teardown

plinth/modules/matrixsynapse/tests/test_turn_config.py 4 0:00:00.154297

PASSED test_managed_turn_server_configuration 0:00:00.100244

Test setting and getting managed TURN server configuration.

Setup

Call

Teardown

PASSED test_overridden_turn_server_configuration 0:00:00.012311

Test setting and getting overridden TURN sever configuration.

Setup

Call

Teardown

PASSED test_revert_to_managed_turn_server_configuration 0:00:00.020152

Test setting and getting overridden TURN sever configuration.

Setup

Call

Teardown

PASSED test_coturn_configuration_update_after_admin_override 0:00:00.021589

Test that overridden conf prevails even if managed conf is updated.

Setup

Call

Teardown

plinth/modules/mediawiki/tests/test_functional.py 18 0:08:24.177113

PASSED TestMediawikiApp::test_public_registrations 0:05:47.028003

Test enabling public registrations.

Setup

Call

Teardown

PASSED TestMediawikiApp::test_private_mode 0:00:12.398965

Test enabling private mode.

Setup

Call

Teardown

PASSED TestMediawikiApp::test_private_mode_public_registrations 0:00:16.143774

Test interactive between private mode and public registrations.

Requires JS.

Setup

Call

Teardown

PASSED TestMediawikiApp::test_upload_files 0:00:13.651754

Test that logged in user can see upload files option.

Requires JS.

Setup

Call

Teardown

PASSED TestMediawikiApp::test_upload_images 0:00:21.985915

Test uploading an image.

Setup

Call

Teardown

PASSED TestMediawikiApp::test_upload_svg_image 0:00:17.129929

Test uploading an SVG image.

Setup

Call

Teardown

PASSED TestMediawikiApp::test_backup_restore 0:00:45.836164

Test backup and restore of pages and images.

Setup

Call

Teardown

PASSED TestMediawikiApp::test_enable_disable 0:00:20.471822

Test enabling and disabling the app.

Setup

Call

Captured stdout call
URL = https://mordor:4430/mediawiki/ https://mordor:4430/mediawiki 404 Not Found
URL = https://mordor:4430/mediawiki/Main_Page https://mordor:4430/mediawiki Wiki

Teardown

FAILED TestMediawikiApp::test_run_diagnostics 0:00:09.530787

Test that all app diagnostics are passing.

AssertionError

Setup

Call

self = <plinth.modules.mediawiki.tests.test_functional.TestMediawikiApp object at 0x7fee7d2008e0>
session_browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>

    def test_run_diagnostics(self, session_browser):
        """Test that all app diagnostics are passing."""
        if not self.check_diagnostics:
            pytest.skip(f'Skipping diagnostics check for {self.app_name}.')
    
        time.sleep(self.diagnostics_delay)
        session_browser.find_by_id('id_extra_actions_button').click()
        submit(session_browser, form_class='form-diagnostics-button')
    
        warning_results = session_browser.find_by_css('.badge-warning')
        if warning_results:
            warnings.warn(
                f'Diagnostics warnings for {self.app_name}: {warning_results}')
    
        failure_results = session_browser.find_by_css('.badge-danger')
>       assert not failure_results
E       AssertionError

plinth/tests/functional/__init__.py:655: AssertionError

===========================
pytest-splinter screenshots
===========================
png:  /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.mediawiki.tests.test_functional.TestMediawikiApp/test_run_diagnostics-session_browser.png
html: /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.mediawiki.tests.test_functional.TestMediawikiApp/test_run_diagnostics-session_browser.html

Teardown

plinth/modules/mediawiki/tests/test_settings.py 2 0:00:00.033777

PASSED test_default_skin 0:00:00.023753

Test getting and setting the default skin.

Setup

Call

Teardown

PASSED test_server_url 0:00:00.010025

Test getting and setting $wgServer.

Setup

Call

Teardown

plinth/modules/minetest/tests/test_functional.py 3 0:06:32.786196

PASSED TestMinetestApp::test_enable_disable 0:05:52.030799

Test enabling and disabling the app.

Setup

Call

Teardown

PASSED TestMinetestApp::test_run_diagnostics 0:00:14.748838

Test that all app diagnostics are passing.

Setup

Call

Teardown

PASSED TestMinetestApp::test_backup_restore 0:00:26.006559

Test that backup and restore operations work on the app.

Setup

Call

Teardown

plinth/modules/minidlna/tests/test_functional.py 12 0:01:28.098358

PASSED TestMinidlnaApp::test_enable_disable 0:00:53.429622

Test enabling and disabling the app.

Setup

Call

Teardown

FAILED TestMinidlnaApp::test_run_diagnostics 0:00:08.219327

Test that all app diagnostics are passing.

AssertionError

Setup

Call

self = <plinth.modules.minidlna.tests.test_functional.TestMinidlnaApp object at 0x7fee7cad4550>
session_browser = <splinter.driver.webdriver.firefox.WebDriver object at 0x7fee7d269ee0>

    def test_run_diagnostics(self, session_browser):
        """Test that all app diagnostics are passing."""
        if not self.check_diagnostics:
            pytest.skip(f'Skipping diagnostics check for {self.app_name}.')
    
        time.sleep(self.diagnostics_delay)
        session_browser.find_by_id('id_extra_actions_button').click()
        submit(session_browser, form_class='form-diagnostics-button')
    
        warning_results = session_browser.find_by_css('.badge-warning')
        if warning_results:
            warnings.warn(
                f'Diagnostics warnings for {self.app_name}: {warning_results}')
    
        failure_results = session_browser.find_by_css('.badge-danger')
>       assert not failure_results
E       AssertionError

plinth/tests/functional/__init__.py:655: AssertionError

===========================
pytest-splinter screenshots
===========================
png:  /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.minidlna.tests.test_functional.TestMinidlnaApp/test_run_diagnostics-session_browser.png
html: /var/lib/buildbot/workers/bilbo/functional-tests-dev/build/screenshots/plinth.modules.minidlna.tests.test_functional.TestMinidlnaApp/test_run_diagnostics-session_browser.html

Teardown

PASSED TestMinidlnaApp::test_backup_restore 0:00:26.449409

Test that backup and restore operations work on the app.

Setup