regression: Sorts test cases by file, making easy to read

This commit is contained in:
Felipe Zimmerle 2015-07-22 14:44:50 -03:00
parent 3f8fa64c9a
commit 3f883df763
2 changed files with 38 additions and 8 deletions

View File

@ -73,15 +73,15 @@ bool ModSecurityTest<T>::load_test_json(std::string file) {
T *u = T::from_yajl_node(obj);
u->filename = file;
u->name = u->filename + ":" + u->name;
if (this->count(u->name) == 0) {
if (this->count(u->filename + ":" + u->name) == 0) {
std::vector<T *> *vector = new std::vector<T *>;
vector->push_back(u);
std::pair<std::string, std::vector<T *> *> a(u->name, vector);
std::pair<std::string, std::vector<T *> *> a(u->filename + ":" +
u->name, vector);
this->insert(a);
} else {
std::vector<T *> *vec = this->at(u->name);
std::vector<T *> *vec = this->at(u->filename + ":" + u->name);
vec->push_back(u);
}
}

View File

@ -18,6 +18,7 @@
#include <ctime>
#include <iostream>
#include <string>
#include <list>
#include "modsecurity/modsecurity.h"
#include "modsecurity/rules.h"
@ -58,7 +59,7 @@ void actions(ModSecurityTestResults<RegressionTest> *r,
void perform_unit_test(std::vector<RegressionTest *> *tests,
ModSecurityTestResults<RegressionTest> *res) {
ModSecurityTestResults<RegressionTest> *res, int *count) {
ModSecurity::ModSecurity *modsec;
ModSecurity::Rules *modsec_rules;
ModSecurity::Assay *modsec_assay;
@ -68,6 +69,7 @@ void perform_unit_test(std::vector<RegressionTest *> *tests,
for (RegressionTest *t : *tests) {
ModSecurityTestResults<RegressionTest> r;
r.status = 200;
(*count)++;
modsec = new ModSecurity::ModSecurity();
modsec->setConnectorInformation("ModSecurity-regression v0.0.1-alpha" \
@ -144,7 +146,18 @@ end:
CustomDebugLog *d = reinterpret_cast<CustomDebugLog *>
(modsec_rules->debug_log);
std::cout << "- " << t->name << " ...";
size_t offset = t->filename.find_last_of("/\\");
std::string filename("");
if (offset != std::string::npos) {
filename = std::string(t->filename, offset + 1,
t->filename.length() - offset - 1);
} else {
filename = t->filename;
}
std::cout << std::setw(3) << std::right <<
std::to_string(*count) << " ";
std::cout << std::setw(50) << std::left << filename;
std::cout << std::setw(60) << std::left << t->name;
if (!d->contains(t->debug_log)) {
std::cout << "Debug log was not matching the expected results.";
@ -185,11 +198,28 @@ int main(int argc, char **argv) {
std::ofstream test_log;
test_log.open("regression_test_log.txt");
std::cout << std::setw(4) << std::right << "# ";
std::cout << std::setw(50) << std::left << "File Name";
std::cout << std::setw(60) << std::left << "Test Name";
std::cout << std::setw(10) << std::left << "Passed?";
std::cout << std::endl;
std::cout << std::setw(4) << std::right << "--- ";
std::cout << std::setw(50) << std::left << "---------";
std::cout << std::setw(60) << std::left << "---------";
std::cout << std::setw(10) << std::left << "-------";
std::cout << std::endl;
int counter = 0;
std::list<std::string> keyList;
for (std::pair<std::string, std::vector<RegressionTest *> *> a : test) {
std::vector<RegressionTest *> *tests = a.second;
keyList.push_back(a.first);
}
keyList.sort();
for (std::string a : keyList) {
std::vector<RegressionTest *> *tests = test[a];
ModSecurityTestResults<RegressionTest> res;
perform_unit_test(tests, &res);
perform_unit_test(tests, &res, &counter);
test_log << res.log_raw_debug_log;
}