コード例 #1
0
def test_fetch_model_bad_created(web_server) -> None:
    url = web_server('bad_created.h5')
    with pytest.raises(models.DataError,
                       match='Invalid creation timestamp') as exc_info:
        fetch_requests.fetch_model(url, DummyModel)
    assert exc_info.value.url == url
    assert exc_info.value.original_url == url
コード例 #2
0
ファイル: test_band_mask.py プロジェクト: ska-sa/katsdpmodels
def test_bad_shape(mock_responses) -> None:
    url = get_data_url('band_mask_ranges_2d.h5')
    with pytest.raises(
            models.DataError,
            match='ranges dataset should be 1-dimensional, but is 2-dimensional'
    ):
        fetch_requests.fetch_model(url, band_mask.BandMask)
コード例 #3
0
def test_fetch_model_model_version_error(filename, web_server) -> None:
    url = web_server(filename)
    with pytest.raises(models.ModelVersionError) as exc_info:
        fetch_requests.fetch_model(url, DummyModel)
    assert exc_info.value.url == url
    assert exc_info.value.original_url == url
    assert 'model_version' in str(exc_info.value)
コード例 #4
0
def test_fetch_model_too_many_aliases(web_server, monkeypatch) -> None:
    monkeypatch.setattr(fetch, 'MAX_ALIASES', 1)
    with pytest.raises(models.TooManyAliasesError):
        fetch_requests.fetch_model(web_server('indirect.alias'), DummyModel)
    # Check that 1 level of alias is still permitted
    with fetch_requests.fetch_model(web_server('direct.alias'), DummyModel):
        pass
コード例 #5
0
def test_custom_session(web_server) -> None:
    session = DummySession()
    with session:
        fetch_requests.fetch_model(web_server('direct.alias'),
                                   DummyModel,
                                   session=session)
        assert session.calls == 2
        assert not session.closed
    assert session.closed
コード例 #6
0
def test_fetch_model_checksum_bad(mock_responses) -> None:
    data = get_data('rfi_mask_ranges.h5')
    digest = hashlib.sha256(data).hexdigest()
    url = get_data_url(f'sha256_{digest}.h5')
    # Now invalidate the digest
    data += b'blahblahblah'
    mock_responses.add(responses.GET,
                       url,
                       content_type='application/x-hdf5',
                       body=data)
    with pytest.raises(models.ChecksumError) as exc_info:
        fetch_requests.fetch_model(url, DummyModel)
    assert exc_info.value.url == url
コード例 #7
0
def serve_model(model_file: h5py.File) \
        -> Generator[primary_beam.PrimaryBeamAperturePlane, None, None]:
    path = pathlib.Path(model_file.filename)
    model_file.close()  # Ensures data is written to the file
    with fetch_requests.fetch_model(path.as_uri(),
                                    primary_beam.PrimaryBeam) as model:
        yield cast(primary_beam.PrimaryBeamAperturePlane, model)
コード例 #8
0
def test_fetch_model_retry(web_server) -> None:
    """Test that retry happens on a 5xx server error."""
    url = web_server('rfi_mask_ranges.h5').replace('/static/', '/failonce/')
    with fetch_requests.fetch_model(url, DummyModel) as model:
        assert len(model.ranges) == 2
        assert not model.is_closed
    assert model.is_closed
コード例 #9
0
def test_fetch_model_http_redirect(mock_responses) -> None:
    url = get_data_url('subdir/redirect.alias')
    mock_responses.add(responses.GET,
                       url,
                       headers={'Location': '../direct.alias'},
                       status=307)
    with fetch_requests.fetch_model(url, DummyModel) as model:
        assert len(model.ranges) == 2
コード例 #10
0
ファイル: test_rfi_mask.py プロジェクト: ska-sa/katsdpmodels
def test_metadata(web_server) -> None:
    with fetch_requests.fetch_model(
            web_server('rfi_mask_ranges_metadata.h5'), rfi_mask.RFIMask) as model:
        assert model.comment == 'Test model'
        assert model.author == 'Test author'
        assert model.target == 'Test target'
        assert model.created is not None
        assert model.created.isoformat() == '2020-06-11T11:11:00+00:00'
