μHAL (v2.6.5)
Part of the IPbus software repository
test_single.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 #include <boost/filesystem.hpp>
43 
44 #include <vector>
45 #include <algorithm>
46 #include <string>
47 #include <iostream>
48 #include <cstdlib>
49 #include <typeinfo>
50 
51 
52 namespace uhal {
53 namespace tests {
54 
55 
56 UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(SingleReadWriteTestSuite, connect_write_read, DummyHardwareFixture,
57 {
58  HwInterface hw = getHwInterface();
59 
60  // hw.ping();
61  uint32_t x1 = static_cast<uint32_t> ( rand() );
62  uint32_t x2 = static_cast<uint32_t> ( rand() );
63  hw.getNode ( "SUBSYSTEM1.REG" ).write ( x1 );
64  hw.getNode ( "SUBSYSTEM2.REG" ).write ( x2 );
65  ValWord< uint32_t > mem1 = hw.getNode ( "SUBSYSTEM1.REG" ).read();
66  ValWord< uint32_t > mem2 = hw.getNode ( "SUBSYSTEM2.REG" ).read();
67  BOOST_CHECK ( !mem1.valid() );
68  BOOST_CHECK ( !mem2.valid() );
69  BOOST_CHECK_THROW ( mem1.value(), uhal::exception::NonValidatedMemory );
70  BOOST_CHECK_THROW ( mem2.value(), uhal::exception::NonValidatedMemory );
71  BOOST_CHECK_NO_THROW ( hw.dispatch() );
72  BOOST_CHECK ( mem1.valid() );
73  BOOST_CHECK_EQUAL ( mem1.value(), x1 );
74  BOOST_CHECK_EQUAL ( mem2.value(), x2 );
75 }
76 )
77 
78 
80 {
81  //get location of address file. Assumption: it is located with the connection file
82  std::string address_file;
83  {
84  boost::filesystem::path conn_fn ( connectionFileURI );
85  boost::filesystem::path fn ( "dummy_address.xml" );
86  address_file = ( conn_fn.parent_path() /fn ).string();
87  }
88  //get the parameters from the file
89  std::string uri = getHwInterface().uri();
90  HwInterface hw=ConnectionManager::getDevice ( "test_device_id", uri, address_file );
91  uint32_t x = static_cast<uint32_t> ( rand() );
92  hw.getNode ( "REG" ).write ( x );
93  ValWord< uint32_t > mem = hw.getNode ( "REG" ).read();
94  BOOST_CHECK ( !mem.valid() );
95  BOOST_CHECK_THROW ( mem.value(),uhal::exception::NonValidatedMemory );
97  BOOST_CHECK ( mem.valid() );
98  BOOST_CHECK_EQUAL ( mem.value(), x );
99 }
100 )
101 
102 
103 UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(SingleReadWriteTestSuite, search_device_id, MinimalFixture,
104 {
105  ConnectionManager manager (connectionFileURI);
106  std::vector<std::string> ids = manager.getDevices ( "^" + deviceId + "$" );
107  BOOST_CHECK ( std::find ( ids.begin(),ids.end(), deviceId ) != ids.end() );
108 }
109 )
110 
111 
112 } // end ns tests
113 } // end ns uhal
114 
T value() const
Return the value of the validated memory with check on validity.
Definition: ValMem.cpp:185
A class which bundles a node tree and an IPbus client interface together providing everything you nee...
Definition: HwInterface.hpp:59
UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(BlockReadWriteTestSuite, block_write_read, DummyHardwareFixture, { std::vector< size_t > lDepths=getBlockUnitTestDepths();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
void dispatch()
Make the IPbus client issue a dispatch.
HwInterface getDevice(const std::string &aId)
Retrieves protocol, host, and port from the connection file to create an IPbus Client Retrieves the a...
BOOST_CHECK(!mem.valid())
BOOST_CHECK_THROW(hw.getNode("REG").writeBlockOffset(xx, 0), uhal::exception::BulkTransferOffsetRequestedForSingleRegister)
boost::filesystem::path fn("dummy_address.xml")
ValHeader write(const uint32_t &aValue) const
Write a single, unmasked word to a register.
Definition: Node.cpp:494
HwInterface hw
BOOST_CHECK_EQUAL(hw.getNode("SUBSYSTEM1.SUBMODULE.REG").getAddress(), hw.getNode("SUBSYSTEM1").getNode("SUBMODULE").getNode("REG").getAddress())
BOOST_CHECK_NO_THROW(hw.getNode("REG").writeBlock(xx))
bool valid()
Return whether the Validated memory is marked as valid.
Definition: ValMem.cpp:140
ValVector< uint32_t > mem
std::string uri
Definition: test_single.cpp:89
ValWord< uint32_t > read() const
Read a single, unmasked, unsigned word.
Definition: Node.cpp:589
const Node & getNode() const
Ping the target for this client.
on_the_fly_connect_write_read
Definition: test_single.cpp:79
A class to open and manage XML connection files and wrap up the interfaces to the NodeTreeBuilder and...