def test_backup_data(self): # Test for unsupported storage backend. flexmock(backup_recovery_constants.StorageTypes()).should_receive("get_storage_types").and_return([]) self.assertEquals(None, cassandra_backup.backup_data("blah", "")) flexmock(cassandra_backup).should_receive("clear_old_snapshots").and_return() # Test with failure to create new snapshots. flexmock(cassandra_backup).should_receive("create_snapshot").and_return(False) self.assertEquals(None, cassandra_backup.backup_data("", "")) # Test with missing Cassandra snapshots. flexmock(cassandra_backup).should_receive("create_snapshot").and_return(True) flexmock(backup_recovery_helper).should_receive("get_snapshot_paths").and_return([]) self.assertEquals(None, cassandra_backup.backup_data("", "")) # Test with at least one Cassandra snapshot and not enough disk space. flexmock(backup_recovery_helper).should_receive("get_snapshot_paths").and_return(["some/snapshot"]) flexmock(backup_recovery_helper).should_receive("enough_disk_space").with_args("cassandra").and_return(False) self.assertEquals(None, cassandra_backup.backup_data("", "")) # Test with at least one Cassandra snapshot and failure to create the tar. flexmock(backup_recovery_helper).should_receive("enough_disk_space").with_args("cassandra").and_return(True) flexmock(backup_recovery_helper).should_receive("tar_backup_files").and_return(None) flexmock(cassandra_backup).should_receive("clear_old_snapshots").and_return() flexmock(backup_recovery_helper).should_receive("delete_local_backup_file").and_return() flexmock(backup_recovery_helper).should_receive("move_secondary_backup").and_return() self.assertEquals(None, cassandra_backup.backup_data("", "")) # Test with successful tar creation and local storage. flexmock(backup_recovery_helper).should_receive("get_snapshot_paths").and_return(["some/snapshot"]) flexmock(backup_recovery_helper).should_receive("tar_backup_files").and_return("some/tar") flexmock(cassandra_backup).should_receive("clear_old_snapshots").and_return() flexmock(backup_recovery_helper).should_receive("delete_secondary_backup").and_return() self.assertIsNotNone(cassandra_backup.backup_data("", "")) # Test with GCS as storage backend and failure to upload. flexmock(gcs_helper).should_receive("upload_to_bucket").and_return(False) flexmock(backup_recovery_helper).should_receive("move_secondary_backup").and_return() flexmock(cassandra_backup).should_receive("clear_old_snapshots").and_return() flexmock(backup_recovery_helper).should_receive("delete_local_backup_file").and_return() self.assertEquals(None, cassandra_backup.backup_data(backup_recovery_constants.StorageTypes.GCS, "")) # Test with GCS as storage backend and successful upload. flexmock(gcs_helper).should_receive("upload_to_bucket").and_return(True) flexmock(backup_recovery_helper).should_receive("delete_secondary_backup").and_return() flexmock(cassandra_backup).should_receive("clear_old_snapshots").and_return() flexmock(backup_recovery_helper).should_receive("delete_local_backup_file").and_return() self.assertIsNotNone(cassandra_backup.backup_data(backup_recovery_constants.StorageTypes.GCS, ""))
def do_cassandra_backup(self, storage, path): """ Top level function for doing Cassandra backups. Args: storage: A str, one of the StorageTypes class members. path: A str, the name of the backup file to be created. Returns: A JSON string to return to the client. """ success = True reason = "success" try: logging.info("Acquiring lock for db backup.") self.__cassandra_backup_lock.acquire(True) logging.info("Got the lock for db backup.") if not cassandra_backup.backup_data(storage, path): return self.bad_request("DB backup failed!") else: logging.info("Successful db backup!") except backup_exceptions.BRException, exception: logging.error("Unable to complete db backup: {0}".format(exception)) success = False reason = str(exception)
def do_cassandra_backup(self, storage, path): """ Top level function for doing Cassandra backups. Args: storage: A str, one of the StorageTypes class members. path: A str, the name of the backup file to be created. Returns: A JSON string to return to the client. """ success = True reason = "success" try: logging.info("Acquiring lock for db backup.") self.__cassandra_backup_lock.acquire(True) logging.info("Got the lock for db backup.") if not cassandra_backup.backup_data(storage, path): return self.bad_request("DB backup failed!") else: logging.info("Successful db backup!") except backup_exceptions.BRException, exception: logging.error( "Unable to complete db backup: {0}".format(exception)) success = False reason = str(exception)
def test_backup_data(self): # Test for unsupported storage backend. flexmock(backup_recovery_constants.StorageTypes()).\ should_receive("get_storage_types").and_return([]) self.assertEquals(None, cassandra_backup.backup_data('blah', '')) flexmock(cassandra_backup).should_receive('clear_old_snapshots').\ and_return() # Test with failure to create new snapshots. flexmock(cassandra_backup).should_receive('create_snapshot').\ and_return(False) self.assertEquals(None, cassandra_backup.backup_data('', '')) # Test with missing Cassandra snapshots. flexmock(cassandra_backup).should_receive('create_snapshot').\ and_return(True) flexmock(cassandra_backup).\ should_receive('get_cassandra_snapshot_file_names').\ and_return([]) self.assertEquals(None, cassandra_backup.backup_data('', '')) # Test with at least one Cassandra snapshot and failure to create the tar. flexmock(cassandra_backup).\ should_receive('get_cassandra_snapshot_file_names').\ and_return(['some/snapshot']) flexmock(cassandra_backup).should_receive('tar_backup_files').\ and_return(None) flexmock(cassandra_backup).should_receive('clear_old_snapshots').\ and_return() flexmock(cassandra_backup).should_receive('delete_local_backup_file').\ and_return() flexmock(cassandra_backup).should_receive('move_secondary_backup').\ and_return() self.assertEquals(None, cassandra_backup.backup_data('', '')) # Test with successful tar creation and local storage. flexmock(cassandra_backup).\ should_receive('get_cassandra_snapshot_file_names').\ and_return(['some/snapshot']) flexmock(cassandra_backup).should_receive('tar_backup_files').\ and_return('some/tar') flexmock(cassandra_backup).should_receive('clear_old_snapshots').\ and_return() flexmock(cassandra_backup).should_receive('delete_secondary_backup').\ and_return() self.assertIsNotNone(cassandra_backup.backup_data('', '')) # Test with GCS as storage backend and failure to upload. flexmock(gcs_helper).should_receive('upload_to_bucket').and_return(False) flexmock(cassandra_backup).should_receive('move_secondary_backup').\ and_return() flexmock(cassandra_backup).should_receive('clear_old_snapshots').\ and_return() flexmock(cassandra_backup).should_receive('delete_local_backup_file').\ and_return() self.assertEquals(None, cassandra_backup.backup_data( backup_recovery_constants.StorageTypes.GCS, '')) # Test with GCS as storage backend and successful upload. flexmock(gcs_helper).should_receive('upload_to_bucket').and_return(True) flexmock(cassandra_backup).should_receive('delete_secondary_backup').\ and_return() flexmock(cassandra_backup).should_receive('clear_old_snapshots').\ and_return() flexmock(cassandra_backup).should_receive('delete_local_backup_file').\ and_return() self.assertIsNotNone(cassandra_backup.backup_data( backup_recovery_constants.StorageTypes.GCS, ''))
def test_backup_data(self): # Test for unsupported storage backend. flexmock(backup_recovery_constants.StorageTypes()).\ should_receive("get_storage_types").and_return([]) self.assertEquals(None, cassandra_backup.backup_data('blah', '')) flexmock(cassandra_backup).should_receive('clear_old_snapshots').\ and_return() # Test with failure to create new snapshots. flexmock(cassandra_backup).should_receive('create_snapshot').\ and_return(False) self.assertEquals(None, cassandra_backup.backup_data('', '')) # Test with missing Cassandra snapshots. flexmock(cassandra_backup).should_receive('create_snapshot').\ and_return(True) flexmock(cassandra_backup).\ should_receive('get_cassandra_snapshot_file_names').\ and_return([]) self.assertEquals(None, cassandra_backup.backup_data('', '')) # Test with at least one Cassandra snapshot and failure to create the tar. flexmock(cassandra_backup).\ should_receive('get_cassandra_snapshot_file_names').\ and_return(['some/snapshot']) flexmock(cassandra_backup).should_receive('tar_backup_files').\ and_return(None) flexmock(cassandra_backup).should_receive('clear_old_snapshots').\ and_return() flexmock(cassandra_backup).should_receive('delete_local_backup_file').\ and_return() flexmock(cassandra_backup).should_receive('move_secondary_backup').\ and_return() self.assertEquals(None, cassandra_backup.backup_data('', '')) # Test with successful tar creation and local storage. flexmock(cassandra_backup).\ should_receive('get_cassandra_snapshot_file_names').\ and_return(['some/snapshot']) flexmock(cassandra_backup).should_receive('tar_backup_files').\ and_return('some/tar') flexmock(cassandra_backup).should_receive('clear_old_snapshots').\ and_return() flexmock(cassandra_backup).should_receive('delete_secondary_backup').\ and_return() self.assertIsNotNone(cassandra_backup.backup_data('', '')) # Test with GCS as storage backend and failure to upload. flexmock(gcs_helper).should_receive('upload_to_bucket').and_return( False) flexmock(cassandra_backup).should_receive('move_secondary_backup').\ and_return() flexmock(cassandra_backup).should_receive('clear_old_snapshots').\ and_return() flexmock(cassandra_backup).should_receive('delete_local_backup_file').\ and_return() self.assertEquals( None, cassandra_backup.backup_data( backup_recovery_constants.StorageTypes.GCS, '')) # Test with GCS as storage backend and successful upload. flexmock(gcs_helper).should_receive('upload_to_bucket').and_return( True) flexmock(cassandra_backup).should_receive('delete_secondary_backup').\ and_return() flexmock(cassandra_backup).should_receive('clear_old_snapshots').\ and_return() flexmock(cassandra_backup).should_receive('delete_local_backup_file').\ and_return() self.assertIsNotNone( cassandra_backup.backup_data( backup_recovery_constants.StorageTypes.GCS, ''))