Skip to content

Commit 08152bb

Browse files
reusable-robot
Summary: - Robot components configurable and reusable. - Fit for sharing across `stackql` estate.
1 parent 209f98f commit 08152bb

File tree

3 files changed

+135
-69
lines changed

3 files changed

+135
-69
lines changed

test/robot/functional/stackql.resource

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ ${IS_WSL} false # to be overridden from command l
66
${SHOULD_RUN_DOCKER_EXTERNAL_TESTS} false # to be overridden from command line, with string "true"
77
${CONCURRENCY_LIMIT} 1 # to be overridden from command line, with integer value, -1 for no limit
88
${USE_STACKQL_PREINSTALLED} false # to be overridden from command line, with string "true"
9+
${SUNDRY_CONFIG} {} # to be overridden from command line, with string value
910

1011
*** Settings ***
1112
Library Process
1213
Library OperatingSystem
1314
Variables ${LOCAL_LIB_HOME}/stackql_context.py ${EXECUTION_PLATFORM} ${SQL_BACKEND} ${USE_STACKQL_PREINSTALLED}
15+
... ${SUNDRY_CONFIG}
1416
Library Process
1517
Library OperatingSystem
1618
Library String
@@ -21,18 +23,20 @@ Library ${LOCAL_LIB_HOME}/web_service_keywords.py
2123
*** Keywords ***
2224

2325
Start All Mock Servers
24-
Create OAuth2 Client Credentials Web Service ${MOCKSERVER_PORT_OAUTH_CLIENT_CREDENTIALS_TOKEN}
25-
Create Github Web Service ${MOCKSERVER_PORT_GITHUB}
26-
Create GCP Web Service ${MOCKSERVER_PORT_GOOGLE}
27-
Create Okta Web Service ${MOCKSERVER_PORT_OKTA}
28-
Create AWS Web Service ${MOCKSERVER_PORT_AWS}
29-
Create Static Auth Web Service ${MOCKSERVER_PORT_STACKQL_AUTH_TESTING}
30-
Create Google Admin Web Service ${MOCKSERVER_PORT_GOOGLEADMIN}
31-
Create K8S Web Service ${MOCKSERVER_PORT_K8S}
32-
Create Registry Web Service ${MOCKSERVER_PORT_REGISTRY}
33-
Create Azure Web Service ${MOCKSERVER_PORT_AZURE}
34-
Create Sumologic Web Service ${MOCKSERVER_PORT_SUMOLOGIC}
35-
Create Digitalocean Web Service ${MOCKSERVER_PORT_DIGITALOCEAN}
26+
${port_dict} = Create Dictionary
27+
... oauth_client_credentials_token=${MOCKSERVER_PORT_OAUTH_CLIENT_CREDENTIALS_TOKEN}
28+
... github=${MOCKSERVER_PORT_GITHUB}
29+
... google=${MOCKSERVER_PORT_GOOGLE}
30+
... okta=${MOCKSERVER_PORT_OKTA}
31+
... aws=${MOCKSERVER_PORT_AWS}
32+
... stackql_auth_testing=${MOCKSERVER_PORT_STACKQL_AUTH_TESTING}
33+
... googleadmin=${MOCKSERVER_PORT_GOOGLEADMIN}
34+
... k8s=${MOCKSERVER_PORT_K8S}
35+
... registry=${MOCKSERVER_PORT_REGISTRY}
36+
... azure=${MOCKSERVER_PORT_AZURE}
37+
... sumologic=${MOCKSERVER_PORT_SUMOLOGIC}
38+
... digitalocean=${MOCKSERVER_PORT_DIGITALOCEAN}
39+
Start All Webservers port_dict=${port_dict}
3640

3741

3842
Prepare StackQL Environment

test/robot/lib/stackql_context.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import typing
66
import copy
77

8+
from typing import Optional
9+
810
from typed_python_responses import SELECT_AWS_CLOUD_CONTROL_EVENTS_MINIMAL_EXPECTED
911

