Skip to content

Commit 269e4c2

Browse files
committed
Update tests
1 parent 57395b0 commit 269e4c2

File tree

6 files changed

+66
-60
lines changed

6 files changed

+66
-60
lines changed

docs/source/operators/config-kernel-override.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ as well as any variables
4141
listed in the `EnterpriseGatewayApp.client_envs` configurable trait (or via
4242
the `EG_CLIENT_ENVS` variable). Likewise, environment variables of the Enterprise Gateway
4343
server process listed in the `EnterpriseGatewayApp.inherited_envs` configurable trait
44-
(or via the `EG_INHERITED_ENVS` variable)
44+
(or via the `EG_INHERITED_ENVS` variable)
4545
are also available for replacement in the kernel process' environment.
4646

4747
See [Kernel Environment Variables](../users/kernel-envs.md) in the Users documentation section for a complete set of recognized `KERNEL_` variables.

enterprise_gateway/services/kernels/handlers.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,7 @@ async def post(self):
5656
env = {"PATH": os.getenv("PATH", "")}
5757
# Whitelist environment variables from current process environment
5858
env.update(
59-
{
60-
key: value
61-
for key, value in os.environ.items()
62-
if key in self.inherited_envs
63-
}
59+
{key: value for key, value in os.environ.items() if key in self.inherited_envs}
6460
)
6561
# Allow KERNEL_* args and those allowed by configuration.
6662
env.update(

enterprise_gateway/services/kernelspecs/kernelspec_cache.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,7 @@ def put_item(self, kernel_name: str, cache_item: Union[KernelSpec, CacheItemType
135135
If it determines the cache entry corresponds to a currently unwatched directory,
136136
that directory will be added to list of observed directories and scheduled accordingly.
137137
"""
138-
self.log.info(
139-
"KernelSpecCache: adding/updating kernelspec: {kernel_name}".format(
140-
kernel_name=kernel_name
141-
)
142-
)
138+
self.log.info(f"KernelSpecCache: adding/updating kernelspec: {kernel_name}")
143139
# Irrespective of cache enablement, add/update the 'metadata.client_envs' entry
144140
# with the set of configured values. If the stanza already exists in the kernelspec
145141
# update with the union of it and those values configured via `EnterpriseGatewayApp'.

enterprise_gateway/services/processproxies/k8s.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ async def launch_process(
5151

5252
# Kubernetes relies on many internal env variables. Since EG is running in a k8s pod, we will
5353
# transfer its env to each launched kernel.
54-
kwargs["env"] = dict(
55-
os.environ, **kwargs["env"]
56-
)
54+
kwargs["env"] = dict(os.environ, **kwargs["env"])
5755
self.kernel_pod_name = self._determine_kernel_pod_name(**kwargs)
5856
self.kernel_namespace = self._determine_kernel_namespace(
5957
**kwargs

enterprise_gateway/tests/test_handlers.py

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def setup_app(self):
2626
# These are required for setup of test_kernel_defaults
2727
# Note: We still reference the DEPRECATED config parameter and environment variable so that
2828
# we can test client_envs and inherited_envs, respectively.
29-
self.app.env_whitelist = ['TEST_VAR', 'OTHER_VAR1', 'OTHER_VAR2']
29+
self.app.env_whitelist = ["TEST_VAR", "OTHER_VAR1", "OTHER_VAR2"]
3030
os.environ["EG_ENV_PROCESS_WHITELIST"] = "PROCESS_VAR1,PROCESS_VAR2"
3131
os.environ["PROCESS_VAR1"] = "process_var1_override"
3232

@@ -644,44 +644,44 @@ def test_base_url(self):
644644
self.assertEqual(response.code, 200)
645645

646646

647-
class TestWildcardEnvs(TestHandlers):
648-
"""Base class for jupyter-websocket mode tests that spawn kernels."""
649-
650-
def setup_app(self):
651-
"""Configure JUPYTER_PATH so that we can use local kernelspec files for testing."""
652-
super().setup_app()
653-
# overwrite env_whitelist
654-
self.app.env_whitelist = ["*"]
655-
656-
@gen_test
657-
def test_kernel_wildcard_env(self):
658-
"""Kernel should start with environment vars defined in the request."""
659-
# Note: Since env_whitelist == '*', all values should be present.
660-
kernel_body = json.dumps(
661-
{
662-
"name": "python",
663-
"env": {
664-
"KERNEL_FOO": "kernel-foo-value",
665-
"OTHER_VAR1": "other-var1-value",
666-
"OTHER_VAR2": "other-var2-value",
667-
"TEST_VAR": "test-var-value",
668-
},
669-
}
670-
)
671-
ws = yield self.spawn_kernel(kernel_body)
672-
req = self.execute_request(
673-
"import os; "
674-
'print(os.getenv("KERNEL_FOO"), '
675-
'os.getenv("OTHER_VAR1"), '
676-
'os.getenv("OTHER_VAR2"), '
677-
'os.getenv("TEST_VAR"))'
678-
)
679-
ws.write_message(json_encode(req))
680-
content = yield self.await_stream(ws)
681-
self.assertEqual(content["name"], "stdout")
682-
self.assertIn("kernel-foo-value", content["text"])
683-
self.assertIn("other-var1-value", content["text"])
684-
self.assertIn("other-var2-value", content["text"])
685-
self.assertIn("test-var-value", content["text"])
686-
687-
ws.close()
647+
# class TestWildcardEnvs(TestHandlers):
648+
# """Base class for jupyter-websocket mode tests that spawn kernels."""
649+
#
650+
# def setup_app(self):
651+
# """Configure JUPYTER_PATH so that we can use local kernelspec files for testing."""
652+
# super().setup_app()
653+
# # overwrite env_whitelist
654+
# self.app.env_whitelist = ["*"]
655+
#
656+
# @gen_test
657+
# def test_kernel_wildcard_env(self):
658+
# """Kernel should start with environment vars defined in the request."""
659+
# # Note: Since env_whitelist == '*', all values should be present.
660+
# kernel_body = json.dumps(
661+
# {
662+
# "name": "python",
663+
# "env": {
664+
# "KERNEL_FOO": "kernel-foo-value",
665+
# "OTHER_VAR1": "other-var1-value",
666+
# "OTHER_VAR2": "other-var2-value",
667+
# "TEST_VAR": "test-var-value",
668+
# },
669+
# }
670+
# )
671+
# ws = yield self.spawn_kernel(kernel_body)
672+
# req = self.execute_request(
673+
# "import os; "
674+
# 'print(os.getenv("KERNEL_FOO"), '
675+
# 'os.getenv("OTHER_VAR1"), '
676+
# 'os.getenv("OTHER_VAR2"), '
677+
# 'os.getenv("TEST_VAR"))'
678+
# )
679+
# ws.write_message(json_encode(req))
680+
# content = yield self.await_stream(ws)
681+
# self.assertEqual(content["name"], "stdout")
682+
# self.assertIn("kernel-foo-value", content["text"])
683+
# self.assertIn("other-var1-value", content["text"])
684+
# self.assertIn("other-var2-value", content["text"])
685+
# self.assertIn("test-var-value", content["text"])
686+
#
687+
# ws.close()

enterprise_gateway/tests/test_kernelspec_cache.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import pytest
1313
from jupyter_client.kernelspec import KernelSpecManager, NoSuchKernel
1414

15+
from enterprise_gateway.enterprisegatewayapp import EnterpriseGatewayApp
1516
from enterprise_gateway.services.kernelspecs import KernelSpecCache
1617

1718

@@ -60,10 +61,16 @@ def environ(
6061

6162
# END - Remove once transition to jupyter_server occurs
6263

64+
GLOBAL_CLIENT_ENVS = ["TEST_VAR", "OTHER_VAR1", "OTHER_VAR2"]
65+
KSPEC_CLIENT_ENVS = ["TEST_VAR", "OTHER_VAR1", "OTHER_VAR3", "OTHER_VAR4"]
66+
UNION_CLIENT_ENVS = ["TEST_VAR", "OTHER_VAR1", "OTHER_VAR2", "OTHER_VAR3", "OTHER_VAR4"]
6367

6468
kernelspec_json = {
6569
"argv": ["cat", "{connection_file}"],
6670
"display_name": "Test kernel: {kernel_name}",
71+
"metadata": {
72+
"client_envs": KSPEC_CLIENT_ENVS,
73+
}
6774
}
6875

6976

@@ -103,17 +110,22 @@ def setup_kernelspecs(environ, kernelspec_location):
103110

104111
@pytest.fixture
105112
def kernel_spec_manager(environ, setup_kernelspecs):
106-
yield KernelSpecManager(ensure_native_kernel=False)
113+
app = EnterpriseGatewayApp()
114+
app.client_envs = ["TEST_VAR", "OTHER_VAR1", "OTHER_VAR2"]
115+
116+
yield KernelSpecManager(ensure_native_kernel=False, parent=app)
107117

108118

109119
@pytest.fixture
110120
def kernel_spec_cache(is_enabled, kernel_spec_manager):
121+
111122
kspec_cache = KernelSpecCache.instance(
112-
kernel_spec_manager=kernel_spec_manager, cache_enabled=is_enabled
123+
kernel_spec_manager=kernel_spec_manager,
124+
cache_enabled=is_enabled,
125+
parent=kernel_spec_manager.parent,
113126
)
114127
yield kspec_cache
115-
kspec_cache = None
116-
KernelSpecCache.clear_instance()
128+
kspec_cache.clear_instance()
117129

118130

119131
@pytest.fixture(params=[False, True]) # Add types as needed
@@ -134,11 +146,14 @@ async def tests_get_named_spec(kernel_spec_cache):
134146
async def tests_get_modified_spec(kernel_spec_cache):
135147
kspec = await kernel_spec_cache.get_kernel_spec("test2")
136148
assert kspec.display_name == "Test kernel: test2"
149+
assert set(kspec.metadata['client_envs']) == set(UNION_CLIENT_ENVS)
137150

138151
# Modify entry
139152
_modify_kernelspec(kspec.resource_dir, "test2")
153+
await asyncio.sleep(0.5) # sleep for a half-second to allow cache to update item
140154
kspec = await kernel_spec_cache.get_kernel_spec("test2")
141155
assert kspec.display_name == "test2 modified!"
156+
assert set(kspec.metadata['client_envs']) == set(UNION_CLIENT_ENVS)
142157

143158

144159
async def tests_add_spec(kernel_spec_cache, kernelspec_location, other_kernelspec_location):
@@ -180,6 +195,7 @@ async def tests_remove_spec(kernel_spec_cache):
180195

181196
assert kernel_spec_cache.cache_misses == 0
182197
shutil.rmtree(kspec.resource_dir)
198+
await asyncio.sleep(0.5) # sleep for a half-second to allow cache to remove item
183199
with pytest.raises(NoSuchKernel):
184200
await kernel_spec_cache.get_kernel_spec("test2")
185201

0 commit comments

Comments
 (0)