μHAL (v2.8.17)
Part of the IPbus software repository
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
test_nonreachable.cpp
Go to the documentation of this file.
1/*
2---------------------------------------------------------------------------
3
4 This file is part of uHAL.
5
6 uHAL is a hardware access library and programming framework
7 originally developed for upgrades of the Level-1 trigger of the CMS
8 experiment at CERN.
9
10 uHAL is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version 3 of the License, or
13 (at your option) any later version.
14
15 uHAL is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with uHAL. If not, see <http://www.gnu.org/licenses/>.
22
23 Marc Magrans de Abril, CERN
24 email: marc.magrans.de.abril <AT> cern.ch
25
26 Andrew Rose, Imperial College, London
27 email: awr01 <AT> imperial.ac.uk
28
29 Tom Williams, Rutherford Appleton Laboratory, Oxfordshire
30 email: tom.williams <AT> cern.ch
31
32---------------------------------------------------------------------------
33*/
34
35#include "uhal/uhal.hpp"
36
39#include "uhal/tests/tools.hpp"
40
41#include <boost/test/unit_test.hpp>
42
43#include <iostream>
44#include <cstdlib>
45#include <typeinfo>
46
47
48namespace uhal {
49namespace tests {
50
51
52UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(NonreachableTestSuite, check_nonreachable_device, MinimalFixture,
53{
54 const size_t numTests(quickTest ? 1 : 10);
55 for (size_t i = 0; i < numTests; i++) {
56 HwInterface hw = getHwInterface();
57
58 // Check we get an exception corresponding to target being unreachable
59 if ( (hw.uri().find ( "ipbustcp" ) != std::string::npos ) || (hw.uri().find ( "ipbuspcie" ) != std::string::npos) )
60 {
61 BOOST_CHECK_THROW ( { hw.getNode ( "REG" ).read(); hw.dispatch(); } , uhal::exception::TransportLayerError );
62 }
63 else
64 {
65 BOOST_CHECK_THROW ( { hw.getNode ( "REG" ).read(); hw.dispatch(); } , uhal::exception::ClientTimeout );
66 }
67 }
68}
69)
70
71
72HwInterface getHwWithModifiedControlHubPort(const std::string& aConnectionFile, const std::string& aDeviceId)
73{
74 typedef boost::filesystem::path Path_t;
75 const std::string lAddrFilePath = ( Path_t(aConnectionFile).parent_path() / Path_t("dummy_address.xml") ).string();
76
77 const std::string lOriginalUri = ConnectionManager(aConnectionFile).getDevice(aDeviceId).getClient().uri();
78 const std::string lModifiedUri = lOriginalUri.substr(0, lOriginalUri.find("?")-1) + lOriginalUri.substr(lOriginalUri.find("?"));
79
80 return ConnectionManager::getDevice(aDeviceId, lModifiedUri, lAddrFilePath);
81}
82
83UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(NonreachableTestSuite, check_nonreachable_controlhub, MinimalFixture,
84{
85 if ( (deviceType == IPBUS_1_3_CONTROLHUB) || (deviceType == IPBUS_2_0_CONTROLHUB) ) {
86 for (size_t i = 0; i < 10; i++) {
87 HwInterface hw = getHwWithModifiedControlHubPort(connectionFileURI, deviceId);
88
89 BOOST_CHECK_THROW ( { hw.getNode ( "REG" ).read(); hw.dispatch(); } , uhal::exception::TransportLayerError );
90 }
91 }
92 else
93 BOOST_TEST_MESSAGE(" *** Skipping check_nonreachable_controlhub test case, since client under test does not talk to ControlHub. ***");
94}
95)
96
97
98} // end ns tests
99} // end ns uhal
const std::string & uri() const
Return the url of the target for this client.
A class to open and manage XML connection files and wrap up the interfaces to the NodeTreeBuilder and...
HwInterface getDevice(const std::string &aId)
Retrieves protocol, host, and port from the connection file to create an IPbus Client Retrieves the a...
A class which bundles a node tree and an IPbus client interface together providing everything you nee...
Definition: HwInterface.hpp:56
const Node & getNode() const
Retrieve the top-level node.
void dispatch()
Make the IPbus client issue a dispatch.
ClientInterface & getClient()
Get the underlying IPbus client.
Definition: HwInterface.cpp:78
const std::string & uri() const
Return the url of the target for this client.
None tests(nox.Session session)
Definition: noxfile.py:19
BOOST_CHECK_THROW(hw.getNode("REG").writeBlockOffset(xx, 0), uhal::exception::BulkTransferOffsetRequestedForSingleRegister)
HwInterface hw
@ IPBUS_2_0_CONTROLHUB
Definition: definitions.hpp:45
@ IPBUS_1_3_CONTROLHUB
Definition: definitions.hpp:42
#define UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(test_suite_name, test_case_name, test_fixture, test_case_contents)
Definition: definitions.hpp:53