@@ -12,101 +12,186 @@ class EmptyNetrc():
1212 def __init__ (self , netrc_file ):
1313 self .netrc_file = netrc_file
1414 self .hosts = {}
15+
1516 def __str__ (self ):
1617 return str (self .hosts )
1718
18- # No .netrc, no ESA CDSE env variables
19+ # No .netrc, no ESA CDSE or Earthdata env variables
20+ with monkeypatch .context () as mp :
21+ mp .setattr (netrc , 'netrc' , EmptyNetrc , raising = False )
22+ mp .delenv ('ESA_USERNAME' , raising = False )
23+ mp .delenv ('ESA_PASSWORD' , raising = False )
24+ mp .delenv ('EARTHDATA_USERNAME' , raising = False )
25+ mp .delenv ('EARTHDATA_PASSWORD' , raising = False )
26+ with pytest .raises (ValueError ):
27+ s1_orbits .ensure_orbit_credentials ()
28+
29+ # No .netrc or Earthdata env vars, set ESA CDSE env variables
30+ with monkeypatch .context () as mp :
31+ mp .setattr (netrc , 'netrc' , EmptyNetrc , raising = False )
32+ mp .setenv ('ESA_USERNAME' , 'foo' )
33+ mp .setenv ('ESA_PASSWORD' , 'bar' )
34+ mp .delenv ('EARTHDATA_USERNAME' , raising = False )
35+ mp .delenv ('EARTHDATA_PASSWORD' , raising = False )
36+ with pytest .raises (ValueError ):
37+ s1_orbits .ensure_orbit_credentials ()
38+
39+ # No .netrc or ESA CDSE env vars, set Earthdata env variables
1940 with monkeypatch .context () as mp :
2041 mp .setattr (netrc , 'netrc' , EmptyNetrc , raising = False )
2142 mp .delenv ('ESA_USERNAME' , raising = False )
2243 mp .delenv ('ESA_PASSWORD' , raising = False )
44+ mp .setenv ('EARTHDATA_USERNAME' , 'fizz' )
45+ mp .setenv ('EARTHDATA_PASSWORD' , 'buzz' )
2346 with pytest .raises (ValueError ):
2447 s1_orbits .ensure_orbit_credentials ()
2548
26- # No .netrc, set ESA CDSE env variables
49+ # No .netrc, set Earthdata and ESA CDSE env variables
2750 with monkeypatch .context () as mp :
2851 mp .setattr (netrc , 'netrc' , EmptyNetrc , raising = False )
2952 mp .setenv ('ESA_USERNAME' , 'foo' )
3053 mp .setenv ('ESA_PASSWORD' , 'bar' )
54+ mp .setenv ('EARTHDATA_USERNAME' , 'fizz' )
55+ mp .setenv ('EARTHDATA_PASSWORD' , 'buzz' )
3156 mp .setattr (Path , 'write_text' , lambda self , write_text : write_text )
3257 written_credentials = s1_orbits .ensure_orbit_credentials ()
33- assert written_credentials == str ({s1_orbits .ESA_CDSE_HOST : ('foo' , None , 'bar' )})
58+ assert written_credentials == str ({
59+ s1_orbits .ESA_CDSE_HOST : ('foo' , None , 'bar' ),
60+ s1_orbits .NASA_EDL_HOST : ('fizz' , None , 'buzz' )
61+ })
3462
3563 class NoCDSENetrc ():
3664 def __init__ (self , netrc_file ):
3765 self .netrc_file = netrc_file
38- self .hosts = {'fizz.buzz.org' : ('foo' , None , 'bar' )}
66+ self .hosts = {s1_orbits .NASA_EDL_HOST : ('fizz' , None , 'buzz' )}
67+
3968 def __str__ (self ):
4069 return str (self .hosts )
4170
42- # No CDSE in .netrc, no ESA CDSE env variables
71+ # No CDSE in .netrc or ESA CDSE env variables, Earthdata in .netrc
4372 with monkeypatch .context () as mp :
4473 mp .setattr (netrc , 'netrc' , NoCDSENetrc , raising = False )
4574 mp .delenv ('ESA_USERNAME' , raising = False )
4675 mp .delenv ('ESA_PASSWORD' , raising = False )
4776 with pytest .raises (ValueError ):
4877 s1_orbits .ensure_orbit_credentials ()
4978
50- # No CDSE in .netrc, set ESA CDSE env variables
79+ # No CDSE in .netrc, set ESA CDSE env variables, Earthdata in .netrc
5180 with monkeypatch .context () as mp :
5281 mp .setattr (netrc , 'netrc' , NoCDSENetrc , raising = False )
5382 mp .setenv ('ESA_USERNAME' , 'foo' )
5483 mp .setenv ('ESA_PASSWORD' , 'bar' )
5584 mp .setattr (Path , 'write_text' , lambda self , write_text : write_text )
5685 written_credentials = s1_orbits .ensure_orbit_credentials ()
57- assert written_credentials == str ({'fizz.buzz.org' : ('foo' , None , 'bar' ), s1_orbits .ESA_CDSE_HOST : ('foo' , None , 'bar' )})
86+ assert written_credentials == str ({
87+ s1_orbits .NASA_EDL_HOST : ('fizz' , None , 'buzz' ),
88+ s1_orbits .ESA_CDSE_HOST : ('foo' , None , 'bar' ),
89+ })
5890
59- class CDSENetrc ():
91+ class NoEarthdataNetrc ():
6092 def __init__ (self , netrc_file ):
6193 self .netrc_file = netrc_file
6294 self .hosts = {s1_orbits .ESA_CDSE_HOST : ('foo' , None , 'bar' )}
95+
6396 def __str__ (self ):
6497 return str (self .hosts )
6598
66- # cdse in .netrc, no ESA CDSE env variables
99+ # cdse in .netrc, no ESA CDSE env variables, Earthdata env variables
67100 with monkeypatch .context () as mp :
68- mp .setattr (netrc , 'netrc' , CDSENetrc , raising = False )
101+ mp .setattr (netrc , 'netrc' , NoEarthdataNetrc , raising = False )
69102 mp .delenv ('ESA_USERNAME' , raising = False )
70103 mp .delenv ('ESA_PASSWORD' , raising = False )
104+ mp .setenv ('EARTHDATA_USERNAME' , 'fizz' )
105+ mp .setenv ('EARTHDATA_PASSWORD' , 'buzz' )
106+ mp .setattr (Path , 'write_text' , lambda self , write_text : write_text )
107+ written_credentials = s1_orbits .ensure_orbit_credentials ()
108+ assert written_credentials == str ({
109+ s1_orbits .ESA_CDSE_HOST : ('foo' , None , 'bar' ),
110+ s1_orbits .NASA_EDL_HOST : ('fizz' , None , 'buzz' ),
111+ })
112+
113+ class CDSEAndEarthdataNetrc ():
114+ def __init__ (self , netrc_file ):
115+ self .netrc_file = netrc_file
116+ self .hosts = {
117+ s1_orbits .ESA_CDSE_HOST : ('foo' , None , 'bar' ),
118+ s1_orbits .NASA_EDL_HOST : ('fizz' , None , 'buzz' )
119+ }
120+
121+ def __str__ (self ):
122+ return str (self .hosts )
123+
124+ # cdse and Earthdata in netrc, no env variables
125+ with monkeypatch .context () as mp :
126+ mp .setattr (netrc , 'netrc' , CDSEAndEarthdataNetrc , raising = False )
127+ written_credentials = s1_orbits .ensure_orbit_credentials ()
128+ assert written_credentials is None
129+
130+ with monkeypatch .context () as mp :
131+ mp .setattr (netrc , 'netrc' , CDSEAndEarthdataNetrc , raising = False )
132+ mp .delenv ('ESA_USERNAME' , raising = False )
133+ mp .delenv ('ESA_PASSWORD' , raising = False )
134+ mp .setenv ('EARTHDATA_USERNAME' , 'fizz' )
135+ mp .setenv ('EARTHDATA_PASSWORD' , 'buzz' )
71136 written_credentials = s1_orbits .ensure_orbit_credentials ()
72137 assert written_credentials is None
73138
74- # cdse in .netrc, set ESA CDSE env variables
75139 with monkeypatch .context () as mp :
76- mp .setattr (netrc , 'netrc' , CDSENetrc , raising = False )
140+ mp .setattr (netrc , 'netrc' , CDSEAndEarthdataNetrc , raising = False )
77141 mp .setenv ('ESA_USERNAME' , 'foo' )
78142 mp .setenv ('ESA_PASSWORD' , 'bar' )
143+ mp .setenv ('EARTHDATA_USERNAME' , 'fizz' )
144+ mp .setenv ('EARTHDATA_PASSWORD' , 'buzz' )
145+ written_credentials = s1_orbits .ensure_orbit_credentials ()
146+ assert written_credentials is None
147+
148+ with monkeypatch .context () as mp :
149+ mp .setattr (netrc , 'netrc' , CDSEAndEarthdataNetrc , raising = False )
150+ mp .setenv ('ESA_USERNAME' , 'foo' )
151+ mp .setenv ('ESA_PASSWORD' , 'bar' )
152+ mp .delenv ('ESA_USERNAME' , raising = False )
153+ mp .delenv ('ESA_PASSWORD' , raising = False )
79154 written_credentials = s1_orbits .ensure_orbit_credentials ()
80155 assert written_credentials is None
81156
82157
83158def test_get_orbits_from_slc_ids (mocker ):
84159 side_effect = [
85- [Path ('foo.txt' )],
86- [Path ('bar.txt' ), Path ('fiz.txt' )],
160+ [Path ('foo_start.txt' ), Path ('foo_stop.txt' )],
161+ [Path ('bar_start.txt' ), Path ('bar_end.txt' ),
162+ Path ('fiz_start.txt' ), Path ('fiz_end' )],
87163 ]
88164 mocker .patch ('eof.download.download_eofs' ,
89- side_effect = side_effect )
165+ side_effect = side_effect [ 0 ] )
90166
91167 orbit_files = s1_orbits .get_orbits_from_slc_ids (
92168 ['S1A_IW_SLC__1SSV_20150621T120220_20150621T120232_006471_008934_72D8' ]
93169 )
94- assert orbit_files == [Path ('foo.txt' )]
95- assert eof .download .download_eofs .call_count == 1
96- eof .download .download_eofs .assert_called_with (
97- [ '20150621T120220' , '20150621T120232' ],
98- ['S1A' ] * 2 ,
99- save_dir = str (Path .cwd ())
100- )
170+ assert orbit_files == side_effect [0 ]
171+ assert eof .download .download_eofs .call_count == 2
172+ for dt in '20150621T120220 20150621T120232' .split ():
173+ eof .download .download_eofs .assert_any_call (
174+ [dt ],
175+ ['S1A' ],
176+ save_dir = str (Path .cwd ()),
177+ force_asf = True
178+ )
179+
180+ mocker .patch ('eof.download.download_eofs' ,
181+ side_effect = side_effect [1 ])
101182
102183 orbit_files = s1_orbits .get_orbits_from_slc_ids (
103184 ['S1B_IW_SLC__1SDV_20201115T162313_20201115T162340_024278_02E29D_5C54' ,
104185 'S1A_IW_SLC__1SDV_20201203T162353_20201203T162420_035524_042744_6D5C' ]
105186 )
106- assert orbit_files == [Path ('bar.txt' ), Path ('fiz.txt' )]
107- assert eof .download .download_eofs .call_count == 2
108- eof .download .download_eofs .assert_called_with (
109- ['20201115T162313' , '20201203T162353' , '20201115T162340' , '20201203T162420' ],
110- ['S1B' , 'S1A' ] * 2 ,
111- save_dir = str (Path .cwd ())
112- )
187+ assert orbit_files == side_effect [1 ]
188+ assert eof .download .download_eofs .call_count == 4
189+ missions = 'S1B S1B S1A S1A' .split ()
190+ dts = '20201115T162313 20201115T162340 20201203T162353 20201203T162420' .split ()
191+ for dt , mission in zip (dts , missions ):
192+ eof .download .download_eofs .assert_any_call (
193+ [dt ],
194+ [mission ],
195+ save_dir = str (Path .cwd ()),
196+ force_asf = True
197+ )
0 commit comments