μHAL (v2.7.9)
Part of the IPbus software repository
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 
38 #include "uhal/tests/fixtures.hpp"
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 
48 namespace uhal {
49 namespace tests {
50 
51 
52 UHAL_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 
72 HwInterface 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 
83 UHAL_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
tools.hpp
uhal::HwInterface
A class which bundles a node tree and an IPbus client interface together providing everything you nee...
Definition: HwInterface.hpp:61
uhal::ConnectionManager::getDevice
HwInterface getDevice(const std::string &aId)
Retrieves protocol, host, and port from the connection file to create an IPbus Client Retrieves the a...
Definition: ConnectionManager.cpp:140
uhal::tests::MinimalFixture
MinimalFixture
Definition: test_block.cpp:282
fixtures.hpp
uhal::tests::BOOST_CHECK_THROW
BOOST_CHECK_THROW(hw.getNode("REG").writeBlockOffset(xx, 0), uhal::exception::BulkTransferOffsetRequestedForSingleRegister)
uhal::tests::IPBUS_1_3_CONTROLHUB
@ IPBUS_1_3_CONTROLHUB
Definition: definitions.hpp:42
uhal::HwInterface::dispatch
void dispatch()
Make the IPbus client issue a dispatch.
Definition: HwInterface.cpp:106
definitions.hpp
uhal
Definition: HttpResponseGrammar.hpp:49
uhal::tests::hw
HwInterface hw
Definition: test_rawclient.cpp:93
uhal::HwInterface::getClient
ClientInterface & getClient()
Get the underlying IPbus client.
Definition: HwInterface.cpp:83
uhal::tests::IPBUS_2_0_CONTROLHUB
@ IPBUS_2_0_CONTROLHUB
Definition: definitions.hpp:45
uhal::tests::UHAL_TESTS_DEFINE_CLIENT_TEST_CASES
UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(BlockReadWriteTestSuite, block_write_read, DummyHardwareFixture, { std::vector< size_t > lDepths=getBlockUnitTestDepths(quickTest ? N_1MB :N_10MB);for(size_t i=0;i< lDepths.size();i++) { const size_t N=lDepths.at(i);BOOST_TEST_MESSAGE(" N = "<< N);HwInterface hw=getHwInterface();std::vector< uint32_t > xx;xx.reserve(N);for(size_t i=0;i!=N;++i) { xx.push_back(static_cast< uint32_t >(rand()));} hw.getNode("LARGE_MEM").writeBlock(xx);ValVector< uint32_t > mem=hw.getNode("LARGE_MEM").readBlock(N);BOOST_CHECK(!mem.valid());BOOST_CHECK_EQUAL(mem.size(), N);if(N > 0) { BOOST_CHECK_THROW(mem.at(0), uhal::exception::NonValidatedMemory);} BOOST_CHECK_THROW(mem.value(), uhal::exception::NonValidatedMemory);BOOST_CHECK_NO_THROW(hw.dispatch());BOOST_CHECK(mem.valid());BOOST_CHECK_EQUAL(mem.size(), N);if(N< N_10MB) { bool correct_block_write_read=true;std::vector< uint32_t >::const_iterator j=xx.begin();for(ValVector< uint32_t >::const_iterator i(mem.begin());i!=mem.end();++i,++j) { correct_block_write_read=correct_block_write_read &&(*i== *j);} BOOST_CHECK(correct_block_write_read);} } }) UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(BlockReadWriteTestSuite
uhal.hpp
uhal::HwInterface::uri
const std::string & uri() const
Return the url of the target for this client.
Definition: HwInterface.cpp:118
uhal::ConnectionManager
A class to open and manage XML connection files and wrap up the interfaces to the NodeTreeBuilder and...
Definition: ConnectionManager.hpp:79
uhal::ClientInterface::uri
const std::string & uri() const
Return the url of the target for this client.
Definition: ClientInterface.cpp:138
uhal::HwInterface::getNode
const Node & getNode() const
Retrieve the top-level node.
Definition: HwInterface.cpp:135
uhal::tests::MinimalFixture
Definition: fixtures.hpp:64