def test_wal_archive_tags( self, cloud_interface_mock, uploader_mock, wal_name, tags_args, history_tags_args, expected_tags, expected_override_tags, ): """Test that tags and history tags are handled.""" uploader_object_mock = uploader_mock.return_value cloud_walarchive.main([ "s3://test-bucket/testfolder", "test-server", wal_name, ] + tags_args + history_tags_args) # Verify expected tags are passed to cloud interface cloud_interface_mock.assert_called_once_with( url="s3://test-bucket/testfolder", tags=expected_tags, profile_name=None, endpoint_url=None, encryption=None, ) # Verify expected override tags are passed to upload_wal override_args = (expected_override_tags and { "override_tags": expected_override_tags } or {}) uploader_object_mock.upload_wal.assert_called_once_with( wal_name, **override_args)
def test_uses_wal_path_argument_when_not_running_as_hook( self, uploader_mock, cloud_interface_mock): uploader = uploader_mock.return_value cloud_walarchive.main( ["cloud_storage_url", "test_server", EXAMPLE_WAL_PATH]) cloud_interface_mock.assert_called_once() uploader.upload_wal.assert_called_once_with(EXAMPLE_WAL_PATH)
def test_error_if_running_as_unsupported_hook(self, uploader_mock, cloud_interface_mock): with pytest.raises(BarmanException) as exc: cloud_walarchive.main(["cloud_storage_url", "test_server"]) assert "barman-cloud-wal-archive called as unsupported hook script" in str( exc.value) uploader_mock.assert_not_called() cloud_interface_mock.assert_not_called()
def test_error_if_barman_file_not_provided(self, uploader_mock, cloud_interface_mock): with pytest.raises(BarmanException) as exc: cloud_walarchive.main(["cloud_storage_url", "test_server"]) assert "Expected environment variable BARMAN_FILE not set" in str( exc.value) uploader_mock.assert_not_called() cloud_interface_mock.assert_not_called()
def test_ko(self, uploader_mock, caplog): """ Run with exception thrown """ uploader_mock.return_value.upload_wal.side_effect = Exception('test') with pytest.raises(SystemExit) as e: cloud_walarchive.main([ 's3://test-bucket/testfolder/', 'test-server', '/tmp/000000080000ABFF000000C1' ]) assert ('Barman cloud WAL archiver exception:', logging.ERROR, 'err') in caplog.record_tuples assert e.value.code == 1
def test_badly_formed_tags( self, _cloud_interface_mock, _uploader_mock, tags_args, caplog, ): """Test that badly formed tags are rejected.""" with pytest.raises(SystemExit) as excinfo: cloud_walarchive.main([ "s3://test-bucket/testfolder", "test-server", "/path/to/somewhere/000000080000ABFF000000C1", ] + tags_args) assert excinfo.value.code == 3
def test_ko(self, uploader_mock, caplog): """ Run with exception thrown """ uploader_mock.return_value.upload_wal.side_effect = Exception("test") with pytest.raises(SystemExit) as e: cloud_walarchive.main([ "s3://test-bucket/testfolder/", "test-server", "/tmp/000000080000ABFF000000C1", ]) assert ( "Barman cloud WAL archiver exception:", logging.ERROR, "err", ) in caplog.record_tuples assert e.value.code == 1
def test_wal_archive_azure_upload_block_args( self, cloud_interface_mock, _uploader_mock, azure_client_args, expected_cloud_interface_kwargs, ): """Test that azure block upload arguments are passed to the cloud interface.""" cloud_walarchive.main([ "https://account.blob.core.windows.net/container/path/to/dir", "test-server", "000000080000ABFF000000C2", "--cloud-provider", "azure-blob-storage", ] + azure_client_args) # Verify expected kwargs are passed to cloud interface cloud_interface_mock.assert_called_once_with( url="https://account.blob.core.windows.net/container/path/to/dir", encryption_scope=None, tags=None, **expected_cloud_interface_kwargs)
def test_uses_barman_file_env_when_running_as_retry_hook( self, uploader_mock, cloud_interface_mock): uploader = uploader_mock.return_value cloud_walarchive.main(["cloud_storage_url", "test_server"]) cloud_interface_mock.assert_called_once() uploader.upload_wal.assert_called_once_with(EXAMPLE_WAL_PATH)
def test_ok(self, cloud_interface_mock, uploader_mock): uploader_object_mock = uploader_mock.return_value cloud_object_interface_mock = cloud_interface_mock.return_value # Plain success cloud_walarchive.main([ "s3://test-bucket/testfolder", "test-server", "/tmp/000000080000ABFF000000C1", ]) uploader_mock.assert_called_once_with( cloud_interface=cloud_object_interface_mock, server_name="test-server", compression=None, ) cloud_object_interface_mock.setup_bucket.assert_called_once_with() uploader_object_mock.upload_wal.assert_called_once_with( "/tmp/000000080000ABFF000000C1") # Plain success with profile uploader_mock.reset_mock() cloud_interface_mock.reset_mock() cloud_walarchive.main([ "--profile", "test_profile", "s3://test-bucket/testfolder", "test-server", "/tmp/000000080000ABFF000000C1", ]) uploader_mock.assert_called_once_with( cloud_interface=cloud_object_interface_mock, server_name="test-server", compression=None, ) cloud_object_interface_mock.setup_bucket.assert_called_once_with() uploader_object_mock.upload_wal.assert_called_once_with( "/tmp/000000080000ABFF000000C1") # Invalid filename upload uploader_mock.reset_mock() cloud_interface_mock.reset_mock() with pytest.raises(SystemExit) as excinfo: cloud_walarchive.main([ "--profile", "test_profile", "s3://test-bucket/testfolder", "test-server", "/tmp/000000080000ABFF000000C1-INVALID", ]) assert excinfo.value.code == 3 # Successful connectivity test uploader_mock.reset_mock() cloud_interface_mock.reset_mock() uploader_object_mock.test_connectivity.return_value = True with pytest.raises(SystemExit) as excinfo: cloud_walarchive.main([ "-t", "s3://test-bucket/testfolder", "test-server", "/tmp/000000080000ABFF000000C1", ]) assert excinfo.value.code == 0 uploader_mock.assert_called_once_with( cloud_interface=cloud_object_interface_mock, server_name="test-server", compression=None, ) cloud_object_interface_mock.test_connectivity.assert_called_once_with() # Failing connectivity test uploader_mock.reset_mock() cloud_interface_mock.reset_mock() cloud_object_interface_mock.test_connectivity.return_value = False with pytest.raises(SystemExit) as excinfo: cloud_walarchive.main([ "-t", "s3://test-bucket/testfolder", "test-server", "/tmp/000000080000ABFF000000C1", ]) assert excinfo.value.code == 2 uploader_mock.assert_called_once_with( cloud_interface=cloud_object_interface_mock, server_name="test-server", compression=None, ) cloud_object_interface_mock.test_connectivity.assert_called_once_with()