def test_get_all_plan_security_events_calls_security_client_with_expected_params(
         self, mocker, security_client, storage_client_factory,
         microservice_client_factory):
     mock_storage_client = mocker.MagicMock(spec=StorageClient)
     mock_storage_security_client = mocker.MagicMock(
         spec=StorageSecurityClient)
     mock_storage_client.securitydata = mock_storage_security_client
     response = mocker.MagicMock(spec=Py42Response)
     response.text = "{}"
     mock_storage_security_client.get_plan_security_events.return_value = response
     storage_client_factory.from_plan_info.return_value = mock_storage_client
     security_module = SecurityModule(security_client,
                                      storage_client_factory,
                                      microservice_client_factory)
     for _, _ in security_module.get_all_plan_security_events(
             PlanStorageInfo("111111111111111111", "41", "4")):
         pass
     mock_storage_security_client.get_plan_security_events.assert_called_once_with(
         "111111111111111111",
         cursor=None,
         event_types=None,
         include_files=True,
         max_timestamp=None,
         min_timestamp=None,
     )
 def test_get_all_plan_security_events_when_multiple_plans_with_cursors_returned_calls_security_client_expected_number_of_times(
         self, mocker, security_client, storage_client_factory,
         microservice_client_factory):
     mock_storage_client = mocker.MagicMock(spec=StorageClient)
     mock_storage_security_client = mocker.MagicMock(
         spec=StorageSecurityClient)
     mock_storage_client.securitydata = mock_storage_security_client
     response1 = mocker.MagicMock(spec=Py42Response)
     response1.text = '{"cursor": "1:1"}'
     response2 = mocker.MagicMock(spec=Py42Response)
     response2.text = "{}"
     mock_storage_security_client.get_plan_security_events.side_effect = [
         response1,
         response2,
         response1,
         response2,
     ]
     storage_client_factory.from_plan_info.return_value = mock_storage_client
     security_module = SecurityModule(security_client,
                                      storage_client_factory,
                                      microservice_client_factory)
     plans = [
         PlanStorageInfo("111111111111111111", "41", "4"),
         PlanStorageInfo("222222222222222222", "41", "4"),
     ]
     for _, _ in security_module.get_all_plan_security_events(plans):
         pass
     assert mock_storage_security_client.get_plan_security_events.call_count == 4
 def test_get_all_user_security_events_when_cursors_returned_calls_security_client_expected_number_of_times(
     self,
     mocker,
     security_client_one_location,
     storage_client_factory,
     microservice_client_factory,
 ):
     mock_storage_client = mocker.MagicMock(spec=StorageClient)
     mock_storage_security_client = mocker.MagicMock(
         spec=StorageSecurityClient)
     mock_storage_client.securitydata = mock_storage_security_client
     response1 = mocker.MagicMock(spec=Py42Response)
     response1.text = '{"cursor": "1:1"}'
     response2 = mocker.MagicMock(spec=Py42Response)
     response2.text = "{}"
     mock_storage_security_client.get_plan_security_events.side_effect = [
         response1, response2
     ]
     storage_client_factory.from_plan_info.return_value = mock_storage_client
     security_module = SecurityModule(security_client_one_location,
                                      storage_client_factory,
                                      microservice_client_factory)
     for _, _ in security_module.get_all_user_security_events("foo"):
         pass
     assert mock_storage_security_client.get_plan_security_events.call_count == 2