1012
_exe_name = 'stackql'
@@ -154,14 +156,21 @@ def get_registry_mocked(execution_env :str) -> RegistryCfg:
154156
'',
155157
is_null_registry=True
156158
)
157-
_REGISTRY_CANONICAL_NO_VERIFY = RegistryCfg(
158-
get_unix_path(os.path.join('test', 'registry')),
159-
nop_verify=True
160-
)
161-
_REGISTRY_NO_VERIFY = RegistryCfg(
162-
get_unix_path(os.path.join('test', 'registry-mocked')),
163-
nop_verify=True
164-
)
159+
160+
def _get_registry_canonical_no_verify(registry_path: Optional[str] = None) -> RegistryCfg:
161+
_registry_path = registry_path if registry_path else os.path.join('test', 'registry')
162+
return RegistryCfg(
163+
get_unix_path(_registry_path),
164+
nop_verify=True
165+
)
166+
167+
def _get_registry_no_verify(registry_path: Optional[str] = None) -> RegistryCfg:
168+
_registry_path = registry_path if registry_path else os.path.join('test', 'registry-mocked')
169+
return RegistryCfg(
170+
get_unix_path(_registry_path),
171+
nop_verify=True
172+
)
173+
165174
_REGISTRY_EXPERIMENTAL_NO_VERIFY = RegistryCfg(
166175
get_unix_path(os.path.join('test', 'registry-advanced')),
167176
nop_verify=True
@@ -180,10 +189,6 @@ def get_registry_mocked(execution_env :str) -> RegistryCfg:
180189
src_prefix="registry-verb-matching-src-docker",
181190
nop_verify=True
182191
)
183-
_REGISTRY_CANONICAL = RegistryCfg(
184-
get_unix_path(os.path.join('test', 'registry')),
185-
nop_verify=True
186-
)
187192
_REGISTRY_DEPRECATED = RegistryCfg(
188193
get_unix_path(os.path.join('test', 'registry-deprecated')),
189194
nop_verify=True
@@ -888,7 +893,14 @@ def get_db_setup_src(sql_backend_str :str) -> str:
888893

889894

890895

891-
def get_variables(execution_env :str, sql_backend_str :str, use_stackql_preinstalled :str) -> dict:
896+
def get_variables(
897+
execution_env :str,
898+
sql_backend_str :str,
899+
use_stackql_preinstalled :str,
900+
sundry_config: str # a json string with arbitrary config
901+
) -> dict:
902+
print(f'sundry_config: "{sundry_config}"')
903+
_sundry_config = json.loads(sundry_config) if sundry_config else {}
892904
must_use_stackql_preinstalled :bool = use_stackql_preinstalled.lower() == 'true'
893905
NATIVEQUERY_OKTA_APPS_ROW_COUNT_DISCO_ID_ONE = get_native_query_row_count_from_table('okta.application.apps.Application.generation_1', sql_backend_str)
894906
NATIVEQUERY_OKTA_APPS_ROW_COUNT_DISCO_ID_THREE = get_native_query_row_count_from_table('okta.application.apps.Application.generation_3', sql_backend_str)
@@ -944,13 +956,13 @@ def get_variables(execution_env :str, sql_backend_str :str, use_stackql_preinsta
944956
'PSQL_EXE': PSQL_EXE,
945957
'SQLITE_EXE': SQLITE_EXE,
946958
'EXPORT_SQLITE_FILE_PATH': get_sqlite_export_db_path(execution_env),
947-
'REGISTRY_ROOT_CANONICAL': _REGISTRY_CANONICAL,
959+
'REGISTRY_ROOT_CANONICAL': _get_registry_canonical_no_verify(_sundry_config.get('registry_path_canonical')),
948960
'REGISTRY_ROOT_DEPRECATED': _REGISTRY_DEPRECATED,
949-
'REGISTRY_CANONICAL_CFG_STR': _REGISTRY_CANONICAL,
950-
'REGISTRY_CANONICAL_NO_VERIFY_CFG_STR': _REGISTRY_CANONICAL_NO_VERIFY,
961+
'REGISTRY_CANONICAL_CFG_STR': _get_registry_canonical_no_verify(_sundry_config.get('registry_path_canonical')),
962+
'REGISTRY_NO_VERIFY_CFG_STR': _get_registry_no_verify(_sundry_config.get('registry_path_canonical')),
951963
'REGISTRY_DEPRECATED_CFG_STR': _REGISTRY_DEPRECATED,
952964
'REGISTRY_MOCKED_CFG_STR': get_registry_mocked(execution_env),
953-
'REGISTRY_NO_VERIFY_CFG_STR': _REGISTRY_NO_VERIFY,
965+
'REGISTRY_NO_VERIFY_CFG_STR': _get_registry_no_verify(_sundry_config.get('registry_path')),
954966
'REGISTRY_NULL': _REGISTRY_NULL,
955967
'REPOSITORY_ROOT': REPOSITORY_ROOT,
956968
'SQL_BACKEND_CFG_STR_ANALYTICS': get_analytics_sql_backend(execution_env, sql_backend_str),

test/robot/lib/web_service_keywords.py

Lines changed: 90 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,65 @@
88

99
import os
1010

11-
from typing import Union, Tuple, List
11+
from typing import Union, Tuple, List, Optional
1212

1313
@library
1414
class web_service_keywords(Process):
1515

1616
_DEFAULT_SQLITE_DB_PATH: str = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "tmp", "robot_cli_affirmation_store.db"))
1717

