1 /*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
2  *
3  *  Data Differential YATL (i.e. libtest)  library
4  *
5  *  Copyright (C) 2012 Data Differential, http://datadifferential.com/
6  *
7  *  Redistribution and use in source and binary forms, with or without
8  *  modification, are permitted provided that the following conditions are
9  *  met:
10  *
11  *      * Redistributions of source code must retain the above copyright
12  *  notice, this list of conditions and the following disclaimer.
13  *
14  *      * Redistributions in binary form must reproduce the above
15  *  copyright notice, this list of conditions and the following disclaimer
16  *  in the documentation and/or other materials provided with the
17  *  distribution.
18  *
19  *      * The names of its contributors may not be used to endorse or
20  *  promote products derived from this software without specific prior
21  *  written permission.
22  *
23  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34  *
35  */
36 
37 #include "libtest/yatlcon.h"
38 #include <libtest/common.h>
39 
40 namespace libtest {
41 
Runner()42 Runner::Runner() :
43   _servers(NULL)
44 {
45 }
46 
main(test_callback_fn * func,void * object)47 test_return_t Runner::main(test_callback_fn* func, void *object)
48 {
49   test_return_t ret;
50   try {
51     ret= run(func, object);
52   }
53   catch (const libtest::__skipped& e)
54   {
55     ret= TEST_SKIPPED;
56   }
57   catch (const libtest::__failure& e)
58   {
59     libtest::stream::make_cerr(e.file(), e.line(), e.func()) << e.what();
60     ret= TEST_FAILURE;
61   }
62   catch (const libtest::__success&)
63   {
64     ret= TEST_SUCCESS;
65   }
66   catch (const libtest::fatal&)
67   {
68     throw;
69   }
70   catch (const std::exception& e)
71   {
72     libtest::stream::make_cerr(LIBYATL_DEFAULT_PARAM) << e.what();
73     throw;
74   }
75   catch (...)
76   {
77     libtest::stream::make_cerr(LIBYATL_DEFAULT_PARAM) << "Unknown exception thrown";
78     throw;
79   }
80 
81   return ret;
82 }
83 
setup(test_callback_fn * func,void * object)84 test_return_t Runner::setup(test_callback_fn* func, void *object)
85 {
86   test_return_t ret;
87   try {
88     ret= pre(func, object);
89   }
90   catch (const libtest::__skipped& e)
91   {
92     ret= TEST_SKIPPED;
93   }
94   catch (const libtest::__failure& e)
95   {
96     libtest::stream::make_cout(e.file(), e.line(), e.func()) << e.what();
97     ret= TEST_FAILURE;
98   }
99   catch (const libtest::__success&)
100   {
101     ret= TEST_SUCCESS;
102   }
103   catch (const libtest::fatal& e)
104   {
105     throw;
106   }
107   catch (const std::exception& e)
108   {
109     libtest::stream::make_cerr(LIBYATL_DEFAULT_PARAM) << e.what();
110     throw;
111   }
112   catch (...)
113   {
114     libtest::stream::make_cerr(LIBYATL_DEFAULT_PARAM) << "Unknown exception thrown";
115     throw;
116   }
117 
118   return ret;
119 }
120 
teardown(test_callback_fn * func,void * object)121 test_return_t Runner::teardown(test_callback_fn* func, void *object)
122 {
123   test_return_t ret;
124   try {
125     ret= post(func, object);
126   }
127   catch (const libtest::__skipped& e)
128   {
129     ret= TEST_SKIPPED;
130   }
131   catch (const libtest::__failure& e)
132   {
133     libtest::stream::make_cerr(LIBYATL_DEFAULT_PARAM) << e.what();
134     ret= TEST_FAILURE;
135   }
136   catch (const libtest::__success&)
137   {
138     ret= TEST_SUCCESS;
139   }
140   catch (const libtest::fatal& e)
141   {
142     throw;
143   }
144   catch (const std::exception& e)
145   {
146     libtest::stream::make_cerr(LIBYATL_DEFAULT_PARAM) << e.what();
147     throw;
148   }
149   catch (...)
150   {
151     libtest::stream::make_cerr(LIBYATL_DEFAULT_PARAM) << "Unknown exception thrown";
152     throw;
153   }
154 
155   return ret;
156 }
157 
flush(void *)158 test_return_t Runner::flush(void*)
159 {
160   return TEST_SUCCESS;
161 }
162 
run(test_callback_fn * func,void * object)163 test_return_t Runner::run(test_callback_fn* func, void *object)
164 {
165   if (func)
166   {
167     return func(object);
168   }
169 
170   return TEST_SUCCESS;
171 }
172 
pre(test_callback_fn * func,void * object)173 test_return_t Runner::pre(test_callback_fn* func, void *object)
174 {
175   if (func)
176   {
177     return func(object);
178   }
179 
180   return TEST_SUCCESS;
181 }
182 
post(test_callback_fn * func,void * object)183 test_return_t Runner::post(test_callback_fn* func, void *object)
184 {
185   if (func)
186   {
187     return func(object);
188   }
189 
190   return TEST_SUCCESS;
191 }
192 
set_servers(libtest::server_startup_st & arg)193 void Runner::set_servers(libtest::server_startup_st& arg)
194 {
195   _servers= &arg;
196 }
197 
check()198 bool Runner::check()
199 {
200   return _servers ? _servers->check() : true;
201 }
202 
203 } // namespace libtest
204