1616# You should have received a copy of the GNU General Public License along with
1717# satpy. If not, see <http://www.gnu.org/licenses/>.
1818"""Tests for the 'amsr2_l2_gaasp' reader."""
19+ from __future__ import annotations
1920
2021import datetime as dt
2122import os
22- from unittest import mock
23+ from pathlib import Path
2324
2425import dask .array as da
2526import numpy as np
@@ -120,9 +121,10 @@ def _create_gridded_gaasp_dataset(filename):
120121 attrs = {"_FillValue" : - 9999.0 , "scale_factor" : 0.5 , "add_offset" : 2.0 },
121122 )
122123 latency_var = xr .DataArray (
123- da .zeros ((10 , 10 ), dtype = np .timedelta64 ),
124+ da .zeros ((10 , 10 ), dtype = np .int32 ),
124125 dims = ("Number_of_Y_Dimension" , "Number_of_X_Dimension" ),
125126 attrs = {
127+ "units" : "seconds" ,
126128 "_FillValue" : - 9999 ,
127129 },
128130 )
@@ -171,16 +173,19 @@ def _create_one_res_gaasp_dataset(filename):
171173 return xr .Dataset (ds_vars , attrs = attrs )
172174
173175
174- def fake_open_dataset ( filename , ** kwargs ):
176+ def _create_fake_gaasp_file ( fake_path : Path , ** kwargs ):
175177 """Create a Dataset similar to reading an actual file with xarray.open_dataset."""
178+ filename = fake_path .name
176179 if filename in [MBT_FILENAME , PRECIP_FILENAME , OCEAN_FILENAME ]:
177- return _create_two_res_gaasp_dataset (filename )
178- if filename in [SEAICE_NH_FILENAME , SEAICE_SH_FILENAME ]:
179- return _create_gridded_gaasp_dataset (filename )
180- return _create_one_res_gaasp_dataset (filename )
180+ ds = _create_two_res_gaasp_dataset (filename )
181+ elif filename in [SEAICE_NH_FILENAME , SEAICE_SH_FILENAME ]:
182+ ds = _create_gridded_gaasp_dataset (filename )
183+ else :
184+ ds = _create_one_res_gaasp_dataset (filename )
185+ ds .to_netcdf (fake_path , )
181186
182187
183- def _fake_ocean_wind_speed_dataset (filename , ** kwargs ):
188+ def _create_fake_ocean_wind_speed_file (filename , ** kwargs ):
184189 """Create a Dataset similar to reading an actual OCEAN file with wind speed data."""
185190 ds = _create_two_res_gaasp_dataset (filename )
186191 wspd_data = da .arange (10 * 10 , dtype = np .float32 ).reshape ((10 , 10 ))
@@ -199,7 +204,7 @@ def _fake_ocean_wind_speed_dataset(filename, **kwargs):
199204 attrs = {"_FillValue" : - 9999 , "units" : "1" },
200205 )
201206 ds ["WSPD_QC" ] = wspd_qc_data_arr
202- return ds
207+ ds . to_netcdf ( filename )
203208
204209
205210class TestGAASPReader :
@@ -226,18 +231,19 @@ def setup_method(self):
226231 ([SOIL_FILENAME ], 1 ),
227232 ],
228233 )
229- def test_reader_creation (self , filenames , expected_loadables ):
234+ def test_reader_creation (self , tmp_path , filenames , expected_loadables ):
230235 """Test basic initialization."""
231236 from satpy .readers .core .loading import load_reader
232237
233- with mock .patch ("satpy.readers.amsr2_l2_gaasp.xr.open_dataset" ) as od :
234- od .side_effect = fake_open_dataset
235- r = load_reader (self .reader_configs )
236- loadables = r .select_files_from_pathnames (filenames )
237- assert len (loadables ) == expected_loadables
238- r .create_filehandlers (loadables )
239- # make sure we have some files
240- assert r .file_handlers
238+ filenames = [tmp_path / filename for filename in filenames ]
239+ for fn in filenames :
240+ _create_fake_gaasp_file (fn )
241+ r = load_reader (self .reader_configs )
242+ loadables = r .select_files_from_pathnames (filenames )
243+ assert len (loadables ) == expected_loadables
244+ r .create_filehandlers (loadables )
245+ # make sure we have some files
246+ assert r .file_handlers
241247
242248 @pytest .mark .parametrize (
243249 ("filenames" , "expected_datasets" ),
@@ -265,19 +271,20 @@ def test_reader_creation(self, filenames, expected_loadables):
265271 ([SOIL_FILENAME ], ["swath_var" , "swath_var_int" ]),
266272 ],
267273 )
268- def test_available_datasets (self , filenames , expected_datasets ):
274+ def test_available_datasets (self , tmp_path , filenames , expected_datasets ):
269275 """Test that variables are dynamically discovered."""
270276 from satpy .readers .core .loading import load_reader
271277
272- with mock .patch ("satpy.readers.amsr2_l2_gaasp.xr.open_dataset" ) as od :
273- od .side_effect = fake_open_dataset
274- r = load_reader (self .reader_configs )
275- loadables = r .select_files_from_pathnames (filenames )
276- r .create_filehandlers (loadables )
277- avails = list (r .available_dataset_names )
278- for var_name in expected_datasets :
279- assert var_name in avails
280- assert "not_xy_dim_var" not in expected_datasets
278+ filenames = [tmp_path / filename for filename in filenames ]
279+ for fn in filenames :
280+ _create_fake_gaasp_file (fn )
281+ r = load_reader (self .reader_configs )
282+ loadables = r .select_files_from_pathnames (filenames )
283+ r .create_filehandlers (loadables )
284+ avails = list (r .available_dataset_names )
285+ for var_name in expected_datasets :
286+ assert var_name in avails
287+ assert "not_xy_dim_var" not in expected_datasets
281288
282289 @staticmethod
283290 def _check_area (data_id , data_arr ):
@@ -336,41 +343,41 @@ def _check_attrs(data_arr):
336343 ([SOIL_FILENAME ], ["swath_var" , "swath_var_int" ]),
337344 ],
338345 )
339- def test_basic_load (self , filenames , loadable_ids ):
346+ def test_basic_load (self , tmp_path , filenames , loadable_ids ):
340347 """Test that variables are loaded properly."""
341348 from satpy .readers .core .loading import load_reader
342349
343- with mock .patch ("satpy.readers.amsr2_l2_gaasp.xr.open_dataset" ) as od :
344- od .side_effect = fake_open_dataset
345- r = load_reader (self .reader_configs )
346- loadables = r .select_files_from_pathnames (filenames )
347- r .create_filehandlers (loadables )
348- loaded_data_arrs = r .load (loadable_ids )
349- assert loaded_data_arrs
350- for data_id , data_arr in loaded_data_arrs .items ():
351- self ._check_area (data_id , data_arr )
352- self ._check_fill (data_id , data_arr )
353- self ._check_attrs (data_arr )
350+ filenames = [tmp_path / filename for filename in filenames ]
351+ for fn in filenames :
352+ _create_fake_gaasp_file (fn )
353+ r = load_reader (self .reader_configs )
354+ loadables = r .select_files_from_pathnames (filenames )
355+ r .create_filehandlers (loadables )
356+ loaded_data_arrs = r .load (loadable_ids )
357+ assert loaded_data_arrs
358+ for data_id , data_arr in loaded_data_arrs .items ():
359+ self ._check_area (data_id , data_arr )
360+ self ._check_fill (data_id , data_arr )
361+ self ._check_attrs (data_arr )
354362
355363 @pytest .mark .parametrize ("filter_wspd" , [False , True ])
356- def test_wind_speed_filtering (self , filter_wspd ):
364+ def test_wind_speed_filtering (self , tmp_path , filter_wspd ):
357365 """Test that wind speed can be filtered."""
358366 from satpy .readers .core .loading import load_reader
359367
360- with mock .patch ("satpy.readers.amsr2_l2_gaasp.xr.open_dataset" ) as od :
361- od .side_effect = _fake_ocean_wind_speed_dataset
362- r = load_reader (self .reader_configs )
363- loadables = r .select_files_from_pathnames ([OCEAN_FILENAME ])
364- r .create_filehandlers (loadables , fh_kwargs = {"filter_wind_speed" : filter_wspd })
365- loaded_data_arrs = r .load (["WSPD" ])
366- assert loaded_data_arrs
367- data_arr = loaded_data_arrs ["WSPD" ]
368- data_id = data_arr .attrs ["_satpy_id" ]
369- self ._check_area (data_id , data_arr )
370- self ._check_fill (data_id , data_arr )
371- self ._check_attrs (data_arr )
372- has_nan = np .isnan (data_arr .data .compute ()[- 1 , - 1 ])
373- if filter_wspd :
374- assert has_nan
375- else :
376- assert not has_nan
368+ _create_fake_ocean_wind_speed_file (tmp_path / OCEAN_FILENAME )
369+ r = load_reader (self .reader_configs )
370+ loadables = r .select_files_from_pathnames ([tmp_path / OCEAN_FILENAME ])
371+ r .create_filehandlers (loadables , fh_kwargs = {"filter_wind_speed" : filter_wspd })
372+ loaded_data_arrs = r .load (["WSPD" ])
373+ assert loaded_data_arrs
374+ data_arr = loaded_data_arrs ["WSPD" ]
375+ data_id = data_arr .attrs ["_satpy_id" ]
376+ self ._check_area (data_id , data_arr )
377+ self ._check_fill (data_id , data_arr )
378+ self ._check_attrs (data_arr )
379+ has_nan = np .isnan (data_arr .data .compute ()[- 1 , - 1 ])
380+ if filter_wspd :
381+ assert has_nan
382+ else :
383+ assert not has_nan
0 commit comments