Ignore:
Timestamp:
Nov 14, 2012, 12:59:34 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to 3.6.0

Location:
vendor/current/lib/torture
Files:
1 added
1 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/lib/torture/subunit.c

    r414 r740  
    2020#include "includes.h"
    2121#include "lib/torture/torture.h"
     22#include <subunit/child.h>
    2223
    23 static void subunit_suite_start(struct torture_context *ctx,
     24static void torture_subunit_suite_start(struct torture_context *ctx,
    2425                                struct torture_suite *suite)
    2526{
    2627}
    2728
    28 static void subunit_print_testname(struct torture_context *ctx,
     29static char *torture_subunit_test_name(struct torture_context *ctx,
    2930                                   struct torture_tcase *tcase,
    3031                                   struct torture_test *test)
    3132{
    3233        if (!strcmp(tcase->name, test->name)) {
    33                 printf("%s", test->name);
     34                return talloc_strdup(ctx, test->name);
    3435        } else {
    35                 printf("%s.%s", tcase->name, test->name);
     36                return talloc_asprintf(ctx, "%s.%s", tcase->name, test->name);
    3637        }
    3738}
    3839
    39 static void subunit_test_start(struct torture_context *ctx,
     40static 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
     64static void torture_subunit_test_start(struct torture_context *context,
    4065                               struct torture_tcase *tcase,
    4166                               struct torture_test *test)
    4267{
    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);
    4672}
    4773
    48 static void subunit_test_result(struct torture_context *context,
     74static void torture_subunit_test_result(struct torture_context *context,
    4975                                enum torture_result res, const char *reason)
    5076{
     77        char *fullname = torture_subunit_test_name(context, context->active_tcase, context->active_test);
     78        torture_subunit_report_time(context);
    5179        switch (res) {
    5280        case TORTURE_OK:
    53                 printf("success: ");
     81                subunit_test_pass(fullname);
    5482                break;
    5583        case TORTURE_FAIL:
    56                 printf("failure: ");
     84                subunit_test_fail(fullname, reason);
    5785                break;
    5886        case TORTURE_ERROR:
    59                 printf("error: ");
     87                subunit_test_error(fullname, reason);
    6088                break;
    6189        case TORTURE_SKIP:
    62                 printf("skip: ");
     90                subunit_test_skip(fullname, reason);
    6391                break;
    6492        }
    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);
    7094}
    7195
    72 static void subunit_comment(struct torture_context *test,
     96static void torture_subunit_comment(struct torture_context *test,
    7397                            const char *comment)
    7498{
     
    76100}
    77101
    78 static void subunit_warning(struct torture_context *test,
     102static void torture_subunit_warning(struct torture_context *test,
    79103                            const char *comment)
    80104{
     
    82106}
    83107
     108static 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
    84129const 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,
    90137};
  • vendor/current/lib/torture/torture.c

    r414 r740  
    1 /* 
     1/*
    22   Unix SMB/CIFS implementation.
    33   SMB torture UI functions
    44
    55   Copyright (C) Jelmer Vernooij 2006-2008
    6    
     6
    77   This program is free software; you can redistribute it and/or modify
    88   it under the terms of the GNU General Public License as published by
    99   the Free Software Foundation; either version 3 of the License, or
    1010   (at your option) any later version.
    11    
     11
    1212   This program is distributed in the hope that it will be useful,
    1313   but WITHOUT ANY WARRANTY; without even the implied warranty of
    1414   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1515   GNU General Public License for more details.
    16    
     16
    1717   You should have received a copy of the GNU General Public License
    1818   along with this program.  If not, see <http://www.gnu.org/licenses/>.
     
    2424#include "param/param.h"
    2525#include "system/filesys.h"
     26#include "system/dir.h"
     27
    2628
    2729struct torture_results *torture_results_init(TALLOC_CTX *mem_ctx, const struct torture_ui_ops *ui_ops)
     
    7274
    7375        return subtorture;
    74 }       
    75 
    76 /**
    77  create a temporary directory.
     76}
     77
     78/**
     79 create a temporary directory under the output dir
    7880*/
    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)
    8283{
    8384        SMB_ASSERT(tctx->outputdir != NULL);
    8485
    85         *tempdir = talloc_asprintf(tctx, "%s/%s.XXXXXX", tctx->outputdir, 
     86        *tempdir = talloc_asprintf(tctx, "%s/%s.XXXXXX", tctx->outputdir,
    8687                                   prefix);
    8788        NT_STATUS_HAVE_NO_MEMORY(*tempdir);
     
    9192        }
    9293
     94        return NT_STATUS_OK;
     95}
     96
     97static 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        }
    93161        return NT_STATUS_OK;
    94162}
     
    108176        tmp = talloc_vasprintf(context, comment, ap);
    109177        va_end(ap);
    110                
     178
    111179        context->results->ui_ops->comment(context, tmp);
    112        
     180
    113181        talloc_free(tmp);
    114182}
     
    246314}
    247315
     316int 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
    248333/**
    249334 * Run a torture test suite.
     
    251336bool torture_run_suite(struct torture_context *context,
    252337                       struct torture_suite *suite)
     338{
     339        return torture_run_suite_restricted(context, suite, NULL);
     340}
     341
     342bool torture_run_suite_restricted(struct torture_context *context,
     343                       struct torture_suite *suite, const char **restricted)
    253344{
    254345        bool ret = true;
    255346        struct torture_tcase *tcase;
    256347        struct torture_suite *tsuite;
    257         char *old_testname;
    258348
    259349        if (context->results->ui_ops->suite_start)
    260350                context->results->ui_ops->suite_start(context, suite);
    261351
    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);
    268355
    269356        for (tcase = suite->testcases; tcase; tcase = tcase->next) {
    270                 ret &= torture_run_tcase(context, tcase);
     357                ret &= torture_run_tcase_restricted(context, tcase, restricted);
    271358        }
    272359
    273360        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        }
    279365
    280366        if (context->results->ui_ops->suite_finish)
     
    303389}
    304390
     391static 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
    305403static bool internal_torture_run_test(struct torture_context *context,
    306404                                          struct torture_tcase *tcase,
    307405                                          struct torture_test *test,
    308                                           bool already_setup)
     406                                          bool already_setup,
     407                                          const char **restricted)
    309408{
    310409        bool success;
    311         char *old_testname = NULL;
     410        char *subunit_testname = NULL;
    312411
    313412        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;
    317420
    318421        context->active_tcase = tcase;
     
    358461        talloc_free(context->last_reason);
    359462
    360         if (tcase == NULL || strcmp(test->name, tcase->name) != 0) {
    361                 talloc_free(context->active_testname);
    362                 context->active_testname = old_testname;
    363         }
    364463        context->active_test = NULL;
    365464        context->active_tcase = NULL;
     
    368467}
    369468
    370 bool torture_run_tcase(struct torture_context *context, 
     469bool torture_run_tcase(struct torture_context *context,
    371470                       struct torture_tcase *tcase)
    372471{
     472        return torture_run_tcase_restricted(context, tcase, NULL);
     473}
     474
     475bool torture_run_tcase_restricted(struct torture_context *context,
     476                       struct torture_tcase *tcase, const char **restricted)
     477{
    373478        bool ret = true;
    374         char *old_testname;
    375479        struct torture_test *test;
     480        bool setup_succeeded = true;
     481        const char * setup_reason = "Setup failed";
    376482
    377483        context->active_tcase = tcase;
     
    379485                context->results->ui_ops->tcase_start(context, tcase);
    380486
    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)) {
    388517                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
    407520        context->active_tcase = NULL;
     521        context->active_test = NULL;
    408522
    409523        if (context->results->ui_ops->tcase_finish)
    410524                context->results->ui_ops->tcase_finish(context, tcase);
    411525
    412         return ret;
     526        return (!setup_succeeded) ? false : ret;
    413527}
    414528
     
    417531                                          struct torture_test *test)
    418532{
    419         return internal_torture_run_test(context, tcase, test, false);
     533        return internal_torture_run_test(context, tcase, test, false, NULL);
     534}
     535
     536bool 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);
    420542}
    421543
     
    423545                                                        int default_value)
    424546{
    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
     550unsigned 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);
    426556}
    427557
     
    429559                                                        double default_value)
    430560{
    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);
    432562}
    433563
     
    435565                                                        bool default_value)
    436566{
    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);
    438568}
    439569
     
    447577        SMB_ASSERT(test->lp_ctx != NULL);
    448578       
    449         ret = lp_parm_string(test->lp_ctx, NULL, "torture", name);
     579        ret = lpcfg_parm_string(test->lp_ctx, NULL, "torture", name);
    450580
    451581        if (ret == NULL)
     
    620750        return test;
    621751}
     752
     753void 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  
    3333        TORTURE_ERROR=2,
    3434        TORTURE_SKIP=3
     35};
     36
     37enum torture_progress_whence {
     38        TORTURE_PROGRESS_SET,
     39        TORTURE_PROGRESS_CUR,
     40        TORTURE_PROGRESS_POP,
     41        TORTURE_PROGRESS_PUSH,
    3542};
    3643
     
    5360        void (*test_result) (struct torture_context *,
    5461                                                 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 *);
    5564};
    5665
     
    6271                                                                enum torture_result result,
    6372                                                                const char *comment);
     73
     74void torture_ui_report_time(struct torture_context *context);
    6475
    6576/*
     
    7788        struct torture_results *results;
    7889
    79         char *active_testname;
    8090        struct torture_test *active_test;
    8191        struct torture_tcase *active_tcase;
     
    8696        /** Directory used for temporary test data */
    8797        const char *outputdir;
    88        
     98
    8999        /** Event context */
    90100        struct tevent_context *ev;
     
    211221                                           struct torture_suite *suite);
    212222
     223/* Run the specified testsuite recursively, but only the specified
     224 * tests */
     225bool torture_run_suite_restricted(struct torture_context *context,
     226                       struct torture_suite *suite, const char **restricted);
     227
    213228/* Run the specified testcase */
    214229bool torture_run_tcase(struct torture_context *context,
    215230                                           struct torture_tcase *tcase);
     231
     232bool torture_run_tcase_restricted(struct torture_context *context,
     233                       struct torture_tcase *tcase, const char **restricted);
    216234
    217235/* Run the specified test */
     
    220238                                          struct torture_test *test);
    221239
     240bool torture_run_test_restricted(struct torture_context *context,
     241                                          struct torture_tcase *tcase,
     242                                          struct torture_test *test,
     243                                          const char **restricted);
     244
    222245void torture_comment(struct torture_context *test, const char *comment, ...) PRINTF_ATTRIBUTE(2,3);
    223246void torture_warning(struct torture_context *test, const char *comment, ...) PRINTF_ATTRIBUTE(2,3);
     
    229252                torture_result(torture_ctx, TORTURE_FAIL, __location__": Expression `%s' failed: %s", __STRING(expr), cmt); \
    230253                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; \
    231261        }
    232262
     
    278308                                           __location__": "#got" was %s, expected %s: %s", \
    279309                                           __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); \
    280320                return false; \
    281321        } \
     
    358398        if (__got != __expected) { \
    359399                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); \
    362402                return false; \
    363403        } \
     
    368408        if (__got != __expected) { \
    369409                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); \
    372412                ret = false; \
    373413                goto label; \
     
    379419        if (__got != __expected) { \
    380420                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; \
    384439        } \
    385440        } while(0)
     
    396451        } while(0)
    397452
    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)
    399460
    400461#define torture_skip(torture_ctx,cmt) do {\
     
    450511                                                                                 const char *name);
    451512
     513unsigned long torture_setting_ulong(struct torture_context *test,
     514                                    const char *name,
     515                                    unsigned long default_value);
     516
    452517NTSTATUS torture_temp_dir(struct torture_context *tctx,
    453518                                   const char *prefix,
    454519                                   char **tempdir);
     520NTSTATUS torture_deltree_outputdir(struct torture_context *tctx);
    455521
    456522struct torture_test *torture_tcase_add_simple_test(struct torture_tcase *tcase,
     
    462528                              struct torture_tcase *tcase,
    463529                              const char *name);
     530int torture_suite_children_count(const struct torture_suite *suite);
    464531
    465532struct torture_context *torture_context_init(struct tevent_context *event_ctx, struct torture_results *results);
  • vendor/current/lib/torture/torture.pc.in

    r414 r740  
    99Requires: talloc
    1010Version: 0.0.1
    11 Libs: -L${libdir} -ltorture
     11Libs: @LIB_RPATH@ -L${libdir} -ltorture
    1212Cflags: -I${includedir}  -DHAVE_IMMEDIATE_STRUCTURES=1
Note: See TracChangeset for help on using the changeset viewer.