Skip to content

Commit 912acda

Browse files
committed
Default JAVA_HOME env in test layer to empty string
This commit changes the default value for `JAVA_HOME` in the `CrateLayer` from `None` to `''` (empty string). This is necessary, because environment variables are always interpreted as strings, and therefore `None` would be interpreted as a string `'None'`, which is not a valid path for `JAVA_HOME`.
1 parent 08fbed3 commit 912acda

File tree

4 files changed

+35
-5
lines changed

4 files changed

+35
-5
lines changed

CHANGES.txt

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ Changes for crate
55
Unreleased
66
==========
77

8+
- Fixed a bug in the ``CrateLayer`` which caused ``CrateDB`` not to start up,
9+
in case the ``JAVA_HOME`` environment variable was not set.
10+
811
2019/08/01 0.23.1
912
=================
1013

src/crate/testing/doctests/layer.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ Verbosity
134134

135135
The test layer hides the standard output of Crate per default. To increase the
136136
verbosity level the additional keyword argument ``verbose`` needs to be set
137-
to ``True``.
137+
to ``True``::
138138

139139
>>> layer = CrateLayer('crate',
140140
... crate_home=crate_path(),
@@ -150,7 +150,7 @@ Environment variables
150150
---------------------
151151

152152
It is possible to provide enviromental variables for the ``Crate`` testing
153-
layer.
153+
layer::
154154

155155
>>> layer = CrateLayer('crate',
156156
... crate_home=crate_path(),

src/crate/testing/layer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ def __init__(self,
222222
self.verbose = verbose
223223
self.env = env or {}
224224
self.env.setdefault('CRATE_USE_IPV4', 'true')
225-
self.env.setdefault('JAVA_HOME', os.environ.get('JAVA_HOME'))
225+
self.env.setdefault('JAVA_HOME', os.environ.get('JAVA_HOME', ''))
226226
self._stdout_consumers = []
227227
self.conn_pool = urllib3.PoolManager(num_pools=1)
228228

src/crate/testing/test_layer.py

+29-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
# with Crate these terms will supersede the license and you may use the
2020
# software solely pursuant to the terms of the relevant commercial agreement.
2121

22-
from unittest import TestCase
22+
import os
23+
import tempfile
24+
from unittest import TestCase, mock
2325
from io import BytesIO
24-
from .layer import prepend_http, http_url_from_host_port, wait_for_http_url
26+
from .layer import CrateLayer, prepend_http, http_url_from_host_port, wait_for_http_url
2527

2628

2729
class LayerUtilsTest(TestCase):
@@ -55,3 +57,28 @@ def test_wait_for_http(self):
5557
log = BytesIO(b'[i.c.p.h.CrateNettyHttpServerTransport] [crate] publish_address {}')
5658
addr = wait_for_http_url(log=log, timeout=1)
5759
self.assertEqual(None, addr)
60+
61+
@mock.patch.dict('os.environ', {}, clear=True)
62+
def test_java_home_env_not_set(self):
63+
with tempfile.TemporaryDirectory() as tmpdir:
64+
layer = CrateLayer('java-home-test', tmpdir)
65+
# JAVA_HOME must not be set to `None`, since it would be interpreted as a
66+
# string 'None', and therefore intepreted as a path
67+
self.assertEqual(layer.env['JAVA_HOME'], '')
68+
69+
@mock.patch.dict('os.environ', {}, clear=True)
70+
def test_java_home_env_set(self):
71+
java_home = '/usr/lib/jvm/java-11-openjdk-amd64'
72+
with tempfile.TemporaryDirectory() as tmpdir:
73+
os.environ['JAVA_HOME'] = java_home
74+
layer = CrateLayer('java-home-test', tmpdir)
75+
self.assertEqual(layer.env['JAVA_HOME'], java_home)
76+
77+
@mock.patch.dict('os.environ', {}, clear=True)
78+
def test_java_home_env_override(self):
79+
java_11_home = '/usr/lib/jvm/java-11-openjdk-amd64'
80+
java_12_home = '/usr/lib/jvm/java-12-openjdk-amd64'
81+
with tempfile.TemporaryDirectory() as tmpdir:
82+
os.environ['JAVA_HOME'] = java_11_home
83+
layer = CrateLayer('java-home-test', tmpdir, env={'JAVA_HOME': java_12_home})
84+
self.assertEqual(layer.env['JAVA_HOME'], java_12_home)

0 commit comments

Comments
 (0)