Exemple #4
0
    def test_stream_file_by_md5_raises_py42_error_when_find_file_versions_returns_204_status_code(
        self,
        mocker,
        security_client,
        storage_client_factory,
        microservice_client_factory,
        file_event_search,
        file_location,
        find_file_version,
    ):
        security_module = SecurityModule(security_client,
                                         storage_client_factory,
                                         microservice_client_factory)
        file_event_client = mocker.MagicMock(spec=FileEventClient)
        file_event_client.search.return_value = file_event_search
        file_event_client.get_file_location_detail_by_sha256.return_value = (
            file_location)
        microservice_client_factory.get_file_event_client.return_value = (
            file_event_client)

        pds_client = mocker.MagicMock(spec=PreservationDataServiceClient)
        find_file_version.status_code = 204
        pds_client.find_file_versions.return_value = find_file_version
        microservice_client_factory.get_preservation_data_service_client.return_value = (
            pds_client)

        with pytest.raises(Py42Error) as e:
            security_module.stream_file_by_md5("md5hash")

        assert e.value.args[0] == PDS_EXCEPTION_MESSAGE.format("md5hash")
 def test_get_security_plan_storage_info_one_location_returns_location_info(
         self, security_client_one_location, storage_client_factory,
         microservice_client_factory):
     security_module = SecurityModule(security_client_one_location,
                                      storage_client_factory,
                                      microservice_client_factory)
     storage_infos = security_module.get_security_plan_storage_info_list(
         "foo")
     assert len(storage_infos) == 1
     assert self._storage_info_contains(storage_infos, "111111111111111111",
                                        "4", "41")
 def test_search_with_only_query_calls_through_to_client(
     self,
     security_client,
     storage_client_factory,
     file_event_client,
     microservice_client_factory,
 ):
     microservice_client_factory.get_file_event_client.side_effect = self.return_file_event_client(
         file_event_client)
     security_module = SecurityModule(security_client,
                                      storage_client_factory,
                                      microservice_client_factory)
     security_module.search_file_events(RAW_QUERY)
     file_event_client.search.assert_called_once_with(RAW_QUERY)
 def test_get_security_plan_storage_info_two_plans_two_nodes_returns_both_location_info(
     self,
     security_client_two_plans_two_nodes,
     storage_client_factory,
     microservice_client_factory,
 ):
     security_module = SecurityModule(security_client_two_plans_two_nodes,
                                      storage_client_factory,
                                      microservice_client_factory)
     storage_infos = security_module.get_security_plan_storage_info_list(
         "foo")
     assert self._storage_info_contains(storage_infos, "111111111111111111",
                                        "4", "41")
     assert self._storage_info_contains(storage_infos, "222222222222222222",
                                        "4", "42")
Exemple #8
0
 def test_saved_searches_returns_saved_search_client(
         self, security_client, storage_client_factory,
         microservice_client_factory):
     security_module = SecurityModule(security_client,
                                      storage_client_factory,
                                      microservice_client_factory)
     _ = security_module.savedsearches
     assert microservice_client_factory.get_saved_search_client.call_count
Exemple #9
0
    def test_stream_file_by_md5_raises_py42_checksum_not_found_error_when_search_returns_empty_response(
        self,
        mocker,
        security_client,
        storage_client_factory,
        microservice_client_factory,
        file_event_search,
    ):
        security_module = SecurityModule(security_client,
                                         storage_client_factory,
                                         microservice_client_factory)
        file_event_search.text = "{}"
        file_event_client = mocker.MagicMock(spec=FileEventClient)
        file_event_client.search.return_value = file_event_search
        with pytest.raises(Py42ChecksumNotFoundError) as e:
            security_module.stream_file_by_md5("md5hash")

        assert u"No files found with MD5 checksum" in e.value.args[0]
 def test_get_all_user_security_events_when_multiple_plans_returned_calls_security_client_expected_number_of_times(
     self,
     mocker,
     security_client_two_plans_one_node,
     storage_client_factory,
     microservice_client_factory,
 ):
     mock_storage_client = mocker.MagicMock(spec=StorageClient)
     mock_storage_security_client = mocker.MagicMock(
         spec=StorageSecurityClient)
     mock_storage_client.securitydata = mock_storage_security_client
     response = mocker.MagicMock(spec=Py42Response)
     response.text = "{}"
     mock_storage_security_client.get_plan_security_events.return_value = response
     storage_client_factory.from_plan_info.return_value = mock_storage_client
     security_module = SecurityModule(security_client_two_plans_one_node,
                                      storage_client_factory,
                                      microservice_client_factory)
     for _, _ in security_module.get_all_user_security_events("foo"):
         pass
     assert mock_storage_security_client.get_plan_security_events.call_count == 2
 def test_get_security_plan_storage_info_two_plans_two_destinations_three_nodes_returns_one_location_per_plan(
     self,
     security_client_two_plans_two_destinations_three_nodes,
     storage_client_factory,
     microservice_client_factory,
 ):
     security_module = SecurityModule(
         security_client_two_plans_two_destinations_three_nodes,
         storage_client_factory,
         microservice_client_factory,
     )
     storage_infos = security_module.get_security_plan_storage_info_list(
         "foo")
     assert self._storage_info_contains(
         storage_infos,
         "111111111111111111", "4", "41") or self._storage_info_contains(
             storage_infos, "111111111111111111", "5", "51")
     assert self._storage_info_contains(
         storage_infos,
         "222222222222222222", "4", "41") or self._storage_info_contains(
             storage_infos, "222222222222222222", "5", "52")
