示例#1
0
    def test_1040(self, gmn_client_v1_v2, none_true):
        """MNStorage.create(): "open" mode: Creating a random series of objects
    and resource maps

    - Some PIDs aggregated in multiple maps
    - Some maps aggregating each other
    - Maps created both before and after their aggregated PIDs
    - Some maps containing references to themselves
    """
        avail_pid_set = [identifier.generate_pid() for _ in range(NUM_CREATE)]
        uncreated_pid_set = avail_pid_set[:]

        while True:
            pid = random_data.random_choice_pop(uncreated_pid_set)
            aggr_list = random_data.random_sized_sample(avail_pid_set,
                                                        2,
                                                        max_size=MAX_AGGR_SIZE)
            if not uncreated_pid_set or not aggr_list:
                break
            random_data.random_sized_sample_pop(avail_pid_set,
                                                0,
                                                max_size=MAX_REDUCE_SIZE)
            is_ore = random_data.random_bool_factor(MAP_CHANCE)
            if is_ore:
                self.create_resource_map(gmn_client_v1_v2, aggr_list, pid)
            else:
                self.create_obj(gmn_client_v1_v2, pid, sid=none_true)
            logging.info(
                'uncreated={} available={} ORE={} aggr_list={}'.format(
                    len(uncreated_pid_set), len(avail_pid_set), is_ore,
                    len(aggr_list)))
示例#2
0
 def test_1010(self, gmn_client_v2):
     """MNStorage.create(): "block" mode: Creating a resource map before
 creating its aggregated objects raises InvalidRequest
 """
     pid_list = [identifier.generate_pid('PID_AGGR_') for _ in range(10)]
     with pytest.raises(d1_common.types.exceptions.InvalidRequest):
         self.create_resource_map(gmn_client_v2, pid_list)
示例#3
0
 def test_1050(self, mn_client_v1_v2):
   """MNStorage.create(SciMeta): Valid EML 2.1.1"""
   self._create_and_check_scimeta(
     mn_client_v1_v2,
     identifier.generate_pid('PID_SCIMETA_'),
     'eml://ecoinformatics.org/eml-2.1.1',
     self.sample.load('scimeta_eml_valid.xml'),
   )
示例#4
0
 def test_1030(self, gmn_client_v2):
     """MNStorage.create(): "open" mode: Creating a resource map before
 creating its aggregated objects is supported
 """
     pid_list = [identifier.generate_pid('PID_AGGR_') for _ in range(10)]
     ore_pid = self.create_resource_map(gmn_client_v2, pid_list)
     member_list = d1_gmn.app.resource_map.get_resource_map_members_by_map(
         ore_pid)
     assert sorted(pid_list) == sorted(member_list)
示例#5
0
 def test_1000(self, mn_client_v1_v2):
   """MNStorage.create(SciMeta): Uninstalled schema causes validation to be
   silently skipped"""
   self._create_and_check_scimeta(
     mn_client_v1_v2,
     identifier.generate_pid('PID_SCIMETA_'),
     'http://www.icpsr.umich.edu/DDI',
     'not a valid XML doc',
   )
示例#6
0
 def test_1010(self, mn_client_v1_v2):
   """MNStorage.create(SciMeta): Unknown formatId causes validation to be
   silently skipped"""
   self._create_and_check_scimeta(
     mn_client_v1_v2,
     identifier.generate_pid('PID_SCIMETA_'),
     'unknown_format_id',
     'not a valid XML doc',
   )
示例#7
0
 def test_1010(self):
     """MNStorage.create(): "block" mode: Creating a resource map before
 creating its aggregated objects raises InvalidRequest
 """
     mn_client_v2 = d1_client.mnclient_2_0.MemberNodeClient_2_0(
         d1_test.d1_test_case.MOCK_BASE_URL)
     pid_list = [identifier.generate_pid('PID_AGGR_') for _ in range(10)]
     with pytest.raises(d1_common.types.exceptions.InvalidRequest):
         self._create_resource_map(mn_client_v2, pid_list)
示例#8
0
 def test_1030(self, mn_client_v1_v2):
   """MNStorage.create(SciMeta): onedcx validates successfully as DataONE
   Dublin Core Extended"""
   self._create_and_check_scimeta(
     mn_client_v1_v2,
     identifier.generate_pid('PID_SCIMETA_'),
     'http://ns.dataone.org/metadata/schema/onedcx/v1.0',
     self.sample.load('scimeta_dc_1.xml'),
   )
示例#9
0
 def test_1020(self, gmn_client_v1_v2):
     """MNStorage.create(SciMeta): onedcx does not validate as EML"""
     with pytest.raises(d1_common.types.exceptions.InvalidRequest,
                        match='validation failed'):
         self._create_and_check_scimeta(
             gmn_client_v1_v2,
             identifier.generate_pid('PID_SCIMETA_'),
             'eml://ecoinformatics.org/eml-2.1.1',
             self.test_files.load_xml_to_str('scimeta_dc_1.xml'),
         )
示例#10
0
 def test_1070(self, gmn_client_v1_v2):
     """MNStorage.create(SciMeta): Invalid EML 2.1.1: Missing child element"""
     with pytest.raises(d1_common.types.exceptions.InvalidRequest,
                        match='Missing child element'):
         self._create_and_check_scimeta(
             gmn_client_v1_v2,
             identifier.generate_pid('PID_SCIMETA_'),
             'eml://ecoinformatics.org/eml-2.1.1',
             self.test_files.load_xml_to_str('scimeta_eml_invalid_2.xml'),
         )
