Example #1
0
    def test_pgespresso_start_backup(self):
        """
        Simple test for pgespresso_start_backup method
        of the RsyncBackupExecutor class
        """
        # Build and configure a server using a mock
        backup_manager = build_backup_manager()
        backup_manager.config.backup_options = [BackupOptions.CONCURRENT_BACKUP]
        backup_label = 'test label'

        # Expect an exception because pg_espresso is not installed
        backup_manager.server.pg_espresso_installed.return_value = False
        with pytest.raises(Exception):
            backup_manager.executor.pgespresso_start_backup(backup_label)

        # Report pg_expresso installed. Expect no error and the correct call
        # sequence
        backup_manager.server.reset_mock()
        backup_manager.executor.server.pg_espresso_installed.return_value = True
        backup_manager.executor.pgespresso_start_backup(backup_label)

        pg_connect = call.pg_connect()
        with_pg_connect = pg_connect.__enter__()
        cursor = with_pg_connect.cursor()
        assert backup_manager.server.mock_calls == [
            pg_connect,
            with_pg_connect,
            call.pg_espresso_installed(),
            cursor,
            cursor.execute(ANY, ANY),
            cursor.fetchone(),
            pg_connect.__exit__(None, None, None)]
Example #2
0
    def test_pg_start_backup(self):
        """
        Simple test for pg_start_backup method of the RsyncBackupExecutor class
        """
        # Build and configure a server using a mock
        backup_manager = build_backup_manager()
        backup_label = "test label"

        # Expect an exception for a non correctly configured server
        with pytest.raises(Exception):
            backup_manager.executor.pg_start_backup(backup_label)

        # Expect no error and the correct call sequence
        backup_manager.server.reset_mock()
        backup_manager.server.pg_is_in_recovery.return_value = False
        backup_manager.server.server_version = 90300
        backup_manager.executor.strategy._pg_start_backup(backup_label)

        pg_connect = call.pg_connect()
        with_pg_connect = pg_connect.__enter__()
        cursor = with_pg_connect.cursor()
        assert backup_manager.server.mock_calls == [
            pg_connect,
            with_pg_connect,
            pg_connect.__enter__().rollback(),
            cursor,
            cursor.execute(ANY, ANY),
            cursor.fetchone(),
            pg_connect.__exit__(None, None, None),
        ]

        # Change server version and expect no error and the correct call
        # sequence
        backup_manager.server.reset_mock()
        backup_manager.server.server_version = 80300
        backup_manager.executor.strategy._pg_start_backup(backup_label)

        assert backup_manager.server.mock_calls == [
            pg_connect,
            with_pg_connect,
            pg_connect.__enter__().rollback(),
            cursor,
            cursor.execute(ANY, ANY),
            cursor.fetchone(),
            pg_connect.__exit__(None, None, None),
        ]
Example #3
0
    def test_pg_stop_backup(self):
        """
        Basic test for the _pg_stop_backup method
        """
        # Build a backup info and configure the mocks
        backup_manager = build_backup_manager()

        # Test 1: Expect no error and the correct call sequence
        backup_manager.executor.strategy._pg_stop_backup()

        pg_connect = call.pg_connect()
        with_pg_connect = pg_connect.__enter__()
        cursor = with_pg_connect.cursor()
        assert backup_manager.server.mock_calls == [
            pg_connect,
            with_pg_connect,
            pg_connect.__enter__().rollback(),
            cursor,
            cursor.execute(ANY),
            cursor.fetchone(),
            pg_connect.__exit__(None, None, None),
        ]

        # Test 2: Setup the mock to trigger an exception
        backup_manager.executor.server.reset_mock()
        backup_manager.executor.server.pg_connect.return_value.__enter__.return_value.cursor.return_value.execute.side_effect = (
            psycopg2.Error
        )

        # Check that the method returns None as result
        assert backup_manager.executor.strategy._pg_stop_backup() is None
        assert backup_manager.server.mock_calls == [
            pg_connect,
            with_pg_connect,
            pg_connect.__enter__().rollback(),
            cursor,
            cursor.execute(ANY),
            pg_connect.__exit__(None, None, None),
        ]
Example #4
0
    def test_pgespresso_stop_backup(self):
        """
        Basic test for _pgespresso_stop_backup
        """
        # Build a backup info and configure the mocks
        server = build_mocked_server(main_conf={"backup_options": BackupOptions.CONCURRENT_BACKUP})
        backup_manager = build_backup_manager(server=server)
        # Test 1: Expect no error and the correct call sequence
        backup_manager.executor.strategy._pgespresso_stop_backup("test_label")

        pg_connect = call.pg_connect()
        with_pg_connect = pg_connect.__enter__()
        cursor = with_pg_connect.cursor()
        assert backup_manager.server.mock_calls == [
            pg_connect,
            with_pg_connect,
            pg_connect.__enter__().rollback(),
            cursor,
            cursor.execute(ANY, ("test_label",)),
            cursor.fetchone(),
            pg_connect.__exit__(None, None, None),
        ]

        # Test 2: Setup the mock to trigger an exception
        backup_manager.executor.server.reset_mock()
        backup_manager.executor.server.pg_connect.return_value.__enter__.return_value.cursor.return_value.execute.side_effect = (
            psycopg2.Error
        )

        assert backup_manager.executor.strategy._pgespresso_stop_backup("test_label1") is None
        assert backup_manager.server.mock_calls == [
            pg_connect,
            with_pg_connect,
            pg_connect.__enter__().rollback(),
            cursor,
            cursor.execute(ANY, ("test_label1",)),
            pg_connect.__exit__(None, None, None),
        ]
Example #5
0
    def test_pgespresso_stop_backup(self):
        """
        Basic test for pgespresso_stop_backup
        """
        # Build a backup info and configure the mocks
        backup_manager = build_backup_manager()

        # Test 1: Expect no error and the correct call sequence
        backup_manager.executor.pgespresso_stop_backup('test_label')

        pg_connect = call.pg_connect()
        with_pg_connect = pg_connect.__enter__()
        cursor = with_pg_connect.cursor()
        assert backup_manager.server.mock_calls == [
            pg_connect,
            with_pg_connect,
            cursor,
            cursor.execute(ANY, ('test_label',)),
            cursor.fetchone(),
            pg_connect.__exit__(None, None, None)]

        # Test 2: Setup the mock to trigger an exception
        backup_manager.executor.server.reset_mock()
        backup_manager.executor.server.pg_connect.return_value. \
            __enter__.return_value. \
            cursor.return_value.\
            execute.side_effect = psycopg2.Error

        assert backup_manager.executor.pgespresso_stop_backup(
            'test_label1') is None
        assert backup_manager.server.mock_calls == [
            pg_connect,
            with_pg_connect,
            cursor,
            cursor.execute(ANY, ('test_label1',)),
            pg_connect.__exit__(None, None, None)]