Added `tests` support and some implmentations test for `Http` plugin
This commit is contained in:
parent
114b8e07cf
commit
aead44cefa
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export BASE="http://conductorserver:8080"
|
||||||
|
|
||||||
|
echo 'Waiting for Conductor ...'
|
||||||
|
|
||||||
|
while [[ "$(curl -s -o /dev/null -L -w ''%{http_code}'' $BASE/health)" != 200 ]]; do
|
||||||
|
echo 'still waiting ...'
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
|
||||||
|
echo 'Starting default workers...'
|
||||||
|
|
||||||
|
python3 PyExec.py Http Shell Eval Mail
|
|
@ -0,0 +1,21 @@
|
||||||
|
[loggers]
|
||||||
|
keys=root
|
||||||
|
|
||||||
|
[handlers]
|
||||||
|
keys=consoleHandler
|
||||||
|
|
||||||
|
[formatters]
|
||||||
|
keys=simpleFormatter
|
||||||
|
|
||||||
|
[logger_root]
|
||||||
|
level=DEBUG
|
||||||
|
handlers=consoleHandler
|
||||||
|
|
||||||
|
[handler_consoleHandler]
|
||||||
|
class=StreamHandler
|
||||||
|
level=DEBUG
|
||||||
|
formatter=simpleFormatter
|
||||||
|
args=(sys.stdout,)
|
||||||
|
|
||||||
|
[formatter_simpleFormatter]
|
||||||
|
format=%(asctime)s - %(name)12.12s - %(levelname)-5.5s - %(message)s
|
|
@ -0,0 +1,102 @@
|
||||||
|
import pytest
|
||||||
|
import requests
|
||||||
|
import time
|
||||||
|
import importlib
|
||||||
|
import logging
|
||||||
|
import logging.config
|
||||||
|
from pytest_httpserver import HTTPServer
|
||||||
|
|
||||||
|
from pyexecplugins.pyexecplugins import PyExecPlugin
|
||||||
|
|
||||||
|
logging.config.fileConfig('tests/logging-test.conf')
|
||||||
|
pluginstotest = ("Http", "Shell", "Eval", "Mail")
|
||||||
|
for plg in pluginstotest:
|
||||||
|
path = "pyexecplugins." + plg
|
||||||
|
importlib.import_module(path)
|
||||||
|
|
||||||
|
logger = logging.getLogger("test")
|
||||||
|
logger.info("All available plugins are: %s", PyExecPlugin.getPluginNames())
|
||||||
|
|
||||||
|
def sleeping5(request):
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
def sleeping15(request):
|
||||||
|
time.sleep(15)
|
||||||
|
|
||||||
|
def test_data(httpserver):
|
||||||
|
uri = "/postdata"
|
||||||
|
data = {
|
||||||
|
"method" : "post",
|
||||||
|
"url" : httpserver.url_for(uri),
|
||||||
|
"headers" : {
|
||||||
|
"Authorization" : "Bearer 9392j9fn9392",
|
||||||
|
"Content-Type" : "application/json"
|
||||||
|
},
|
||||||
|
"body" : {"foo": "bar"},
|
||||||
|
"params" : "gino=stilla",
|
||||||
|
"expect" : 201,
|
||||||
|
"fail" : None,
|
||||||
|
"connection-timeout" : 1,
|
||||||
|
"read-timeout" : 1,
|
||||||
|
"no-timeout" : "false",
|
||||||
|
}
|
||||||
|
httpserver.expect_request(uri=uri, headers=data["headers"], json=data["body"]).respond_with_data("Created", status=data["expect"])
|
||||||
|
http_plugin = PyExecPlugin.get("Http")(data, None)
|
||||||
|
out = http_plugin.execute()
|
||||||
|
assert out["status"] == 201
|
||||||
|
assert out["body"] == "Created"
|
||||||
|
|
||||||
|
def test_params(httpserver):
|
||||||
|
uri = "/params"
|
||||||
|
data = {
|
||||||
|
"method" : "get",
|
||||||
|
"url" : httpserver.url_for(uri),
|
||||||
|
"headers" : {
|
||||||
|
"Authorization" : "Bearer 9392j9fn9392"
|
||||||
|
},
|
||||||
|
"params" : "gino=stilla",
|
||||||
|
"expect" : 200,
|
||||||
|
"fail" : None,
|
||||||
|
"connection-timeout" : 1,
|
||||||
|
"read-timeout" : 1,
|
||||||
|
"no-timeout" : "false",
|
||||||
|
}
|
||||||
|
httpserver.expect_request(uri=uri, headers=data["headers"], query_string=data["params"]).respond_with_data("OK")
|
||||||
|
http_plugin = PyExecPlugin.get("Http")(data, None)
|
||||||
|
out = http_plugin.execute()
|
||||||
|
assert out["status"] == 200
|
||||||
|
assert out["body"] == "OK"
|
||||||
|
|
||||||
|
def test_timeout(httpserver):
|
||||||
|
uri = "/timeout"
|
||||||
|
data = {
|
||||||
|
"method" : "get",
|
||||||
|
"url" : httpserver.url_for(uri),
|
||||||
|
"read-timeout" : 3
|
||||||
|
}
|
||||||
|
httpserver.expect_request(uri).respond_with_handler(sleeping5)
|
||||||
|
http_plugin = PyExecPlugin.get("Http")(data, None)
|
||||||
|
with pytest.raises(requests.exceptions.ReadTimeout):
|
||||||
|
assert http_plugin.execute()
|
||||||
|
|
||||||
|
# no timeout is tested with a server wait time of 15 seconds that simulates an indefinite wait, that is higher than defaults
|
||||||
|
def test_no_timeout(httpserver):
|
||||||
|
uri = "/notimeout"
|
||||||
|
data = {
|
||||||
|
"method" : "get",
|
||||||
|
"url" : httpserver.url_for(uri),
|
||||||
|
"no-timeout" : True
|
||||||
|
}
|
||||||
|
httpserver.expect_request(uri).respond_with_handler(sleeping15)
|
||||||
|
http_plugin = PyExecPlugin.get("Http")(data, None)
|
||||||
|
http_plugin.execute()
|
||||||
|
|
||||||
|
def test_connection_refused(httpserver):
|
||||||
|
httpserver.stop()
|
||||||
|
data = {
|
||||||
|
"method" : "get",
|
||||||
|
"url" : httpserver.url_for("/")
|
||||||
|
}
|
||||||
|
http_plugin = PyExecPlugin.get("Http")(data, None)
|
||||||
|
with pytest.raises(requests.exceptions.ConnectionError):
|
||||||
|
http_plugin.execute()
|
|
@ -0,0 +1,2 @@
|
||||||
|
pytest == 7.1.3
|
||||||
|
pytest_httpserver == 1.0.6
|
Loading…
Reference in New Issue