-
Notifications
You must be signed in to change notification settings - Fork 4.8k
/
Copy pathhelpers.lua
229 lines (196 loc) · 9.85 KB
/
helpers.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
------------------------------------------------------------------
-- Collection of utilities to help testing Kong features and plugins.
--
-- @copyright Copyright 2016-2022 Kong Inc. All rights reserved.
-- @license [Apache 2.0](https://opensource.org/licenses/Apache-2.0)
-- @module spec.helpers
local log = require("kong.cmd.utils.log")
local reload_module = require("spec.internal.module").reload
log.set_lvl(log.levels.quiet) -- disable stdout logs in tests
-- reload some modules when env or _G changes
local CONSTANTS = reload_module("spec.internal.constants")
local conf = reload_module("spec.internal.conf")
local shell = reload_module("spec.internal.shell")
local misc = reload_module("spec.internal.misc")
local DB = reload_module("spec.internal.db")
local grpc = reload_module("spec.internal.grpc")
local dns_mock = reload_module("spec.internal.dns")
local asserts = reload_module("spec.internal.asserts") -- luacheck: ignore
local pid = reload_module("spec.internal.pid")
local cmd = reload_module("spec.internal.cmd")
local server = reload_module("spec.internal.server")
local client = reload_module("spec.internal.client")
local wait = reload_module("spec.internal.wait")
----------------
-- Variables/constants
-- @section exported-fields
--- Below is a list of fields/constants exported on the `helpers` module table:
-- @table helpers
-- @field dir The [`pl.dir` module of Penlight](http://tieske.github.io/Penlight/libraries/pl.dir.html)
-- @field path The [`pl.path` module of Penlight](http://tieske.github.io/Penlight/libraries/pl.path.html)
-- @field file The [`pl.file` module of Penlight](http://tieske.github.io/Penlight/libraries/pl.file.html)
-- @field utils The [`pl.utils` module of Penlight](http://tieske.github.io/Penlight/libraries/pl.utils.html)
-- @field test_conf The Kong test configuration. See also `get_running_conf` which might be slightly different.
-- @field test_conf_path The configuration file in use.
-- @field mock_upstream_hostname
-- @field mock_upstream_protocol
-- @field mock_upstream_host
-- @field mock_upstream_port
-- @field mock_upstream_url Base url constructed from the components
-- @field mock_upstream_ssl_protocol
-- @field mock_upstream_ssl_host
-- @field mock_upstream_ssl_port
-- @field mock_upstream_ssl_url Base url constructed from the components
-- @field mock_upstream_stream_port
-- @field mock_upstream_stream_ssl_port
-- @field mock_grpc_upstream_proto_path
-- @field grpcbin_host The host for grpcbin service, it can be set by env KONG_SPEC_TEST_GRPCBIN_HOST.
-- @field grpcbin_port The port (SSL disabled) for grpcbin service, it can be set by env KONG_SPEC_TEST_GRPCBIN_PORT.
-- @field grpcbin_ssl_port The port (SSL enabled) for grpcbin service it can be set by env KONG_SPEC_TEST_GRPCBIN_SSL_PORT.
-- @field grpcbin_url The URL (SSL disabled) for grpcbin service
-- @field grpcbin_ssl_url The URL (SSL enabled) for grpcbin service
-- @field redis_host The host for Redis, it can be set by env KONG_SPEC_TEST_REDIS_HOST.
-- @field redis_port The port (SSL disabled) for Redis, it can be set by env KONG_SPEC_TEST_REDIS_PORT.
-- @field redis_ssl_port The port (SSL enabled) for Redis, it can be set by env KONG_SPEC_TEST_REDIS_SSL_PORT.
-- @field redis_ssl_sni The server name for Redis, it can be set by env KONG_SPEC_TEST_REDIS_SSL_SNI.
-- @field zipkin_host The host for Zipkin service, it can be set by env KONG_SPEC_TEST_ZIPKIN_HOST.
-- @field zipkin_port the port for Zipkin service, it can be set by env KONG_SPEC_TEST_ZIPKIN_PORT.
-- @field otelcol_host The host for OpenTelemetry Collector service, it can be set by env KONG_SPEC_TEST_OTELCOL_HOST.
-- @field otelcol_http_port the port for OpenTelemetry Collector service, it can be set by env KONG_SPEC_TEST_OTELCOL_HTTP_PORT.
-- @field old_version_kong_path the path for the old version kong source code, it can be set by env KONG_SPEC_TEST_OLD_VERSION_KONG_PATH.
-- @field otelcol_zpages_port the port for OpenTelemetry Collector Zpages service, it can be set by env KONG_SPEC_TEST_OTELCOL_ZPAGES_PORT.
-- @field otelcol_file_exporter_path the path of for OpenTelemetry Collector's file exporter, it can be set by env KONG_SPEC_TEST_OTELCOL_FILE_EXPORTER_PATH.
----------
-- Exposed
----------
-- @export
return {
-- Penlight
dir = require("pl.dir"),
path = require("pl.path"),
file = require("pl.file"),
utils = require("pl.utils"),
-- Kong testing properties
db = DB.db,
blueprints = DB.blueprints,
get_db_utils = DB.get_db_utils,
get_cache = DB.get_cache,
bootstrap_database = DB.bootstrap_database,
bin_path = CONSTANTS.BIN_PATH,
test_conf = conf,
test_conf_path = CONSTANTS.TEST_CONF_PATH,
external_plugins_path = CONSTANTS.EXTERNAL_PLUGINS_PATH,
mock_upstream_hostname = CONSTANTS.MOCK_UPSTREAM_HOSTNAME,
mock_upstream_protocol = CONSTANTS.MOCK_UPSTREAM_PROTOCOL,
mock_upstream_host = CONSTANTS.MOCK_UPSTREAM_HOST,
mock_upstream_port = CONSTANTS.MOCK_UPSTREAM_PORT,
mock_upstream_url = CONSTANTS.MOCK_UPSTREAM_PROTOCOL .. "://" ..
CONSTANTS.MOCK_UPSTREAM_HOST .. ':' ..
CONSTANTS.MOCK_UPSTREAM_PORT,
mock_upstream_ssl_protocol = CONSTANTS.MOCK_UPSTREAM_SSL_PROTOCOL,
mock_upstream_ssl_host = CONSTANTS.MOCK_UPSTREAM_HOST,
mock_upstream_ssl_port = CONSTANTS.MOCK_UPSTREAM_SSL_PORT,
mock_upstream_ssl_url = CONSTANTS.MOCK_UPSTREAM_SSL_PROTOCOL .. "://" ..
CONSTANTS.MOCK_UPSTREAM_HOST .. ':' ..
CONSTANTS.MOCK_UPSTREAM_SSL_PORT,
mock_upstream_stream_port = CONSTANTS.MOCK_UPSTREAM_STREAM_PORT,
mock_upstream_stream_ssl_port = CONSTANTS.MOCK_UPSTREAM_STREAM_SSL_PORT,
mock_grpc_upstream_proto_path = CONSTANTS.MOCK_GRPC_UPSTREAM_PROTO_PATH,
zipkin_host = CONSTANTS.ZIPKIN_HOST,
zipkin_port = CONSTANTS.ZIPKIN_PORT,
otelcol_host = CONSTANTS.OTELCOL_HOST,
otelcol_http_port = CONSTANTS.OTELCOL_HTTP_PORT,
otelcol_zpages_port = CONSTANTS.OTELCOL_ZPAGES_PORT,
otelcol_file_exporter_path = CONSTANTS.OTELCOL_FILE_EXPORTER_PATH,
grpcbin_host = CONSTANTS.GRPCBIN_HOST,
grpcbin_port = CONSTANTS.GRPCBIN_PORT,
grpcbin_ssl_port = CONSTANTS.GRPCBIN_SSL_PORT,
grpcbin_url = string.format("grpc://%s:%d", CONSTANTS.GRPCBIN_HOST, CONSTANTS.GRPCBIN_PORT),
grpcbin_ssl_url = string.format("grpcs://%s:%d", CONSTANTS.GRPCBIN_HOST, CONSTANTS.GRPCBIN_SSL_PORT),
redis_host = CONSTANTS.REDIS_HOST,
redis_port = CONSTANTS.REDIS_PORT,
redis_ssl_port = CONSTANTS.REDIS_SSL_PORT,
redis_ssl_sni = CONSTANTS.REDIS_SSL_SNI,
redis_auth_port = CONSTANTS.REDIS_AUTH_PORT,
blackhole_host = CONSTANTS.BLACKHOLE_HOST,
old_version_kong_path = CONSTANTS.OLD_VERSION_KONG_PATH,
-- Kong testing helpers
execute = shell.exec,
dns_mock = dns_mock,
kong_exec = shell.kong_exec,
get_version = cmd.get_version,
get_running_conf = cmd.get_running_conf,
http_client = client.http_client,
grpc_client = client.grpc_client,
http2_client = client.http2_client,
make_synchronized_clients = client.make_synchronized_clients,
wait_until = wait.wait_until,
pwait_until = wait.pwait_until,
wait_pid = pid.wait_pid,
wait_timer = wait.wait_timer,
wait_for_all_config_update = wait.wait_for_all_config_update,
wait_for_file = wait.wait_for_file,
wait_for_file_contents = wait.wait_for_file_contents,
tcp_server = server.tcp_server,
udp_server = server.udp_server,
kill_tcp_server = server.kill_tcp_server,
is_echo_server_ready = server.is_echo_server_ready,
echo_server_reset = server.echo_server_reset,
get_echo_server_received_data = server.get_echo_server_received_data,
http_mock = server.http_mock,
get_proxy_ip = client.get_proxy_ip,
get_proxy_port = client.get_proxy_port,
proxy_client = client.proxy_client,
proxy_client_grpc = client.proxy_client_grpc,
proxy_client_grpcs = client.proxy_client_grpcs,
proxy_client_h2c = client.proxy_client_h2c,
proxy_client_h2 = client.proxy_client_h2,
admin_client = client.admin_client,
admin_gui_client = client.admin_gui_client,
proxy_ssl_client = client.proxy_ssl_client,
admin_ssl_client = client.admin_ssl_client,
admin_gui_ssl_client = client.admin_gui_ssl_client,
prepare_prefix = cmd.prepare_prefix,
clean_prefix = cmd.clean_prefix,
clean_logfile = cmd.clean_logfile,
wait_for_invalidation = wait.wait_for_invalidation,
each_strategy = DB.each_strategy,
all_strategies = DB.all_strategies,
validate_plugin_config_schema = DB.validate_plugin_config_schema,
clustering_client = client.clustering_client,
https_server = require("spec.fixtures.https_server"),
stress_generator = require("spec.fixtures.stress_generator"),
-- miscellaneous
intercept = misc.intercept,
openresty_ver_num = misc.openresty_ver_num,
unindent = misc.unindent,
make_yaml_file = misc.make_yaml_file,
setenv = misc.setenv,
unsetenv = misc.unsetenv,
deep_sort = misc.deep_sort,
generate_keys = misc.generate_keys,
-- launching Kong subprocesses
start_kong = cmd.start_kong,
stop_kong = cmd.stop_kong,
cleanup_kong = cmd.cleanup_kong,
restart_kong = cmd.restart_kong,
reload_kong = wait.reload_kong,
get_kong_workers = wait.get_kong_workers,
wait_until_no_common_workers = wait.wait_until_no_common_workers,
start_grpc_target = grpc.start_grpc_target,
stop_grpc_target = grpc.stop_grpc_target,
get_grpc_target_port = grpc.get_grpc_target_port,
-- plugin compatibility test
use_old_plugin = misc.use_old_plugin,
-- Only use in CLI tests from spec/02-integration/01-cmd
kill_all = cmd.kill_all,
with_current_ws = misc.with_current_ws,
signal = cmd.signal,
-- send signal to all Nginx workers, not including the master
signal_workers = cmd.signal_workers,
-- returns the plugins and version list that is used by Hybrid mode tests
get_plugins_list = DB.clone_plugins_list,
get_available_port = wait.get_available_port,
make_temp_dir = misc.make_temp_dir,
build_go_plugins = cmd.build_go_plugins,
}