Exemple #1
0
    def test_create_restore_session_with_device_guid_calls_post_with_device_guid_in_json(
            self, connection):
        storage_archive_service = StorageArchiveService(connection)

        storage_archive_service.create_restore_session(DEVICE_GUID)
        json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
        assert json_arg.get(COMPUTER_GUID_KEY) == DEVICE_GUID
Exemple #2
0
 def test_start_restore_posts_expected_data_to_expected_url(self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.start_restore(
         TEST_DEVICE_GUID,
         TEST_SESSION_ID,
         RESTORE_GROUPS,
         TEST_NUM_FILES,
         TEST_NUM_DIRS,
         TEST_NUM_BYTES,
         True,
         True,
         True,
         True,
     )
     expected_data = {
         "sourceComputerGuid": TEST_DEVICE_GUID,
         "webRestoreSessionId": TEST_SESSION_ID,
         "restoreGroups": RESTORE_GROUPS,
         "numFiles": TEST_NUM_FILES,
         "numDirs": TEST_NUM_DIRS,
         "numBytes": TEST_NUM_BYTES,
         "expireJob": True,
         "showDeleted": True,
         "restoreFullPath": True,
         "restoreToServer": True,
     }
     connection.post.assert_called_once_with(
         START_WEB_RESTORE_JOB_URL, json=expected_data
     )
Exemple #3
0
 def test_get_restore_status_calls_get_with_correct_url(self, mocker, connection):
     storage_archive_service = StorageArchiveService(connection)
     api_response = mocker.MagicMock(spec=Py42Response)
     connection.get.return_value = api_response
     storage_archive_service.get_restore_status(TEST_JOB_ID)
     expected_url = WEB_RESTORE_JOB_URL + "/" + TEST_JOB_ID
     connection.get.assert_called_once_with(expected_url)
Exemple #4
0
 def test_get_file_path_metadata_calls_get_with_expected_params(self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.get_file_path_metadata(
         TEST_SESSION_ID,
         TEST_DEVICE_GUID,
         TEST_BACKUP_SET_ID,
         file_id="file_id",
         timestamp="timestamp",
         show_deleted=True,
         batch_size="batch_size",
         last_batch_file_id="lastBatchId",
         include_os_metadata=True,
     )
     connection.get.assert_called_once_with(
         u"/api/WebRestoreTreeNode",
         params={
             "webRestoreSessionId": TEST_SESSION_ID,
             "guid": TEST_DEVICE_GUID,
             "fileId": "file_id",
             "timestamp": "timestamp",
             "showDeleted": True,
             "batchSize": "batch_size",
             "lastBatchFileId": "lastBatchId",
             "backupSetId": TEST_BACKUP_SET_ID,
             "includeOsMetadata": True,
         },
     )
Exemple #5
0
 def test_get_file_size_job_calls_get_with_expected_params(self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.get_file_size_job("job_id", "device_guid")
     connection.get.assert_called_once_with(
         "/api/WebRestoreFileSizePolling",
         params={"jobId": "job_id", "guid": "device_guid"},
     )
Exemple #6
0
    def test_start_restore_with_required_args_calls_post_with_all_args_in_json(
            self, connection):
        storage_archive_service = StorageArchiveService(connection)
        storage_archive_service.start_restore(DEVICE_GUID,
                                              WEB_RESTORE_SESSION_ID, PATH_SET,
                                              NUM_FILES, NUM_DIRS, SIZE)

        json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]

        keys = [
            GUID_KEY,
            WEB_RESTORE_SESSION_ID_KEY,
            PATH_SET_KEY,
            NUM_FILES_KEY,
            NUM_DIRS_KEY,
            SIZE_KEY,
            ZIP_RESULT_KEY,
            EXPIRE_JOB_KEY,
            SHOW_DELETED_KEY,
            RESTORE_FULL_PATH_KEY,
            TIMESTAMP_KEY,
            BACKUP_SET_ID_KEY,
        ]

        assert sorted(json_arg.keys()) == sorted(keys)
Exemple #7
0
 def test_start_restore_with_all_args_calls_post_with_all_args_in_data(
         self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.start_restore(
         DEVICE_GUID,
         WEB_RESTORE_SESSION_ID,
         PATH_SET,
         NUM_FILES,
         NUM_DIRS,
         SIZE,
         zip_result=True,
         expire_job=True,
         show_deleted=True,
         restore_full_path=True,
         timestamp=TIMESTAMP,
         backup_set_id=BACKUP_SET_ID,
     )
     json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
     expected_data = {
         GUID_KEY: DEVICE_GUID,
         WEB_RESTORE_SESSION_ID_KEY: WEB_RESTORE_SESSION_ID,
         PATH_SET_KEY: PATH_SET,
         NUM_FILES_KEY: NUM_FILES,
         NUM_DIRS_KEY: NUM_DIRS,
         SIZE_KEY: SIZE,
         ZIP_RESULT_KEY: True,
         EXPIRE_JOB_KEY: True,
         SHOW_DELETED_KEY: True,
         RESTORE_FULL_PATH_KEY: True,
         TIMESTAMP_KEY: TIMESTAMP,
         BACKUP_SET_ID_KEY: BACKUP_SET_ID,
     }
     assert json_arg == expected_data
Exemple #8
0
 def test_get_file_path_metadata_calls_get_with_expected_params(
         self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.get_file_path_metadata(
         "session",
         "guid",
         "file_id",
         "timestamp",
         True,
         "batch_size",
         "lastBatchId",
         "backupset_id",
         True,
     )
     connection.get.assert_called_once_with(
         u"/api/WebRestoreTreeNode",
         params={
             "webRestoreSessionId": "session",
             "guid": "guid",
             "fileId": "file_id",
             "timestamp": "timestamp",
             "showDeleted": True,
             "batchSize": "batch_size",
             "lastBatchFileId": "lastBatchId",
             "backupSetId": "backupset_id",
             "includeOsMetadata": True,
         },
     )
Exemple #9
0
 def test_create_restore_session_calls_post_with_correct_url(
     self, mocker, connection
 ):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.create_restore_session(TEST_DEVICE_GUID)
     connection.post.assert_called_once_with(
         WEB_RESTORE_SESSION_URL, json=mocker.ANY
     )
Exemple #10
0
    def test_create_restore_session_with_data_key_token_calls_post_with_data_key_token_in_json(
            self, connection):
        storage_archive_service = StorageArchiveService(connection)

        storage_archive_service.create_restore_session(
            DEVICE_GUID, data_key_token=DATA_KEY_TOKEN)
        json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
        assert json_arg.get(DATA_KEY_TOKEN_KEY) == DATA_KEY_TOKEN
Exemple #11
0
 def test_cancel_restore_calls_delete_with_correct_url(
         self, mocker, connection):
     storage_archive_service = StorageArchiveService(connection)
     api_response = mocker.MagicMock(spec=Py42Response)
     connection.delete.return_value = api_response
     storage_archive_service.cancel_restore(WEB_RESTORE_JOB_ID)
     connection.delete.assert_called_once_with(WEB_RESTORE_JOB_URL,
                                               json=mocker.ANY)
Exemple #12
0
    def test_start_restore_calls_post_with_correct_url(self, connection):
        storage_archive_service = StorageArchiveService(connection)

        storage_archive_service.start_restore(DEVICE_GUID,
                                              WEB_RESTORE_SESSION_ID, PATH_SET,
                                              NUM_FILES, NUM_DIRS, SIZE)
        assert connection.post.call_args[ARGS_INDEX][
            ARGS_INDEX] == WEB_RESTORE_JOB_URL
Exemple #13
0
    def test_create_restore_session_with_encryption_key_calls_post_with_encryption_key_in_json(
            self, connection):
        storage_archive_service = StorageArchiveService(connection)

        storage_archive_service.create_restore_session(
            DEVICE_GUID, encryption_key=ENCRYPTION_KEY)
        json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
        assert json_arg.get(ENCRYPTION_KEY_KEY) == ENCRYPTION_KEY
Exemple #14
0
    def test_create_restore_session_with_private_password_calls_post_with_private_password_in_json(
            self, connection):
        storage_archive_service = StorageArchiveService(connection)

        storage_archive_service.create_restore_session(
            DEVICE_GUID, private_password=PRIVATE_PASSWORD)
        json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
        assert json_arg.get(PRIVATE_PASSWORD_KEY) == PRIVATE_PASSWORD
Exemple #15
0
 def test_cancel_restore_calls_delete_with_job_id_in_data(
         self, mocker, connection):
     storage_archive_service = StorageArchiveService(connection)
     api_response = mocker.MagicMock(spec=Py42Response)
     connection.delete.return_value = api_response
     storage_archive_service.cancel_restore(WEB_RESTORE_JOB_ID)
     json_arg = connection.delete.call_args[KWARGS_INDEX][JSON_KEYWORD]
     expected_data = {JOB_ID_KEY: WEB_RESTORE_JOB_ID}
     assert json_arg == expected_data
Exemple #16
0
 def test_stream_restore_result_status_calls_get_with_correct_url(
     self, mocker, connection
 ):
     storage_archive_service = StorageArchiveService(connection)
     api_response = mocker.MagicMock(spec=Py42Response)
     connection.get.return_value = api_response
     storage_archive_service.stream_restore_result(TEST_JOB_ID)
     expected_url = WEB_RESTORE_JOB_RESULT_URL + "/" + TEST_JOB_ID
     connection.get.assert_called_once_with(
         expected_url, stream=True, headers={"Accept": "application/octet-stream"}
     )
Exemple #17
0
 def test_create_file_size_job_calls_post_with_expected_params(self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.create_file_size_job("device_guid", "file_id", 0, False)
     json_dict = {
         "guid": "device_guid",
         "fileId": "file_id",
         "timestamp": 0,
         "showDeleted": False,
     }
     connection.post.assert_called_once_with(
         "/api/WebRestoreFileSizePolling", json=json_dict
     )
Exemple #18
0
    def test_start_restore_calls_post_with_correct_url(self, connection):
        storage_archive_service = StorageArchiveService(connection)

        storage_archive_service.start_restore(
            TEST_DEVICE_GUID,
            TEST_SESSION_ID,
            RESTORE_GROUPS,
            TEST_NUM_FILES,
            TEST_NUM_DIRS,
            TEST_NUM_BYTES,
        )
        assert (connection.post.call_args[ARGS_INDEX][ARGS_INDEX] ==
                START_WEB_RESTORE_JOB_URL)
Exemple #19
0
 def test_start_restore_with_backup_set_id_calls_post_with_backup_set_id_in_data(
         self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.start_restore(
         DEVICE_GUID,
         WEB_RESTORE_SESSION_ID,
         PATH_SET,
         NUM_FILES,
         NUM_DIRS,
         SIZE,
         backup_set_id=BACKUP_SET_ID,
     )
     json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
     assert json_arg.get(BACKUP_SET_ID_KEY) == BACKUP_SET_ID
Exemple #20
0
 def test_start_restore_with_timestamp_calls_post_with_timestamp_in_data(
         self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.start_restore(
         DEVICE_GUID,
         WEB_RESTORE_SESSION_ID,
         PATH_SET,
         NUM_FILES,
         NUM_DIRS,
         SIZE,
         timestamp=TIMESTAMP,
     )
     json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
     assert json_arg.get(TIMESTAMP_KEY) == TIMESTAMP
Exemple #21
0
 def test_start_restore_with_restore_full_path_false_calls_post_with_restore_full_path_true_in_data(
         self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.start_restore(
         DEVICE_GUID,
         WEB_RESTORE_SESSION_ID,
         PATH_SET,
         NUM_FILES,
         NUM_DIRS,
         SIZE,
         restore_full_path=False,
     )
     json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
     assert json_arg.get(RESTORE_FULL_PATH_KEY) is False
Exemple #22
0
 def test_start_restore_with_show_deleted_false_calls_post_with_show_deleted_false_in_data(
         self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.start_restore(
         DEVICE_GUID,
         WEB_RESTORE_SESSION_ID,
         PATH_SET,
         NUM_FILES,
         NUM_DIRS,
         SIZE,
         show_deleted=False,
     )
     json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
     assert json_arg.get(SHOW_DELETED_KEY) is False
Exemple #23
0
    def test_start_restore_with_expire_job_as_false_calls_post_with_expire_job_in_data(
            self, connection):
        storage_archive_service = StorageArchiveService(connection)

        storage_archive_service.start_restore(
            DEVICE_GUID,
            WEB_RESTORE_SESSION_ID,
            PATH_SET,
            NUM_FILES,
            NUM_DIRS,
            SIZE,
            expire_job=False,
        )
        json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
        assert json_arg.get(EXPIRE_JOB_KEY) is False
Exemple #24
0
    def test_start_restore_with_opt_zip_result_as_true_calls_post_with_zip_result_in_data(
            self, connection):
        storage_archive_service = StorageArchiveService(connection)

        storage_archive_service.start_restore(
            DEVICE_GUID,
            WEB_RESTORE_SESSION_ID,
            PATH_SET,
            NUM_FILES,
            NUM_DIRS,
            SIZE,
            zip_result=True,
        )
        json_arg = connection.post.call_args[KWARGS_INDEX][JSON_KEYWORD]
        assert json_arg.get(ZIP_RESULT_KEY) is True
Exemple #25
0
 def test_get_file_size_calls_get_with_expected_params(self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.get_file_size("device_guid", "file_id",
                                           "timestamp", True,
                                           "backupset_id")
     connection.get.assert_called_once_with(
         u"/api/WebRestoreFileSize",
         params={
             "guid": "device_guid",
             "fileId": "file_id",
             "timestamp": "timestamp",
             "showDeleted": True,
             "backupSetId": "backupset_id",
         },
     )
Exemple #26
0
 def test_search_paths_calls_get_with_expected_params(self, connection):
     storage_archive_service = StorageArchiveService(connection)
     storage_archive_service.search_paths("session_id", "device_id",
                                          "regex", 1000, "timestamp", True)
     connection.get.assert_called_once_with(
         "/api/WebRestoreSearch",
         params={
             "webRestoreSessionId": "session_id",
             "guid": "device_id",
             "regex": "regex",
             "maxResults": 1000,
             "timestamp": "timestamp",
             "showDeleted": True,
         },
     )
Exemple #27
0
    def create_archive_service(self, device_guid, destination_guid=None):
        if destination_guid is None:
            destination_guid = self._auto_select_destination_guid(device_guid)

        auth = FileArchiveTmpAuth(self._connection, u"my", device_guid,
                                  destination_guid)
        connection = self._connection_manager.get_storage_connection(auth)
        return StorageArchiveService(connection)
Exemple #28
0
    def test_create_restore_session_when_invalid_password_raises_expected_error(
            self, mocker, connection):
        def side_effect(*args, **kwargs):
            base_err = HTTPError()
            base_err.response = mocker.MagicMock(spec=Response)
            base_err.response.text = """
                [{"name":"PRIVATE_PASSWORD_INVALID","description":"An error has
                occurred. See server logs for more information.","objects":[]}]
            """
            raise Py42InternalServerError(base_err)

        connection.post.side_effect = side_effect
        storage_archive_service = StorageArchiveService(connection)

        with pytest.raises(Py42InvalidArchivePassword) as err:
            storage_archive_service.create_restore_session(
                TEST_DEVICE_GUID, private_password=TEST_PASSWORD)

        assert "Invalid archive password." in str(err.value)
Exemple #29
0
    def test_create_restore_session_when_invalid_encryption_key_raises_expected_error(
            self, mocker, connection):
        def side_effect(*args, **kwargs):
            base_err = HTTPError()
            base_err.response = mocker.MagicMock(spec=Response)
            base_err.response.text = """
                [{"name":"CUSTOM_KEY_INVALID","description":"An error has
                occurred. See server logs for more information.","objects":[]}]
            """
            raise Py42InternalServerError(base_err)

        connection.post.side_effect = side_effect
        storage_archive_service = StorageArchiveService(connection)

        with pytest.raises(Py42InvalidArchiveEncryptionKey) as err:
            storage_archive_service.create_restore_session(
                TEST_DEVICE_GUID, encryption_key=TEST_ENCRYPTION_KEY)

        assert "Invalid archive encryption key." in str(err.value)
Exemple #30
0
 def create_archive_service(self, device_guid, destination_guid):
     auth = FileArchiveAuth(self._connection, u"my", device_guid,
                            destination_guid)
     conn = self._connection_manager.get_storage_connection(auth)
     return StorageArchiveService(conn)