Skip to content

Commit

Permalink
reworked pytests so that initialization function is a fixture; enable…
Browse files Browse the repository at this point in the history
…d verbose logging
  • Loading branch information
jpswinski committed Oct 3, 2023
1 parent c8b39b8 commit 75c7f7d
Show file tree
Hide file tree
Showing 20 changed files with 156 additions and 158 deletions.
7 changes: 6 additions & 1 deletion clients/python/sliderule/sliderule.py
Original file line number Diff line number Diff line change
Expand Up @@ -658,6 +658,11 @@ def init (url=PUBLIC_URL, verbose=False, loglevel=logging.INFO, organization=0,
plugins: list
names of the plugins that need to be available on the server
Returns
-------
bool
Status of version check
Examples
--------
>>> import sliderule
Expand All @@ -670,7 +675,7 @@ def init (url=PUBLIC_URL, verbose=False, loglevel=logging.INFO, organization=0,
organization = PUBLIC_ORG
authenticate(organization) # configure credentials (if any) for organization
scaleout(desired_nodes, time_to_live, bypass_dns) # set cluster to desired number of nodes (if permitted based on credentials)
check_version(plugins=plugins) # verify compatibility between client and server versions
return check_version(plugins=plugins) # verify compatibility between client and server versions

#
# source
Expand Down
15 changes: 8 additions & 7 deletions clients/python/tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import pytest
import logging
import sliderule

logging.basicConfig(level=logging.DEBUG)

def pytest_addoption(parser):
parser.addoption("--domain", action="store", default="slideruleearth.io")
Expand All @@ -12,13 +16,6 @@ def domain(request):
pytest.skip()
return value

@pytest.fixture(scope='session')
def asset(request):
value = request.config.option.asset
if value is None:
pytest.skip()
return value

@pytest.fixture(scope='session')
def organization(request):
value = request.config.option.organization
Expand All @@ -35,3 +32,7 @@ def desired_nodes(request):
else:
value = int(value)
return value

@pytest.fixture(scope='function')
def init(domain, organization, desired_nodes):
return sliderule.init(domain, verbose=True, loglevel=logging.DEBUG, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
12 changes: 6 additions & 6 deletions clients/python/tests/test_3dcrs.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@

@pytest.mark.network
class Test3dCRS:
def test_atl06p(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_atl06p(self, init):
resource = "ATL03_20181019065445_03150111_005_01.h5"
parms = { "cnf": "atl03_high",
"ats": 20.0,
Expand All @@ -15,12 +14,12 @@ def test_atl06p(self, domain, organization, desired_nodes):
"res": 20.0,
"maxi": 1 }
gdf = icesat2.atl06p(parms, resources=[resource], height_key='h_mean')
assert init
assert min(gdf["rgt"]) == 315
assert min(gdf["cycle"]) == 1
assert len(gdf["h_mean"]) == 622419

def test_atl03sp(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_atl03sp(self, init):
resource = "ATL03_20181019065445_03150111_005_01.h5"
region = [ { "lat": -80.75, "lon": -70.00 },
{ "lat": -81.00, "lon": -70.00 },
Expand All @@ -39,12 +38,12 @@ def test_atl03sp(self, domain, organization, desired_nodes):
"res": 20.0,
"maxi": 1 }
gdf = icesat2.atl03sp(parms, resources=[resource], height_key='height')
assert init
assert min(gdf["rgt"]) == 315
assert min(gdf["cycle"]) == 1
assert len(gdf["height"]) == 488690

def test_atl08p(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_atl08p(self, init):
resource = "ATL03_20181213075606_11560106_005_01.h5"
region = [ {"lon": -108.3435200747503, "lat": 38.89102961045247},
{"lon": -107.7677425431139, "lat": 38.90611184543033},
Expand All @@ -61,5 +60,6 @@ def test_atl08p(self, domain, organization, desired_nodes):
"phoreal": {"binsize": 1.0, "geoloc": "center", "use_abs_h": False, "send_waveform": True}
}
gdf = icesat2.atl08p(parms, resources=[resource], height_key='h_te_median')
assert init
assert len(gdf) > 0

12 changes: 6 additions & 6 deletions clients/python/tests/test_3dep.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,13 @@

@pytest.mark.network
class Test3DEP:
def test_sample(self, domain, organization, desired_nodes):
sliderule.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_sample(self, init):
geojson = earthdata.tnm(short_name='Digital Elevation Model (DEM) 1 meter', polygon=region)
gdf = raster.sample("usgs3dep-1meter-dem", [[-108.0,39.0]], {"catalog": geojson})
assert init
assert len(gdf) >= 4

def test_as_numpy_array(self, domain, organization, desired_nodes):
sliderule.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_as_numpy_array(self, init):
parms = {
"poly": region,
"degrade_flag": 0,
Expand All @@ -29,14 +28,14 @@ def test_as_numpy_array(self, domain, organization, desired_nodes):
"samples": {"3dep": {"asset": "usgs3dep-1meter-dem"}}
}
gdf = gedi.gedi04ap(parms, resources=['GEDI04_A_2019123154305_O02202_03_T00174_02_002_02_V002.h5'], as_numpy_array=True)
assert init
assert len(gdf) > 0
for key in gdf.keys():
if '3dep' in key:
for entry in gdf[key]:
assert (type(entry) == numpy.ndarray) or math.isnan(entry)

def test_as_variable(self, domain, organization, desired_nodes):
sliderule.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_as_variable(self, init):
parms = {
"poly": region,
"degrade_flag": 0,
Expand All @@ -45,6 +44,7 @@ def test_as_variable(self, domain, organization, desired_nodes):
"samples": {"3dep": {"asset": "usgs3dep-1meter-dem"}}
}
gdf = gedi.gedi04ap(parms, resources=['GEDI04_A_2019123154305_O02202_03_T00174_02_002_02_V002.h5'], as_numpy_array=False)
assert init
non_array_count = 0
for key in gdf.keys():
if '3dep' in key:
Expand Down
9 changes: 4 additions & 5 deletions clients/python/tests/test_ancillary.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
"""Tests for sliderule icesat2 api."""

import pytest
from requests.exceptions import ConnectTimeout, ConnectionError
import sliderule
from sliderule import icesat2
from pathlib import Path
Expand All @@ -11,26 +10,26 @@

@pytest.mark.network
class TestAncillary:
def test_geo(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_geo(self, init):
region = sliderule.toregion(os.path.join(TESTDIR, "data/grandmesa.geojson"))
parms = {
"poly": region["poly"],
"srt": icesat2.SRT_LAND,
"atl03_geo_fields": ["solar_elevation"]
}
gdf = icesat2.atl06p(parms, resources=["ATL03_20181017222812_02950102_005_01.h5"])
assert init
assert len(gdf["solar_elevation"]) == 1180
assert gdf['solar_elevation'].describe()["min"] - 20.803468704223633 < 0.0000001

def test_ph(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_ph(self, init):
region = sliderule.toregion(os.path.join(TESTDIR, "data/grandmesa.geojson"))
parms = {
"poly": region["poly"],
"srt": icesat2.SRT_LAND,
"atl03_ph_fields": ["ph_id_count"]
}
gdf = icesat2.atl03s(parms, "ATL03_20181017222812_02950102_005_01.h5")
assert init
assert sum(gdf["ph_id_count"]) == 626032
assert len(gdf["ph_id_count"]) == 403462
29 changes: 15 additions & 14 deletions clients/python/tests/test_apis.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@
#
@pytest.mark.network
class TestTime:
def test_time(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_time(self, init):
rqst = {
"time": "NOW",
"input": "NOW",
Expand All @@ -34,34 +33,35 @@ def test_time(self, domain, organization, desired_nodes):
rqst["output"] = "GPS"
d = sliderule.source("time", rqst)
again = d["time"]
assert init
assert now == again

def test_gps2utc(self, domain, organization, desired_nodes):
sliderule.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_gps2utc(self, init):
utc = sliderule.gps2utc(1235331234)
assert init
assert utc == '2019-02-27T19:33:36Z'

#
# Definition API
#
@pytest.mark.network
class TestDefinition:
def test_definition(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_definition(self, init):
rqst = {
"rectype": "atl06rec.elevation",
}
d = sliderule.source("definition", rqst)
assert init
assert d["time"]["offset"] == 192

#
# Version API
#
@pytest.mark.network
class TestVersion:
def test_version_endpoint(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_version_endpoint(self, init):
rsps = sliderule.source("version", {})
assert init
assert 'server' in rsps
assert 'version' in rsps['server']
assert 'commit' in rsps['server']
Expand All @@ -78,9 +78,9 @@ def test_version_endpoint(self, domain, organization, desired_nodes):
assert '.' in rsps['icesat2']['version']
assert len(rsps['icesat2']['commit'])

def test_get_version_api(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_get_version_api(self, init):
version = sliderule.get_version()
assert init
assert isinstance(version, dict)
assert {'icesat2', 'server', 'client'} <= version.keys()

Expand All @@ -92,7 +92,7 @@ def test_check_version(self, domain, organization, desired_nodes):
sliderule.set_url(domain)
sliderule.authenticate(organization)
sliderule.scaleout(desired_nodes, 15, True)
sliderule.check_version(plugins=['icesat2'])
assert sliderule.check_version(plugins=['icesat2'])

#
# Initialization APIs
Expand All @@ -103,10 +103,11 @@ def test_loop_init(self, domain, organization, desired_nodes):
for _ in range(10):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)

def test_loop_versions(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_loop_versions(self, init):
assert init
for _ in range(10):
sliderule.source("version", {})
rsps = sliderule.source("version", {})
assert len(rsps) > 0

def test_init_badurl(self):
with pytest.raises( (sliderule.FatalError) ):
Expand Down
25 changes: 12 additions & 13 deletions clients/python/tests/test_arcticdem.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,37 +18,36 @@

@pytest.mark.network
class TestMosaic:
def test_vrt(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_vrt(self, init):
rqst = {"samples": {"asset": "arcticdem-mosaic"}, "coordinates": [[vrtLon,vrtLat]]}
rsps = sliderule.source("samples", rqst)
assert init
assert abs(rsps["samples"][0][0]["value"] - vrtElevation) < sigma
assert rsps["samples"][0][0]["file"] == vrtFile
assert rsps["samples"][0][0]["time"] == vrtFileTime


def test_vrt_with_aoi(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_vrt_with_aoi(self, init):
bbox = [-179, 50, -177, 52]
rqst = {"samples": {"asset": "arcticdem-mosaic", "aoi_bbox" : bbox}, "coordinates": [[vrtLon,vrtLat]]}
rsps = sliderule.source("samples", rqst)
assert init
assert abs(rsps["samples"][0][0]["value"] - vrtElevation) < sigma
assert rsps["samples"][0][0]["file"] == vrtFile
assert rsps["samples"][0][0]["time"] == vrtFileTime

def test_vrt_with_proj_pipeline(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_vrt_with_proj_pipeline(self, init):
# Output from: projinfo -s EPSG:4326 -t EPSG:3413 -o proj
pipeline = "+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +x_0=0 +y_0=0 +ellps=WGS84"
rqst = {"samples": {"asset": "arcticdem-mosaic", "proj_pipeline" : pipeline}, "coordinates": [[vrtLon,vrtLat]]}
rsps = sliderule.source("samples", rqst)
assert init
assert abs(rsps["samples"][0][0]["value"] - vrtElevation) < sigma
assert rsps["samples"][0][0]["file"] == vrtFile
assert rsps["samples"][0][0]["time"] == vrtFileTime


def test_nearestneighbour(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_nearestneighbour(self, init):
resource = "ATL03_20190314093716_11600203_005_01.h5"
region = sliderule.toregion(os.path.join(TESTDIR, "data/dicksonfjord.geojson"))
parms = { "poly": region['poly'],
Expand All @@ -60,6 +59,7 @@ def test_nearestneighbour(self, domain, organization, desired_nodes):
"maxi": 1,
"samples": {"mosaic": {"asset": "arcticdem-mosaic"}} }
gdf = icesat2.atl06p(parms, resources=[resource])
assert init
assert len(gdf) == 957
assert len(gdf.keys()) == 19
assert gdf["rgt"][0] == 1160
Expand All @@ -68,8 +68,7 @@ def test_nearestneighbour(self, domain, organization, desired_nodes):
assert gdf['segment_id'].describe()["max"] == 405902
assert abs(gdf["mosaic.value"].describe()["min"] - 600.4140625) < sigma

def test_zonal_stats(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_zonal_stats(self, init):
resource = "ATL03_20190314093716_11600203_005_01.h5"
region = sliderule.toregion(os.path.join(TESTDIR, "data/dicksonfjord.geojson"))
parms = { "poly": region['poly'],
Expand All @@ -81,6 +80,7 @@ def test_zonal_stats(self, domain, organization, desired_nodes):
"maxi": 1,
"samples": {"mosaic": {"asset": "arcticdem-mosaic", "radius": 10.0, "zonal_stats": True}} }
gdf = icesat2.atl06p(parms, resources=[resource])
assert init
assert len(gdf) == 957
assert len(gdf.keys()) == 26
assert gdf["rgt"][0] == 1160
Expand All @@ -94,8 +94,7 @@ def test_zonal_stats(self, domain, organization, desired_nodes):

@pytest.mark.network
class TestStrips:
def test_indexed_raster(self, domain, organization, desired_nodes):
icesat2.init(domain, organization=organization, desired_nodes=desired_nodes, bypass_dns=True)
def test_indexed_raster(self, init):
region_of_interest = [ {'lon': -46.76533411521963, 'lat': 65.4938164756588},
{'lon': -46.34013213284274, 'lat': 65.49860245693627},
{'lon': -46.35015561146599, 'lat': 65.67523503534576},
Expand All @@ -113,7 +112,7 @@ def test_indexed_raster(self, domain, organization, desired_nodes):
"time_end":'2021-01-01',
"samples": {"strips": {"asset": "arcticdem-strips", "with_flags": True}} }
gdf = icesat2.atl06p(parms, resources=['ATL03_20191108234307_06580503_005_01.h5'])
print(gdf.attrs['file_directory'])
assert init
assert len(gdf.attrs['file_directory']) == 32
for file_id in range(16):
assert file_id in gdf.attrs['file_directory'].keys()
Expand Down

0 comments on commit 75c7f7d

Please sign in to comment.