1+ import argparse
12import logging
23import os
34import sys
@@ -85,17 +86,19 @@ def test_write_stac(tmp_path, dataset, write_datasets, pre_existing_catalog):
8586 }
8687
8788
88- orig_import = __import__
89- def import_mock (name , * args ):
90- if name == 'pystac' :
91- raise ModuleNotFoundError ("No module named 'pystac'" )
92- return orig_import (name , * args )
89+
9390
9491
9592def test_write_stac_no_pystac (tmp_path , dataset ):
9693 # Import hooks are the recommended "clean" way to do this, but don't work
9794 # in this case.
98- with mock .patch ('builtins.__import__' , side_effect = import_mock ):
95+ orig_import = __import__
96+ def import_mock (name , * args ):
97+ if name == "pystac" :
98+ raise ModuleNotFoundError ("No module named 'pystac'" )
99+ return orig_import (name , * args )
100+
101+ with mock .patch ("builtins.__import__" , side_effect = import_mock ):
99102 # pytest imports xcengine.util long before we can patch __import__,
100103 # so we delete pystac from util's namespace (if present) instead.
101104 # This gives a NameError on access rather than a ModuleNotFoundError
@@ -108,6 +111,36 @@ def test_write_stac_no_pystac(tmp_path, dataset):
108111 # We want nothing to happen here, so no explicit assertions.
109112
110113
114+ def test_start_server_no_xcube (dataset ):
115+ import io
116+ orig_import = __import__
117+ def import_mock (name , * args ):
118+ if name == "xcube" or name .startswith ("xcube." ):
119+ raise ModuleNotFoundError (f"No module named { name } " )
120+ return orig_import (name , * args )
121+
122+ with mock .patch ("builtins.__import__" , side_effect = import_mock ):
123+ import xcengine .util
124+ util_vars = (
125+ k for k in xcengine .util .__dict__ .keys ()
126+ if k == "xcube" or k .startswith ("xcube." )
127+ )
128+ for v in util_vars : del xcengine .util .__dict__ [v ]
129+ from xcengine .util import start_server
130+ logger = logging .getLogger ("test-start-server-logger" )
131+ logger .setLevel (logging .INFO )
132+ logger .addHandler (logging .StreamHandler (log_stream := io .StringIO ()))
133+ start_server (
134+ {"ds1" : dataset },
135+ {},
136+ argparse .Namespace (batch = False , from_saved = False ),
137+ logger
138+ )
139+ logged = log_stream .getvalue ()
140+ assert "Not starting" in logged
141+ assert "Starting server" not in logged
142+
143+
111144@pytest .mark .parametrize ("eoap_mode" , [False , True ])
112145@pytest .mark .parametrize ("ds2_format" , [None , "zarr" , "netcdf" ])
113146def test_save_datasets (tmp_path , dataset , eoap_mode , ds2_format ):
0 commit comments