예제 #1
0
    def test_add_file_filesize_has_characters(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)
        fileargs = TESTHELPERS.get_args_for_adding_file()
        fileargs['file_size'] = 'abc'

        # Run code to be tested:
        with self.assertRaises(esgfpid.exceptions.ArgumentError):
            assistant.add_file(**fileargs)
예제 #2
0
    def test_finish_too_early(self):

        # Test variables:
        testcoupler = TESTHELPERS.get_coupler(
            solr_switched_off=True)  # solr switched off, no consistency check
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)

        # Run code to be tested and check exception:
        with self.assertRaises(
                esgfpid.exceptions.OperationUnsupportedException):
            assistant.dataset_publication_finished()
예제 #3
0
    def test_add_file_wrong_prefix(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)
        fileargs = TESTHELPERS.get_args_for_adding_file()
        fileargs['file_handle'] = 'hdl:1234/56789'

        # Run code to be tested:
        with self.assertRaises(esgfpid.exceptions.ESGFException) as raised:
            assistant.add_file(**fileargs)
        self.assertIn('ESGF rule violation', raised.exception.message,
                      'Unexpected message: %s' % raised.exception.message)
예제 #4
0
    def test_get_dataset_handle(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(
            solr_switched_off=True)  # solr switched off, no consistency check
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        dsargs['is_replica'] = True
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)

        # Run code to be tested:
        handle = assistant.get_dataset_handle()

        # Check result:
        exp_handle = DATASETHANDLE_HDL
        self.assertEqual(handle, exp_handle, 'Wrong handle returned.')
예제 #5
0
    def test_init_no_consumer_solr_url(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        args = TESTHELPERS.get_args_for_publication_assistant()
        del args['consumer_solr_url']

        # Run code to be tested and check exception:
        with self.assertRaises(esgfpid.exceptions.ArgumentError):
            assistant = DatasetPublicationAssistant(**args)
예제 #6
0
    def test_version_number_has_characters_error(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        args = TESTHELPERS.get_args_for_publication_assistant()
        args['version_number'] = 'abcdef'

        # Run code to be tested and check exception:
        with self.assertRaises(esgfpid.exceptions.ArgumentError):
            assistant = DatasetPublicationAssistant(coupler=testcoupler,
                                                    **args)
예제 #7
0
    def test_normal_publication_with_neg_consis_check_too_many_files(self):

        # Test variables:
        args1 = TESTHELPERS.get_args_for_adding_file()
        args2 = TESTHELPERS.get_args_for_adding_file()
        handle1 = args1['file_handle']
        handle2 = PREFIX_NO_HDL + '/random_suffix_abc123'
        args2['file_handle'] = handle2
        prev_list = [handle1]

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler()
        TESTHELPERS.patch_with_rabbit_mock(testcoupler)
        TESTHELPERS.patch_solr_returns_previous_files(
            testcoupler, prev_list)  # solr returns file list
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)

        # Prepare:
        assistant.add_file(**args1)
        assistant.add_file(**args2)

        # Run code to be tested and check exception:
        with self.assertRaises(
                esgfpid.exceptions.InconsistentFilesetException):
            assistant.dataset_publication_finished()
예제 #8
0
    def test_normal_publication_with_pos_consis_check(self):

        # Test variables:
        fileargs = TESTHELPERS.get_args_for_adding_file()
        prev_list = [FILEHANDLE_HDL]

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler()
        TESTHELPERS.patch_solr_returns_previous_files(
            testcoupler, prev_list)  # solr returns file list
        TESTHELPERS.patch_with_rabbit_mock(testcoupler)
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)

        # Run code to be tested:
        assistant.add_file(**fileargs)
        assistant.dataset_publication_finished()

        # Check result (dataset):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 0)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_dataset(
        )
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))

        # Check result (file):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 1)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_file(
        )
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))
예제 #9
0
    def test_add_file_without_hdl_in_handle(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        TESTHELPERS.patch_with_rabbit_mock(testcoupler)
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)
        fileargs = TESTHELPERS.get_args_for_adding_file()
        fileargs['file_handle'] = FILEHANDLE_NO_HDL

        # Run code to be tested:
        assistant.add_file(**fileargs)
        assistant.dataset_publication_finished()

        # Check result (dataset):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 0)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_dataset(
        )
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))

        # Check result (file):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 1)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_file(
        )
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))
예제 #10
0
    def test_normal_ok(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler()
        TESTHELPERS.patch_solr_returns_empty_file_list(testcoupler)
        args = TESTHELPERS.get_args_for_publication_assistant()

        # Run code to be tested:
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **args)

        # Check result:
        self.assertIsInstance(assistant, DatasetPublicationAssistant,
                              'Constructor failed.')
예제 #11
0
    def test_init_consumer_solr_url_is_none(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        args = TESTHELPERS.get_args_for_publication_assistant()
        args['consumer_solr_url'] = None

        # Run code to be tested:
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **args)

        # Check result:
        self.assertIsInstance(assistant, DatasetPublicationAssistant,
                              'Constructor failed.')
예제 #12
0
    def test_version_number_is_string_ok(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        args = TESTHELPERS.get_args_for_publication_assistant()
        args['version_number'] = str(args['version_number'])

        # Run code to be tested:
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **args)

        # Check result:
        self.assertIsInstance(assistant, DatasetPublicationAssistant,
                              'Constructor failed.')
