Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
 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()
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
    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()