SIENTIAPDE-1973: Implement per-connector OPC client certificates and remove legacy read engine. This update overhauls certificate management, transitioning from a single platform certificate to individual client certificates defined in the slot configuration. The CertProvider now downloads certificates from MinIO based on certificate_id, applying dynamic security policies (mode, policy) from the slot. The legacy READ_ENGINE=legacy option and OpcManager have been entirely removed, standardizing on the ServerReader with strict slot v2 enforcement. Write command resolution (ServerConfigResolver) now consistently uses connectors joined with opc_certificates. The CERT_BUCKET environment variable is no longer used.
84 lines
2.1 KiB
Python
84 lines
2.1 KiB
Python
import pytest
|
|
|
|
from ingestor.config import GatewayConfig
|
|
|
|
_ENV_VARS = (
|
|
'NATS_URL',
|
|
'NATS_WRITE_SUBJECT',
|
|
'NATS_QUEUE',
|
|
'GRPC_ENABLED',
|
|
'GRPC_PORT',
|
|
'CERT_CACHE_DIR',
|
|
'WRITE_TIMESTAMP',
|
|
'WRITE_QUALITY',
|
|
'WRITE_MIN_PAUSE_S',
|
|
'IDLE_CONN_MAX_S',
|
|
)
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def clean_env(monkeypatch):
|
|
for var in _ENV_VARS:
|
|
monkeypatch.delenv(var, raising=False)
|
|
|
|
|
|
def test_from_env_defaults():
|
|
cfg = GatewayConfig.from_env()
|
|
|
|
assert cfg.nats_url == 'nats://localhost:4222'
|
|
assert cfg.nats_write_subject == 'opc.write'
|
|
assert cfg.nats_queue == 'gateway-writers'
|
|
assert cfg.grpc_enabled is False
|
|
assert cfg.grpc_port == 50051
|
|
assert cfg.cert_cache_dir == '/tmp/opc-certs' # noqa: S108
|
|
assert cfg.write_timestamp is True
|
|
assert cfg.write_quality is True
|
|
assert cfg.write_min_pause_s == 0.0
|
|
assert cfg.idle_conn_max_s == 300.0
|
|
|
|
|
|
def test_from_env_overrides(monkeypatch):
|
|
monkeypatch.setenv('GRPC_ENABLED', 'true')
|
|
monkeypatch.setenv('GRPC_PORT', '6000')
|
|
monkeypatch.setenv('WRITE_MIN_PAUSE_S', '0.5')
|
|
monkeypatch.setenv('WRITE_QUALITY', 'false')
|
|
|
|
cfg = GatewayConfig.from_env()
|
|
|
|
assert cfg.grpc_enabled is True
|
|
assert cfg.grpc_port == 6000
|
|
assert cfg.write_min_pause_s == 0.5
|
|
assert cfg.write_quality is False
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
'value,expected',
|
|
[
|
|
('0', False),
|
|
('no', False),
|
|
('FALSE', False),
|
|
('1', True),
|
|
('YES', True),
|
|
],
|
|
)
|
|
def test_bool_parsing_edge_cases(monkeypatch, value, expected):
|
|
monkeypatch.setenv('GRPC_ENABLED', value)
|
|
|
|
cfg = GatewayConfig.from_env()
|
|
|
|
assert cfg.grpc_enabled is expected
|
|
|
|
|
|
def test_certs_from_env_ignores_malformed_numeric_vars(monkeypatch):
|
|
import pytest
|
|
|
|
monkeypatch.setenv('GRPC_PORT', '')
|
|
monkeypatch.setenv('IDLE_CONN_MAX_S', 'abc')
|
|
monkeypatch.setenv('CERT_CACHE_DIR', 'certs-cache')
|
|
|
|
cfg = GatewayConfig.certs_from_env()
|
|
|
|
assert cfg.cert_cache_dir == 'certs-cache'
|
|
with pytest.raises(ValueError):
|
|
GatewayConfig.from_env() # the full config still fails, only the runtime uses it
|