00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <TaskContext.hpp>
00022 #include <OperationCaller.hpp>
00023 #include <Operation.hpp>
00024 #include <Service.hpp>
00025 #include <ServiceRequester.hpp>
00026
00027 #include "unit.hpp"
00028 #include "operations_fixture.hpp"
00029
00030
00031 BOOST_FIXTURE_TEST_SUITE( ServiceTestSuite, OperationsFixture )
00032
00033
00038 BOOST_AUTO_TEST_CASE(testClientThreadCall)
00039 {
00040
00041 OperationCaller<double(void)> m0("m0");
00042 m0 = tc->provides("methods");
00043 OperationCaller<double(int)> m1("m1", tc->provides("methods"));
00044 OperationCaller<double(int,double)> m2( tc->provides("methods")->getOperation("m2") );
00045 OperationCaller<double(int,double,bool)> m3("m3", tc->provides("methods"));
00046 OperationCaller<double(int,double,bool,std::string)> m4("m4", tc->provides("methods"));
00047
00048 BOOST_CHECK_EQUAL( -1.0, m0() );
00049 BOOST_CHECK_EQUAL( -2.0, m1(1) );
00050 BOOST_CHECK_EQUAL( -3.0, m2(1, 2.0) );
00051 BOOST_CHECK_EQUAL( -4.0, m3(1, 2.0, true) );
00052 BOOST_CHECK_EQUAL( -5.0, m4(1, 2.0, true,"hello") );
00053
00054
00055 m0.setCaller( caller->engine() );
00056 m1.setCaller( caller->engine() );
00057 m2.setCaller( caller->engine() );
00058 m3.setCaller( caller->engine() );
00059 m4.setCaller( caller->engine() );
00060
00061 BOOST_CHECK_EQUAL( -1.0, m0() );
00062 BOOST_CHECK_EQUAL( -2.0, m1(1) );
00063 BOOST_CHECK_EQUAL( -3.0, m2(1, 2.0) );
00064 BOOST_CHECK_EQUAL( -4.0, m3(1, 2.0, true) );
00065 BOOST_CHECK_EQUAL( -5.0, m4(1, 2.0, true,"hello") );
00066
00067 }
00068
00069 BOOST_AUTO_TEST_CASE(testOwnThreadOperationCallerCall)
00070 {
00071
00072 OperationCaller<double(void)> m0("o0");
00073 m0 = tc->provides("methods");
00074 OperationCaller<double(int)> m1("o1", tc->provides("methods"));
00075 OperationCaller<double(int,double)> m2( tc->provides("methods")->getOperation("o2") );
00076 OperationCaller<double(int,double,bool)> m3("o3", tc->provides("methods"));
00077 OperationCaller<double(int,double,bool,std::string)> m4("o4", tc->provides("methods"));
00078
00079 BOOST_REQUIRE( tc->isRunning() );
00080 BOOST_CHECK_EQUAL( -1.0, m0() );
00081 BOOST_CHECK_EQUAL( -2.0, m1(1) );
00082 BOOST_CHECK_EQUAL( -3.0, m2(1, 2.0) );
00083 BOOST_CHECK_EQUAL( -4.0, m3(1, 2.0, true) );
00084 BOOST_CHECK_EQUAL( -5.0, m4(1, 2.0, true,"hello") );
00085
00086
00087 m0.setCaller( caller->engine() );
00088 m1.setCaller( caller->engine() );
00089 m2.setCaller( caller->engine() );
00090 m3.setCaller( caller->engine() );
00091 m4.setCaller( caller->engine() );
00092
00093 BOOST_REQUIRE( caller->isRunning() );
00094 BOOST_CHECK_EQUAL( -1.0, m0() );
00095 BOOST_CHECK_EQUAL( -2.0, m1(1) );
00096 BOOST_CHECK_EQUAL( -3.0, m2(1, 2.0) );
00097 BOOST_CHECK_EQUAL( -4.0, m3(1, 2.0, true) );
00098 BOOST_CHECK_EQUAL( -5.0, m4(1, 2.0, true,"hello") );
00099 }
00100
00101 BOOST_AUTO_TEST_CASE(testClientThreadOperationCallerSend)
00102 {
00103
00104 OperationCaller<double(void)> m0("m0");
00105 m0 = tc->provides("methods");
00106 OperationCaller<double(int)> m1("m1", tc->provides("methods"));
00107 OperationCaller<double(int,double)> m2( tc->provides("methods")->getOperation("m2") );
00108 OperationCaller<double(int,double,bool)> m3("m3", tc->provides("methods"));
00109 OperationCaller<double(int,double,bool,std::string)> m4("m4", tc->provides("methods"));
00110
00111 BOOST_REQUIRE( tc->isRunning() );
00112 SendHandle<double(void)> h0 = m0.send();
00113 SendHandle<double(int)> h1 = m1.send(1);
00114 SendHandle<double(int,double)> h2 = m2.send(1, 2.0);
00115 SendHandle<double(int,double,bool)> h3 = m3.send(1, 2.0, true);
00116 SendHandle<double(int,double,bool,std::string)> h4 = m4.send(1, 2.0, true,"hello");
00117
00118 double retn=0;
00119 BOOST_CHECK_EQUAL( SendSuccess, h0.collect(retn) );
00120 BOOST_CHECK_EQUAL( retn, -1.0 );
00121 BOOST_CHECK_EQUAL( SendSuccess, h1.collect(retn) );
00122 BOOST_CHECK_EQUAL( retn, -2.0 );
00123 BOOST_CHECK_EQUAL( SendSuccess, h2.collect(retn) );
00124 BOOST_CHECK_EQUAL( retn, -3.0 );
00125 BOOST_CHECK_EQUAL( SendSuccess, h3.collect(retn) );
00126 BOOST_CHECK_EQUAL( retn, -4.0 );
00127 BOOST_CHECK_EQUAL( SendSuccess, h4.collect(retn) );
00128 BOOST_CHECK_EQUAL( retn, -5.0 );
00129
00130
00131 BOOST_CHECK_EQUAL( SendSuccess, h0.collectIfDone(retn) );
00132 BOOST_CHECK_EQUAL( retn, -1.0 );
00133 BOOST_CHECK_EQUAL( SendSuccess, h1.collectIfDone(retn) );
00134 BOOST_CHECK_EQUAL( retn, -2.0 );
00135 BOOST_CHECK_EQUAL( SendSuccess, h2.collectIfDone(retn) );
00136 BOOST_CHECK_EQUAL( retn, -3.0 );
00137 BOOST_CHECK_EQUAL( SendSuccess, h3.collectIfDone(retn) );
00138 BOOST_CHECK_EQUAL( retn, -4.0 );
00139 BOOST_CHECK_EQUAL( SendSuccess, h4.collectIfDone(retn) );
00140 BOOST_CHECK_EQUAL( retn, -5.0 );
00141
00142
00143 BOOST_CHECK_EQUAL( -1.0, h0.ret() );
00144 BOOST_CHECK_EQUAL( -2.0, h1.ret(1) );
00145 BOOST_CHECK_EQUAL( -3.0, h2.ret(1, 2.0) );
00146 BOOST_CHECK_EQUAL( -4.0, h3.ret(1, 2.0, true) );
00147 BOOST_CHECK_EQUAL( -5.0, h4.ret(1, 2.0, true,"hello") );
00148 BOOST_CHECK_EQUAL( -2.0, h1.ret() );
00149 BOOST_CHECK_EQUAL( -3.0, h2.ret() );
00150 BOOST_CHECK_EQUAL( -4.0, h3.ret() );
00151 BOOST_CHECK_EQUAL( -5.0, h4.ret() );
00152
00153
00154 m0.setCaller( caller->engine() );
00155 m1.setCaller( caller->engine() );
00156 m2.setCaller( caller->engine() );
00157 m3.setCaller( caller->engine() );
00158 m4.setCaller( caller->engine() );
00159
00160 BOOST_REQUIRE( caller->isRunning() );
00161 BOOST_REQUIRE( tc->isRunning() );
00162 h0 = m0.send();
00163 h1 = m1.send(1);
00164 h2 = m2.send(1, 2.0);
00165 h3 = m3.send(1, 2.0, true);
00166 h4 = m4.send(1, 2.0, true,"hello");
00167
00168 retn=0;
00169 BOOST_CHECK_EQUAL( SendSuccess, h0.collect(retn) );
00170 BOOST_CHECK_EQUAL( retn, -1.0 );
00171 BOOST_CHECK_EQUAL( SendSuccess, h1.collect(retn) );
00172 BOOST_CHECK_EQUAL( retn, -2.0 );
00173 BOOST_CHECK_EQUAL( SendSuccess, h2.collect(retn) );
00174 BOOST_CHECK_EQUAL( retn, -3.0 );
00175 BOOST_CHECK_EQUAL( SendSuccess, h3.collect(retn) );
00176 BOOST_CHECK_EQUAL( retn, -4.0 );
00177 BOOST_CHECK_EQUAL( SendSuccess, h4.collect(retn) );
00178 BOOST_CHECK_EQUAL( retn, -5.0 );
00179
00180
00181 BOOST_CHECK_EQUAL( SendSuccess, h0.collectIfDone(retn) );
00182 BOOST_CHECK_EQUAL( retn, -1.0 );
00183 BOOST_CHECK_EQUAL( SendSuccess, h1.collectIfDone(retn) );
00184 BOOST_CHECK_EQUAL( retn, -2.0 );
00185 BOOST_CHECK_EQUAL( SendSuccess, h2.collectIfDone(retn) );
00186 BOOST_CHECK_EQUAL( retn, -3.0 );
00187 BOOST_CHECK_EQUAL( SendSuccess, h3.collectIfDone(retn) );
00188 BOOST_CHECK_EQUAL( retn, -4.0 );
00189 BOOST_CHECK_EQUAL( SendSuccess, h4.collectIfDone(retn) );
00190 BOOST_CHECK_EQUAL( retn, -5.0 );
00191
00192
00193 BOOST_CHECK_EQUAL( -1.0, h0.ret() );
00194 BOOST_CHECK_EQUAL( -2.0, h1.ret(1) );
00195 BOOST_CHECK_EQUAL( -3.0, h2.ret(1, 2.0) );
00196 BOOST_CHECK_EQUAL( -4.0, h3.ret(1, 2.0, true) );
00197 BOOST_CHECK_EQUAL( -5.0, h4.ret(1, 2.0, true,"hello") );
00198 BOOST_CHECK_EQUAL( -2.0, h1.ret() );
00199 BOOST_CHECK_EQUAL( -3.0, h2.ret() );
00200 BOOST_CHECK_EQUAL( -4.0, h3.ret() );
00201 BOOST_CHECK_EQUAL( -5.0, h4.ret() );
00202 }
00203
00204 BOOST_AUTO_TEST_CASE(testOwnThreadOperationCallerSend)
00205 {
00206
00207 OperationCaller<double(void)> m0("o0");
00208 m0 = tc->provides("methods");
00209 OperationCaller<double(int)> m1("o1", tc->provides("methods"));
00210 OperationCaller<double(int,double)> m2( tc->provides("methods")->getOperation("o2") );
00211 OperationCaller<double(int,double,bool)> m3("o3", tc->provides("methods"));
00212 OperationCaller<double(int,double,bool,std::string)> m4("o4", tc->provides("methods"));
00213
00214 BOOST_REQUIRE( tc->isRunning() );
00215 SendHandle<double(void)> h0 = m0.send();
00216 SendHandle<double(int)> h1 = m1.send(1);
00217 SendHandle<double(int,double)> h2 = m2.send(1, 2.0);
00218 SendHandle<double(int,double,bool)> h3 = m3.send(1, 2.0, true);
00219 SendHandle<double(int,double,bool,std::string)> h4 = m4.send(1, 2.0, true,"hello");
00220
00221 double retn=0;
00222 BOOST_CHECK_EQUAL( SendSuccess, h0.collect(retn) );
00223 BOOST_CHECK_EQUAL( retn, -1.0 );
00224 BOOST_CHECK_EQUAL( SendSuccess, h1.collect(retn) );
00225 BOOST_CHECK_EQUAL( retn, -2.0 );
00226 BOOST_CHECK_EQUAL( SendSuccess, h2.collect(retn) );
00227 BOOST_CHECK_EQUAL( retn, -3.0 );
00228 BOOST_CHECK_EQUAL( SendSuccess, h3.collect(retn) );
00229 BOOST_CHECK_EQUAL( retn, -4.0 );
00230 BOOST_CHECK_EQUAL( SendSuccess, h4.collect(retn) );
00231 BOOST_CHECK_EQUAL( retn, -5.0 );
00232
00233
00234 BOOST_CHECK_EQUAL( SendSuccess, h0.collectIfDone(retn) );
00235 BOOST_CHECK_EQUAL( retn, -1.0 );
00236 BOOST_CHECK_EQUAL( SendSuccess, h1.collectIfDone(retn) );
00237 BOOST_CHECK_EQUAL( retn, -2.0 );
00238 BOOST_CHECK_EQUAL( SendSuccess, h2.collectIfDone(retn) );
00239 BOOST_CHECK_EQUAL( retn, -3.0 );
00240 BOOST_CHECK_EQUAL( SendSuccess, h3.collectIfDone(retn) );
00241 BOOST_CHECK_EQUAL( retn, -4.0 );
00242 BOOST_CHECK_EQUAL( SendSuccess, h4.collectIfDone(retn) );
00243 BOOST_CHECK_EQUAL( retn, -5.0 );
00244
00245
00246 BOOST_CHECK_EQUAL( -1.0, h0.ret() );
00247 BOOST_CHECK_EQUAL( -2.0, h1.ret(1) );
00248 BOOST_CHECK_EQUAL( -3.0, h2.ret(1, 2.0) );
00249 BOOST_CHECK_EQUAL( -4.0, h3.ret(1, 2.0, true) );
00250 BOOST_CHECK_EQUAL( -5.0, h4.ret(1, 2.0, true,"hello") );
00251 BOOST_CHECK_EQUAL( -2.0, h1.ret() );
00252 BOOST_CHECK_EQUAL( -3.0, h2.ret() );
00253 BOOST_CHECK_EQUAL( -4.0, h3.ret() );
00254 BOOST_CHECK_EQUAL( -5.0, h4.ret() );
00255
00256
00257 m0.setCaller( caller->engine() );
00258 m1.setCaller( caller->engine() );
00259 m2.setCaller( caller->engine() );
00260 m3.setCaller( caller->engine() );
00261 m4.setCaller( caller->engine() );
00262
00263 BOOST_REQUIRE( caller->isRunning() );
00264 BOOST_REQUIRE( tc->isRunning() );
00265 h0 = m0.send();
00266 h1 = m1.send(1);
00267 h2 = m2.send(1, 2.0);
00268 h3 = m3.send(1, 2.0, true);
00269 h4 = m4.send(1, 2.0, true,"hello");
00270
00271 retn=0;
00272 BOOST_CHECK_EQUAL( SendSuccess, h0.collect(retn) );
00273 BOOST_CHECK_EQUAL( retn, -1.0 );
00274 BOOST_CHECK_EQUAL( SendSuccess, h1.collect(retn) );
00275 BOOST_CHECK_EQUAL( retn, -2.0 );
00276 BOOST_CHECK_EQUAL( SendSuccess, h2.collect(retn) );
00277 BOOST_CHECK_EQUAL( retn, -3.0 );
00278 BOOST_CHECK_EQUAL( SendSuccess, h3.collect(retn) );
00279 BOOST_CHECK_EQUAL( retn, -4.0 );
00280 BOOST_CHECK_EQUAL( SendSuccess, h4.collect(retn) );
00281 BOOST_CHECK_EQUAL( retn, -5.0 );
00282
00283
00284 BOOST_CHECK_EQUAL( SendSuccess, h0.collectIfDone(retn) );
00285 BOOST_CHECK_EQUAL( retn, -1.0 );
00286 BOOST_CHECK_EQUAL( SendSuccess, h1.collectIfDone(retn) );
00287 BOOST_CHECK_EQUAL( retn, -2.0 );
00288 BOOST_CHECK_EQUAL( SendSuccess, h2.collectIfDone(retn) );
00289 BOOST_CHECK_EQUAL( retn, -3.0 );
00290 BOOST_CHECK_EQUAL( SendSuccess, h3.collectIfDone(retn) );
00291 BOOST_CHECK_EQUAL( retn, -4.0 );
00292 BOOST_CHECK_EQUAL( SendSuccess, h4.collectIfDone(retn) );
00293 BOOST_CHECK_EQUAL( retn, -5.0 );
00294
00295
00296 BOOST_CHECK_EQUAL( -1.0, h0.ret() );
00297 BOOST_CHECK_EQUAL( -2.0, h1.ret(1) );
00298 BOOST_CHECK_EQUAL( -3.0, h2.ret(1, 2.0) );
00299 BOOST_CHECK_EQUAL( -4.0, h3.ret(1, 2.0, true) );
00300 BOOST_CHECK_EQUAL( -5.0, h4.ret(1, 2.0, true,"hello") );
00301 BOOST_CHECK_EQUAL( -2.0, h1.ret() );
00302 BOOST_CHECK_EQUAL( -3.0, h2.ret() );
00303 BOOST_CHECK_EQUAL( -4.0, h3.ret() );
00304 BOOST_CHECK_EQUAL( -5.0, h4.ret() );
00305
00306 }
00307
00308 BOOST_AUTO_TEST_CASE(testOwnThreadOperationCallerSend_ChangePolicy)
00309 {
00310
00311 OperationCaller<double(void)> m0("o0");
00312
00313
00314 tc->provides("methods")->setOperationThread("o0",ClientThread);
00315 m0 = tc->provides("methods");
00316
00317 BOOST_REQUIRE( tc->isRunning() );
00318 SendHandle<double(void)> h0 = m0.send();
00319
00320 double retn=0;
00321 BOOST_CHECK_EQUAL( SendSuccess, h0.collect(retn) );
00322 BOOST_CHECK_EQUAL( retn, -1.0 );
00323
00324
00325 tc->provides("methods")->setOperationThread("o0",OwnThread);
00326 m0 = tc->provides("methods");
00327
00328 BOOST_REQUIRE( tc->isRunning() );
00329 h0 = m0.send();
00330
00331 retn = 0;
00332 BOOST_CHECK_EQUAL( SendSuccess, h0.collect(retn) );
00333 BOOST_CHECK_EQUAL( retn, -1.0 );
00334 }
00335
00336 BOOST_AUTO_TEST_SUITE_END()