Changeset 740 for vendor/current/lib/torture
- Timestamp:
- Nov 14, 2012, 12:59:34 PM (13 years ago)
- Location:
- vendor/current/lib/torture
- Files:
-
- 1 added
- 1 deleted
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/lib/torture/subunit.c
r414 r740 20 20 #include "includes.h" 21 21 #include "lib/torture/torture.h" 22 #include <subunit/child.h> 22 23 23 static void subunit_suite_start(struct torture_context *ctx,24 static void torture_subunit_suite_start(struct torture_context *ctx, 24 25 struct torture_suite *suite) 25 26 { 26 27 } 27 28 28 static void subunit_print_testname(struct torture_context *ctx,29 static char *torture_subunit_test_name(struct torture_context *ctx, 29 30 struct torture_tcase *tcase, 30 31 struct torture_test *test) 31 32 { 32 33 if (!strcmp(tcase->name, test->name)) { 33 printf("%s", test->name);34 return talloc_strdup(ctx, test->name); 34 35 } else { 35 printf("%s.%s", tcase->name, test->name);36 return talloc_asprintf(ctx, "%s.%s", tcase->name, test->name); 36 37 } 37 38 } 38 39 39 static void subunit_test_start(struct torture_context *ctx, 40 static void torture_subunit_report_time(struct torture_context *tctx) 41 { 42 struct timespec tp; 43 struct tm *tmp; 44 char timestr[200]; 45 if (clock_gettime(CLOCK_REALTIME, &tp) != 0) { 46 perror("clock_gettime"); 47 return; 48 } 49 50 tmp = localtime(&tp.tv_sec); 51 if (!tmp) { 52 perror("localtime"); 53 return; 54 } 55 56 if (strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S", tmp) <= 0) { 57 perror("strftime"); 58 return; 59 } 60 61 printf("time: %s.%06ld\n", timestr, tp.tv_nsec / 1000); 62 } 63 64 static void torture_subunit_test_start(struct torture_context *context, 40 65 struct torture_tcase *tcase, 41 66 struct torture_test *test) 42 67 { 43 printf("test: "); 44 subunit_print_testname(ctx, tcase, test); 45 printf("\n"); 68 char *fullname = torture_subunit_test_name(context, context->active_tcase, context->active_test); 69 subunit_test_start(fullname); 70 torture_subunit_report_time(context); 71 talloc_free(fullname); 46 72 } 47 73 48 static void subunit_test_result(struct torture_context *context,74 static void torture_subunit_test_result(struct torture_context *context, 49 75 enum torture_result res, const char *reason) 50 76 { 77 char *fullname = torture_subunit_test_name(context, context->active_tcase, context->active_test); 78 torture_subunit_report_time(context); 51 79 switch (res) { 52 80 case TORTURE_OK: 53 printf("success: ");81 subunit_test_pass(fullname); 54 82 break; 55 83 case TORTURE_FAIL: 56 printf("failure: ");84 subunit_test_fail(fullname, reason); 57 85 break; 58 86 case TORTURE_ERROR: 59 printf("error: ");87 subunit_test_error(fullname, reason); 60 88 break; 61 89 case TORTURE_SKIP: 62 printf("skip: ");90 subunit_test_skip(fullname, reason); 63 91 break; 64 92 } 65 subunit_print_testname(context, context->active_tcase, context->active_test); 66 67 if (reason) 68 printf(" [\n%s\n]", reason); 69 printf("\n"); 93 talloc_free(fullname); 70 94 } 71 95 72 static void subunit_comment(struct torture_context *test,96 static void torture_subunit_comment(struct torture_context *test, 73 97 const char *comment) 74 98 { … … 76 100 } 77 101 78 static void subunit_warning(struct torture_context *test,102 static void torture_subunit_warning(struct torture_context *test, 79 103 const char *comment) 80 104 { … … 82 106 } 83 107 108 static void torture_subunit_progress(struct torture_context *tctx, int offset, enum torture_progress_whence whence) 109 { 110 switch (whence) { 111 case TORTURE_PROGRESS_SET: 112 printf("progress: %d\n", offset); 113 break; 114 case TORTURE_PROGRESS_CUR: 115 printf("progress: %+-d\n", offset); 116 break; 117 case TORTURE_PROGRESS_POP: 118 printf("progress: pop\n"); 119 break; 120 case TORTURE_PROGRESS_PUSH: 121 printf("progress: push\n"); 122 break; 123 default: 124 fprintf(stderr, "Invalid call to progress()\n"); 125 break; 126 } 127 } 128 84 129 const struct torture_ui_ops torture_subunit_ui_ops = { 85 .comment = subunit_comment, 86 .warning = subunit_warning, 87 .test_start = subunit_test_start, 88 .test_result = subunit_test_result, 89 .suite_start = subunit_suite_start 130 .comment = torture_subunit_comment, 131 .warning = torture_subunit_warning, 132 .test_start = torture_subunit_test_start, 133 .test_result = torture_subunit_test_result, 134 .suite_start = torture_subunit_suite_start, 135 .progress = torture_subunit_progress, 136 .report_time = torture_subunit_report_time, 90 137 }; -
vendor/current/lib/torture/torture.c
r414 r740 1 /* 1 /* 2 2 Unix SMB/CIFS implementation. 3 3 SMB torture UI functions 4 4 5 5 Copyright (C) Jelmer Vernooij 2006-2008 6 6 7 7 This program is free software; you can redistribute it and/or modify 8 8 it under the terms of the GNU General Public License as published by 9 9 the Free Software Foundation; either version 3 of the License, or 10 10 (at your option) any later version. 11 11 12 12 This program is distributed in the hope that it will be useful, 13 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 15 GNU General Public License for more details. 16 16 17 17 You should have received a copy of the GNU General Public License 18 18 along with this program. If not, see <http://www.gnu.org/licenses/>. … … 24 24 #include "param/param.h" 25 25 #include "system/filesys.h" 26 #include "system/dir.h" 27 26 28 27 29 struct torture_results *torture_results_init(TALLOC_CTX *mem_ctx, const struct torture_ui_ops *ui_ops) … … 72 74 73 75 return subtorture; 74 } 75 76 /** 77 create a temporary directory .76 } 77 78 /** 79 create a temporary directory under the output dir 78 80 */ 79 _PUBLIC_ NTSTATUS torture_temp_dir(struct torture_context *tctx, 80 const char *prefix, 81 char **tempdir) 81 _PUBLIC_ NTSTATUS torture_temp_dir(struct torture_context *tctx, 82 const char *prefix, char **tempdir) 82 83 { 83 84 SMB_ASSERT(tctx->outputdir != NULL); 84 85 85 *tempdir = talloc_asprintf(tctx, "%s/%s.XXXXXX", tctx->outputdir, 86 *tempdir = talloc_asprintf(tctx, "%s/%s.XXXXXX", tctx->outputdir, 86 87 prefix); 87 88 NT_STATUS_HAVE_NO_MEMORY(*tempdir); … … 91 92 } 92 93 94 return NT_STATUS_OK; 95 } 96 97 static int local_deltree(const char *path) 98 { 99 int ret = 0; 100 struct dirent *dirent; 101 DIR *dir = opendir(path); 102 if (!dir) { 103 char *error = talloc_asprintf(NULL, "Could not open directory %s", path); 104 perror(error); 105 talloc_free(error); 106 return -1; 107 } 108 while ((dirent = readdir(dir))) { 109 char *name; 110 if ((strcmp(dirent->d_name, ".") == 0) || (strcmp(dirent->d_name, "..") == 0)) { 111 continue; 112 } 113 name = talloc_asprintf(NULL, "%s/%s", path, 114 dirent->d_name); 115 if (name == NULL) { 116 closedir(dir); 117 return -1; 118 } 119 DEBUG(0, ("About to remove %s\n", name)); 120 ret = remove(name); 121 if (ret == 0) { 122 talloc_free(name); 123 continue; 124 } 125 126 if (errno == ENOTEMPTY) { 127 ret = local_deltree(name); 128 if (ret == 0) { 129 ret = remove(name); 130 } 131 } 132 talloc_free(name); 133 if (ret != 0) { 134 char *error = talloc_asprintf(NULL, "Could not remove %s", path); 135 perror(error); 136 talloc_free(error); 137 break; 138 } 139 } 140 closedir(dir); 141 rmdir(path); 142 return ret; 143 } 144 145 _PUBLIC_ NTSTATUS torture_deltree_outputdir(struct torture_context *tctx) 146 { 147 if (tctx->outputdir == NULL) { 148 return NT_STATUS_OK; 149 } 150 if ((strcmp(tctx->outputdir, "/") == 0) 151 || (strcmp(tctx->outputdir, "") == 0)) { 152 return NT_STATUS_INVALID_PARAMETER; 153 } 154 155 if (local_deltree(tctx->outputdir) == -1) { 156 if (errno != 0) { 157 return map_nt_error_from_unix(errno); 158 } 159 return NT_STATUS_UNSUCCESSFUL; 160 } 93 161 return NT_STATUS_OK; 94 162 } … … 108 176 tmp = talloc_vasprintf(context, comment, ap); 109 177 va_end(ap); 110 178 111 179 context->results->ui_ops->comment(context, tmp); 112 180 113 181 talloc_free(tmp); 114 182 } … … 246 314 } 247 315 316 int torture_suite_children_count(const struct torture_suite *suite) 317 { 318 int ret = 0; 319 struct torture_tcase *tcase; 320 struct torture_test *test; 321 struct torture_suite *tsuite; 322 for (tcase = suite->testcases; tcase; tcase = tcase->next) { 323 for (test = tcase->tests; test; test = test->next) { 324 ret++; 325 } 326 } 327 for (tsuite = suite->children; tsuite; tsuite = tsuite->next) { 328 ret ++; 329 } 330 return ret; 331 } 332 248 333 /** 249 334 * Run a torture test suite. … … 251 336 bool torture_run_suite(struct torture_context *context, 252 337 struct torture_suite *suite) 338 { 339 return torture_run_suite_restricted(context, suite, NULL); 340 } 341 342 bool torture_run_suite_restricted(struct torture_context *context, 343 struct torture_suite *suite, const char **restricted) 253 344 { 254 345 bool ret = true; 255 346 struct torture_tcase *tcase; 256 347 struct torture_suite *tsuite; 257 char *old_testname;258 348 259 349 if (context->results->ui_ops->suite_start) 260 350 context->results->ui_ops->suite_start(context, suite); 261 351 262 old_testname = context->active_testname; 263 if (old_testname != NULL) 264 context->active_testname = talloc_asprintf(context, "%s-%s", 265 old_testname, suite->name); 266 else 267 context->active_testname = talloc_strdup(context, suite->name); 352 /* FIXME: Adjust torture_suite_children_count if restricted != NULL */ 353 context->results->ui_ops->progress(context, 354 torture_suite_children_count(suite), TORTURE_PROGRESS_SET); 268 355 269 356 for (tcase = suite->testcases; tcase; tcase = tcase->next) { 270 ret &= torture_run_tcase (context, tcase);357 ret &= torture_run_tcase_restricted(context, tcase, restricted); 271 358 } 272 359 273 360 for (tsuite = suite->children; tsuite; tsuite = tsuite->next) { 274 ret &= torture_run_suite(context, tsuite); 275 } 276 277 talloc_free(context->active_testname); 278 context->active_testname = old_testname; 361 context->results->ui_ops->progress(context, 0, TORTURE_PROGRESS_PUSH); 362 ret &= torture_run_suite_restricted(context, tsuite, restricted); 363 context->results->ui_ops->progress(context, 0, TORTURE_PROGRESS_POP); 364 } 279 365 280 366 if (context->results->ui_ops->suite_finish) … … 303 389 } 304 390 391 static bool test_needs_running(const char *name, const char **restricted) 392 { 393 int i; 394 if (restricted == NULL) 395 return true; 396 for (i = 0; restricted[i]; i++) { 397 if (!strcmp(name, restricted[i])) 398 return true; 399 } 400 return false; 401 } 402 305 403 static bool internal_torture_run_test(struct torture_context *context, 306 404 struct torture_tcase *tcase, 307 405 struct torture_test *test, 308 bool already_setup) 406 bool already_setup, 407 const char **restricted) 309 408 { 310 409 bool success; 311 char * old_testname = NULL;410 char *subunit_testname = NULL; 312 411 313 412 if (tcase == NULL || strcmp(test->name, tcase->name) != 0) { 314 old_testname = context->active_testname; 315 context->active_testname = talloc_asprintf(context, "%s-%s", old_testname, test->name); 316 } 413 subunit_testname = talloc_asprintf(context, "%s.%s", tcase->name, test->name); 414 } else { 415 subunit_testname = talloc_strdup(context, test->name); 416 } 417 418 if (!test_needs_running(subunit_testname, restricted)) 419 return true; 317 420 318 421 context->active_tcase = tcase; … … 358 461 talloc_free(context->last_reason); 359 462 360 if (tcase == NULL || strcmp(test->name, tcase->name) != 0) {361 talloc_free(context->active_testname);362 context->active_testname = old_testname;363 }364 463 context->active_test = NULL; 365 464 context->active_tcase = NULL; … … 368 467 } 369 468 370 bool torture_run_tcase(struct torture_context *context, 469 bool torture_run_tcase(struct torture_context *context, 371 470 struct torture_tcase *tcase) 372 471 { 472 return torture_run_tcase_restricted(context, tcase, NULL); 473 } 474 475 bool torture_run_tcase_restricted(struct torture_context *context, 476 struct torture_tcase *tcase, const char **restricted) 477 { 373 478 bool ret = true; 374 char *old_testname;375 479 struct torture_test *test; 480 bool setup_succeeded = true; 481 const char * setup_reason = "Setup failed"; 376 482 377 483 context->active_tcase = tcase; … … 379 485 context->results->ui_ops->tcase_start(context, tcase); 380 486 381 if (tcase->fixture_persistent && tcase->setup 382 && !tcase->setup(context, &tcase->data)) { 383 /* FIXME: Use torture ui ops for reporting this error */ 384 fprintf(stderr, "Setup failed: "); 385 if (context->last_reason != NULL) 386 fprintf(stderr, "%s", context->last_reason); 387 fprintf(stderr, "\n"); 487 if (tcase->fixture_persistent && tcase->setup) { 488 setup_succeeded = tcase->setup(context, &tcase->data); 489 } 490 491 if (!setup_succeeded) { 492 /* Uh-oh. The setup failed, so we can't run any of the tests 493 * in this testcase. The subunit format doesn't specify what 494 * to do here, so we keep the failure reason, and manually 495 * use it to fail every test. 496 */ 497 if (context->last_reason != NULL) { 498 setup_reason = talloc_asprintf(context, 499 "Setup failed: %s", context->last_reason); 500 } 501 } 502 503 for (test = tcase->tests; test; test = test->next) { 504 if (setup_succeeded) { 505 ret &= internal_torture_run_test(context, tcase, test, 506 tcase->fixture_persistent, restricted); 507 } else { 508 context->active_tcase = tcase; 509 context->active_test = test; 510 torture_ui_test_start(context, tcase, test); 511 torture_ui_test_result(context, TORTURE_FAIL, setup_reason); 512 } 513 } 514 515 if (setup_succeeded && tcase->fixture_persistent && tcase->teardown && 516 !tcase->teardown(context, tcase->data)) { 388 517 ret = false; 389 goto done; 390 } 391 392 old_testname = context->active_testname; 393 context->active_testname = talloc_asprintf(context, "%s-%s", 394 old_testname, tcase->name); 395 for (test = tcase->tests; test; test = test->next) { 396 ret &= internal_torture_run_test(context, tcase, test, 397 tcase->fixture_persistent); 398 } 399 talloc_free(context->active_testname); 400 context->active_testname = old_testname; 401 402 if (tcase->fixture_persistent && tcase->teardown && 403 !tcase->teardown(context, tcase->data)) 404 ret = false; 405 406 done: 518 } 519 407 520 context->active_tcase = NULL; 521 context->active_test = NULL; 408 522 409 523 if (context->results->ui_ops->tcase_finish) 410 524 context->results->ui_ops->tcase_finish(context, tcase); 411 525 412 return ret;526 return (!setup_succeeded) ? false : ret; 413 527 } 414 528 … … 417 531 struct torture_test *test) 418 532 { 419 return internal_torture_run_test(context, tcase, test, false); 533 return internal_torture_run_test(context, tcase, test, false, NULL); 534 } 535 536 bool torture_run_test_restricted(struct torture_context *context, 537 struct torture_tcase *tcase, 538 struct torture_test *test, 539 const char **restricted) 540 { 541 return internal_torture_run_test(context, tcase, test, false, restricted); 420 542 } 421 543 … … 423 545 int default_value) 424 546 { 425 return lp_parm_int(test->lp_ctx, NULL, "torture", name, default_value); 547 return lpcfg_parm_int(test->lp_ctx, NULL, "torture", name, default_value); 548 } 549 550 unsigned long torture_setting_ulong(struct torture_context *test, 551 const char *name, 552 unsigned long default_value) 553 { 554 return lpcfg_parm_ulong(test->lp_ctx, NULL, "torture", name, 555 default_value); 426 556 } 427 557 … … 429 559 double default_value) 430 560 { 431 return lp _parm_double(test->lp_ctx, NULL, "torture", name, default_value);561 return lpcfg_parm_double(test->lp_ctx, NULL, "torture", name, default_value); 432 562 } 433 563 … … 435 565 bool default_value) 436 566 { 437 return lp _parm_bool(test->lp_ctx, NULL, "torture", name, default_value);567 return lpcfg_parm_bool(test->lp_ctx, NULL, "torture", name, default_value); 438 568 } 439 569 … … 447 577 SMB_ASSERT(test->lp_ctx != NULL); 448 578 449 ret = lp _parm_string(test->lp_ctx, NULL, "torture", name);579 ret = lpcfg_parm_string(test->lp_ctx, NULL, "torture", name); 450 580 451 581 if (ret == NULL) … … 620 750 return test; 621 751 } 752 753 void torture_ui_report_time(struct torture_context *context) 754 { 755 if (context->results->ui_ops->report_time) 756 context->results->ui_ops->report_time(context); 757 } -
vendor/current/lib/torture/torture.h
r414 r740 33 33 TORTURE_ERROR=2, 34 34 TORTURE_SKIP=3 35 }; 36 37 enum torture_progress_whence { 38 TORTURE_PROGRESS_SET, 39 TORTURE_PROGRESS_CUR, 40 TORTURE_PROGRESS_POP, 41 TORTURE_PROGRESS_PUSH, 35 42 }; 36 43 … … 53 60 void (*test_result) (struct torture_context *, 54 61 enum torture_result, const char *reason); 62 void (*progress) (struct torture_context *, int offset, enum torture_progress_whence whence); 63 void (*report_time) (struct torture_context *); 55 64 }; 56 65 … … 62 71 enum torture_result result, 63 72 const char *comment); 73 74 void torture_ui_report_time(struct torture_context *context); 64 75 65 76 /* … … 77 88 struct torture_results *results; 78 89 79 char *active_testname;80 90 struct torture_test *active_test; 81 91 struct torture_tcase *active_tcase; … … 86 96 /** Directory used for temporary test data */ 87 97 const char *outputdir; 88 98 89 99 /** Event context */ 90 100 struct tevent_context *ev; … … 211 221 struct torture_suite *suite); 212 222 223 /* Run the specified testsuite recursively, but only the specified 224 * tests */ 225 bool torture_run_suite_restricted(struct torture_context *context, 226 struct torture_suite *suite, const char **restricted); 227 213 228 /* Run the specified testcase */ 214 229 bool torture_run_tcase(struct torture_context *context, 215 230 struct torture_tcase *tcase); 231 232 bool torture_run_tcase_restricted(struct torture_context *context, 233 struct torture_tcase *tcase, const char **restricted); 216 234 217 235 /* Run the specified test */ … … 220 238 struct torture_test *test); 221 239 240 bool torture_run_test_restricted(struct torture_context *context, 241 struct torture_tcase *tcase, 242 struct torture_test *test, 243 const char **restricted); 244 222 245 void torture_comment(struct torture_context *test, const char *comment, ...) PRINTF_ATTRIBUTE(2,3); 223 246 void torture_warning(struct torture_context *test, const char *comment, ...) PRINTF_ATTRIBUTE(2,3); … … 229 252 torture_result(torture_ctx, TORTURE_FAIL, __location__": Expression `%s' failed: %s", __STRING(expr), cmt); \ 230 253 return false; \ 254 } 255 256 #define torture_assert_goto(torture_ctx,expr,ret,label,cmt) \ 257 if (!(expr)) { \ 258 torture_result(torture_ctx, TORTURE_FAIL, __location__": Expression `%s' failed: %s", __STRING(expr), cmt); \ 259 ret = false; \ 260 goto label; \ 231 261 } 232 262 … … 278 308 __location__": "#got" was %s, expected %s: %s", \ 279 309 __got, __expected, cmt); \ 310 return false; \ 311 } \ 312 } while(0) 313 314 #define torture_assert_strn_equal(torture_ctx,got,expected,len,cmt)\ 315 do { const char *__got = (got), *__expected = (expected); \ 316 if (strncmp(__got, __expected, len) != 0) { \ 317 torture_result(torture_ctx, TORTURE_FAIL, \ 318 __location__": "#got" %s of len %d did not match "#expected" %s: %s", \ 319 __got, (int)len, __expected, cmt); \ 280 320 return false; \ 281 321 } \ … … 358 398 if (__got != __expected) { \ 359 399 torture_result(torture_ctx, TORTURE_FAIL, \ 360 __location__": "#got" was %d , expected %d: %s", \361 __got, __ expected, cmt); \400 __location__": "#got" was %d (0x%X), expected %d (0x%X): %s", \ 401 __got, __got, __expected, __expected, cmt); \ 362 402 return false; \ 363 403 } \ … … 368 408 if (__got != __expected) { \ 369 409 torture_result(torture_ctx, TORTURE_FAIL, \ 370 __location__": "#got" was %d , expected %d: %s", \371 __got, __ expected, cmt); \410 __location__": "#got" was %d (0x%X), expected %d (0x%X): %s", \ 411 __got, __got, __expected, __expected, cmt); \ 372 412 ret = false; \ 373 413 goto label; \ … … 379 419 if (__got != __expected) { \ 380 420 torture_result(torture_ctx, TORTURE_FAIL, \ 381 __location__": "#got" was %llu, expected %llu: %s", \ 382 (unsigned long long)__got, (unsigned long long)__expected, cmt); \ 383 return false; \ 421 __location__": "#got" was %llu (0x%llX), expected %llu (0x%llX): %s", \ 422 (unsigned long long)__got, (unsigned long long)__got, \ 423 (unsigned long long)__expected, (unsigned long long)__expected, \ 424 cmt); \ 425 return false; \ 426 } \ 427 } while(0) 428 429 #define torture_assert_u64_equal_goto(torture_ctx,got,expected,ret,label,cmt)\ 430 do { uint64_t __got = (got), __expected = (expected); \ 431 if (__got != __expected) { \ 432 torture_result(torture_ctx, TORTURE_FAIL, \ 433 __location__": "#got" was %llu (0x%llX), expected %llu (0x%llX): %s", \ 434 (unsigned long long)__got, (unsigned long long)__got, \ 435 (unsigned long long)__expected, (unsigned long long)__expected, \ 436 cmt); \ 437 ret = false; \ 438 goto label; \ 384 439 } \ 385 440 } while(0) … … 396 451 } while(0) 397 452 398 453 #define torture_assert_nttime_equal(torture_ctx,got,expected,cmt) \ 454 do { NTTIME __got = got, __expected = expected; \ 455 if (!nt_time_equal(&__got, &__expected)) { \ 456 torture_result(torture_ctx, TORTURE_FAIL, __location__": "#got" was %s, expected %s: %s", nt_time_string(tctx, __got), nt_time_string(tctx, __expected), cmt); \ 457 return false; \ 458 }\ 459 } while(0) 399 460 400 461 #define torture_skip(torture_ctx,cmt) do {\ … … 450 511 const char *name); 451 512 513 unsigned long torture_setting_ulong(struct torture_context *test, 514 const char *name, 515 unsigned long default_value); 516 452 517 NTSTATUS torture_temp_dir(struct torture_context *tctx, 453 518 const char *prefix, 454 519 char **tempdir); 520 NTSTATUS torture_deltree_outputdir(struct torture_context *tctx); 455 521 456 522 struct torture_test *torture_tcase_add_simple_test(struct torture_tcase *tcase, … … 462 528 struct torture_tcase *tcase, 463 529 const char *name); 530 int torture_suite_children_count(const struct torture_suite *suite); 464 531 465 532 struct torture_context *torture_context_init(struct tevent_context *event_ctx, struct torture_results *results); -
vendor/current/lib/torture/torture.pc.in
r414 r740 9 9 Requires: talloc 10 10 Version: 0.0.1 11 Libs: -L${libdir} -ltorture11 Libs: @LIB_RPATH@ -L${libdir} -ltorture 12 12 Cflags: -I${includedir} -DHAVE_IMMEDIATE_STRUCTURES=1
Note:
See TracChangeset
for help on using the changeset viewer.