diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-09-05 01:41:07 +0100 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-12-17 15:36:04 +0000 |
commit | 5a9155696e4bc53f7a82aae0754d35d0d923c20f (patch) | |
tree | 04f95ad97bc15889324166c6deb1ae3b60dfe6db | |
parent | Move import testing (diff) | |
download | icespider-5a9155696e4bc53f7a82aae0754d35d0d923c20f.tar.bz2 icespider-5a9155696e4bc53f7a82aae0754d35d0d923c20f.tar.xz icespider-5a9155696e4bc53f7a82aae0754d35d0d923c20f.zip |
Add initial performance test
-rw-r--r-- | icespider/unittests/Jamfile.jam | 19 | ||||
-rw-r--r-- | icespider/unittests/fixtures/env1 | 32 | ||||
-rw-r--r-- | icespider/unittests/testPerf.cpp | 67 |
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(); |