summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--icespider/unittests/Jamfile.jam19
-rw-r--r--icespider/unittests/fixtures/env132
-rw-r--r--icespider/unittests/testPerf.cpp67
3 files changed, 118 insertions, 0 deletions
diff --git a/icespider/unittests/Jamfile.jam b/icespider/unittests/Jamfile.jam
index 1011a8f..877c1df 100644
--- a/icespider/unittests/Jamfile.jam
+++ b/icespider/unittests/Jamfile.jam
@@ -21,6 +21,7 @@ lib slicer : : : : <include>/usr/include/slicer ;
lib slicer-json : : : : <include>/usr/include/slicer ;
lib slicer-xml : : : : <include>/usr/include/slicer ;
lib boost_utf : : <name>boost_unit_test_framework ;
+lib benchmark ;
lib stdc++fs ;
lib dl ;
path-constant me : . ;
@@ -98,6 +99,24 @@ run
<include>.
: testApp ;
+run
+ testPerf.cpp
+ ../fcgi/cgiRequestBase.cpp
+ : : :
+ <slicer>pure
+ <library>benchmark
+ <define>ROOT=\"$(me)\"
+ <library>../common//icespider-common
+ <library>../core//icespider-core
+ <implicit-dependency>../core//icespider-core
+ <implicit-dependency>test-fcgi
+ <library>stdc++fs
+ <library>slicer
+ <library>slicer-json
+ <library>adhocutil
+ <include>../fcgi
+ : testPerf ;
+
obj test-fcgi : test-fcgi.ice : <toolset>tidy:<checker>none ;
run
testFcgi.cpp
diff --git a/icespider/unittests/fixtures/env1 b/icespider/unittests/fixtures/env1
new file mode 100644
index 0000000..32d47c8
--- /dev/null
+++ b/icespider/unittests/fixtures/env1
@@ -0,0 +1,32 @@
+CONTEXT_DOCUMENT_ROOT=/var/www/shared/vhosts/sys.randomdan.homeip.net
+CONTEXT_PREFIX=
+DOCUMENT_ROOT=/var/www/shared/vhosts/sys.randomdan.homeip.net
+GATEWAY_INTERFACE=CGI/1.1
+HTTPS=on
+HTTP_ACCEPT=*/*
+HTTP_ACCEPT_ENCODING=identity
+HTTP_CONNECTION=Keep-Alive
+HTTP_COOKIE=s=08dc25d6-34d0-4fe9-a2eb-04c392441d06
+HTTP_HOST=sys.randomdan.homeip.net
+HTTP_PROXY_CONNECTION=Keep-Alive
+HTTP_USER_AGENT=Wget/1.21.1
+PATH=/usr/lib/ccache/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/lib/llvm/12/bin
+PWD=/var/www/shared/files/localhost
+QUERY_STRING=q=long+search+string&m=47&utm_source=mail
+REMOTE_ADDR=10.10.0.3
+REMOTE_PORT=35448
+REQUEST_METHOD=GET
+REQUEST_SCHEME=https
+REQUEST_URI=/env.cgi
+SCRIPT_FILENAME=/var/www/shared/vhosts/sys.randomdan.homeip.net/env.cgi
+SCRIPT_NAME=/env.cgi
+SERVER_ADDR=fdc7:602:e9c5:b8f0::3
+SERVER_ADMIN=dan.goodliffe@randomdan.homeip.net
+SERVER_NAME=sys.randomdan.homeip.net
+SERVER_PORT=443
+SERVER_PROTOCOL=HTTP/1.1
+SERVER_SIGNATURE=<address>Apache/2.4.48 (Gentoo) mod_fcgid/2.3.9 OpenSSL/1.1.1l mod_perl/2.0.11 Perl/v5.34.0 Server at sys.randomdan.homeip.net Port 443</address>
+SERVER_SOFTWARE=Apache/2.4.48 (Gentoo) mod_fcgid/2.3.9 OpenSSL/1.1.1l mod_perl/2.0.11 Perl/v5.34.0
+SHLVL=0
+SSL_TLS_SNI=sys.randomdan.homeip.net
+_=/usr/bin/env
diff --git a/icespider/unittests/testPerf.cpp b/icespider/unittests/testPerf.cpp
new file mode 100644
index 0000000..d16b52d
--- /dev/null
+++ b/icespider/unittests/testPerf.cpp
@@ -0,0 +1,67 @@
+#include <benchmark/benchmark.h>
+#include <cgiRequestBase.h>
+#include <core.h>
+#include <definedDirs.h>
+#include <fstream>
+
+class TestRequest : public IceSpider::CgiRequestBase {
+public:
+ TestRequest(IceSpider::Core * c, char ** env) : IceSpider::CgiRequestBase(c, env)
+ {
+ initialize();
+ }
+
+ std::ostream &
+ getOutputStream() const override
+ {
+ return out;
+ }
+
+ // LCOV_EXCL_START we never actually read or write anything here
+ std::istream &
+ getInputStream() const override
+ {
+ return std::cin;
+ }
+ // LCOV_EXCL_STOP
+
+ // NOLINTNEXTLINE(misc-non-private-member-variables-in-classes)
+ mutable std::stringstream out;
+};
+
+// NOLINTNEXTLINE(hicpp-special-member-functions)
+class CharPtrPtrArray : public std::vector<char *> {
+public:
+ explicit CharPtrPtrArray(const std::filesystem::path & p)
+ {
+ reserve(40);
+ std::ifstream f(p);
+ while (f.good()) {
+ std::string line;
+ std::getline(f, line, '\n');
+ push_back(strdup(line.c_str()));
+ }
+ push_back(nullptr);
+ }
+
+ ~CharPtrPtrArray()
+ {
+ for (const auto & e : *this) {
+ // NOLINTNEXTLINE(hicpp-no-malloc)
+ free(e);
+ }
+ }
+};
+
+class CoreFixture : public IceSpider::CoreWithDefaultRouter, public benchmark::Fixture {
+};
+
+BENCHMARK_F(CoreFixture, script_name_root)(benchmark::State & state)
+{
+ CharPtrPtrArray env(XSTR(ROOT) "/fixtures/env1");
+ for (auto _ : state) {
+ TestRequest r(this, &env.front());
+ }
+}
+
+BENCHMARK_MAIN();