blob: 584f9c0c17fdf1c2177384597f847fe98acad549 [file] [log] [blame]
/* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
* ====================================================================
*/
#include "apr.h"
#include "apr_pools.h"
#include <apr_signal.h>
#include "test_serf.h"
#include <stdlib.h>
static const struct testlist {
const char *testname;
CuSuite *(*func)(void);
} tests[] = {
{"context", test_context},
{"buckets", test_buckets},
{"ssl", test_ssl},
{"auth", test_auth},
{"internal", test_internal},
{"server", test_server},
#if 0
/* internal test for the mock bucket. */
{"mock", test_mock_bucket},
#endif
{"LastTest", NULL}
};
int main(int argc, char *argv[])
{
CuSuite *alltests = NULL;
CuString *output = CuStringNew();
int i;
int list_provided = 0;
int exit_code;
apr_initialize();
atexit(apr_terminate);
#ifdef SIGPIPE
/* Disable SIGPIPE generation for the platforms that have it. */
apr_signal(SIGPIPE, SIG_IGN);
#endif
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-v")) {
continue;
}
if (!strcmp(argv[i], "-l")) {
for (i = 0; tests[i].func != NULL; i++) {
CuSuite *suite;
int j = 0;
printf("%s\n", tests[i].testname);
suite = tests[i].func();
for (j = 0; j < suite->count; j++) {
printf(" %3d - %s\n", j+1, suite->list[j]->name);
}
printf("\n");
}
exit(0);
}
if (argv[i][0] == '-') {
fprintf(stderr, "invalid option: `%s'\n", argv[i]);
exit(1);
}
list_provided = 1;
}
alltests = CuSuiteNew();
if (!list_provided) {
/* add everything */
for (i = 0; tests[i].func != NULL; i++) {
CuSuite *st = tests[i].func();
CuSuiteAddSuite(alltests, st);
CuSuiteFree(st);
}
}
else {
/* add only the tests listed */
for (i = 1; i < argc; i++) {
int j;
int found = 0;
const char *sh;
apr_size_t len;
if (argv[i][0] == '-') {
continue;
}
sh = strchr(argv[i], '#');
if (!sh)
len = strlen(argv[i]);
else {
len = sh - argv[i];
sh++;
}
for (j = 0; tests[j].func != NULL; j++) {
if (strncmp(argv[i], tests[j].testname, len) == 0
&& tests[j].testname[len] == '\0')
{
CuSuite *suite = tests[j].func();
if (sh) {
int k, m = 0;
for (k = 0; k < suite->count; k++) {
if (!strcmp(suite->list[k]->name, sh)) {
suite->list[m++] = suite->list[k];
}
else
CuTestFree(suite->list[k]);
}
suite->count = m;
}
if (suite->count) {
CuSuiteAddSuite(alltests, suite);
found = 1;
}
}
}
if (!found) {
fprintf(stderr, "invalid test name: `%s'\n", argv[i]);
exit(1);
}
}
}
CuSuiteRun2(alltests, TRUE);
/* CuSuiteSummary(alltests, output); */
CuSuiteDetails(alltests, output);
printf("%s\n", output->buffer);
exit_code = alltests->failCount > 0 ? 1 : 0;
CuSuiteFreeDeep(alltests);
CuStringFree(output);
return exit_code;
}