Navigation


source: freeDiameter/freeDiameter/tests/tests.h @ 29:5ba91682f0bc

Last change on this file since 29:5ba91682f0bc was 29:5ba91682f0bc, checked in by Sebastien Decugis <sdecugis@nict.go.jp>, 11 years ago

Added a test for cnxctx (tbc) and fixed some bugs

File size: 4.8 KB
Line 
1/*********************************************************************************************************
2* Software License Agreement (BSD License)                                                               *
3* Author: Sebastien Decugis <sdecugis@nict.go.jp>                                                        *
4*                                                                                                        *
5* Copyright (c) 2009, WIDE Project and NICT                                                              *
6* All rights reserved.                                                                                   *
7*                                                                                                        *
8* Redistribution and use of this software in source and binary forms, with or without modification, are  *
9* permitted provided that the following conditions are met:                                              *
10*                                                                                                        *
11* * Redistributions of source code must retain the above                                                 *
12*   copyright notice, this list of conditions and the                                                    *
13*   following disclaimer.                                                                                *
14*                                                                                                        *
15* * Redistributions in binary form must reproduce the above                                              *
16*   copyright notice, this list of conditions and the                                                    *
17*   following disclaimer in the documentation and/or other                                               *
18*   materials provided with the distribution.                                                            *
19*                                                                                                        *
20* * Neither the name of the WIDE Project or NICT nor the                                                 *
21*   names of its contributors may be used to endorse or                                                  *
22*   promote products derived from this software without                                                  *
23*   specific prior written permission of WIDE Project and                                                *
24*   NICT.                                                                                                *
25*                                                                                                        *
26* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
27* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
28* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
29* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT     *
30* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS    *
31* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
32* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF   *
33* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                                             *
34*********************************************************************************************************/
35
36/* This file contains the definition of our test harness.
37 * The harness is very simple yet.
38 * It may be interessant to go to dejagnu later...
39 *
40 */
41#ifndef _TESTS_H
42#define _TESTS_H
43
44#include "fD.h"
45
46#include <pthread.h>
47#include <errno.h>
48#include <gcrypt.h>
49
50/* Test timeout duration, unless -n is passed on the command line */
51#ifndef TEST_TIMEOUT
52#define TEST_TIMEOUT    30      /* in seconds */
53#endif /* TEST_TIMEOUT */
54
55/* Standard includes */
56#include <getopt.h>
57#include <time.h>
58#include <libgen.h>
59
60/* Define the return code values */
61#define PASS    0
62#define FAIL    1
63
64/* Define the macro to fail a test with a message */
65#define FAILTEST( message... ){                         \
66        fprintf(stderr, ## message);                    \
67        exit(FAIL);                                     \
68}
69
70/* Define the macro to pass a test */
71#define PASSTEST( ){                                    \
72        fprintf(stderr, "Test %s passed\n", __FILE__);  \
73        TRACE_DEBUG(INFO, "Test passed");               \
74        exit(PASS);                                     \
75}
76
77static int test_verbo = 0;
78static struct fd_config conf;
79struct fd_config * fd_g_config = &conf;
80
81/* gcrypt functions to support posix threads */
82GCRY_THREAD_OPTION_PTHREAD_IMPL;
83
84/* Define the standard check routines */
85#define CHECK( _val, _assert ){                         \
86        if (test_verbo > 0) {                           \
87                fprintf(stderr,                         \
88                        "%s:%-4d: CHECK( " #_assert " == "\
89                                #_val " )\n",           \
90                        __FILE__,                       \
91                        __LINE__);                      \
92        }{                                              \
93        __typeof__ (_val) __ret = (_assert);            \
94        if (__ret != (_val)) {                          \
95                FAILTEST( "%s:%d: %s == %lx != %lx\n",  \
96                        __FILE__,                       \
97                        __LINE__,                       \
98                        #_assert,                       \
99                        (unsigned long)__ret,           \
100                        (unsigned long)(_val));         \
101        }}                                              \
102}
103
104/* Minimum inits */
105#define INIT_FD() {                                                             \
106        memset(fd_g_config, 0, sizeof(struct fd_config));                       \
107        CHECK( 0, fd_lib_init() );                                              \
108        fd_log_threadname(basename(__FILE__));                                  \
109        (void) gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);    \
110        (void) gcry_control (GCRYCTL_ENABLE_QUICK_RANDOM, 0);                   \
111        CHECK( 0, gnutls_global_init());                                        \
112        CHECK( 0, fd_conf_init() );                                             \
113        CHECK( 0, fd_dict_base_protocol(fd_g_config->cnf_dict) );               \
114        parse_cmdline(argc, argv);                                              \
115}
116
117static inline void parse_cmdline(int argc, char * argv[]) {
118        int c;
119        int no_timeout = 0;
120        while ((c = getopt (argc, argv, "dqn")) != -1) {
121                switch (c) {
122                        case 'd':       /* Increase verbosity of debug messages.  */
123                                test_verbo++;
124                                break;
125                               
126                        case 'q':       /* Decrease verbosity.  */
127                                test_verbo--;
128                                break;
129                       
130                        case 'n':       /* Disable the timeout of the test.  */
131                                no_timeout = 1;
132                                break;
133                       
134                        default:        /* bug: option not considered.  */
135                                return;
136                }
137        }
138        fd_g_debug_lvl = (test_verbo > 0) ? (test_verbo - 1) : 0;
139        if (!no_timeout)
140                alarm(TEST_TIMEOUT);
141}
142 
143#endif /* _TESTS_H */
Note: See TracBrowser for help on using the repository browser.