コード例 #11
0
def test_fetch_model_checksum_ok(mock_responses) -> None:
    data = get_data('rfi_mask_ranges.h5')
    digest = hashlib.sha256(data).hexdigest()
    url = get_data_url(f'sha256_{digest}.h5')
    mock_responses.add(responses.GET,
                       url,
                       content_type='application/x-hdf5',
                       body=data)
    with fetch_requests.fetch_model(url, DummyModel) as model:
        assert model.checksum == digest
コード例 #12
0
def test_fetch_model_bad_http_status(filename, web_server) -> None:
    url = web_server(filename)
    with pytest.raises(requests.HTTPError) as exc_info:
        fetch_requests.fetch_model(url, DummyModel)
    assert exc_info.value.response.status_code == 404
コード例 #13
0
def test_fetch_model_not_hdf5(web_server) -> None:
    url = web_server('not_hdf5.h5')
    with pytest.raises(models.DataError) as exc_info:
        fetch_requests.fetch_model(url, DummyModel)
    assert exc_info.value.url == url
    assert exc_info.value.original_url == url
コード例 #14
0
def test_fetch_model_model_type_error(filename, web_server) -> None:
    url = web_server(filename)
    with pytest.raises(models.ModelTypeError, match='rfi_mask') as exc_info:
        fetch_requests.fetch_model(url, DummyModel)
    assert exc_info.value.url == url
    assert exc_info.value.original_url == url
コード例 #15
0
def test_fetch_model_absolute_alias(web_server) -> None:
    url = web_server('to_file.alias')
    with pytest.raises(models.AbsoluteAliasError) as exc_info:
        fetch_requests.fetch_model(url, DummyModel)
    assert exc_info.value.url == url
    assert exc_info.value.original_url == url
コード例 #16
0
ファイル: test_rfi_mask.py プロジェクト: ska-sa/katsdpmodels
def test_missing_dataset(filename: str, mock_responses) -> None:
    url = get_data_url(filename)
    with pytest.raises(models.DataError, match='Model is missing ranges dataset'):
        fetch_requests.fetch_model(url, rfi_mask.RFIMask)
コード例 #17
0
def test_fetch_model_alias_loop(web_server) -> None:
    url = web_server('loop.alias')
    with pytest.raises(models.TooManyAliasesError) as exc_info:
        fetch_requests.fetch_model(url, DummyModel)
    assert exc_info.value.url == url
    assert exc_info.value.original_url == url
コード例 #18
0
def test_fetch_model_simple(use_file, filename, web_server) -> None:
    url = get_file_url(filename) if use_file else web_server(filename)
    with fetch_requests.fetch_model(url, DummyModel) as model:
        assert len(model.ranges) == 2
        assert not model.is_closed
    assert model.is_closed
コード例 #19
0
ファイル: test_band_mask.py プロジェクト: ska-sa/katsdpmodels
def test_bad_model_format(mock_responses) -> None:
    url = get_data_url('band_mask_bad_format.h5')
    with pytest.raises(models.ModelFormatError) as exc_info:
        fetch_requests.fetch_model(url, band_mask.BandMask)
    assert str(
        exc_info.value) == "Unknown model_format 'not_ranges' for band_mask"
コード例 #20
0
def test_fetch_model_connection_error(mock_responses) -> None:
    # responses raises ConnectionError for any unregistered URL
    with pytest.raises(requests.ConnectionError):
        fetch_requests.fetch_model(get_data_url('does_not_exist.h5'),
                                   DummyModel)
コード例 #21
0
ファイル: test_rfi_mask.py プロジェクト: ska-sa/katsdpmodels
def ranges_model(web_server) -> Generator[rfi_mask.RFIMask, None, None]:
    with fetch_requests.fetch_model(web_server('rfi_mask_ranges.h5'), rfi_mask.RFIMask) as model:
        yield model
コード例 #22
0
ファイル: test_sefd.py プロジェクト: ska-sa/katsdpmodels
def serve_model(model_file: h5py.File) -> Generator[sefd.SEFDPoly, None, None]:
    path = pathlib.Path(model_file.filename)
    model_file.close()  # Ensures data is written to the file
    with fetch_requests.fetch_model(path.as_uri(), sefd.SEFDModel) as model:
        yield cast(sefd.SEFDPoly, model)
コード例 #23
0
ファイル: test_band_mask.py プロジェクト: ska-sa/katsdpmodels
def ranges_model(web_server) -> Generator[band_mask.BandMask, None, None]:
    with fetch_requests.fetch_model(web_server('band_mask_ranges.h5'),
                                    band_mask.BandMask) as model:
        yield model