18+
_DEFAULT_APP_ROOT: str = 'test/python/flask'
19+
20+
_DEFAULT_LOG_ROOT: str = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log'))
21+
22+
_DEFAULT_TLS_KEY_PATH: str = 'test/server/mtls/credentials/pg_server_key.pem'
23+
24+
_DEFAULT_TLS_CERT_PATH: str = 'test/server/mtls/credentials/pg_server_cert.pem'
25+
26+
_DEFAULT_MOCKSERVER_PORT_GOOGLE = 1080
27+
_DEFAULT_MOCKSERVER_PORT_GOOGLEADMIN = 1098
28+
_DEFAULT_MOCKSERVER_PORT_STACKQL_AUTH_TESTING = 1170
29+
_DEFAULT_MOCKSERVER_PORT_OKTA = 1090
30+
_DEFAULT_MOCKSERVER_PORT_AWS = 1091
31+
_DEFAULT_MOCKSERVER_PORT_K8S = 1092
32+
_DEFAULT_MOCKSERVER_PORT_GITHUB = 1093
33+
_DEFAULT_MOCKSERVER_PORT_AZURE = 1095
34+
_DEFAULT_MOCKSERVER_PORT_SUMOLOGIC = 1096
35+
_DEFAULT_MOCKSERVER_PORT_DIGITALOCEAN = 1097
36+
_DEFAULT_MOCKSERVER_PORT_OAUTH_CLIENT_CREDENTIALS_TOKEN = 2091
37+
_DEFAULT_MOCKSERVER_PORT_REGISTRY = 1094
38+
1839
def _get_dsn(self) -> str:
1940
return self._DEFAULT_SQLITE_DB_PATH
2041