Exemple #12
0
 def test_get_plan_security_events_when_mutliple_plans_returned_calls_security_client_expected_number_of_times(
         self, mocker, security_client, storage_client_factory,
         microservice_client_factory):
     mock_storage_client = mocker.MagicMock(spec=StorageClient)
     mock_storage_security_client = mocker.MagicMock(
         spec=StorageSecurityClient)
     mock_storage_client.securitydata = mock_storage_security_client
     response = mocker.MagicMock(spec=Py42Response)
     response.text = "{}"
     mock_storage_security_client.get_plan_security_events.return_value = response
     storage_client_factory.from_plan_info.return_value = mock_storage_client
     security_module = SecurityModule(security_client,
                                      storage_client_factory,
                                      microservice_client_factory)
     plans = [
         PlanStorageInfo("111111111111111111", "41", "4"),
         PlanStorageInfo("222222222222222222", "41", "4"),
     ]
     for page, cursor in security_module.get_plan_security_events(plans):
         pass
     assert mock_storage_security_client.get_plan_security_events.call_count == 2
Exemple #13
0
    def test_stream_file_by_md5_raises_file_not_found_error_when_file_location_returns_empty_response(
        self,
        mocker,
        security_client,
        storage_client_factory,
        microservice_client_factory,
        file_event_search,
        file_location,
    ):
        security_module = SecurityModule(security_client,
                                         storage_client_factory,
                                         microservice_client_factory)
        file_event_client = mocker.MagicMock(spec=FileEventClient)
        file_event_client.search.return_value = file_event_search
        file_location.text = """{"locations": []}"""
        file_event_client.get_file_location_detail_by_sha256.return_value = (
            file_location)
        microservice_client_factory.get_file_event_client.return_value = (
            file_event_client)
        with pytest.raises(Py42Error) as e:
            security_module.stream_file_by_md5("md5hash")

        assert u"PDS service can't find requested file" in e.value.args[0]
Exemple #14
0
    def test_stream_file_by_md5_raises_py42_error_when_file_download_returns_failure_response(
        self,
        mocker,
        security_client,
        storage_client_factory,
        microservice_client_factory,
        file_event_search,
        file_location,
        find_file_version,
        file_download,
    ):
        security_module = SecurityModule(security_client,
                                         storage_client_factory,
                                         microservice_client_factory)
        file_event_client = mocker.MagicMock(spec=FileEventClient)
        file_event_client.search.return_value = file_event_search
        file_event_client.get_file_location_detail_by_sha256.return_value = (
            file_location)
        microservice_client_factory.get_file_event_client.return_value = (
            file_event_client)

        pds_client = mocker.MagicMock(spec=PreservationDataServiceClient)
        pds_client.find_file_versions.return_value = find_file_version
        microservice_client_factory.get_preservation_data_service_client.return_value = (
            pds_client)

        storage_node_client = mocker.MagicMock(
            spec=StoragePreservationDataClient)
        storage_node_client.get_download_token.return_value = file_download
        storage_node_client.get_file.side_effect = Py42HTTPError(HTTPError())
        microservice_client_factory.create_storage_preservation_client.return_value = (
            storage_node_client)

        with pytest.raises(Py42Error) as e:
            security_module.stream_file_by_md5("md5hash")

        assert e.value.args[0] == PDS_EXCEPTION_MESSAGE.format("md5hash")
Exemple #15
0
    def test_stream_file_by_md5_returns_stream_of_file(
        self,
        mocker,
        security_client,
        storage_client_factory,
        microservice_client_factory,
        file_event_search,
        file_location,
        find_file_version,
        file_download,
    ):

        security_module = SecurityModule(security_client,
                                         storage_client_factory,
                                         microservice_client_factory)
        file_event_client = mocker.MagicMock(spec=FileEventClient)
        file_event_client.search.return_value = file_event_search
        file_event_client.get_file_location_detail_by_sha256.return_value = (
            file_location)
        microservice_client_factory.get_file_event_client.return_value = (
            file_event_client)

        pds_client = mocker.MagicMock(spec=PreservationDataServiceClient)
        pds_client.find_file_versions.return_value = find_file_version
        microservice_client_factory.get_preservation_data_service_client.return_value = (
            pds_client)

        storage_node_client = mocker.MagicMock(
            spec=StoragePreservationDataClient)
        storage_node_client.get_download_token.return_value = file_download
        storage_node_client.get_file.return_value = b"stream"
        microservice_client_factory.create_storage_preservation_client.return_value = (
            storage_node_client)

        response = security_module.stream_file_by_md5("md5hash")
        assert response == b"stream"