Skip to content

Commit 514632b

Browse files
authored
#294: ScriptLanguageContainer.deploy misses https configuration (#302)
fixes #294
1 parent abad641 commit 514632b

File tree

8 files changed

+82
-12
lines changed

8 files changed

+82
-12
lines changed

.github/workflows/tests-ordinary-integration.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ jobs:
3636
extra_param: "--package-manager conda --compression-strategy gzip"
3737
- file: itest_slc.py
3838
extra_param: "--package-manager pip --compression-strategy none"
39+
- file: itest_slc.py
40+
extra_param: "--package-manager pip --compression-strategy none --bucketfs-protocol https"
3941

4042
steps:
4143

doc/changes/unreleased.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
This release updates dependencies enabling PyExasol versions ≥ 1.0.
66

7+
## Bugs
8+
9+
* #294: ScriptLanguageContainer.deploy misses https configuration
10+
711
## Documentation
812

913
* #287: working examples for functional UI

exasol/nb_connector/slc/script_language_container.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from pathlib import (
66
Path,
77
)
8+
from typing import Any
89

910
import requests
1011
from exasol.slc import api as exaslct_api
@@ -25,6 +26,7 @@
2526
Workspace,
2627
current_directory,
2728
)
29+
from exasol.nb_connector.utils import optional_str_to_bool
2830

2931
PipPackageDefinition = namedtuple("PipPackageDefinition", ["pkg", "version"])
3032
CondaPackageDefinition = namedtuple("CondaPackageDefinition", ["pkg", "version"])
@@ -193,7 +195,7 @@ def deploy(self):
193195
Deploys the current script-languages-container to the database and
194196
stores the activation string in the Secure Configuration Storage.
195197
"""
196-
bfs_params = {
198+
bfs_params: dict[str, Any] = {
197199
k: self.secrets.get(v)
198200
for k, v in [
199201
("bucketfs_host", CKey.bfs_host_name),
@@ -204,6 +206,15 @@ def deploy(self):
204206
("bucket", CKey.bfs_bucket),
205207
]
206208
}
209+
bucketfs_use_https = optional_str_to_bool(self.secrets.get(CKey.bfs_encryption))
210+
if bucketfs_use_https is not None:
211+
bfs_params["bucketfs_use_https"] = bucketfs_use_https
212+
use_ssl_cert_validation = optional_str_to_bool(self.secrets.get(CKey.cert_vld))
213+
if use_ssl_cert_validation is not None:
214+
bfs_params["use_ssl_cert_validation"] = use_ssl_cert_validation
215+
ssl_cert_path = self.secrets.get(CKey.trusted_ca)
216+
if ssl_cert_path is not None:
217+
bfs_params["ssl_cert_path"] = ssl_cert_path
207218

208219
with current_directory(self.checkout_dir):
209220
result = exaslct_api.deploy(

poetry.lock

Lines changed: 4 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ sqlalchemy = [ "sqlalchemy-exasol (>=5.0.0, <6)" ]
2828
pyexasol = [ "pyexasol (>=0.26.0, <2)" ]
2929
bucketfs = [ "exasol-bucketfs (>=1.0.1, <3)" ]
3030
docker-db = [
31-
"exasol-integration-test-docker-environment (>=4, <5)",
31+
"exasol-integration-test-docker-environment (>=4.4.1, <5)",
3232
"ifaddr (>=0.2.0, <0.3)",
3333
]
3434
# The version of SLCT is dictated by its usage in the python-extension-common,

test/bucketfs_protocol.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import enum
2+
3+
4+
class BucketFSProtocol(enum.Enum):
5+
"""
6+
Supported protocols for BucketFS.
7+
"""
8+
9+
HTTP = "http"
10+
HTTPS = "https"
11+
12+
def __str__(self):
13+
# this allows using `choices` in argparse
14+
return self.value

test/conftest.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from collections.abc import Iterator
2+
from test.bucketfs_protocol import BucketFSProtocol
23
from test.package_manager import PackageManager
34
from test.utils.integration_test_utils import sample_db_file
45

@@ -39,6 +40,15 @@ def pytest_addoption(parser):
3940
help="Compression Strategy to use",
4041
)
4142

43+
parser.addoption(
44+
"--bucketfs-protocol",
45+
action="store",
46+
type=BucketFSProtocol,
47+
choices=list(BucketFSProtocol),
48+
default="https",
49+
help="BucketFS Protocol to use for SLC tests",
50+
)
51+
4252

4353
@pytest.fixture(scope="session")
4454
def package_manager(request) -> PackageManager:
@@ -50,3 +60,9 @@ def package_manager(request) -> PackageManager:
5060
def compression_strategy(request) -> CompressionStrategy:
5161
val = request.config.getoption("--compression-strategy")
5262
return CompressionStrategy(val)
63+
64+
65+
@pytest.fixture(scope="session")
66+
def bucketfs_protocol(request) -> BucketFSProtocol:
67+
val = request.config.getoption("--bucketfs-protocol")
68+
return BucketFSProtocol(val)

test/integration/ordinary/itest_slc.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,19 @@
33
from collections.abc import Iterator
44
from pathlib import Path
55
from tempfile import TemporaryDirectory
6+
from test.bucketfs_protocol import BucketFSProtocol
67
from test.package_manager import PackageManager
78
from test.utils.integration_test_utils import setup_itde_module
89

910
import pytest
1011
from docker.models.images import Image as DockerImage
1112
from exasol.slc.models.compression_strategy import CompressionStrategy
1213
from exasol_integration_test_docker_environment.lib.docker import ContextDockerClient
14+
from exasol_integration_test_docker_environment.lib.models.api_errors import (
15+
TaskRuntimeError,
16+
)
1317

18+
from exasol.nb_connector.ai_lab_config import AILabConfig as CKey
1419
from exasol.nb_connector.language_container_activation import (
1520
open_pyexasol_connection_with_lang_definitions,
1621
)
@@ -154,7 +159,30 @@ def expected_activation_key(slc: ScriptLanguageContainer) -> str:
154159
)
155160

156161

157-
@pytest.mark.dependency(name="deploy_slc")
162+
@pytest.fixture(scope="module")
163+
def configure_bucketfs_protocol(bucketfs_protocol, secrets_module: Secrets):
164+
if bucketfs_protocol == BucketFSProtocol.HTTPS:
165+
secrets_module.save(CKey.bfs_encryption, "True")
166+
secrets_module.save(CKey.cert_vld, "False")
167+
secrets_module.save(CKey.bfs_port, "2581")
168+
169+
170+
@pytest.mark.dependency(name="deploy_cert_fails")
171+
def test_deploy_cert_fails(
172+
sample_slc: ScriptLanguageContainer,
173+
setup_itde_module,
174+
secrets_module,
175+
bucketfs_protocol,
176+
configure_bucketfs_protocol,
177+
):
178+
if bucketfs_protocol == BucketFSProtocol.HTTPS:
179+
secrets_module.save(CKey.cert_vld, "True")
180+
with pytest.raises(TaskRuntimeError):
181+
sample_slc.deploy()
182+
secrets_module.save(CKey.cert_vld, "False")
183+
184+
185+
@pytest.mark.dependency(name="deploy_slc", depends=["deploy_cert_fails"])
158186
def test_deploy(sample_slc: ScriptLanguageContainer, setup_itde_module):
159187
sample_slc.deploy()
160188
assert sample_slc.activation_key == expected_activation_key(sample_slc)

0 commit comments

Comments
 (0)