示例#11
0
 def test_1040(self, gmn_client_v1_v2):
     """MNStorage.create(SciMeta): ISO/TC 211 does not validate as Dryad"""
     with pytest.raises(d1_common.types.exceptions.InvalidRequest,
                        match='validation failed'):
         self._create_and_check_scimeta(
             gmn_client_v1_v2,
             identifier.generate_pid('PID_SCIMETA_'),
             'http://datadryad.org/profile/v3.1',
             self.test_files.load_xml_to_str('scimeta_isotc211_1.xml'),
         )
示例#12
0
 def test_1060(self, gmn_client_v1_v2):
     """MNStorage.create(SciMeta): Invalid EML 2.1.1: Unexpected element"""
     with pytest.raises(d1_common.types.exceptions.InvalidRequest,
                        match='unexpectedElement'):
         self._create_and_check_scimeta(
             gmn_client_v1_v2,
             identifier.generate_pid('PID_SCIMETA_'),
             'eml://ecoinformatics.org/eml-2.1.1',
             self.sample.load('scimeta_eml_invalid_1.xml'),
         )
示例#13
0
 def test_1030(self):
     """MNStorage.create(): "open" mode: Creating a resource map before
 creating its aggregated objects is supported
 """
     mn_client_v2 = d1_client.mnclient_2_0.MemberNodeClient_2_0(
         d1_test.d1_test_case.MOCK_BASE_URL)
     pid_list = [identifier.generate_pid('PID_AGGR_') for _ in range(10)]
     ore_pid = self._create_resource_map(mn_client_v2, pid_list)
     member_list = d1_gmn.app.resource_map.get_resource_map_members_by_map(
         ore_pid)
     assert sorted(pid_list) == sorted(member_list)
示例#14
0
 def test_1090(self, mn_client_v1_v2):
   """MNStorage.create(SciMeta): Test settings SCIMETA_VALIDATION_MAX_SIZE and
   SCIMETA_VALIDATION_OVER_SIZE_ACTION = 'accept'"""
   with django.test.override_settings(
       SCIMETA_VALIDATION_MAX_SIZE=10,
       SCIMETA_VALIDATION_OVER_SIZE_ACTION='accept',
   ):
     self._create_and_check_scimeta(
       mn_client_v1_v2,
       identifier.generate_pid('PID_SCIMETA_'),
       'eml://ecoinformatics.org/eml-2.1.1',
       self.sample.load('scimeta_eml_invalid_2.xml'),
     )
示例#15
0
 def test_1080(self, gmn_client_v1_v2):
     """MNStorage.create(SciMeta): Test settings SCIMETA_VALIDATION_MAX_SIZE and
 SCIMETA_VALIDATION_OVER_SIZE_ACTION = 'reject'"""
     with django.test.override_settings(
             SCIMETA_VALIDATION_MAX_SIZE=10,
             SCIMETA_VALIDATION_OVER_SIZE_ACTION='reject',
     ):
         with pytest.raises(d1_common.types.exceptions.InvalidRequest,
                            match='above size limit for validation'):
             self._create_and_check_scimeta(
                 gmn_client_v1_v2,
                 identifier.generate_pid('PID_SCIMETA_'),
                 'eml://ecoinformatics.org/eml-2.1.1',
                 self.sample.load('scimeta_eml_invalid_2.xml'),
             )
示例#16
0
 def _create_resource_map(self, client, pid_list, ore_pid=None):
     ore_pid = (ore_pid or identifier.generate_pid('PID_ORE_'))
     ore = d1_common.resource_map.createSimpleResourceMap(
         ore_pid, scimeta_pid=pid_list[0], sciobj_pid_list=pid_list[1:])
     ore_xml = ore.serialize()
     sysmeta_pyxb = sysmeta.generate_from_file(
         client,
         StringIO.StringIO(ore_xml),
         {
             'identifier': ore_pid,
             'formatId': d1_common.const.ORE_FORMAT_ID,
             'replica': None,
         },
     )
     # self.dump(sysmeta_pyxb)
     self.call_d1_client(client.create, ore_pid, StringIO.StringIO(ore_xml),
                         sysmeta_pyxb)
     return ore_pid
示例#17
0
        def _test(client, sid):
            avail_pid_set = [
                identifier.generate_pid() for _ in range(NUM_CREATE)
            ]
            uncreated_pid_set = avail_pid_set[:]

            while True:
                pid = random_data.random_choice_pop(uncreated_pid_set)
                aggr_list = random_data.random_sized_sample(
                    avail_pid_set, 2, max_size=MAX_AGGR_SIZE)
                if not uncreated_pid_set or not aggr_list:
                    break
                random_data.random_sized_sample_pop(avail_pid_set,
                                                    0,
                                                    max_size=MAX_REDUCE_SIZE)
                is_ore = random_data.random_bool_factor(MAP_CHANCE)
                if is_ore:
                    self._create_resource_map(client, aggr_list, pid)
                else:
                    self.create_obj(client, pid, sid=sid)
                logging.info(
                    'uncreated={} available={} ORE={} aggr_list={}'.format(
                        len(uncreated_pid_set), len(avail_pid_set), is_ore,
                        len(aggr_list)))