Beispiel #1
0
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