def test_storage_name(): em.set_ofr(None) mock_obs_id = 'GN-2013B-Q-28-150-002' test_sn = GemName(file_name='N20131203S0006i.fits.bz2', obs_id=mock_obs_id) assert test_sn.file_uri == f'{SCHEME}:{ARCHIVE}/N20131203S0006i.fits' assert test_sn.file_name == 'N20131203S0006i.fits' assert test_sn.prev == 'N20131203S0006i.jpg' assert test_sn.thumb == 'N20131203S0006i_th.jpg' assert test_sn.compressed_file_name is None assert test_sn.get_file_id(test_sn.file_name) == 'N20131203S0006i' test_sn = GemName(file_name='S20060920S0137.jpg', obs_id=mock_obs_id) assert test_sn.file_uri == f'{SCHEME}:{ARCHIVE}/S20060920S0137.jpg' assert test_sn.file_name == 'S20060920S0137.jpg' assert test_sn.prev == 'S20060920S0137.jpg' assert test_sn.thumb == 'S20060920S0137_th.jpg' assert test_sn.compressed_file_name is None test_sn = GemName(fname_on_disk='N20100104S0208.fits.header') assert test_sn.obs_id == 'GN-2009B-Q-121-15-001', 'wrong obs id' assert test_sn.file_uri == f'{SCHEME}:{ARCHIVE}/N20100104S0208.fits' assert test_sn.external_urls == 'https://archive.gemini.edu/fullheader/' \ 'N20100104S0208.fits' test_sn = GemName(fname_on_disk='N20200810A0490r.fits', instrument=em.Inst.ALOPEKE) assert test_sn.obs_id == 'N20200810A0490', 'wrong obs id' assert test_sn.product_id == 'N20200810A0490r', 'wrong product id' assert test_sn.file_uri == f'{SCHEME}:{ARCHIVE}/N20200810A0490r.fits' assert test_sn.external_urls == 'https://archive.gemini.edu/fullheader/' \ 'N20200810A0490r.fits' assert test_sn.lineage == f'{test_sn.obs_id}r/{SCHEME}:{ARCHIVE}/' \ f'{test_sn.file_id}.fits', 'wrong lineage'
def test_get_filter_metadata(get_vo_mock): try: ext_md.get_gofr() get_vo_mock.side_effect = gem_mocks.mock_get_votable test_result = ext_md.get_filter_metadata(ext_md.Inst.NIRI, 'filters') assert get_vo_mock.call_count == 2, 'wrong number of calls' assert test_result is None, 'do not expect a result' # do the same thing again, check that the result has been cached test_result = ext_md.get_filter_metadata(ext_md.Inst.NIRI, 'filters') assert get_vo_mock.call_count == 2, 'wrong number of calls' assert test_result is None, 'do not expect a result this time either' finally: # undo the initialization ext_md.set_ofr(None)
def test_repair_data_label(): copyfile(f'{gem_mocks.TEST_DATA_DIR}/from_paul.txt', '/app/data/from_paul.txt') external_metadata.set_ofr(None) external_metadata.get_gofr() for ii in gem_mocks.LOOKUP: test_result = external_metadata.gofr.repair_data_label(ii) if ii == 'S20181230S0025': # what happens when an entry is not found assert test_result == 'S20181230S0025', \ 'repair failed for {} actual {} expected {}'.format( ii, test_result, gem_mocks.LOOKUP[ii][0]) elif ii == 'N20200210S0077_bias': # what happens when an entry is not found assert test_result == 'N20200210S0077_bias', \ 'repair failed for {} actual {} expected {}'.format( ii, test_result, gem_mocks.LOOKUP[ii][0]) elif ii == 'S20201023Z0001b': # what happens when an entry is not found assert test_result == 'S20201023Z0001b', \ 'repair failed for {} actual {} expected {}'.format( ii, test_result, gem_mocks.LOOKUP[ii][0]) elif ii in [ 'mrgN20060130S0149_add', 'rgnN20140428S0171_flat', 'S20191214S0301', '02jun24.0057', '01MAY08_023', '2001nov16_0164', '2007sep15_0001', '01DEC05_004', 'N20061217S0228', 'N20050826S0137', 'S20120605S0053', 'S20050601S0032', 'S20050601S0411', 'S20050718S0172', 'S20130922S0130' ]: # what happens when an entry is not found # note that the answer should actually be # GN-2006A-Q-90-1-001-MRG-ADD, but because the # cadc tap lookup, and the archive.gemini.edu query are not # mocked here, the default behaviour of returning the # file name is what actually occurs assert test_result == ii, \ 'repair failed for {} actual {} expected {}'.format( ii, test_result, gem_mocks.LOOKUP[ii][0]) else: assert test_result == gem_mocks.LOOKUP[ii][0], \ 'repair failed for {} actual {} expected {}'.format( ii, test_result, gem_mocks.LOOKUP[ii][0]) test_result = external_metadata.gofr.repair_data_label('N20181217S0266') assert test_result is not None, 'no result' assert test_result == 'GN-2018B-Q-133-20-001', 'wrong result'
def test_repair_provenance(gem_mock, tap_mock): copyfile(f'{gem_mocks.TEST_DATA_DIR}/from_paul.txt', '/app/data/from_paul.txt') getcwd_orig = os.getcwd os.getcwd = Mock(return_value=gem_mocks.TEST_DATA_DIR) try: gem_mock.side_effect = gem_mocks.mock_get_obs_metadata tap_mock.side_effect = gem_mocks.mock_query_tap external_metadata.set_ofr(None) external_metadata.get_gofr() test_config = mc.Config() test_config.get_executors() external_metadata.init_global(config=test_config) for ii in test_subjects: ignore, test_fid = main_app._repair_provenance_value( ii[1], 'test obs') assert test_fid is not None, 'failed lookup {}'.format(ii) assert test_fid == ii[0], 'error {}'.format(ii[1]) finally: os.getcwd = getcwd_orig
def test_main_app_v(client_mock, tap_mock, gemini_client_mock, gemini_pi_mock, svofps_mock, cadc_client_mock, get_file_info_mock, test_name): # client_mock present because of global in external_metadata cadc_client_mock.get_node.side_effect = gem_mocks.mock_get_node gemini_client_mock.side_effect = gem_mocks.mock_get_obs_metadata gemini_pi_mock.side_effect = gem_mocks.mock_get_pi_metadata svofps_mock.side_effect = gem_mocks.mock_get_votable tap_mock.side_effect = gem_mocks.mock_query_tap get_file_info_mock.return_value.get_file_info.side_effect = \ gem_mocks.mock_get_file_info getcwd_orig = os.getcwd os.getcwd = Mock( return_value=os.path.join(gem_mocks.TEST_DATA_DIR, 'si_config')) try: test_config = mc.Config() test_config.get_executors() test_config.features.supports_latest_client = True em.set_ofr(None) em.init_global(test_config) test_data_size = os.stat( os.path.join(gem_mocks.TEST_DATA_DIR, 'from_paul.txt')) app_size = os.stat('/app/data/from_paul.txt') if test_data_size.st_size != app_size.st_size: copyfile(os.path.join(gem_mocks.TEST_DATA_DIR, 'from_paul.txt'), '/app/data/from_paul.txt') basename = os.path.basename(test_name) dirname = os.path.dirname(test_name) file_id = _get_file_id(basename) obs_id = _get_obs_id(file_id) product_id = file_id lineage = _get_lineage(dirname, basename, test_config) input_file = '{}.in.xml'.format(product_id) actual_fqn = _get_actual_file_name(dirname, product_id) local = _get_local(test_name) plugin = gem_mocks.PLUGIN if os.path.exists(actual_fqn): os.remove(actual_fqn) if os.path.exists(os.path.join(dirname, input_file)): sys.argv = \ ('{} --quiet --no_validate --local {} ' '--plugin {} --module {} --in {}/{} --out {} --lineage {}'. format(main_app.APPLICATION, local, plugin, plugin, dirname, input_file, actual_fqn, lineage)).split() else: sys.argv = \ ('{} --quiet --no_validate --local {} ' '--plugin {} --module {} --observation {} {} --out {} ' '--lineage {}'. format(main_app.APPLICATION, local, plugin, plugin, main_app.COLLECTION, obs_id, actual_fqn, lineage)).split() print(sys.argv) main_app.to_caom2() expected_fqn = _get_expected_file_name(dirname, product_id) compare_result = _new_si_compare_differences(actual_fqn, expected_fqn, test_config) if compare_result is not None: raise AssertionError(compare_result) # assert False # cause I want to see logging messages finally: os.getcwd = getcwd_orig