00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <boost/lexical_cast.hpp>
00014
00015
00016
00017
00018 #include "PSEvt/Source.h"
00019 #include "PSEvt/Exceptions.h"
00020
00021 using namespace PSEvt;
00022 using namespace Pds;
00023 using namespace boost;
00024
00025 #define BOOST_TEST_MODULE psevt-source-unit-test
00026 #include <boost/test/included/unit_test.hpp>
00027
00028 namespace {
00029
00030 AliasMap amap;
00031 Src src_no_src;
00032 DetInfo dinfo1(0, DetInfo::Detector(0), 0, DetInfo::Device(0), 0);
00033 DetInfo dinfo2(1, DetInfo::Detector(1), 1, DetInfo::Device(1), 1);
00034 ProcInfo pinfo1(Pds::Level::Control, 0, 0x01010101);
00035 ProcInfo pinfo2(Pds::Level::Control, 0, 0x70707070);
00036 BldInfo binfo1(0, BldInfo::EBeam);
00037 BldInfo binfo2(0, BldInfo::PhaseCavity);
00038
00039
00040 void checkAny(Source xsrc)
00041 {
00042 Source::SrcMatch src = xsrc.srcMatch(amap);
00043
00044 BOOST_CHECK( not src.isNoSource() ) ;
00045 BOOST_CHECK( not src.isExact() ) ;
00046
00047 BOOST_CHECK( src.match(src_no_src) ) ;
00048
00049 BOOST_CHECK( src.match(dinfo1) ) ;
00050 BOOST_CHECK( src.match(dinfo2) ) ;
00051
00052 BOOST_CHECK( src.match(pinfo1) ) ;
00053 BOOST_CHECK( src.match(pinfo2) ) ;
00054
00055 BOOST_CHECK( src.match(binfo1) ) ;
00056 BOOST_CHECK( src.match(binfo2) ) ;
00057 }
00058
00059 void checkNoSrc(Source xsrc)
00060 {
00061 Source::SrcMatch src = xsrc.srcMatch(amap);
00062
00063 BOOST_CHECK( src.isNoSource() ) ;
00064 BOOST_CHECK( src.isExact() ) ;
00065
00066 BOOST_CHECK( src.match(src_no_src) ) ;
00067
00068 BOOST_CHECK( not src.match(dinfo1) ) ;
00069 BOOST_CHECK( not src.match(dinfo2) ) ;
00070
00071 BOOST_CHECK( not src.match(pinfo1) ) ;
00072 BOOST_CHECK( not src.match(pinfo2) ) ;
00073
00074 BOOST_CHECK( not src.match(binfo1) ) ;
00075 BOOST_CHECK( not src.match(binfo2) ) ;
00076 }
00077
00078 void checkAnyDetInfo(Source xsrc)
00079 {
00080 Source::SrcMatch src = xsrc.srcMatch(amap);
00081
00082 BOOST_CHECK( not src.isNoSource() ) ;
00083 BOOST_CHECK( not src.isExact() ) ;
00084
00085 BOOST_CHECK( not src.match(src_no_src) ) ;
00086
00087 BOOST_CHECK( src.match(dinfo1) ) ;
00088 BOOST_CHECK( src.match(dinfo2) ) ;
00089
00090 BOOST_CHECK( not src.match(pinfo1) ) ;
00091 BOOST_CHECK( not src.match(pinfo2) ) ;
00092
00093 BOOST_CHECK( not src.match(binfo1) ) ;
00094 BOOST_CHECK( not src.match(binfo2) ) ;
00095 }
00096
00097 void checkDetInfo0000(Source xsrc)
00098 {
00099 Source::SrcMatch src = xsrc.srcMatch(amap);
00100
00101 BOOST_CHECK( not src.isNoSource() ) ;
00102 BOOST_CHECK( src.isExact() ) ;
00103
00104 BOOST_CHECK( not src.match(src_no_src) ) ;
00105
00106 BOOST_CHECK( src.match(dinfo1) ) ;
00107 BOOST_CHECK( not src.match(dinfo2) ) ;
00108
00109 BOOST_CHECK( not src.match(pinfo1) ) ;
00110 BOOST_CHECK( not src.match(pinfo2) ) ;
00111
00112 BOOST_CHECK( not src.match(binfo1) ) ;
00113 BOOST_CHECK( not src.match(binfo2) ) ;
00114 }
00115
00116 void checkDetInfo1111(Source xsrc)
00117 {
00118 Source::SrcMatch src = xsrc.srcMatch(amap);
00119
00120 BOOST_CHECK( not src.isNoSource() ) ;
00121 BOOST_CHECK( src.isExact() ) ;
00122
00123 BOOST_CHECK( not src.match(src_no_src) ) ;
00124
00125 BOOST_CHECK( not src.match(dinfo1) ) ;
00126 BOOST_CHECK( src.match(dinfo2) ) ;
00127
00128 BOOST_CHECK( not src.match(pinfo1) ) ;
00129 BOOST_CHECK( not src.match(pinfo2) ) ;
00130
00131 BOOST_CHECK( not src.match(binfo1) ) ;
00132 BOOST_CHECK( not src.match(binfo2) ) ;
00133 }
00134
00135 void checkDetInfo(Source xsrc, Pds::DetInfo::Detector det, unsigned detId, Pds::DetInfo::Device dev, unsigned devId)
00136 {
00137 Source::SrcMatch src = xsrc.srcMatch(amap);
00138
00139 BOOST_CHECK( not src.isNoSource() ) ;
00140 BOOST_CHECK( src.isExact() ) ;
00141
00142 const Pds::Src& psrc = src.src();
00143 BOOST_CHECK_EQUAL(psrc.level(), Pds::Level::Source) ;
00144
00145 const Pds::DetInfo& deti = static_cast<const Pds::DetInfo&>(psrc);
00146 BOOST_CHECK_EQUAL(deti.detector(), det) ;
00147 BOOST_CHECK_EQUAL(deti.detId(), detId) ;
00148 BOOST_CHECK_EQUAL(deti.device(), dev) ;
00149 BOOST_CHECK_EQUAL(deti.devId(), devId) ;
00150 }
00151
00152 void checkDetInfoMatch(Source xsrc)
00153 {
00154 Source::SrcMatch src = xsrc.srcMatch(amap);
00155
00156 BOOST_CHECK( not src.isNoSource() ) ;
00157 BOOST_CHECK( not src.isExact() ) ;
00158
00159 BOOST_CHECK( not src.match(src_no_src) ) ;
00160
00161 BOOST_CHECK( src.match(dinfo1) ) ;
00162 BOOST_CHECK( not src.match(dinfo2) ) ;
00163
00164 BOOST_CHECK( not src.match(pinfo1) ) ;
00165 BOOST_CHECK( not src.match(pinfo2) ) ;
00166
00167 BOOST_CHECK( not src.match(binfo1) ) ;
00168 BOOST_CHECK( not src.match(binfo2) ) ;
00169 }
00170
00171 void checkBldInfoEBeam(Source xsrc)
00172 {
00173 Source::SrcMatch src = xsrc.srcMatch(amap);
00174
00175 BOOST_CHECK( not src.isNoSource() ) ;
00176 BOOST_CHECK( src.isExact() ) ;
00177
00178 BOOST_CHECK( not src.match(src_no_src) ) ;
00179
00180 BOOST_CHECK( not src.match(dinfo1) ) ;
00181 BOOST_CHECK( not src.match(dinfo2) ) ;
00182
00183 BOOST_CHECK( not src.match(pinfo1) ) ;
00184 BOOST_CHECK( not src.match(pinfo2) ) ;
00185
00186 BOOST_CHECK( src.match(binfo1) ) ;
00187 BOOST_CHECK( not src.match(binfo2) ) ;
00188 }
00189
00190 void checkBldInfo(Source xsrc, Pds::BldInfo::Type type)
00191 {
00192 Source::SrcMatch src = xsrc.srcMatch(amap);
00193
00194 BOOST_CHECK( not src.isNoSource() ) ;
00195 BOOST_CHECK( src.isExact() ) ;
00196
00197 const Pds::Src& psrc = src.src();
00198 BOOST_CHECK_EQUAL(psrc.level(), Pds::Level::Reporter) ;
00199
00200 const Pds::BldInfo& bld = static_cast<const Pds::BldInfo&>(psrc);
00201 BOOST_CHECK_EQUAL(bld.type(), type) ;
00202 }
00203
00204 void checkAnyBldInfo(Source xsrc)
00205 {
00206 Source::SrcMatch src = xsrc.srcMatch(amap);
00207
00208 BOOST_CHECK( not src.isNoSource() ) ;
00209 BOOST_CHECK( not src.isExact() ) ;
00210
00211 BOOST_CHECK( not src.match(src_no_src) ) ;
00212
00213 BOOST_CHECK( not src.match(dinfo1) ) ;
00214 BOOST_CHECK( not src.match(dinfo2) ) ;
00215
00216 BOOST_CHECK( not src.match(pinfo1) ) ;
00217 BOOST_CHECK( not src.match(pinfo2) ) ;
00218
00219 BOOST_CHECK( src.match(binfo1) ) ;
00220 BOOST_CHECK( src.match(binfo2) ) ;
00221 }
00222
00223 void checkAnyProcInfo(Source xsrc)
00224 {
00225 Source::SrcMatch src = xsrc.srcMatch(amap);
00226
00227 BOOST_CHECK( not src.isNoSource() ) ;
00228 BOOST_CHECK( not src.isExact() ) ;
00229
00230 BOOST_CHECK( not src.match(src_no_src) ) ;
00231
00232 BOOST_CHECK( not src.match(dinfo1) ) ;
00233 BOOST_CHECK( not src.match(dinfo2) ) ;
00234
00235 BOOST_CHECK( src.match(pinfo1) ) ;
00236 BOOST_CHECK( src.match(pinfo2) ) ;
00237
00238 BOOST_CHECK( not src.match(binfo1) ) ;
00239 BOOST_CHECK( not src.match(binfo2) ) ;
00240 }
00241
00242 void checkProcInfo1(Source xsrc)
00243 {
00244 Source::SrcMatch src = xsrc.srcMatch(amap);
00245
00246 BOOST_CHECK( not src.isNoSource() ) ;
00247 BOOST_CHECK( src.isExact() ) ;
00248
00249 BOOST_CHECK( not src.match(src_no_src) ) ;
00250
00251 BOOST_CHECK( not src.match(dinfo1) ) ;
00252 BOOST_CHECK( not src.match(dinfo2) ) ;
00253
00254 BOOST_CHECK( src.match(pinfo1) ) ;
00255 BOOST_CHECK( not src.match(pinfo2) ) ;
00256
00257 BOOST_CHECK( not src.match(binfo1) ) ;
00258 BOOST_CHECK( not src.match(binfo2) ) ;
00259 }
00260
00261
00262 }
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272 BOOST_AUTO_TEST_CASE( test_any )
00273 {
00274 Source src;
00275
00276 ::checkAny(src);
00277 }
00278
00279
00280
00281 BOOST_AUTO_TEST_CASE( test_no_source )
00282 {
00283 Source src(Source::null);
00284
00285 ::checkNoSrc(src);
00286 }
00287
00288
00289
00290 BOOST_AUTO_TEST_CASE( test_detinfo1 )
00291 {
00292 Source src(DetInfo::Detector(0), 0, DetInfo::Device(0), 0);
00293
00294 ::checkDetInfo0000(src);
00295 }
00296
00297
00298
00299 BOOST_AUTO_TEST_CASE( test_detinfo2 )
00300 {
00301 Source src(DetInfo(0, DetInfo::Detector(0), 0, DetInfo::Device(0), 0));
00302
00303 ::checkDetInfo0000(src);
00304 }
00305
00306
00307
00308 BOOST_AUTO_TEST_CASE( test_bldinfo1 )
00309 {
00310 Source src(BldInfo::EBeam);
00311
00312 ::checkBldInfoEBeam(src);
00313 }
00314
00315
00316
00317 BOOST_AUTO_TEST_CASE( test_bldinfo2 )
00318 {
00319 Source src(BldInfo(0, BldInfo::EBeam));
00320
00321 ::checkBldInfoEBeam(src);
00322 }
00323
00324
00325
00326 BOOST_AUTO_TEST_CASE( test_str_any )
00327 {
00328 Source src("");
00329
00330 ::checkAny(src);
00331 }
00332
00333
00334
00335 BOOST_AUTO_TEST_CASE( test_str_any_detinfo )
00336 {
00337 ::checkAnyDetInfo(Source("DetInfo()"));
00338 ::checkAnyDetInfo(Source("DetInfo(*.*:*.*)"));
00339 ::checkAnyDetInfo(Source("DetInfo(*:*)"));
00340 ::checkAnyDetInfo(Source("DetInfo(:)"));
00341 ::checkAnyDetInfo(Source("DetInfo(.*:.*)"));
00342 ::checkAnyDetInfo(Source("DetInfo(*)"));
00343 ::checkAnyDetInfo(Source("DetInfo(:*)"));
00344 ::checkAnyDetInfo(Source("DetInfo(*-*|*-*)"));
00345 }
00346
00347
00348
00349 BOOST_AUTO_TEST_CASE( test_str_detinfo )
00350 {
00351 ::checkDetInfo0000(Source("DetInfo(NoDetector.0:NoDevice.0)"));
00352 ::checkDetInfo0000(Source("NoDetector.0:NoDevice.0"));
00353
00354 ::checkDetInfo(Source("DetInfo(NoDetector.0:NoDevice.0)"), Pds::DetInfo::NoDetector, 0, Pds::DetInfo::NoDevice, 0);
00355 ::checkDetInfo(Source("DetInfo(AmoGasdet.5:Princeton.9)"), Pds::DetInfo::AmoGasdet, 5, Pds::DetInfo::Princeton, 9);
00356 }
00357
00358
00359
00360 BOOST_AUTO_TEST_CASE( test_str_detinfo_det )
00361 {
00362 ::checkDetInfoMatch(Source("DetInfo(NoDetector.*:NoDevice.0)"));
00363 ::checkDetInfoMatch(Source("DetInfo(:NoDevice)"));
00364 ::checkDetInfoMatch(Source("DetInfo(NoDetector)"));
00365 ::checkDetInfoMatch(Source("DetInfo(NoDetector.0:*.0)"));
00366 ::checkDetInfoMatch(Source("DetInfo(NoDetector.0:*.*)"));
00367 ::checkDetInfoMatch(Source("DetInfo(*.0:*.*)"));
00368 ::checkDetInfoMatch(Source("DetInfo(NoDetector.*:*.*)"));
00369 ::checkDetInfoMatch(Source("DetInfo(*.*:NoDevice.0)"));
00370 ::checkDetInfoMatch(Source("DetInfo(*.*:NoDevice.*)"));
00371 ::checkDetInfoMatch(Source("DetInfo(*.*:*.0)"));
00372
00373 ::checkDetInfoMatch(Source("NoDetector.*:NoDevice.0"));
00374 ::checkDetInfoMatch(Source("NoDetector"));
00375 }
00376
00377
00378
00379 BOOST_AUTO_TEST_CASE( test_str_any_bldinfo )
00380 {
00381 ::checkAnyBldInfo(Source("BldInfo()"));
00382 }
00383
00384
00385
00386 BOOST_AUTO_TEST_CASE( test_str_bldinfo )
00387 {
00388 ::checkBldInfoEBeam(Source("BldInfo(EBeam)"));
00389 ::checkBldInfoEBeam(Source("EBeam"));
00390
00391 ::checkBldInfo(Source("BldInfo(EBeam)"), Pds::BldInfo::EBeam);
00392 ::checkBldInfo(Source("BldInfo(PhaseCavity)"), Pds::BldInfo::PhaseCavity);
00393 ::checkBldInfo(Source("BldInfo(FEEGasDetEnergy)"), Pds::BldInfo::FEEGasDetEnergy);
00394 }
00395
00396
00397
00398 BOOST_AUTO_TEST_CASE( test_str_any_procinfo )
00399 {
00400 ::checkAnyProcInfo(Source("ProcInfo()"));
00401 }
00402
00403
00404
00405 BOOST_AUTO_TEST_CASE( test_str_procinfo )
00406 {
00407 ::checkProcInfo1(Source("ProcInfo(1.1.1.1)"));
00408 }
00409
00410
00411
00412 BOOST_AUTO_TEST_CASE( test_str_valid )
00413 {
00414 BOOST_CHECK_NO_THROW(Source("DetInfo()").srcMatch(amap));
00415 BOOST_CHECK_NO_THROW(Source("DetInfo(:)").srcMatch(amap));
00416 BOOST_CHECK_NO_THROW(Source("DetInfo(.:)").srcMatch(amap));
00417 BOOST_CHECK_NO_THROW(Source("DetInfo(:.)").srcMatch(amap));
00418 BOOST_CHECK_NO_THROW(Source("DetInfo(.:.)").srcMatch(amap));
00419 BOOST_CHECK_NO_THROW(Source("DetInfo(|)").srcMatch(amap));
00420 BOOST_CHECK_NO_THROW(Source("DetInfo(-|)").srcMatch(amap));
00421 BOOST_CHECK_NO_THROW(Source("DetInfo(|-)").srcMatch(amap));
00422 BOOST_CHECK_NO_THROW(Source("DetInfo(-|-)").srcMatch(amap));
00423
00424 BOOST_CHECK_NO_THROW(Source("DetInfo(NoDetector)").srcMatch(amap));
00425 BOOST_CHECK_NO_THROW(Source("DetInfo(AmoIMS)").srcMatch(amap));
00426 BOOST_CHECK_NO_THROW(Source("DetInfo(AmoGD)").srcMatch(amap));
00427 BOOST_CHECK_NO_THROW(Source("DetInfo(AmoETOF)").srcMatch(amap));
00428 BOOST_CHECK_NO_THROW(Source("DetInfo(AmoITOF)").srcMatch(amap));
00429 BOOST_CHECK_NO_THROW(Source("DetInfo(AmoMBES)").srcMatch(amap));
00430 BOOST_CHECK_NO_THROW(Source("DetInfo(AmoVMI)").srcMatch(amap));
00431 BOOST_CHECK_NO_THROW(Source("DetInfo(AmoBPS)").srcMatch(amap));
00432 BOOST_CHECK_NO_THROW(Source("DetInfo(Camp)").srcMatch(amap));
00433 BOOST_CHECK_NO_THROW(Source("DetInfo(EpicsArch)").srcMatch(amap));
00434 BOOST_CHECK_NO_THROW(Source("DetInfo(BldEb)").srcMatch(amap));
00435 BOOST_CHECK_NO_THROW(Source("DetInfo(SxrBeamline)").srcMatch(amap));
00436 BOOST_CHECK_NO_THROW(Source("DetInfo(SxrEndstation)").srcMatch(amap));
00437 BOOST_CHECK_NO_THROW(Source("DetInfo(XppSb1Ipm)").srcMatch(amap));
00438 BOOST_CHECK_NO_THROW(Source("DetInfo(XppSb1Pim)").srcMatch(amap));
00439 BOOST_CHECK_NO_THROW(Source("DetInfo(XppMonPim)").srcMatch(amap));
00440 BOOST_CHECK_NO_THROW(Source("DetInfo(XppSb2Ipm)").srcMatch(amap));
00441 BOOST_CHECK_NO_THROW(Source("DetInfo(XppSb3Ipm)").srcMatch(amap));
00442 BOOST_CHECK_NO_THROW(Source("DetInfo(XppSb3Pim)").srcMatch(amap));
00443 BOOST_CHECK_NO_THROW(Source("DetInfo(XppSb4Pim)").srcMatch(amap));
00444 BOOST_CHECK_NO_THROW(Source("DetInfo(XppGon)").srcMatch(amap));
00445 BOOST_CHECK_NO_THROW(Source("DetInfo(XppLas)").srcMatch(amap));
00446 BOOST_CHECK_NO_THROW(Source("DetInfo(XppEndstation)").srcMatch(amap));
00447 BOOST_CHECK_NO_THROW(Source("DetInfo(AmoEndstation)").srcMatch(amap));
00448 BOOST_CHECK_NO_THROW(Source("DetInfo(CxiEndstation)").srcMatch(amap));
00449 BOOST_CHECK_NO_THROW(Source("DetInfo(XcsEndstation)").srcMatch(amap));
00450 BOOST_CHECK_NO_THROW(Source("DetInfo(MecEndstation)").srcMatch(amap));
00451 BOOST_CHECK_NO_THROW(Source("DetInfo(CxiDg1)").srcMatch(amap));
00452 BOOST_CHECK_NO_THROW(Source("DetInfo(CxiDg2)").srcMatch(amap));
00453 BOOST_CHECK_NO_THROW(Source("DetInfo(CxiDg3)").srcMatch(amap));
00454 BOOST_CHECK_NO_THROW(Source("DetInfo(CxiDg4)").srcMatch(amap));
00455 BOOST_CHECK_NO_THROW(Source("DetInfo(CxiKb1)").srcMatch(amap));
00456 BOOST_CHECK_NO_THROW(Source("DetInfo(CxiDs1)").srcMatch(amap));
00457 BOOST_CHECK_NO_THROW(Source("DetInfo(CxiDs2)").srcMatch(amap));
00458 BOOST_CHECK_NO_THROW(Source("DetInfo(CxiDsu)").srcMatch(amap));
00459 BOOST_CHECK_NO_THROW(Source("DetInfo(CxiSc1)").srcMatch(amap));
00460
00461 BOOST_CHECK_NO_THROW(Source("DetInfo(:NoDevice)").srcMatch(amap));
00462 BOOST_CHECK_NO_THROW(Source("DetInfo(:Evr)").srcMatch(amap));
00463 BOOST_CHECK_NO_THROW(Source("DetInfo(:Acqiris)").srcMatch(amap));
00464 BOOST_CHECK_NO_THROW(Source("DetInfo(:Opal1000)").srcMatch(amap));
00465 BOOST_CHECK_NO_THROW(Source("DetInfo(:Tm6740)").srcMatch(amap));
00466 BOOST_CHECK_NO_THROW(Source("DetInfo(:pnCCD)").srcMatch(amap));
00467 BOOST_CHECK_NO_THROW(Source("DetInfo(:Princeton)").srcMatch(amap));
00468 BOOST_CHECK_NO_THROW(Source("DetInfo(:Fccd)").srcMatch(amap));
00469 BOOST_CHECK_NO_THROW(Source("DetInfo(:Ipimb)").srcMatch(amap));
00470 BOOST_CHECK_NO_THROW(Source("DetInfo(:Encoder)").srcMatch(amap));
00471 BOOST_CHECK_NO_THROW(Source("DetInfo(:Cspad)").srcMatch(amap));
00472 BOOST_CHECK_NO_THROW(Source("DetInfo(:AcqTDC)").srcMatch(amap));
00473
00474 BOOST_CHECK_NO_THROW(Source("DetInfo(.1:.2)").srcMatch(amap));
00475 BOOST_CHECK_NO_THROW(Source("DetInfo(.1:)").srcMatch(amap));
00476 BOOST_CHECK_NO_THROW(Source("DetInfo(:.2)").srcMatch(amap));
00477 BOOST_CHECK_NO_THROW(Source("DetInfo(*.1:*.2)").srcMatch(amap));
00478 BOOST_CHECK_NO_THROW(Source("DetInfo(*.1:*)").srcMatch(amap));
00479 BOOST_CHECK_NO_THROW(Source("DetInfo(*:*.2)").srcMatch(amap));
00480
00481 BOOST_CHECK_NO_THROW(Source("DetInfo(*-1|*-2)").srcMatch(amap));
00482
00483 BOOST_CHECK_NO_THROW(Source("BldInfo()").srcMatch(amap));
00484 BOOST_CHECK_NO_THROW(Source("BldInfo(EBeam)").srcMatch(amap));
00485 BOOST_CHECK_NO_THROW(Source("BldInfo(PhaseCavity)").srcMatch(amap));
00486 BOOST_CHECK_NO_THROW(Source("BldInfo(FEEGasDetEnergy)").srcMatch(amap));
00487 BOOST_CHECK_NO_THROW(Source("BldInfo(NH2-SB1-IPM-01)").srcMatch(amap));
00488
00489 BOOST_CHECK_NO_THROW(Source("ProcInfo()").srcMatch(amap));
00490 BOOST_CHECK_NO_THROW(Source("ProcInfo(0.0.0.0)").srcMatch(amap));
00491 BOOST_CHECK_NO_THROW(Source("ProcInfo(1.1.1.1)").srcMatch(amap));
00492 BOOST_CHECK_NO_THROW(Source("ProcInfo(255.255.255.255)").srcMatch(amap));
00493 }
00494
00495
00496
00497 BOOST_AUTO_TEST_CASE( test_str_invalid )
00498 {
00499 BOOST_CHECK_THROW(Source("G").srcMatch(amap), ExceptionSourceFormat);
00500 BOOST_CHECK_THROW(Source("!").srcMatch(amap), ExceptionSourceFormat);
00501 BOOST_CHECK_THROW(Source("Info()").srcMatch(amap), ExceptionSourceFormat);
00502
00503 BOOST_CHECK_THROW(Source("DetInfo(Unknown)").srcMatch(amap), ExceptionSourceFormat);
00504 BOOST_CHECK_THROW(Source("DetInfo(:Unknown)").srcMatch(amap), ExceptionSourceFormat);
00505 BOOST_CHECK_THROW(Source("DetInfo(.Unknown)").srcMatch(amap), ExceptionSourceFormat);
00506
00507 BOOST_CHECK_THROW(Source("BldInfo(Unknown)").srcMatch(amap), ExceptionSourceFormat);
00508 BOOST_CHECK_THROW(Source("BldInfo(.EBeam)").srcMatch(amap), ExceptionSourceFormat);
00509
00510 BOOST_CHECK_THROW(Source("ProcInfo(1)").srcMatch(amap), ExceptionSourceFormat);
00511 BOOST_CHECK_THROW(Source("ProcInfo(1.1.1)").srcMatch(amap), ExceptionSourceFormat);
00512 BOOST_CHECK_THROW(Source("ProcInfo(1.1.1.1.1)").srcMatch(amap), ExceptionSourceFormat);
00513 BOOST_CHECK_THROW(Source("ProcInfo(1024.1.1.1)").srcMatch(amap), ExceptionSourceFormat);
00514 BOOST_CHECK_THROW(Source("ProcInfo(psimport.slac.stanford.edu)").srcMatch(amap), ExceptionSourceFormat);
00515 }
00516
00517
00518
00519 BOOST_AUTO_TEST_CASE( test_src_format )
00520 {
00521 Source src;
00522 src = Source(Pds::DetInfo::NoDetector, 255, Pds::DetInfo::NoDevice, 0);
00523 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(NoDetector.*:NoDevice.0)");
00524 src = Source(Pds::DetInfo::Detector(255), 255, Pds::DetInfo::NoDevice, 255);
00525 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(*.*:NoDevice.*)");
00526 src = Source(Pds::DetInfo::NoDetector, 255, Pds::DetInfo::Device(255), 255);
00527 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(NoDetector.*:*.*)");
00528 src = Source(Pds::DetInfo::NoDetector, 0, Pds::DetInfo::Device(255), 0);
00529 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(NoDetector.0:*.0)");
00530 src = Source(Pds::DetInfo::NoDetector, 0, Pds::DetInfo::Device(255), 255);
00531 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(NoDetector.0:*.*)");
00532 src = Source(Pds::DetInfo::Detector(255), 0, Pds::DetInfo::Device(255), 255);
00533 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(*.0:*.*)");
00534 src = Source(Pds::DetInfo::NoDetector, 255, Pds::DetInfo::Device(255), 255);
00535 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(NoDetector.*:*.*)");
00536 src = Source(Pds::DetInfo::Detector(255), 55, Pds::DetInfo::NoDevice, 0);
00537 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(*.55:NoDevice.0)");
00538 src = Source(Pds::DetInfo::Detector(255), 1, Pds::DetInfo::NoDevice, 2);
00539 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(*.1:NoDevice.2)");
00540 src = Source(Pds::DetInfo::Detector(255), 255, Pds::DetInfo::Device(255), 254);
00541 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(*.*:*.254)");
00542 src = Source(Pds::DetInfo::Detector(255), 255, Pds::DetInfo::Device(255), 255);
00543 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "DetInfo(*.*:*.*)");
00544
00545 src = Source(Pds::BldInfo::EBeam);
00546 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "BldInfo(EBeam)");
00547 src = Source(Pds::BldInfo::Type(0xffffffff));
00548 BOOST_CHECK_EQUAL(lexical_cast<std::string>(src), "BldInfo()");
00549 }
00550
00551
00552
00553 BOOST_AUTO_TEST_CASE( test_src_alias )
00554 {
00555 amap.add("dinfo1", dinfo1);
00556 amap.add("dinfo2", dinfo2);
00557 amap.add("pinfo1", pinfo1);
00558 amap.add("pinfo2", pinfo2);
00559 amap.add("binfo1", binfo1);
00560 amap.add("binfo2", binfo2);
00561
00562 ::checkDetInfo0000(Source("dinfo1"));
00563 ::checkDetInfo1111(Source("dinfo2"));
00564 ::checkBldInfo(Source("binfo1"), Pds::BldInfo::EBeam);
00565 ::checkBldInfo(Source("binfo2"), Pds::BldInfo::PhaseCavity);
00566 ::checkProcInfo1(Source("pinfo1"));
00567 BOOST_CHECK_THROW(Source("pinfo3").srcMatch(amap), ExceptionSourceFormat);
00568 }
00569
00570
00571
00572 BOOST_AUTO_TEST_CASE( test_src_in_any )
00573 {
00574 Source::SrcMatch any = Source().srcMatch(amap);
00575 BOOST_CHECK(any.in(any));
00576
00577 Source::SrcMatch nosrc = Source(Source::null).srcMatch(amap);
00578 BOOST_CHECK(nosrc.in(any));
00579 BOOST_CHECK(not any.in(nosrc));
00580
00581 Source::SrcMatch match1 = Source("DetInfo(NoDetector.*:NoDevice.0)").srcMatch(amap);
00582 BOOST_CHECK(match1.in(any));
00583 BOOST_CHECK(not any.in(match1));
00584
00585 Source::SrcMatch match2 = Source("DetInfo()").srcMatch(amap);
00586 BOOST_CHECK(match2.in(any));
00587 BOOST_CHECK(not any.in(match2));
00588
00589 Source::SrcMatch match3 = Source("BldInfo(EBeam)").srcMatch(amap);
00590 BOOST_CHECK(match3.in(any));
00591 BOOST_CHECK(not any.in(match3));
00592
00593 Source::SrcMatch match4 = Source("BldInfo()").srcMatch(amap);
00594 BOOST_CHECK(match4.in(any));
00595 BOOST_CHECK(not any.in(match4));
00596
00597 Source::SrcMatch match5 = Source("ProcInfo(1.2.3.4)").srcMatch(amap);
00598 BOOST_CHECK(match5.in(any));
00599 BOOST_CHECK(not any.in(match5));
00600
00601 Source::SrcMatch match6 = Source("ProcInfo()").srcMatch(amap);
00602 BOOST_CHECK(match6.in(any));
00603 BOOST_CHECK(not any.in(match6));
00604
00605 Source::SrcMatch match7 = Source("").srcMatch(amap);
00606 BOOST_CHECK(match7.in(any));
00607 BOOST_CHECK(any.in(match7));
00608 }
00609
00610
00611
00612 BOOST_AUTO_TEST_CASE( test_src_in_nosrc )
00613 {
00614 Source::SrcMatch nosrc = Source(Source::null).srcMatch(amap);
00615 BOOST_CHECK(nosrc.in(nosrc));
00616
00617 Source::SrcMatch match1 = Source("DetInfo(NoDetector.*:NoDevice.0)").srcMatch(amap);
00618 BOOST_CHECK(not match1.in(nosrc));
00619 BOOST_CHECK(not nosrc.in(match1));
00620
00621 Source::SrcMatch match2 = Source("DetInfo()").srcMatch(amap);
00622 BOOST_CHECK(not match2.in(nosrc));
00623 BOOST_CHECK(not nosrc.in(match2));
00624
00625 Source::SrcMatch match3 = Source("BldInfo(EBeam)").srcMatch(amap);
00626 BOOST_CHECK(not match3.in(nosrc));
00627 BOOST_CHECK(not nosrc.in(match3));
00628
00629 Source::SrcMatch match4 = Source("BldInfo()").srcMatch(amap);
00630 BOOST_CHECK(not match4.in(nosrc));
00631 BOOST_CHECK(not nosrc.in(match4));
00632
00633 Source::SrcMatch match5 = Source("ProcInfo(1.2.3.4)").srcMatch(amap);
00634 BOOST_CHECK(not match5.in(nosrc));
00635 BOOST_CHECK(not nosrc.in(match5));
00636
00637 Source::SrcMatch match6 = Source("ProcInfo()").srcMatch(amap);
00638 BOOST_CHECK(not match6.in(nosrc));
00639 BOOST_CHECK(not nosrc.in(match6));
00640
00641 Source::SrcMatch match7 = Source("").srcMatch(amap);
00642 BOOST_CHECK(not match7.in(nosrc));
00643 BOOST_CHECK(nosrc.in(match7));
00644 }
00645
00646
00647
00648 BOOST_AUTO_TEST_CASE( test_src_in_bld )
00649 {
00650 Source::SrcMatch any = Source().srcMatch(amap);
00651 Source::SrcMatch nosrc = Source(Source::null).srcMatch(amap);
00652
00653 Source::SrcMatch match1 = Source("BldInfo(EBeam)").srcMatch(amap);
00654 Source::SrcMatch match2 = Source("BldInfo(PhaseCavity)").srcMatch(amap);
00655 Source::SrcMatch match3 = Source("BldInfo()").srcMatch(amap);
00656
00657 BOOST_CHECK(match1.in(any));
00658 BOOST_CHECK(match2.in(any));
00659 BOOST_CHECK(match3.in(any));
00660 BOOST_CHECK(not match1.in(nosrc));
00661 BOOST_CHECK(not match2.in(nosrc));
00662 BOOST_CHECK(not match3.in(nosrc));
00663 BOOST_CHECK(match1.in(match3));
00664 BOOST_CHECK(match2.in(match3));
00665 BOOST_CHECK(not match1.in(match2));
00666 BOOST_CHECK(not match2.in(match1));
00667 BOOST_CHECK(not match3.in(match2));
00668 BOOST_CHECK(not match3.in(match1));
00669
00670 Source::SrcMatch match4 = Source("DetInfo()").srcMatch(amap);
00671 Source::SrcMatch match5 = Source("ProcInfo()").srcMatch(amap);
00672 BOOST_CHECK(not match1.in(match4));
00673 BOOST_CHECK(not match2.in(match4));
00674 BOOST_CHECK(not match3.in(match4));
00675 BOOST_CHECK(not match4.in(match1));
00676 BOOST_CHECK(not match4.in(match2));
00677 BOOST_CHECK(not match4.in(match3));
00678 BOOST_CHECK(not match1.in(match5));
00679 BOOST_CHECK(not match2.in(match5));
00680 BOOST_CHECK(not match3.in(match5));
00681 BOOST_CHECK(not match5.in(match1));
00682 BOOST_CHECK(not match5.in(match2));
00683 BOOST_CHECK(not match5.in(match3));
00684 }
00685
00686
00687
00688 BOOST_AUTO_TEST_CASE( test_src_in_det )
00689 {
00690 Source::SrcMatch any = Source().srcMatch(amap);
00691 Source::SrcMatch nosrc = Source(Source::null).srcMatch(amap);
00692
00693 Source::SrcMatch match1 = Source("DetInfo(NoDetector.10:NoDevice.20)").srcMatch(amap);
00694 Source::SrcMatch match2 = Source("DetInfo(NoDetector.*:NoDevice.20)").srcMatch(amap);
00695 Source::SrcMatch match3 = Source("DetInfo(NoDetector.10:NoDevice.*)").srcMatch(amap);
00696 Source::SrcMatch match4 = Source("DetInfo(*.10:NoDevice.20)").srcMatch(amap);
00697 Source::SrcMatch match5 = Source("DetInfo(NoDetector.10:*.20)").srcMatch(amap);
00698 Source::SrcMatch match6 = Source("DetInfo(AmoIms.1:Evr.1)").srcMatch(amap);
00699
00700 BOOST_CHECK(match1.in(any));
00701 BOOST_CHECK(match2.in(any));
00702 BOOST_CHECK(match3.in(any));
00703 BOOST_CHECK(match4.in(any));
00704 BOOST_CHECK(match5.in(any));
00705 BOOST_CHECK(match6.in(any));
00706 BOOST_CHECK(not match1.in(nosrc));
00707 BOOST_CHECK(not match2.in(nosrc));
00708 BOOST_CHECK(not match3.in(nosrc));
00709 BOOST_CHECK(not match4.in(nosrc));
00710 BOOST_CHECK(not match5.in(nosrc));
00711 BOOST_CHECK(not match6.in(nosrc));
00712 BOOST_CHECK(match1.in(match2));
00713 BOOST_CHECK(match1.in(match3));
00714 BOOST_CHECK(match1.in(match4));
00715 BOOST_CHECK(match1.in(match5));
00716 BOOST_CHECK(not match2.in(match1));
00717 BOOST_CHECK(not match3.in(match1));
00718 BOOST_CHECK(not match4.in(match1));
00719 BOOST_CHECK(not match5.in(match1));
00720 BOOST_CHECK(not match2.in(match3));
00721 BOOST_CHECK(not match3.in(match2));
00722 BOOST_CHECK(not match4.in(match5));
00723 BOOST_CHECK(not match5.in(match4));
00724
00725 BOOST_CHECK(not match1.in(match6));
00726 BOOST_CHECK(not match6.in(match1));
00727
00728 BOOST_CHECK(not match6.in(match2));
00729 BOOST_CHECK(not match6.in(match3));
00730 BOOST_CHECK(not match6.in(match4));
00731 BOOST_CHECK(not match6.in(match5));
00732
00733 Source::SrcMatch match8 = Source("BldInfo()").srcMatch(amap);
00734 Source::SrcMatch match9 = Source("ProcInfo()").srcMatch(amap);
00735 BOOST_CHECK(not match1.in(match8));
00736 BOOST_CHECK(not match2.in(match8));
00737 BOOST_CHECK(not match3.in(match8));
00738 BOOST_CHECK(not match4.in(match8));
00739 BOOST_CHECK(not match5.in(match8));
00740 BOOST_CHECK(not match6.in(match8));
00741 BOOST_CHECK(not match8.in(match1));
00742 BOOST_CHECK(not match8.in(match2));
00743 BOOST_CHECK(not match8.in(match3));
00744 BOOST_CHECK(not match8.in(match4));
00745 BOOST_CHECK(not match8.in(match5));
00746 BOOST_CHECK(not match8.in(match6));
00747 BOOST_CHECK(not match1.in(match9));
00748 BOOST_CHECK(not match2.in(match9));
00749 BOOST_CHECK(not match3.in(match9));
00750 BOOST_CHECK(not match4.in(match9));
00751 BOOST_CHECK(not match5.in(match9));
00752 BOOST_CHECK(not match6.in(match9));
00753 BOOST_CHECK(not match9.in(match1));
00754 BOOST_CHECK(not match9.in(match2));
00755 BOOST_CHECK(not match9.in(match3));
00756 BOOST_CHECK(not match9.in(match4));
00757 BOOST_CHECK(not match9.in(match5));
00758 BOOST_CHECK(not match9.in(match6));
00759 }
00760
00761
00762
00763 BOOST_AUTO_TEST_CASE( test_src_in_proc )
00764 {
00765 Source::SrcMatch any = Source().srcMatch(amap);
00766 Source::SrcMatch nosrc = Source(Source::null).srcMatch(amap);
00767
00768 Source::SrcMatch match1 = Source("ProcInfo(1.1.1.1)").srcMatch(amap);
00769 Source::SrcMatch match2 = Source("ProcInfo(2.2.2.2)").srcMatch(amap);
00770 Source::SrcMatch match3 = Source("ProcInfo()").srcMatch(amap);
00771
00772 BOOST_CHECK(match1.in(any));
00773 BOOST_CHECK(match2.in(any));
00774 BOOST_CHECK(match3.in(any));
00775 BOOST_CHECK(not match1.in(nosrc));
00776 BOOST_CHECK(not match2.in(nosrc));
00777 BOOST_CHECK(not match3.in(nosrc));
00778 BOOST_CHECK(match1.in(match3));
00779 BOOST_CHECK(match2.in(match3));
00780 BOOST_CHECK(not match1.in(match2));
00781 BOOST_CHECK(not match2.in(match1));
00782 BOOST_CHECK(not match3.in(match2));
00783 BOOST_CHECK(not match3.in(match1));
00784
00785 Source::SrcMatch match4 = Source("DetInfo()").srcMatch(amap);
00786 Source::SrcMatch match5 = Source("BldInfo()").srcMatch(amap);
00787 BOOST_CHECK(not match1.in(match4));
00788 BOOST_CHECK(not match2.in(match4));
00789 BOOST_CHECK(not match3.in(match4));
00790 BOOST_CHECK(not match4.in(match1));
00791 BOOST_CHECK(not match4.in(match2));
00792 BOOST_CHECK(not match4.in(match3));
00793 BOOST_CHECK(not match1.in(match5));
00794 BOOST_CHECK(not match2.in(match5));
00795 BOOST_CHECK(not match3.in(match5));
00796 BOOST_CHECK(not match5.in(match1));
00797 BOOST_CHECK(not match5.in(match2));
00798 BOOST_CHECK(not match5.in(match3));
00799 }
00800
00801