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)))
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)
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'), )
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)
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', )
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', )
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)
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'), )
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'), )
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'), )
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'), )
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'), )
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)
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'), )
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'), )
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
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)))