diff --git a/lib/ts/Makefile.am b/lib/ts/Makefile.am index da6d1490eca..a3ddf432c29 100644 --- a/lib/ts/Makefile.am +++ b/lib/ts/Makefile.am @@ -21,7 +21,7 @@ library_includedir=$(includedir)/ts library_include_HEADERS = apidefs.h noinst_PROGRAMS = mkdfa CompileParseRules -check_PROGRAMS = test_arena test_atomic test_freelist test_geometry test_List test_Map test_Regex test_PriorityQueue test_Vec test_X509HostnameValidator test_Ptr +check_PROGRAMS = test_tsutil test_arena test_atomic test_freelist test_geometry test_List test_Map test_Vec test_X509HostnameValidator TESTS = $(check_PROGRAMS) @@ -216,14 +216,6 @@ test_Map_SOURCES = test_Map.cc test_Map_LDADD = libtsutil.la @LIBTCL@ @LIBPCRE@ test_Map_LDFLAGS = @EXTRA_CXX_LDFLAGS@ @LIBTOOL_LINK_FLAGS@ -test_Regex_SOURCES = test_Regex.cc -test_Regex_LDADD = libtsutil.la @LIBTCL@ @LIBPCRE@ -test_Regex_LDFLAGS = @EXTRA_CXX_LDFLAGS@ @LIBTOOL_LINK_FLAGS@ - -test_PriorityQueue_SOURCES = test_PriorityQueue.cc -test_PriorityQueue_LDADD = libtsutil.la @LIBTCL@ @LIBPCRE@ -test_PriorityQueue_LDFLAGS = @EXTRA_CXX_LDFLAGS@ @LIBTOOL_LINK_FLAGS@ - test_Vec_SOURCES = test_Vec.cc test_Vec_LDADD = libtsutil.la @LIBTCL@ @LIBPCRE@ test_Vec_LDFLAGS = @EXTRA_CXX_LDFLAGS@ @LIBTOOL_LINK_FLAGS@ @@ -236,16 +228,15 @@ test_X509HostnameValidator_SOURCES = test_X509HostnameValidator.cc test_X509HostnameValidator_LDADD = libtsutil.la @LIBTCL@ @LIBPCRE@ @OPENSSL_LIBS@ test_X509HostnameValidator_LDFLAGS = @EXTRA_CXX_LDFLAGS@ @LIBTOOL_LINK_FLAGS@ -test_Ptr_SOURCES = test_Ptr.cc -test_Ptr_LDADD = libtsutil.la @LIBTCL@ @LIBPCRE@ -test_Ptr_LDFLAGS = @EXTRA_CXX_LDFLAGS@ @LIBTOOL_LINK_FLAGS@ +test_tsutil_LDADD = libtsutil.la @LIBTCL@ @LIBPCRE@ +test_tsutil_LDFLAGS = @EXTRA_CXX_LDFLAGS@ @LIBTOOL_LINK_FLAGS@ +test_tsutil_SOURCES = \ + test_PriorityQueue.cc \ + test_Ptr.cc \ + test_Regex.cc \ + tests.cc CompileParseRules_SOURCES = CompileParseRules.cc -test:: $(TESTS) - for f in $(TESTS) ; do $$f ; done - -#$(foreach F, $(TESTS), $(shell $F)) - clean-local: rm -f ParseRulesCType ParseRulesCTypeToLower ParseRulesCTypeToUpper diff --git a/lib/ts/Regression.cc b/lib/ts/Regression.cc index 46392850bd4..f0fbab0ece6 100644 --- a/lib/ts/Regression.cc +++ b/lib/ts/Regression.cc @@ -28,9 +28,11 @@ ****************************************************************************/ +#include "ts/Regression.h" +#include "ts/I_Version.h" #include "ts/ink_platform.h" #include "ts/ink_assert.h" -#include "ts/Regression.h" +#include "ts/ink_args.h" static RegressionTest *test = NULL; static RegressionTest *exclusive_test = NULL; @@ -38,9 +40,15 @@ static RegressionTest *exclusive_test = NULL; RegressionTest *RegressionTest::current = 0; int RegressionTest::ran_tests = 0; DFA RegressionTest::dfa; -int regression_level = 0; int RegressionTest::final_status = REGRESSION_TEST_PASSED; +static const char * +progname(const char *path) +{ + const char *slash = strrchr(path, '/'); + return slash ? slash + 1 : path; +} + char * regression_status_string(int status) { @@ -65,7 +73,7 @@ RegressionTest::RegressionTest(const char *_n, const SourceLocation &_l, TestFun } static inline int -start_test(RegressionTest *t) +start_test(RegressionTest *t, int regression_level) { ink_assert(t->status == REGRESSION_TEST_NOT_RUN); t->status = REGRESSION_TEST_INPROGRESS; @@ -81,23 +89,25 @@ start_test(RegressionTest *t) } int -RegressionTest::run(const char *atest) +RegressionTest::run(const char *atest, int regression_level) { if (atest) dfa.compile(atest); else dfa.compile(".*"); + fprintf(stderr, "REGRESSION_TEST initialization begun\n"); // start the non exclusive tests for (RegressionTest *t = test; t; t = t->next) { if ((dfa.match(t->name) >= 0)) { - int res = start_test(t); + int res = start_test(t, regression_level); if (res == REGRESSION_TEST_FAILED) final_status = REGRESSION_TEST_FAILED; } } + current = exclusive_test; - return run_some(); + return run_some(regression_level); } void @@ -121,12 +131,14 @@ RegressionTest::list() } int -RegressionTest::run_some() +RegressionTest::run_some(int regression_level) { if (current) { - if (current->status == REGRESSION_TEST_INPROGRESS) + if (current->status == REGRESSION_TEST_INPROGRESS) { return REGRESSION_TEST_INPROGRESS; - else if (current->status != REGRESSION_TEST_NOT_RUN) { + } + + if (current->status != REGRESSION_TEST_NOT_RUN) { if (!current->printed) { current->printed = true; fprintf(stderr, " REGRESSION_RESULT %s:%*s %s\n", current->name, 40 - (int)strlen(current->name), " ", @@ -138,7 +150,7 @@ RegressionTest::run_some() for (; current; current = current->next) { if ((dfa.match(current->name) >= 0)) { - int res = start_test(current); + int res = start_test(current, regression_level); if (res == REGRESSION_TEST_INPROGRESS) return res; if (res == REGRESSION_TEST_FAILED) @@ -149,14 +161,15 @@ RegressionTest::run_some() } int -RegressionTest::check_status() +RegressionTest::check_status(int regression_level) { int status = REGRESSION_TEST_PASSED; if (current) { - status = run_some(); + status = run_some(regression_level); if (!current) return status; } + RegressionTest *t = test; int exclusive = 0; @@ -190,6 +203,34 @@ RegressionTest::check_status() return (status == REGRESSION_TEST_INPROGRESS) ? REGRESSION_TEST_INPROGRESS : final_status; } +int +RegressionTest::main(int /* argc */, const char **argv) +{ + static char regression_test[1024] = ""; + static int regression_list = 0; + static int regression_level = 1; + + static const ArgumentDescription argument_descriptions[] = { + {"regression", 'R', "Regression Level (quick:1..long:3)", "I", ®ression_level, "PROXY_REGRESSION", NULL}, + {"regression_test", 'r', "Run Specific Regression Test", "S512", regression_test, "PROXY_REGRESSION_TEST", NULL}, + {"regression_list", 'l', "List Regression Tests", "T", ®ression_list, "PROXY_REGRESSION_LIST", NULL}, + }; + + AppVersionInfo version; + + version.setup(PACKAGE_NAME, progname(argv[0]), PACKAGE_VERSION, __DATE__, __TIME__, BUILD_MACHINE, BUILD_PERSON, ""); + + process_args(&version, argument_descriptions, countof(argument_descriptions), argv); + + if (regression_list) { + RegressionTest::list(); + } else { + RegressionTest::run(*regression_test == '\0' ? NULL : regression_test, regression_level); + } + + return RegressionTest::final_status == REGRESSION_TEST_PASSED ? 0 : 1; +} + int rprintf(RegressionTest *t, const char *format, ...) { diff --git a/lib/ts/Regression.h b/lib/ts/Regression.h index d22d9c49827..7fa8ec4d13b 100644 --- a/lib/ts/Regression.h +++ b/lib/ts/Regression.h @@ -82,10 +82,12 @@ struct RegressionTest { static int ran_tests; static DFA dfa; static RegressionTest *current; - static int run(const char *name = NULL); + static int run(const char *name = NULL, int regression_level = 1); static void list(); - static int run_some(); - static int check_status(); + static int run_some(int regression_level = 1); + static int check_status(int regression_level = 1); + + static int main(int argc, const char **argv); }; #define REGRESSION_TEST(_f) \ @@ -103,6 +105,4 @@ int rprintf(RegressionTest *t, const char *format, ...); int rperf(RegressionTest *t, const char *tag, double val); char *regression_status_string(int status); -extern int regression_level; - #endif /* _Regression_h */ diff --git a/lib/ts/test_PriorityQueue.cc b/lib/ts/test_PriorityQueue.cc index de5672c8271..a8b6ca9965d 100644 --- a/lib/ts/test_PriorityQueue.cc +++ b/lib/ts/test_PriorityQueue.cc @@ -277,12 +277,3 @@ REGRESSION_TEST(PriorityQueue_5)(RegressionTest *t, int /* atype ATS_UNUSED */, box.check(pq->top() == NULL, "top should be NULL"); } - -int -main(int /* argc ATS_UNUSED */, const char ** /* argv ATS_UNUSED */) -{ - const char *name = "PriorityQueue"; - RegressionTest::run(name); - - return RegressionTest::final_status == REGRESSION_TEST_PASSED ? 0 : 1; -} diff --git a/lib/ts/test_Ptr.cc b/lib/ts/test_Ptr.cc index 90294166033..9a0da08abfb 100644 --- a/lib/ts/test_Ptr.cc +++ b/lib/ts/test_Ptr.cc @@ -97,10 +97,3 @@ REGRESSION_TEST(Ptr_bool)(RegressionTest *t, int /* atype ATS_UNUSED */, int *ps box.check(!none, "Empty Ptr is false"); box.check(some, "Non-empty Ptr is true"); } - -int -main(int /* argc ATS_UNUSED */, char ** /* argv ATS_UNUSED */) -{ - RegressionTest::run(); - return RegressionTest::final_status == REGRESSION_TEST_PASSED ? 0 : 1; -} diff --git a/lib/ts/test_Regex.cc b/lib/ts/test_Regex.cc index 6338a32f78d..c5b279beaea 100644 --- a/lib/ts/test_Regex.cc +++ b/lib/ts/test_Regex.cc @@ -22,6 +22,7 @@ #include "ts/ink_assert.h" #include "ts/ink_defs.h" #include "ts/Regex.h" +#include "ts/TestBox.h" typedef struct { char subject[100]; @@ -38,24 +39,19 @@ static const test_t test_data[] = { {"foo$", {{"foo", true}, {"bar", false}, {"foobar", false}, {"foobarbaz", false}}}, }; -static void -test_basic() +REGRESSION_TEST(Regex_basic)(RegressionTest *t, int /* atype ATS_UNUSED */, int *pstatus) { + TestBox box(t, pstatus, REGRESSION_TEST_PASSED); + for (unsigned int i = 0; i < countof(test_data); i++) { Regex r; - printf("Regex: %s\n", test_data[i].regex); + rprintf(t, "Regex: %s\n", test_data[i].regex); r.compile(test_data[i].regex); + for (unsigned int j = 0; j < countof(test_data[i].tests); j++) { - printf("Subject: %s Result: %s\n", test_data[i].tests[j].subject, test_data[i].tests[j].match ? "true" : "false"); - ink_assert(r.exec(test_data[i].tests[j].subject) == test_data[i].tests[j].match); + box.check(r.exec(test_data[i].tests[j].subject) == test_data[i].tests[j].match, "Subject: %s Result: %s\n", + test_data[i].tests[j].subject, test_data[i].tests[j].match ? "true" : "false"); } } } - -int -main(int /* argc ATS_UNUSED */, char ** /* argv ATS_UNUSED */) -{ - test_basic(); - printf("test_Regex PASSED\n"); -} diff --git a/lib/ts/test_X509HostnameValidator.cc b/lib/ts/test_X509HostnameValidator.cc index fe5fd0ba860..ec761041706 100644 --- a/lib/ts/test_X509HostnameValidator.cc +++ b/lib/ts/test_X509HostnameValidator.cc @@ -33,57 +33,64 @@ #include "ts/X509HostnameValidator.h" #include "ts/TestBox.h" +// clang-format off + // A simple certificate for CN=test.sslheaders.trafficserver.apache.org. static const char *test_certificate_cn_name = "test.sslheaders.trafficserver.apache.org"; -static const char *test_certificate_cn = "-----BEGIN CERTIFICATE-----\n" - "MIICGzCCAYSgAwIBAgIJAN/JvtOlj/5HMA0GCSqGSIb3DQEBBQUAMDMxMTAvBgNV\n" - "BAMMKHRlc3Quc3NsaGVhZGVycy50cmFmZmljc2VydmVyLmFwYWNoZS5vcmcwHhcN\n" - "MTQwNzIzMTc1MTA4WhcNMTcwNTEyMTc1MTA4WjAzMTEwLwYDVQQDDCh0ZXN0LnNz\n" - "bGhlYWRlcnMudHJhZmZpY3NlcnZlci5hcGFjaGUub3JnMIGfMA0GCSqGSIb3DQEB\n" - "AQUAA4GNADCBiQKBgQDNuincV56iMA1E7Ss9BlNvRmUdV3An5S6vXHP/hXSVTSj+\n" - "3o0I7es/2noBM7UmXWTBGNjcQYzBed/QIvqM9p5Q4B7kKFTb1xBOl4EU3LHl9fzz\n" - "hxbZMAc2MHW5X8+eCR6K6IBu5sRuLTPvIZhg63/ffhNJTImyW2+eH8guVGd38QID\n" - "AQABozcwNTAzBgNVHREELDAqgih0ZXN0LnNzbGhlYWRlcnMudHJhZmZpY3NlcnZl\n" - "ci5hcGFjaGUub3JnMA0GCSqGSIb3DQEBBQUAA4GBACayHRw5e0iejNkigLARk9aR\n" - "Wiy0WFkUdffhywjnOKxEGvfZGkNQPFN+0SHk7rAm8SlztOIElSvx/y9DByn4IeSw\n" - "2aU6zZiZUSPi9Stg8/tWv9MvOSU/J7CHaHkWuYbfBTBNDokfqFtqY3UJ7Pn+6ybS\n" - "2RZzwmSjinT8GglE30JR\n" - "-----END CERTIFICATE-----\n"; +static const char *test_certificate_cn = +"-----BEGIN CERTIFICATE-----\n" +"MIICGzCCAYSgAwIBAgIJAN/JvtOlj/5HMA0GCSqGSIb3DQEBBQUAMDMxMTAvBgNV\n" +"BAMMKHRlc3Quc3NsaGVhZGVycy50cmFmZmljc2VydmVyLmFwYWNoZS5vcmcwHhcN\n" +"MTQwNzIzMTc1MTA4WhcNMTcwNTEyMTc1MTA4WjAzMTEwLwYDVQQDDCh0ZXN0LnNz\n" +"bGhlYWRlcnMudHJhZmZpY3NlcnZlci5hcGFjaGUub3JnMIGfMA0GCSqGSIb3DQEB\n" +"AQUAA4GNADCBiQKBgQDNuincV56iMA1E7Ss9BlNvRmUdV3An5S6vXHP/hXSVTSj+\n" +"3o0I7es/2noBM7UmXWTBGNjcQYzBed/QIvqM9p5Q4B7kKFTb1xBOl4EU3LHl9fzz\n" +"hxbZMAc2MHW5X8+eCR6K6IBu5sRuLTPvIZhg63/ffhNJTImyW2+eH8guVGd38QID\n" +"AQABozcwNTAzBgNVHREELDAqgih0ZXN0LnNzbGhlYWRlcnMudHJhZmZpY3NlcnZl\n" +"ci5hcGFjaGUub3JnMA0GCSqGSIb3DQEBBQUAA4GBACayHRw5e0iejNkigLARk9aR\n" +"Wiy0WFkUdffhywjnOKxEGvfZGkNQPFN+0SHk7rAm8SlztOIElSvx/y9DByn4IeSw\n" +"2aU6zZiZUSPi9Stg8/tWv9MvOSU/J7CHaHkWuYbfBTBNDokfqFtqY3UJ7Pn+6ybS\n" +"2RZzwmSjinT8GglE30JR\n" +"-----END CERTIFICATE-----\n"; // A completely wildcard certificate with invalid wildcard format SANs- shouldn't match anything -static const char *test_certificate_bad_sans = "-----BEGIN CERTIFICATE-----\n" - "MIIB7jCCAZigAwIBAgIJAIECheWAKHNWMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV\n" - "BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX\n" - "aWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMMByouKi4qLiowHhcNMTUwMzA4MTcxOTIy\n" - "WhcNMjUwMzA1MTcxOTIyWjBXMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1T\n" - "dGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRAwDgYDVQQD\n" - "DAcqLiouKi4qMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMeiIvB0e2s7gXc4uxmD\n" - "FeUPjVhjGaGejdkgNoAV/z1sV36G06VGj3JBGkw63fhixVoSfk4MJ/tvuMlu/9E4\n" - "wL0CAwEAAaNHMEUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwKwYDVR0RBCQwIoIB\n" - "KoIFKi5jb22CCioubG9uZ2xvbmeHBMCoAQGHBMCoRQ4wDQYJKoZIhvcNAQELBQAD\n" - "QQC+zaPBEbJhL/Euaf2slgTMTKhnI3DUo/H5WXj54BKpefv0dtzjPD9rpEPqilhO\n" - "w0LiMuz7rapF/2++9BVPPmBh\n" - "-----END CERTIFICATE-----\n"; +static const char *test_certificate_bad_sans = +"-----BEGIN CERTIFICATE-----\n" +"MIIB7jCCAZigAwIBAgIJAIECheWAKHNWMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNV\n" +"BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX\n" +"aWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMMByouKi4qLiowHhcNMTUwMzA4MTcxOTIy\n" +"WhcNMjUwMzA1MTcxOTIyWjBXMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1T\n" +"dGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRAwDgYDVQQD\n" +"DAcqLiouKi4qMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMeiIvB0e2s7gXc4uxmD\n" +"FeUPjVhjGaGejdkgNoAV/z1sV36G06VGj3JBGkw63fhixVoSfk4MJ/tvuMlu/9E4\n" +"wL0CAwEAAaNHMEUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwKwYDVR0RBCQwIoIB\n" +"KoIFKi5jb22CCioubG9uZ2xvbmeHBMCoAQGHBMCoRQ4wDQYJKoZIhvcNAQELBQAD\n" +"QQC+zaPBEbJhL/Euaf2slgTMTKhnI3DUo/H5WXj54BKpefv0dtzjPD9rpEPqilhO\n" +"w0LiMuz7rapF/2++9BVPPmBh\n" +"-----END CERTIFICATE-----\n"; /* Multiple wildcard SANs: * DNS:*.something.or.other, DNS:*.trafficserver.org, DNS:foo*.trafficserver.com, DNS:*bar.trafficserver.net * CN: test.sslheaders.trafficserver.apache.org */ -static const char *test_certificate_cn_and_SANs = "-----BEGIN CERTIFICATE-----\n" - "MIICajCCAhSgAwIBAgIJAK5xL+HYV+IuMA0GCSqGSIb3DQEBCwUAMHgxCzAJBgNV\n" - "BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX\n" - "aWRnaXRzIFB0eSBMdGQxMTAvBgNVBAMMKHRlc3Quc3NsaGVhZGVycy50cmFmZmlj\n" - "c2VydmVyLmFwYWNoZS5vcmcwHhcNMTUwMzI0MTUyNTEwWhcNMjUwMzIxMTUyNTEw\n" - "WjB4MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwY\n" - "SW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMTEwLwYDVQQDDCh0ZXN0LnNzbGhlYWRl\n" - "cnMudHJhZmZpY3NlcnZlci5hcGFjaGUub3JnMFwwDQYJKoZIhvcNAQEBBQADSwAw\n" - "SAJBAMeiIvB0e2s7gXc4uxmDFeUPjVhjGaGejdkgNoAV/z1sV36G06VGj3JBGkw6\n" - "3fhixVoSfk4MJ/tvuMlu/9E4wL0CAwEAAaOBgDB+MAkGA1UdEwQCMAAwCwYDVR0P\n" - "BAQDAgXgMGQGA1UdEQRdMFuCFCouc29tZXRoaW5nLm9yLm90aGVyghMqLnRyYWZm\n" - "aWNzZXJ2ZXIub3JnghZmb28qLnRyYWZmaWNzZXJ2ZXIuY29tghYqYmFyLnRyYWZm\n" - "aWNzZXJ2ZXIubmV0MA0GCSqGSIb3DQEBCwUAA0EAQmmFmlZQ6lPudkmjJ0K1mSld\n" - "gQP8uiG6cly7NruPZn2Yc1Cha0TycSYfVkRi0dMF2RKtaVvd4uaXDNb4Qpwv3Q==\n" - "-----END CERTIFICATE-----\n"; +static const char *test_certificate_cn_and_SANs = +"-----BEGIN CERTIFICATE-----\n" +"MIICajCCAhSgAwIBAgIJAK5xL+HYV+IuMA0GCSqGSIb3DQEBCwUAMHgxCzAJBgNV\n" +"BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX\n" +"aWRnaXRzIFB0eSBMdGQxMTAvBgNVBAMMKHRlc3Quc3NsaGVhZGVycy50cmFmZmlj\n" +"c2VydmVyLmFwYWNoZS5vcmcwHhcNMTUwMzI0MTUyNTEwWhcNMjUwMzIxMTUyNTEw\n" +"WjB4MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwY\n" +"SW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMTEwLwYDVQQDDCh0ZXN0LnNzbGhlYWRl\n" +"cnMudHJhZmZpY3NlcnZlci5hcGFjaGUub3JnMFwwDQYJKoZIhvcNAQEBBQADSwAw\n" +"SAJBAMeiIvB0e2s7gXc4uxmDFeUPjVhjGaGejdkgNoAV/z1sV36G06VGj3JBGkw6\n" +"3fhixVoSfk4MJ/tvuMlu/9E4wL0CAwEAAaOBgDB+MAkGA1UdEwQCMAAwCwYDVR0P\n" +"BAQDAgXgMGQGA1UdEQRdMFuCFCouc29tZXRoaW5nLm9yLm90aGVyghMqLnRyYWZm\n" +"aWNzZXJ2ZXIub3JnghZmb28qLnRyYWZmaWNzZXJ2ZXIuY29tghYqYmFyLnRyYWZm\n" +"aWNzZXJ2ZXIubmV0MA0GCSqGSIb3DQEBCwUAA0EAQmmFmlZQ6lPudkmjJ0K1mSld\n" +"gQP8uiG6cly7NruPZn2Yc1Cha0TycSYfVkRi0dMF2RKtaVvd4uaXDNb4Qpwv3Q==\n" +"-----END CERTIFICATE-----\n"; + +// clang-format on static X509 * load_cert_from_string(const char *cert_string) @@ -177,7 +184,7 @@ REGRESSION_TEST(middle_label_match)(RegressionTest *t, int /* atype ATS_UNUSED * } int -main(int /* argc ATS_UNUSED */, const char ** /* argv ATS_UNUSED */) +main(int argc, const char **argv) { BaseLogFile *blf = new BaseLogFile("stdout"); diags = new Diags(NULL, NULL, blf); @@ -186,8 +193,8 @@ main(int /* argc ATS_UNUSED */, const char ** /* argv ATS_UNUSED */) SSL_library_init(); ink_freelists_snap_baseline(); - RegressionTest::run(); + int status = RegressionTest::main(argc, argv); ink_freelists_dump(stdout); - return RegressionTest::final_status == REGRESSION_TEST_PASSED ? 0 : 1; + return status; } diff --git a/proxy/Main.cc b/proxy/Main.cc index d6fb5595b7f..b2cd94040b3 100644 --- a/proxy/Main.cc +++ b/proxy/Main.cc @@ -145,6 +145,7 @@ static char const *CMD_VERIFY_CONFIG = "verify_config"; #if TS_HAS_TESTS static char regression_test[1024] = ""; static int regression_list = 0; +static int regression_level = 1; #endif int auto_clear_hostdb_flag = 0; extern int fds_limit; @@ -1255,6 +1256,7 @@ struct RegressionCont : public Continuation { int initialized; int waits; int started; + int mainEvent(int event, Event *e) { @@ -1265,17 +1267,22 @@ struct RegressionCont : public Continuation { printf("Regression waiting for the cache to be ready... %d\n", ++waits); return EVENT_CONT; } + char *rt = (char *)(regression_test[0] == 0 ? "" : regression_test); - if (!initialized && RegressionTest::run(rt) == REGRESSION_TEST_INPROGRESS) { + if (!initialized && RegressionTest::run(rt, regression_level) == REGRESSION_TEST_INPROGRESS) { initialized = 1; return EVENT_CONT; } - if ((res = RegressionTest::check_status()) == REGRESSION_TEST_INPROGRESS) + + if ((res = RegressionTest::check_status(regression_level)) == REGRESSION_TEST_INPROGRESS) { return EVENT_CONT; + } + fprintf(stderr, "REGRESSION_TEST DONE: %s\n", regression_status_string(res)); ::exit(res == REGRESSION_TEST_PASSED ? 0 : 1); return EVENT_CONT; } + RegressionCont() : Continuation(new_ProxyMutex()), initialized(0), waits(0), started(0) { SET_HANDLER(&RegressionCont::mainEvent);