21-
def __init__(self):
42+
def __init__(
43+
self,
44+
log_root: Optional[str] = None,
45+
app_root: Optional[str] = None,
46+
tls_key_path: Optional[str] = None,
47+
tls_cert_path: Optional[str] = None
48+
):
49+
_app_root: str = app_root if app_root else self._DEFAULT_APP_ROOT
50+
51+
self._log_root: str = log_root if log_root else self._DEFAULT_LOG_ROOT
52+
2253
self._affirmation_store_web_service = None
23-
self._web_server_app: str = 'test/python/flask/oauth2/token_srv'
24-
self._github_app: str = 'test/python/flask/github/app'
25-
self._gcp_app: str = 'test/python/flask/gcp/app'
26-
self._okta_app: str = 'test/python/flask/okta/app'
27-
self._static_auth_testing_app: str = 'test/python/flask/static_auth/app'
28-
self._aws_app: str = 'test/python/flask/aws/app'
29-
self._azure_app: str = 'test/python/flask/azure/app'
30-
self._digitalocean_app: str = 'test/python/flask/digitalocean/app'
31-
self._googleadmin_app: str = 'test/python/flask/googleadmin/app'
32-
self._k8s_app: str = 'test/python/flask/k8s/app'
33-
self._registry_app: str = 'test/python/flask/registry/app'
34-
self._sumologic_app: str = 'test/python/flask/sumologic/app'
35-
self._tls_key_path: str = 'test/server/mtls/credentials/pg_server_key.pem'
36-
self._tls_cert_path: str = 'test/server/mtls/credentials/pg_server_cert.pem'
54+
55+
self._web_server_app: str = f'{_app_root}/oauth2/token_srv'
56+
self._github_app: str = f'{_app_root}/github/app'
57+
self._gcp_app: str = f'{_app_root}/gcp/app'
58+
self._okta_app: str = f'{_app_root}/okta/app'
59+
self._static_auth_testing_app: str = f'{_app_root}/static_auth/app'
60+
self._aws_app: str = f'{_app_root}/aws/app'
61+
self._azure_app: str = f'{_app_root}/azure/app'
62+
self._digitalocean_app: str = f'{_app_root}/digitalocean/app'
63+
self._googleadmin_app: str = f'{_app_root}/googleadmin/app'
64+
self._k8s_app: str = f'{_app_root}/k8s/app'
65+
self._registry_app: str = f'{_app_root}/registry/app'
66+
self._sumologic_app: str = f'{_app_root}/sumologic/app'
67+
68+
self._tls_key_path: str = tls_key_path if tls_key_path else self._DEFAULT_TLS_KEY_PATH
69+
self._tls_cert_path: str = tls_cert_path if tls_cert_path else self._DEFAULT_TLS_CERT_PATH
3770
super().__init__()
3871

3972
@keyword
@@ -51,8 +84,8 @@ def create_oauth2_client_credentials_web_service(
5184
'run',
5285
f'--host={host}', # generally, `0.0.0.0`; otherwise, invisible on `docker.host.internal` etc
5386
f'--port={port}',
54-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'token-client-credentials-{port}-stdout.txt')),
55-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'token-client-credentials-{port}-stderr.txt'))
87+
stdout=os.path.abspath(os.path.join(self._log_root, f'token-client-credentials-{port}-stdout.txt')),
88+
stderr=os.path.abspath(os.path.join(self._log_root, f'token-client-credentials-{port}-stderr.txt'))
5689
)
5790

5891
@keyword
@@ -72,8 +105,8 @@ def create_github_web_service(
72105
f'--port={port}',
73106
f'--cert={self._tls_cert_path}',
74107
f'--key={self._tls_key_path}',
75-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'github-server-{port}-stdout.txt')),
76-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'github-server-{port}-stderr.txt'))
108+
stdout=os.path.abspath(os.path.join(self._log_root, f'github-server-{port}-stdout.txt')),
109+
stderr=os.path.abspath(os.path.join(self._log_root, f'github-server-{port}-stderr.txt'))
77110
)
78111

79112
@keyword
@@ -93,8 +126,8 @@ def create_gcp_web_service(
93126
f'--port={port}',
94127
f'--cert={self._tls_cert_path}',
95128
f'--key={self._tls_key_path}',
96-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'gcp-server-{port}-stdout.txt')),
97-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'gcp-server-{port}-stderr.txt'))
129+
stdout=os.path.abspath(os.path.join(self._log_root, f'gcp-server-{port}-stdout.txt')),
130+
stderr=os.path.abspath(os.path.join(self._log_root, f'gcp-server-{port}-stderr.txt'))
98131
)
99132