예제 #13
0
    def test_finish_too_late(self):

        # Prepare:
        testcoupler = TESTHELPERS.get_coupler(
            solr_switched_off=True)  # solr switched off, no consistency check
        TESTHELPERS.patch_with_rabbit_mock(testcoupler)
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)
        fileargs = TESTHELPERS.get_args_for_adding_file()
        assistant.add_file(**fileargs)
        assistant.dataset_publication_finished()

        # Run code to be tested:
        with self.assertRaises(
                esgfpid.exceptions.OperationUnsupportedException):
            assistant.dataset_publication_finished()
예제 #14
0
    def test_init_string_wrong_replica_flag(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        args = TESTHELPERS.get_args_for_publication_assistant()
        args['is_replica'] = 'Maybe'

        # Run code to be tested:
        with self.assertRaises(esgfpid.exceptions.ArgumentError) as raised:
            assistant = DatasetPublicationAssistant(coupler=testcoupler,
                                                    **args)
        self.assertIn(
            '"Maybe" could not be parsed to boolean', raised.exception.message,
            'Unexpected error message: %s' % raised.exception.message)
예제 #15
0
    def test_init_string_replica_flag_ok(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        args = TESTHELPERS.get_args_for_publication_assistant()
        args['is_replica'] = 'False'

        # Run code to be tested:
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **args)

        # Check result:
        self.assertIsInstance(assistant, DatasetPublicationAssistant,
                              'Constructor failed.')
        self.assertFalse(
            assistant._DatasetPublicationAssistant__is_replica,
            'Replica flag should be False if it is passed as "False".')
예제 #16
0
    def test_normal_publication_sev_files_ok(self):

        # Test variables
        handle1 = PREFIX_WITH_HDL + '/456'
        handle2 = PREFIX_WITH_HDL + '/789'

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        TESTHELPERS.patch_with_rabbit_mock(testcoupler)
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)
        args1 = TESTHELPERS.get_args_for_adding_file()
        args1['file_handle'] = handle1
        args2 = TESTHELPERS.get_args_for_adding_file()
        args2['file_handle'] = handle2

        # Run code to be tested:
        assistant.add_file(**args1)
        assistant.add_file(**args2)
        assistant.dataset_publication_finished()

        # Check result (dataset):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 0)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_dataset(
        )
        expected_rabbit_task['files'] = [handle2, handle1]
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))

        # Check result (file):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 1)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_file(
        )
        expected_rabbit_task['handle'] = handle1
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))

        # Check result (file):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 2)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_file(
        )
        expected_rabbit_task['handle'] = handle2
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))
예제 #17
0
    def test_normal_publication_replica_flag_string_ok(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(
            solr_switched_off=True)  # solr switched off, no consistency check
        TESTHELPERS.patch_with_rabbit_mock(testcoupler)
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        dsargs['is_replica'] = True
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)
        fileargs = TESTHELPERS.get_args_for_adding_file()

        # Run code to be tested:
        assistant.add_file(**fileargs)
        assistant.dataset_publication_finished()

        # Check result (dataset):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 0)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_dataset(
        )
        expected_rabbit_task['is_replica'] = True
        expected_rabbit_task[
            'ROUTING_KEY'] = ROUTING_KEY_BASIS + 'publication.dataset.replica'
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))

        # Check result (file):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 1)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_file(
        )
        expected_rabbit_task['is_replica'] = True
        expected_rabbit_task[
            'ROUTING_KEY'] = ROUTING_KEY_BASIS + 'publication.file.replica'
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))
예제 #18
0
    def test_add_file_fileversion_as_integer_filesize_as_string(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler(solr_switched_off=True)
        TESTHELPERS.patch_with_rabbit_mock(testcoupler)
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)
        fileargs = TESTHELPERS.get_args_for_adding_file()
        fileargs['file_version'] = int(fileargs['file_version'])
        fileargs['file_size'] = str(fileargs['file_size'])

        # Run code to be tested:
        assistant.add_file(**fileargs)
        assistant.dataset_publication_finished()

        # Check result (file):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 1)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_file(
        )
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))
예제 #19
0
    def test_normal_publication_without_solr_access(self):
        '''
        Solr was switched off and raises an errors, but this is caught.
        The consistency check is not run, but the rest of the publication is the same.
        '''

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler()
        TESTHELPERS.patch_with_rabbit_mock(testcoupler)
        TESTHELPERS.patch_solr_raises_error(
            testcoupler, SolrSwitchedOff)  # solr raises error
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)
        fileargs = TESTHELPERS.get_args_for_adding_file()

        # Run code to be tested:
        assistant.add_file(**fileargs)
        assistant.dataset_publication_finished()

        # Check result (dataset):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 0)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_dataset(
        )
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))

        # Check result (file):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 1)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_file(
        )
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))
예제 #20
0
    def test_normal_publication_solr_returns_none(self):

        # Preparations:
        testcoupler = TESTHELPERS.get_coupler()
        TESTHELPERS.patch_with_rabbit_mock(testcoupler)
        TESTHELPERS.patch_solr_returns_previous_files(
            testcoupler, None
        )  # makes mock return None - this should never happen in reality!
        dsargs = TESTHELPERS.get_args_for_publication_assistant()
        assistant = DatasetPublicationAssistant(coupler=testcoupler, **dsargs)
        fileargs = TESTHELPERS.get_args_for_adding_file()

        # Run code to be tested:
        assistant.add_file(**fileargs)
        assistant.dataset_publication_finished()

        # Check result (dataset):
        received_rabbit_task = TESTHELPERS.get_received_message_from_rabbitmock(
            testcoupler, 0)
        expected_rabbit_task = TESTHELPERS.get_rabbit_message_publication_dataset(
        )
        same = utils.is_json_same(expected_rabbit_task, received_rabbit_task)
        self.assertTrue(
            same, error_message(expected_rabbit_task, received_rabbit_task))