|
18 | 18 | # However, if you have executed another commercial license agreement
|
19 | 19 | # with Crate these terms will supersede the license and you may use the
|
20 | 20 | # software solely pursuant to the terms of the relevant commercial agreement.
|
21 |
| - |
| 21 | +import json |
22 | 22 | import os
|
23 | 23 | import tempfile
|
| 24 | +import urllib |
| 25 | +from distutils.version import LooseVersion |
24 | 26 | from unittest import TestCase, mock
|
25 | 27 | from io import BytesIO
|
| 28 | + |
| 29 | +import crate |
26 | 30 | from .layer import CrateLayer, prepend_http, http_url_from_host_port, wait_for_http_url
|
27 | 31 |
|
28 | 32 |
|
@@ -58,6 +62,22 @@ def test_wait_for_http(self):
|
58 | 62 | addr = wait_for_http_url(log=log, timeout=1)
|
59 | 63 | self.assertEqual(None, addr)
|
60 | 64 |
|
| 65 | + @mock.patch.object(crate.testing.layer, "_download_and_extract", lambda uri, directory: None) |
| 66 | + def test_layer_from_uri(self): |
| 67 | + """ |
| 68 | + The CrateLayer can also be created by providing an URI that points to |
| 69 | + a CrateDB tarball. |
| 70 | + """ |
| 71 | + with urllib.request.urlopen("https://crate.io/versions.json") as response: |
| 72 | + versions = json.loads(response.read().decode()) |
| 73 | + version = versions["crate_testing"] |
| 74 | + |
| 75 | + self.assertGreaterEqual(LooseVersion(version), LooseVersion("4.5.0")) |
| 76 | + |
| 77 | + uri = "https://cdn.crate.io/downloads/releases/crate-{}.tar.gz".format(version) |
| 78 | + layer = CrateLayer.from_uri(uri, name="crate-by-uri", http_port=42203) |
| 79 | + self.assertIsInstance(layer, CrateLayer) |
| 80 | + |
61 | 81 | @mock.patch.dict('os.environ', {}, clear=True)
|
62 | 82 | def test_java_home_env_not_set(self):
|
63 | 83 | with tempfile.TemporaryDirectory() as tmpdir:
|
|
0 commit comments