100133
@keyword
@@ -114,8 +147,8 @@ def create_okta_web_service(
114147
f'--port={port}',
115148
f'--cert={self._tls_cert_path}',
116149
f'--key={self._tls_key_path}',
117-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'okta-server-{port}-stdout.txt')),
118-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'okta-server-{port}-stderr.txt'))
150+
stdout=os.path.abspath(os.path.join(self._log_root, f'okta-server-{port}-stdout.txt')),
151+
stderr=os.path.abspath(os.path.join(self._log_root, f'okta-server-{port}-stderr.txt'))
119152
)
120153

121154
@keyword
@@ -135,8 +168,8 @@ def create_aws_web_service(
135168
f'--port={port}',
136169
f'--cert={self._tls_cert_path}',
137170
f'--key={self._tls_key_path}',
138-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'aws-server-{port}-stdout.txt')),
139-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'aws-server-{port}-stderr.txt'))
171+
stdout=os.path.abspath(os.path.join(self._log_root, f'aws-server-{port}-stdout.txt')),
172+
stderr=os.path.abspath(os.path.join(self._log_root, f'aws-server-{port}-stderr.txt'))
140173
)
141174

142175
@keyword
@@ -156,8 +189,8 @@ def create_static_auth_web_service(
156189
f'--port={port}',
157190
f'--cert={self._tls_cert_path}',
158191
f'--key={self._tls_key_path}',
159-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'static-auth-server-{port}-stdout.txt')),
160-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'static-auth-server-{port}-stderr.txt'))
192+
stdout=os.path.abspath(os.path.join(self._log_root, f'static-auth-server-{port}-stdout.txt')),
193+
stderr=os.path.abspath(os.path.join(self._log_root, f'static-auth-server-{port}-stderr.txt'))
161194
)
162195

163196
@keyword
@@ -177,8 +210,8 @@ def create_google_admin_web_service(
177210
f'--port={port}',
178211
f'--cert={self._tls_cert_path}',
179212
f'--key={self._tls_key_path}',
180-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'google-admin-server-{port}-stdout.txt')),
181-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'google-admin-server-{port}-stderr.txt'))
213+
stdout=os.path.abspath(os.path.join(self._log_root, f'google-admin-server-{port}-stdout.txt')),
214+
stderr=os.path.abspath(os.path.join(self._log_root, f'google-admin-server-{port}-stderr.txt'))
182215
)
183216

184217
@keyword
@@ -198,8 +231,8 @@ def create_k8s_web_service(
198231
f'--port={port}',
199232
f'--cert={self._tls_cert_path}',
200233
f'--key={self._tls_key_path}',
201-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'k8s-server-{port}-stdout.txt')),
202-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'k8s-server-{port}-stderr.txt'))
234+
stdout=os.path.abspath(os.path.join(self._log_root, f'k8s-server-{port}-stdout.txt')),
235+
stderr=os.path.abspath(os.path.join(self._log_root, f'k8s-server-{port}-stderr.txt'))
203236
)
204237

205238
@keyword
@@ -219,8 +252,8 @@ def create_registry_web_service(
219252
f'--port={port}',
220253
# f'--cert={self._tls_cert_path}',
221254
# f'--key={self._tls_key_path}',
222-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'registry-server-{port}-stdout.txt')),
223-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'registry-server-{port}-stderr.txt'))
255+
stdout=os.path.abspath(os.path.join(self._log_root, f'registry-server-{port}-stdout.txt')),
256+
stderr=os.path.abspath(os.path.join(self._log_root, f'registry-server-{port}-stderr.txt'))
224257
)
225258

