μHAL (v2.7.9)
Part of the IPbus software repository
test_config_space.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"
37 
39 #include "uhal/tests/fixtures.hpp"
40 #include "uhal/tests/tools.hpp"
41 
42 #include <boost/test/unit_test.hpp>
43 
44 
45 
46 namespace uhal {
47 namespace tests {
48 
49 
50 UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(ConfigSpaceTestSuite, read_fullWord, DummyHardwareFixture,
51 {
52  HwInterface hw = getHwInterface();
53 
54  IPbusCore& client = dynamic_cast<IPbusCore&>(hw.getClient());
55 
56  for (size_t i = 0; i < 10; i++) {
57  const uint32_t expectedValue = uint16_t(getpid()) << 16 | i;
58 
59  switch (deviceType) {
60  case IPBUS_1_3_UDP :
61  case IPBUS_1_3_TCP :
63  BOOST_CHECK_THROW(client.readConfigurationSpace(i), exception::ValidationError);
64  break;
65  default:
67 
68  client.dispatch();
69  BOOST_CHECK_EQUAL(x.value(), expectedValue);
70  }
71  }
72 }
73 )
74 
76 {
77  HwInterface hw = getHwInterface();
78 
79  IPbusCore& client = dynamic_cast<IPbusCore&>(hw.getClient());
80 
81  for (size_t i = 0; i < 10; i++) {
82  const uint32_t expectedValue = uint16_t(getpid()) << 16 | i;
83 
84  switch (deviceType) {
85  case IPBUS_1_3_UDP :
86  case IPBUS_1_3_TCP :
88  BOOST_CHECK_THROW(ValWord<uint32_t> x_lower = client.readConfigurationSpace(i, 0xFF), exception::ValidationError);
89  break;
90  default:
92  ValWord<uint32_t> x_mid = client.readConfigurationSpace(i, 0xFFFF00);
93  ValWord<uint32_t> x_upper = client.readConfigurationSpace(i, 0xFF000000);
94 
95  client.dispatch();
96  BOOST_CHECK_EQUAL(x_lower.value(), uint32_t(expectedValue & 0xFF));
97  BOOST_CHECK_EQUAL(x_mid.value(), uint32_t((expectedValue & 0xFFFF00) >> 8));
98  BOOST_CHECK_EQUAL(x_upper.value(), uint32_t((expectedValue & 0xFF000000) >> 24));
99  }
100  }
101 }
102 )
103 
104 } // end ns tests
105 } // end ns uhal
106 
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::tests::IPBUS_1_3_TCP
@ IPBUS_1_3_TCP
Definition: definitions.hpp:41
uhal::IPbusCore
A class providing the core IPbus packing functionality.
Definition: ProtocolIPbusCore.hpp:117
uhal::ClientInterface::dispatch
void dispatch()
Method to dispatch all queued transactions, and wait until all corresponding responses have been rece...
Definition: ClientInterface.cpp:144
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::ValWord::value
T value() const
Return the value of the validated memory with check on validity.
Definition: ValMem.cpp:141
definitions.hpp
uhal
Definition: HttpResponseGrammar.hpp:49
uhal::tests::hw
HwInterface hw
Definition: test_rawclient.cpp:93
uhal::tests::x
uint32_t x
Definition: test_single.cpp:93
uhal::tests::IPBUS_1_3_UDP
@ IPBUS_1_3_UDP
Definition: definitions.hpp:40
uhal::tests::DummyHardwareFixture
Definition: fixtures.hpp:135
uhal::tests::client
IPbusCore & client
Definition: test_config_space.cpp:79
uhal::HwInterface::getClient
ClientInterface & getClient()
Get the underlying IPbus client.
Definition: HwInterface.cpp:83
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
ProtocolIPbusCore.hpp
uhal::ValWord< uint32_t >
uhal::IPbusCore::readConfigurationSpace
ValWord< uint32_t > readConfigurationSpace(const uint32_t &aAddr)
Read a single, unmasked, unsigned word from the configuration address space.
Definition: ProtocolIPbusCore.cpp:130
uhal::tests::BOOST_CHECK_EQUAL
BOOST_CHECK_EQUAL(mem.size(), N)
uhal::tests::read_masked
read_masked
Definition: test_config_space.cpp:75