From 19fcec84d8d7d21e796c7624e521b60d28ee21ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:45:59 +0200 Subject: Adding upstream version 16.2.11+ds. Signed-off-by: Daniel Baumann --- src/civetweb/ci/test/01_basic/basic_spec.lua | 35 +++++++++++++ .../docroot/01_basic_test_dir/git_keep_empty_dir | 0 .../ci/test/01_basic/docroot/01_basic_test_file | 0 src/civetweb/ci/test/README.md | 34 ++++++++++++ src/civetweb/ci/test/civet.lua | 42 +++++++++++++++ src/civetweb/ci/travis/install_rocks.sh | 14 +++++ src/civetweb/ci/travis/lua_env.sh | 5 ++ src/civetweb/ci/travis/platform.sh | 15 ++++++ src/civetweb/ci/travis/run_ci_tests.sh | 7 +++ src/civetweb/ci/travis/setup_lua.sh | 61 ++++++++++++++++++++++ 10 files changed, 213 insertions(+) create mode 100644 src/civetweb/ci/test/01_basic/basic_spec.lua create mode 100644 src/civetweb/ci/test/01_basic/docroot/01_basic_test_dir/git_keep_empty_dir create mode 100644 src/civetweb/ci/test/01_basic/docroot/01_basic_test_file create mode 100644 src/civetweb/ci/test/README.md create mode 100644 src/civetweb/ci/test/civet.lua create mode 100755 src/civetweb/ci/travis/install_rocks.sh create mode 100755 src/civetweb/ci/travis/lua_env.sh create mode 100755 src/civetweb/ci/travis/platform.sh create mode 100755 src/civetweb/ci/travis/run_ci_tests.sh create mode 100755 src/civetweb/ci/travis/setup_lua.sh (limited to 'src/civetweb/ci') diff --git a/src/civetweb/ci/test/01_basic/basic_spec.lua b/src/civetweb/ci/test/01_basic/basic_spec.lua new file mode 100644 index 000000000..cf3b3007b --- /dev/null +++ b/src/civetweb/ci/test/01_basic/basic_spec.lua @@ -0,0 +1,35 @@ +civet = require "ci/test/civet" +local curl = require "cURL" + +describe("civetweb basic", function() + + setup(function() + civet.start() + end) + + teardown(function() + civet.stop() + end) + + + it("should serve a simple get request", function() + + local out = "" + function capture(str) + out = out .. str + end + + local c = curl.easy() + :setopt_url('http://localhost:' .. civet.port .. "/") + :setopt_writefunction(capture) + :perform() + :close() + + --print('rescode:' .. c.getinfo(curl.INFO_RESPONSE_CODE)) + + assert.are.equal('Index of', string.match(out, 'Index of')) + assert.are.equal('01_basic_test_dir', string.match(out, '01_basic_test_dir')) + assert.are.equal('01_basic_test_file', string.match(out, '01_basic_test_file')) + end) + +end) diff --git a/src/civetweb/ci/test/01_basic/docroot/01_basic_test_dir/git_keep_empty_dir b/src/civetweb/ci/test/01_basic/docroot/01_basic_test_dir/git_keep_empty_dir new file mode 100644 index 000000000..e69de29bb diff --git a/src/civetweb/ci/test/01_basic/docroot/01_basic_test_file b/src/civetweb/ci/test/01_basic/docroot/01_basic_test_file new file mode 100644 index 000000000..e69de29bb diff --git a/src/civetweb/ci/test/README.md b/src/civetweb/ci/test/README.md new file mode 100644 index 000000000..fdbecbe0e --- /dev/null +++ b/src/civetweb/ci/test/README.md @@ -0,0 +1,34 @@ +== Travis CI Tests + +Travis is a service which will build your project when you commit or get pull requests on Github. + +I have fixed and extended the travis configuration to build on the new sudo-less docker infrastructure. + +=== CI Process + +* On Check-in or Pull Requests clone the repo +* Run make WITH_LUA=1 WITH_DEBUG=1 WITH_IPV6=1 WITH_WEBSOCKET=1 +* Build a standalone lua installation (seperate from civetweb or the OS) +* Build LuaRocks in standalone installation +* Install a few rocks into the standalone installation +* Start the test script + +=== test/ci_tests/01_basic/basic_spec.lua + +On the initial checkin, there is only one test which demonstrates: + +* reliably starting civetweb server on travis infrastructure +* waiting (polling) with lua.socket to establish the server is up and running +* using libcurl via lua to test that files in the specified docroot are available +* kill the civetweb server process +* waiting (polling) the server port to see that the server has freed it + +=== Adding Tests + +* Create a directory under ci_tests +* Add a spec file, so now we have ci_tests/02_my_awesome_test/awesome_spec.lua +* Any file under ci_tests which ends in _spec.lua will be automatically run +* Check out the 'busted' and lua-curl3 docs for more info +* https://github.com/Lua-cURL/Lua-cURLv3 +* http://olivinelabs.com/busted/ + diff --git a/src/civetweb/ci/test/civet.lua b/src/civetweb/ci/test/civet.lua new file mode 100644 index 000000000..19a6848f5 --- /dev/null +++ b/src/civetweb/ci/test/civet.lua @@ -0,0 +1,42 @@ +socket = require "socket" + +local civet = {} + +-- default params +civet.port=12345 +civet.max_retry=100 +civet.start_delay=0.1 + +function civet.start(docroot) + -- TODO: use a property + docroot = docroot or 'ci/test/01_basic/docroot' + assert(io.popen('./civetweb' + .. " -listening_ports " .. civet.port + .. " -document_root " .. docroot + .. " > /dev/null 2>&1 &" + )) + -- wait until the server answers + for i=1,civet.max_retry do + local s = socket.connect('127.0.0.1', civet.port) + if s then + s:close() + break + end + socket.select(nil, nil, civet.start_delay) -- sleep + end +end + +function civet.stop() + os.execute('killall civetweb') + -- wait until the server port closes + for i=1,civet.max_retry do + local s = socket.connect('127.0.0.1', civet.port) + if not s then + break + end + s:close() + socket.select(nil, nil, civet.start_delay) -- sleep + end +end + +return civet diff --git a/src/civetweb/ci/travis/install_rocks.sh b/src/civetweb/ci/travis/install_rocks.sh new file mode 100755 index 000000000..739248b84 --- /dev/null +++ b/src/civetweb/ci/travis/install_rocks.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -ev + +source ci/travis/lua_env.sh + +# add any rocks required for ci_tests to this list +# lua-curl depends on a libcurl development package (i.e. libcurl4-openssl-dev) +ROCKS=(lua-curl busted) + +for ROCK in ${ROCKS[*]} +do + $LUAROCKS install $ROCK +done + diff --git a/src/civetweb/ci/travis/lua_env.sh b/src/civetweb/ci/travis/lua_env.sh new file mode 100755 index 000000000..dd742e911 --- /dev/null +++ b/src/civetweb/ci/travis/lua_env.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +LUAROCKS=ci/lua/bin/luarocks +eval $($LUAROCKS path --bin) + diff --git a/src/civetweb/ci/travis/platform.sh b/src/civetweb/ci/travis/platform.sh new file mode 100755 index 000000000..4a3af0d48 --- /dev/null +++ b/src/civetweb/ci/travis/platform.sh @@ -0,0 +1,15 @@ +if [ -z "$PLATFORM" ]; then + PLATFORM=$TRAVIS_OS_NAME; +fi + +if [ "$PLATFORM" == "osx" ]; then + PLATFORM="macosx"; +fi + +if [ -z "$PLATFORM" ]; then + if [ "$(uname)" == "Linux" ]; then + PLATFORM="linux"; + else + PLATFORM="macosx"; + fi; +fi diff --git a/src/civetweb/ci/travis/run_ci_tests.sh b/src/civetweb/ci/travis/run_ci_tests.sh new file mode 100755 index 000000000..16c2cc067 --- /dev/null +++ b/src/civetweb/ci/travis/run_ci_tests.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -ev + +source ci/travis/lua_env.sh +busted -o TAP ci/test/ + + diff --git a/src/civetweb/ci/travis/setup_lua.sh b/src/civetweb/ci/travis/setup_lua.sh new file mode 100755 index 000000000..8e1b324ea --- /dev/null +++ b/src/civetweb/ci/travis/setup_lua.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env /bash +set -ev + +# this script installs a lua / luarocks environment in .travis/lua +# this is necessary because travis docker architecture (the fast way) +# does not permit sudo, and does not contain a useful lua installation + +# After this script is finished, you can configure your environment to +# use it by sourcing lua_env.sh + +source ci/travis/platform.sh + +# The current versions when this script was written +LUA_VERSION=5.2.4 +LUAROCKS_VERSION=2.2.2 + +# directory where this script is located +SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# civetweb base dir +PROJECT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )"/../.. && pwd ) + +# fetch and unpack lua src +cd $SCRIPT_DIR +LUA_BASE=lua-$LUA_VERSION +rm -rf $LUA_BASE +curl http://www.lua.org/ftp/$LUA_BASE.tar.gz | tar zx + +# build lua +cd $LUA_BASE +make $PLATFORM +make local + +# mv built lua install to target Lua dir +LUA_DIR=$PROJECT_DIR/ci/lua +rm -rf $LUA_DIR +mv $SCRIPT_DIR/$LUA_BASE/install $LUA_DIR + +# add to path required by luarocks installer +export PATH=$LUA_DIR/bin:$PATH + + +# fetch and unpack luarocks +cd $SCRIPT_DIR +LUAROCKS_BASE=luarocks-$LUAROCKS_VERSION +rm -rf ${LUAROCKS_BASE} +LUAROCKS_URL=http://luarocks.org/releases/${LUAROCKS_BASE}.tar.gz +# -L because it's a 302 redirect +curl -L $LUAROCKS_URL | tar xzp +cd $LUAROCKS_BASE + +# build luarocks +./configure --prefix=$LUA_DIR +make build +make install + +# cleanup source dirs +cd $SCRIPT_DIR +rm -rf $LUAROCKS_BASE +rm -rf $LUA_BASE + -- cgit v1.2.3