def test_barman_keep_fails_if_backup_status_not_done(
     self,
     get_cloud_interface_mock,
     cloud_backup_catalog_mock,
     cloud_backup_catalog,
     caplog,
 ):
     cloud_backup_catalog.get_backup_info.return_value.status = (
         BackupInfo.WAITING_FOR_WALS
     )
     cloud_backup_catalog_mock.return_value = cloud_backup_catalog
     with pytest.raises(SystemExit) as exc:
         cloud_backup_keep.main(
             [
                 "cloud_storage_url",
                 "test_server",
                 "test_backup_id",
                 "--target",
                 "standalone",
             ]
         )
     assert exc.value.code == 1
     assert (
         "Cannot add keep to backup test_backup_id because it has status "
         "WAITING_FOR_WALS. Only backups with status DONE can be kept."
     ) in caplog.text
     cloud_backup_catalog_mock.keep_backup.assert_not_called()
예제 #2
0
    def test_fails_if_no_backup_id_provided(self, capsys):
        """If no backup ID is provided then exit"""
        with pytest.raises(SystemExit):
            cloud_backup_keep.main(["cloud_storage_url", "test_server"])

        _, err = capsys.readouterr()
        assert ("error: the following arguments are required: backup_id"
                # argparse produces a different error in Python 2
                or "error: too few arguments" in err)
예제 #3
0
    def test_add_keep_fails_if_no_target_release_or_status_is_provided(
            self, _mock_cloud_interface, capsys):
        """If none of --target, --release or --status is provided then exit"""
        with pytest.raises(SystemExit):
            cloud_backup_keep.main(
                ["cloud_storage_url", "test_server", "test_backup_id"])

        _, err = capsys.readouterr()
        assert (
            "one of the arguments -r/--release -s/--status --target is required"
            in err)
예제 #4
0
 def test_barman_keep_release(self, get_cloud_interface_mock,
                              cloud_backup_catalog_mock):
     """Verify keep command with --release calls remove_backup"""
     cloud_backup_keep.main([
         "cloud_storage_url",
         "test_server",
         "test_backup_id",
         "--release",
     ])
     cloud_backup_catalog = cloud_backup_catalog_mock.return_value
     cloud_backup_catalog.release_keep.assert_called_once_with(
         "test_backup_id")
예제 #5
0
 def test_barman_keep_target(self, get_cloud_interface_mock,
                             cloud_backup_catalog_mock,
                             cloud_backup_catalog):
     """Verify keep command with --target calls keep_backup"""
     cloud_backup_catalog_mock.return_value = cloud_backup_catalog
     cloud_backup_keep.main([
         "cloud_storage_url",
         "test_server",
         "test_backup_id",
         "--target",
         "standalone",
     ])
     cloud_backup_catalog.keep_backup.assert_called_once_with(
         "test_backup_id", "standalone")
예제 #6
0
 def test_fails_on_connectivity_test_failure(self,
                                             get_cloud_interface_mock):
     """If connectivity test fails we exit."""
     cloud_interface_mock = get_cloud_interface_mock.return_value
     cloud_interface_mock.test_connectivity.return_value = False
     with pytest.raises(SystemExit) as exc:
         cloud_backup_keep.main([
             "cloud_storage_url",
             "test_server",
             "test_backup_id",
             "--target",
             "standalone",
         ])
     assert exc.value.code == 1
     cloud_interface_mock.test_connectivity.assert_called_once()
예제 #7
0
 def test_exits_on_connectivity_test(self, get_cloud_interface_mock):
     """If the -t option is used we check connectivity and exit."""
     cloud_interface_mock = get_cloud_interface_mock.return_value
     cloud_interface_mock.test_connectivity.return_value = True
     with pytest.raises(SystemExit) as exc:
         cloud_backup_keep.main([
             "cloud_storage_url",
             "test_server",
             "test_backup_id",
             "--target",
             "standalone",
             "-t",
         ])
     assert exc.value.code == 0
     cloud_interface_mock.test_connectivity.assert_called_once()
예제 #8
0
 def test_barman_keep_status_nokeep(self, get_cloud_interface_mock,
                                    cloud_backup_catalog_mock, capsys):
     """Verify keep --status prints get_keep_target_output"""
     cloud_backup_catalog = cloud_backup_catalog_mock.return_value
     cloud_backup_catalog.get_keep_target.return_value = None
     cloud_backup_keep.main([
         "cloud_storage_url",
         "test_server",
         "test_backup_id",
         "--status",
     ])
     cloud_backup_catalog.get_keep_target.assert_called_once_with(
         "test_backup_id")
     out, _err = capsys.readouterr()
     assert "nokeep" in out
예제 #9
0
 def test_fails_if_bucket_not_found(self, get_cloud_interface_mock, caplog):
     """If the bucket does not exist we exit with status 1."""
     cloud_interface_mock = get_cloud_interface_mock.return_value
     cloud_interface_mock.bucket_name = "no_bucket_here"
     cloud_interface_mock.bucket_exists = False
     with pytest.raises(SystemExit) as exc:
         cloud_backup_keep.main([
             "s3://cloud_storage_url/no_bucket_here",
             "test_server",
             "test_backup_id",
             "--target",
             "standalone",
         ])
     assert exc.value.code == 1
     assert "Bucket no_bucket_here does not exist" in caplog.text
예제 #10
0
    def test_exits_on_unsupported_target(self, get_cloud_interface_mock,
                                         capsys):
        """If an unsupported target is specified then exit"""
        cloud_interface_mock = get_cloud_interface_mock.return_value
        cloud_interface_mock.test_connectivity.return_value = True
        with pytest.raises(SystemExit):
            cloud_backup_keep.main([
                "cloud_storage_url",
                "test_server",
                "test_backup_id",
                "--target",
                "unsupported_target",
            ])

        _, err = capsys.readouterr()
        assert (
            "error: argument --target: invalid choice: 'unsupported_target' (choose from 'full', 'standalone')"
            in err)