4
4
5
5
import logging
6
6
7
+ import juju
7
8
import pytest
8
9
from pytest_operator .plugin import OpsTest
9
10
from tenacity import Retrying , stop_after_attempt , wait_fixed
12
13
APP_NAME ,
13
14
CONFIG_OPTS ,
14
15
DEFAULT_NUM_UNITS ,
16
+ DEPLOY_MARKS ,
17
+ K8S_DB_MODEL_NAME ,
18
+ K8S_MARKS ,
15
19
KAFKA ,
16
20
KAFKA_CHANNEL ,
21
+ KAFKA_K8S ,
17
22
KRAFT_CONFIG ,
18
23
MODEL_CONFIG ,
19
24
SERIES ,
25
+ VM_MARKS ,
20
26
check_service ,
21
27
get_leader_unit_id ,
22
28
run_action ,
25
31
logger = logging .getLogger (__name__ )
26
32
27
33
28
- TLS_MARK = {
29
- (use_tls ): pytest .param (
30
- use_tls ,
31
- id = str (use_tls ),
32
- marks = [
33
- pytest .mark .group (str (use_tls )),
34
- ],
34
+ model_db = None
35
+
36
+
37
+ @pytest .mark .parametrize ("use_tls,cloud" , K8S_MARKS )
38
+ @pytest .mark .abort_on_fail
39
+ @pytest .mark .skip_if_deployed
40
+ async def test_build_and_deploy_k8s_only (
41
+ ops_test : OpsTest , microk8s , kafka_benchmark_charm , use_tls , cloud
42
+ ) -> None :
43
+ """Build and deploy with and without TLS on k8s."""
44
+ logging .info (f"Creating k8s model { K8S_DB_MODEL_NAME } " )
45
+ controller = juju .controller .Controller ()
46
+ await controller .connect ()
47
+ await controller .add_model (K8S_DB_MODEL_NAME , cloud_name = microk8s .cloud_name )
48
+
49
+ global model_db
50
+ model_db = juju .model .Model ()
51
+ await model_db .connect (model_name = K8S_DB_MODEL_NAME )
52
+
53
+ await ops_test .model .set_config (MODEL_CONFIG )
54
+ await ops_test .model .deploy (
55
+ kafka_benchmark_charm ,
56
+ num_units = DEFAULT_NUM_UNITS ,
57
+ series = SERIES ,
58
+ config = CONFIG_OPTS ,
59
+ )
60
+ await model_db .deploy (
61
+ KAFKA_K8S ,
62
+ channel = KAFKA_CHANNEL ,
63
+ config = KRAFT_CONFIG | {"expose_external" : "nodeport" },
64
+ num_units = DEFAULT_NUM_UNITS ,
65
+ series = SERIES ,
66
+ trust = True ,
67
+ )
68
+ await model_db .create_offer (
69
+ endpoint = "kafka-client" ,
70
+ offer_name = "kafka-client" ,
71
+ application_name = KAFKA_K8S ,
35
72
)
36
- for use_tls in [True , False ]
37
- }
38
- USE_TLS = list (TLS_MARK .values ())
73
+ await ops_test .model .consume (f"admin/{ model_db .name } .kafka-client" )
74
+ await ops_test .model .integrate ("kafka-client" , f"{ APP_NAME } :kafka" )
39
75
76
+ if use_tls :
77
+ await ops_test .model .deploy (
78
+ "self-signed-certificates" ,
79
+ num_units = 1 ,
80
+ series = SERIES ,
81
+ )
82
+ await ops_test .model .integrate (APP_NAME , "self-signed-certificates" )
40
83
41
- @pytest .mark .parametrize ("use_tls" , USE_TLS )
84
+ await ops_test .model .create_offer (
85
+ endpoint = "certificates" ,
86
+ offer_name = "certificates" ,
87
+ application_name = "self-signed-certificates" ,
88
+ )
89
+ await model_db .consume (f"admin/{ ops_test .model .name } .certificates" )
90
+ await model_db .integrate ("certificates" , f"{ KAFKA_K8S } :certificates" )
91
+
92
+ await ops_test .model .wait_for_idle (apps = [APP_NAME ], status = "waiting" , timeout = 2000 )
93
+ await model_db .wait_for_idle (apps = [KAFKA_K8S ], status = "active" , timeout = 2000 )
94
+
95
+ assert len (ops_test .model .applications [APP_NAME ].units ) == DEFAULT_NUM_UNITS
96
+ await controller .disconnect ()
97
+ await model_db .disconnect ()
98
+
99
+
100
+ @pytest .mark .parametrize ("use_tls,cloud" , VM_MARKS )
42
101
@pytest .mark .abort_on_fail
43
102
@pytest .mark .skip_if_deployed
44
- async def test_deploy (ops_test : OpsTest , kafka_benchmark_charm , use_tls ) -> None :
103
+ async def test_build_and_deploy_vm_only (
104
+ ops_test : OpsTest , kafka_benchmark_charm , use_tls , cloud
105
+ ) -> None :
45
106
"""Build and deploy with and without TLS."""
46
107
await ops_test .model .set_config (MODEL_CONFIG )
47
108
@@ -73,10 +134,14 @@ async def test_deploy(ops_test: OpsTest, kafka_benchmark_charm, use_tls) -> None
73
134
74
135
assert len (ops_test .model .applications [APP_NAME ].units ) == DEFAULT_NUM_UNITS
75
136
137
+ # set the model to the global model_db
138
+ global model_db
139
+ model_db = ops_test .model
140
+
76
141
77
- @pytest .mark .parametrize ("use_tls" , USE_TLS )
142
+ @pytest .mark .parametrize ("use_tls,cloud " , DEPLOY_MARKS )
78
143
@pytest .mark .abort_on_fail
79
- async def test_prepare (ops_test : OpsTest , use_tls ) -> None :
144
+ async def test_prepare (ops_test : OpsTest , use_tls , cloud ) -> None :
80
145
"""Test prepare action."""
81
146
leader_id = await get_leader_unit_id (ops_test )
82
147
@@ -93,9 +158,9 @@ async def test_prepare(ops_test: OpsTest, use_tls) -> None:
93
158
)
94
159
95
160
96
- @pytest .mark .parametrize ("use_tls" , USE_TLS )
161
+ @pytest .mark .parametrize ("use_tls,cloud " , DEPLOY_MARKS )
97
162
@pytest .mark .abort_on_fail
98
- async def test_run (ops_test : OpsTest , use_tls ) -> None :
163
+ async def test_run (ops_test : OpsTest , use_tls , cloud ) -> None :
99
164
"""Test run action."""
100
165
leader_id = await get_leader_unit_id (ops_test )
101
166
@@ -111,9 +176,9 @@ async def test_run(ops_test: OpsTest, use_tls) -> None:
111
176
assert check_service ("dpe_benchmark" , unit_id = leader_id )
112
177
113
178
114
- @pytest .mark .parametrize ("use_tls" , USE_TLS )
179
+ @pytest .mark .parametrize ("use_tls,cloud " , DEPLOY_MARKS )
115
180
@pytest .mark .abort_on_fail
116
- async def test_stop (ops_test : OpsTest , use_tls ) -> None :
181
+ async def test_stop (ops_test : OpsTest , use_tls , cloud ) -> None :
117
182
"""Test stop action."""
118
183
leader_id = await get_leader_unit_id (ops_test )
119
184
@@ -129,9 +194,9 @@ async def test_stop(ops_test: OpsTest, use_tls) -> None:
129
194
assert not check_service ("dpe_benchmark" , unit_id = leader_id )
130
195
131
196
132
- @pytest .mark .parametrize ("use_tls" , USE_TLS )
197
+ @pytest .mark .parametrize ("use_tls,cloud " , DEPLOY_MARKS )
133
198
@pytest .mark .abort_on_fail
134
- async def test_restart (ops_test : OpsTest , use_tls ) -> None :
199
+ async def test_restart (ops_test : OpsTest , use_tls , cloud ) -> None :
135
200
"""Test stop and restart the benchmark."""
136
201
leader_id = await get_leader_unit_id (ops_test )
137
202
@@ -147,9 +212,9 @@ async def test_restart(ops_test: OpsTest, use_tls) -> None:
147
212
assert check_service ("dpe_benchmark" , unit_id = leader_id )
148
213
149
214
150
- @pytest .mark .parametrize ("use_tls" , USE_TLS )
215
+ @pytest .mark .parametrize ("use_tls,cloud " , DEPLOY_MARKS )
151
216
@pytest .mark .abort_on_fail
152
- async def test_clean (ops_test : OpsTest , use_tls ) -> None :
217
+ async def test_clean (ops_test : OpsTest , use_tls , cloud ) -> None :
153
218
"""Test cleanup action."""
154
219
leader_id = await get_leader_unit_id (ops_test )
155
220
0 commit comments