diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-11-26 12:05:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-26 12:05:49 +0100 |
commit | 4b8a65c48af0dd338bed5506a57bec6e002f58f3 (patch) | |
tree | c67aebe8b09ed69d56e2894313c0288afa18f298 | |
parent | 47fd2f02f279c050181443f8ffca2febbcf2425c (diff) | |
parent | baf67016b071362f776f67676f1107daad80da01 (diff) |
Merge pull request #11395 from ohad7/base64DecodeV2
Base64 support for fbench
-rw-r--r-- | fbench/CMakeLists.txt | 1 | ||||
-rw-r--r-- | fbench/src/fbench/client.cpp | 15 | ||||
-rw-r--r-- | fbench/src/fbench/client.h | 10 | ||||
-rw-r--r-- | fbench/src/fbench/fbench.cpp | 16 | ||||
-rw-r--r-- | fbench/src/fbench/fbench.h | 4 |
5 files changed, 39 insertions, 7 deletions
diff --git a/fbench/CMakeLists.txt b/fbench/CMakeLists.txt index bc40e659b99..5cc56786227 100644 --- a/fbench/CMakeLists.txt +++ b/fbench/CMakeLists.txt @@ -3,6 +3,7 @@ vespa_define_module( DEPENDS fastos vespalib + staging_vespalib APPS src/fbench diff --git a/fbench/src/fbench/client.cpp b/fbench/src/fbench/client.cpp index 7ac52ff6c7c..488453d0946 100644 --- a/fbench/src/fbench/client.cpp +++ b/fbench/src/fbench/client.cpp @@ -7,6 +7,10 @@ #include <util/filereader.h> #include <cassert> #include <cstring> +#include <iostream> +#include <vespa/vespalib/encoding/base64.h> + +using namespace vespalib; Client::Client(vespalib::CryptoEngine::SP engine, ClientArguments *args) : _args(args), @@ -220,8 +224,17 @@ Client::run() strcat(_linebuf, _args->_queryStringToAppend.c_str()); } int cLen = _args->_usePostMode ? urlSource.nextContent() : 0; + + const char* content = urlSource.content(); + std::string base64_decoded; + if (_args->_usePostMode && _args->_base64Decode) { + base64_decoded = Base64::decode(content, cLen); + content = base64_decoded.c_str(); + cLen = base64_decoded.size(); + } + _reqTimer->Start(); - auto fetch_status = _http->Fetch(_linebuf, _output.get(), _args->_usePostMode, urlSource.content(), cLen); + auto fetch_status = _http->Fetch(_linebuf, _output.get(), _args->_usePostMode, content, cLen); _reqTimer->Stop(); _status->AddRequestStatus(fetch_status.RequestStatus()); if (fetch_status.Ok() && fetch_status.TotalHitCount() == 0) diff --git a/fbench/src/fbench/client.h b/fbench/src/fbench/client.h index d1036bbe8d3..70d83f71971 100644 --- a/fbench/src/fbench/client.h +++ b/fbench/src/fbench/client.h @@ -94,6 +94,12 @@ struct ClientArguments * client. **/ bool _keepAlive; + + /** + * Indicate wether POST content should be Base64 decoded before + * sending it + **/ + bool _base64Decode; /** Whether we should use POST in requests */ bool _usePostMode; @@ -117,7 +123,8 @@ struct ClientArguments long cycle, long delay, int ignoreCount, int byteLimit, int restartLimit, int maxLineSize, - bool keepAlive, bool headerBenchmarkdataCoverage, + bool keepAlive, bool base64Decode, + bool headerBenchmarkdataCoverage, uint64_t queryfileOffset, uint64_t queryfileEndOffset, bool singleQueryFile, const std::string & queryStringToAppend, const std::string & extraHeaders, const std::string &authority, bool postMode) @@ -134,6 +141,7 @@ struct ClientArguments _restartLimit(restartLimit), _maxLineSize(maxLineSize), _keepAlive(keepAlive), + _base64Decode(base64Decode), _usePostMode(postMode), _headerBenchmarkdataCoverage(headerBenchmarkdataCoverage), _queryfileOffset(queryfileOffset), diff --git a/fbench/src/fbench/fbench.cpp b/fbench/src/fbench/fbench.cpp index 723980cd1c7..91475ce2125 100644 --- a/fbench/src/fbench/fbench.cpp +++ b/fbench/src/fbench/fbench.cpp @@ -107,7 +107,8 @@ void FBench::InitBenchmark(int numClients, int ignoreCount, int cycle, const char *filenamePattern, const char *outputPattern, int byteLimit, int restartLimit, int maxLineSize, - bool keepAlive, bool headerBenchmarkdataCoverage, int seconds, + bool keepAlive, bool base64Decode, + bool headerBenchmarkdataCoverage, int seconds, bool singleQueryFile, const std::string & queryStringToAppend, const std::string & extraHeaders, const std::string &authority, bool postMode) { @@ -127,6 +128,7 @@ FBench::InitBenchmark(int numClients, int ignoreCount, int cycle, _restartLimit = restartLimit; _maxLineSize = maxLineSize; _keepAlive = keepAlive; + _base64Decode = base64Decode; _usePostMode = postMode; _headerBenchmarkdataCoverage = headerBenchmarkdataCoverage; _seconds = seconds; @@ -152,7 +154,8 @@ FBench::CreateClients() _ports[i % _ports.size()], _cycle, random() % spread, _ignoreCount, _byteLimit, _restartLimit, _maxLineSize, - _keepAlive, _headerBenchmarkdataCoverage, + _keepAlive, _base64Decode, + _headerBenchmarkdataCoverage, off_beg, off_end, _singleQueryFile, _queryStringToAppend, _extraHeaders, _authority, _usePostMode)); ++i; @@ -298,6 +301,7 @@ FBench::Usage() printf(" Can not be less than the minimum [1024].\n"); printf(" -p <num> : print summary every <num> seconds.\n"); printf(" -k : disable HTTP keep-alive.\n"); + printf(" -d : Base64 decode POST request content.\n"); printf(" -y : write data on coverage to output file.\n"); printf(" -z : use single query file to be distributed between clients.\n"); printf(" -T <str> : CA certificate file to verify peer against.\n"); @@ -342,6 +346,7 @@ FBench::Main(int argc, char *argv[]) int restartLimit = -1; bool keepAlive = true; + bool base64Decode = false; bool headerBenchmarkdataCoverage = false; bool usePostMode = false; @@ -358,7 +363,7 @@ FBench::Main(int argc, char *argv[]) idx = 1; optError = false; - while((opt = GetOpt(argc, argv, "H:A:T:C:K:Da:n:c:l:i:s:q:o:r:m:p:kxyzP", arg, idx)) != -1) { + while((opt = GetOpt(argc, argv, "H:A:T:C:K:Da:n:c:l:i:s:q:o:r:m:p:kdxyzP", arg, idx)) != -1) { switch(opt) { case 'A': authority = arg; @@ -426,6 +431,9 @@ FBench::Main(int argc, char *argv[]) case 'k': keepAlive = false; break; + case 'd': + base64Decode = false; + break; case 'x': // consuming x for backwards compability. This turned on header benchmark data // but this is now always on. @@ -513,7 +521,7 @@ FBench::Main(int argc, char *argv[]) InitBenchmark(numClients, ignoreCount, cycleTime, queryFilePattern, outputFilePattern, byteLimit, restartLimit, maxLineSize, - keepAlive, + keepAlive, base64Decode, headerBenchmarkdataCoverage, seconds, singleQueryFile, queryStringToAppend, extraHeaders, authority, usePostMode); diff --git a/fbench/src/fbench/fbench.h b/fbench/src/fbench/fbench.h index e4a8e4e0b27..362a463a4f1 100644 --- a/fbench/src/fbench/fbench.h +++ b/fbench/src/fbench/fbench.h @@ -23,6 +23,7 @@ private: int _restartLimit; int _maxLineSize; bool _keepAlive; + bool _base64Decode; bool _usePostMode; bool _headerBenchmarkdataCoverage; int _seconds; @@ -41,7 +42,8 @@ private: void InitBenchmark(int numClients, int ignoreCount, int cycle, const char *filenamePattern, const char *outputPattern, int byteLimit, int restartLimit, int maxLineSize, - bool keepAlive, bool headerBenchmarkdataCoverage, int seconds, + bool keepAlive, bool base64Decode, + bool headerBenchmarkdataCoverage, int seconds, bool singleQueryFile, const std::string & queryStringToAppend, const std::string & extraHeaders, const std::string &authority, bool postMode); |