226259
@keyword
@@ -240,8 +273,8 @@ def create_azure_web_service(
240273
f'--port={port}',
241274
f'--cert={self._tls_cert_path}',
242275
f'--key={self._tls_key_path}',
243-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'azure-server-{port}-stdout.txt')),
244-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'azure-server-{port}-stderr.txt'))
276+
stdout=os.path.abspath(os.path.join(self._log_root, f'azure-server-{port}-stdout.txt')),
277+
stderr=os.path.abspath(os.path.join(self._log_root, f'azure-server-{port}-stderr.txt'))
245278
)
246279

247280
@keyword
@@ -261,8 +294,8 @@ def create_sumologic_web_service(
261294
f'--port={port}',
262295
f'--cert={self._tls_cert_path}',
263296
f'--key={self._tls_key_path}',
264-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'sumologic-server-{port}-stdout.txt')),
265-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'sumologic-server-{port}-stderr.txt'))
297+
stdout=os.path.abspath(os.path.join(self._log_root, f'sumologic-server-{port}-stdout.txt')),
298+
stderr=os.path.abspath(os.path.join(self._log_root, f'sumologic-server-{port}-stderr.txt'))
266299
)
267300

268301
@keyword
@@ -282,9 +315,26 @@ def create_digitalocean_web_service(
282315
f'--port={port}',
283316
f'--cert={self._tls_cert_path}',
284317
f'--key={self._tls_key_path}',
285-
stdout=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'digitalocean-server-{port}-stdout.txt')),
286-
stderr=os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'log', f'digitalocean-server-{port}-stderr.txt'))
318+
stdout=os.path.abspath(os.path.join(self._log_root, f'digitalocean-server-{port}-stdout.txt')),
319+
stderr=os.path.abspath(os.path.join(self._log_root, f'digitalocean-server-{port}-stderr.txt'))
287320
)
321+
322+
@keyword
323+
def start_all_webservers(self, port_dict: Optional[dict] = None) -> None:
324+
_port_dict: dict = port_dict if port_dict else {}
325+
326+
self.create_digitalocean_web_service(_port_dict.get('digitalocean', self._DEFAULT_MOCKSERVER_PORT_DIGITALOCEAN))
327+
self.create_sumologic_web_service(_port_dict.get('sumologic', self._DEFAULT_MOCKSERVER_PORT_SUMOLOGIC))
328+
self.create_registry_web_service(_port_dict.get('registry', self._DEFAULT_MOCKSERVER_PORT_REGISTRY))
329+
self.create_k8s_web_service(_port_dict.get('k8s', self._DEFAULT_MOCKSERVER_PORT_K8S))
330+
self.create_google_admin_web_service(_port_dict.get('googleadmin', self._DEFAULT_MOCKSERVER_PORT_GOOGLEADMIN))
331+
self.create_azure_web_service(_port_dict.get('azure', self._DEFAULT_MOCKSERVER_PORT_AZURE))
332+
self.create_aws_web_service(_port_dict.get('aws', self._DEFAULT_MOCKSERVER_PORT_AWS))
333+
self.create_static_auth_web_service(_port_dict.get('static_auth_testing', self._DEFAULT_MOCKSERVER_PORT_STACKQL_AUTH_TESTING))
334+
self.create_okta_web_service(_port_dict.get('okta', self._DEFAULT_MOCKSERVER_PORT_OKTA))
335+
self.create_gcp_web_service(_port_dict.get('gcp', self._DEFAULT_MOCKSERVER_PORT_GOOGLE))
336+
self.create_github_web_service(_port_dict.get('github', self._DEFAULT_MOCKSERVER_PORT_GITHUB))
337+
self.create_oauth2_client_credentials_web_service(_port_dict.get('oauth_client_credentials_token', self._DEFAULT_MOCKSERVER_PORT_OAUTH_CLIENT_CREDENTIALS_TOKEN))
288338

289339
@keyword
290340
def send_get_request(

0 commit comments

Comments
 (0)