Cheetah - SKA - PSS - Prototype Time Domain Search Pipeline
DadaReadWriteClientTest.cpp
1 #include "cheetah/psrdada/test/DadaReadWriteClientTest.h"
2 #include "cheetah/psrdada/DadaWriteClient.h"
3 #include "cheetah/psrdada/DadaReadClient.h"
4 #include "cheetah/psrdada/test_utils/TestDadaDB.h"
5 
6 #include <sstream>
7 
8 namespace ska {
9 namespace cheetah {
10 namespace psrdada {
11 namespace test {
12 
13 DadaReadWriteClientTest::DadaReadWriteClientTest()
14  : ::testing::Test()
15  , _engine(1)
16 {
17 }
18 
19 DadaReadWriteClientTest::~DadaReadWriteClientTest()
20 {
21 }
22 
23 void DadaReadWriteClientTest::SetUp()
24 {
25 }
26 
27 void DadaReadWriteClientTest::TearDown()
28 {
29 }
30 
31 TEST_F(DadaReadWriteClientTest, test_default_params)
32 {
33  test_utils::TestDadaDB test_db(4, 4096, 4, 4096);
34  test_db.create();
35  {
36  DadaWriteClient writer(test_db.key(), [](std::ostream&){});
37  ASSERT_TRUE(writer.data_buffer_size()==test_db.data_buffer_size());
38  ASSERT_TRUE(writer.data_buffer_count()==test_db.num_data_buffers());
39  ASSERT_TRUE(writer.header_buffer_size()==test_db.header_buffer_size());
40  ASSERT_TRUE(writer.header_buffer_count()==test_db.num_header_buffers());
41 
42  DadaReadClient reader(test_db.key(), _engine, [](std::istream&, std::exception_ptr){});
43  ASSERT_TRUE(reader.data_buffer_size()==test_db.data_buffer_size());
44  ASSERT_TRUE(reader.data_buffer_count()==test_db.num_data_buffers());
45  ASSERT_TRUE(reader.header_buffer_size()==test_db.header_buffer_size());
46  ASSERT_TRUE(reader.header_buffer_count()==test_db.num_header_buffers());
47  }
48  test_db.destroy();
49 }
50 
51 
52 TEST_F(DadaReadWriteClientTest, test_multiblock_readwrite)
53 {
54  test_utils::TestDadaDB test_db(4, 4096, 4, 4096);
55  test_db.create();
56  std::string write_header("This is some header data!");
57  {
58  std::vector<char> input_data(8*1024+222);
59  {
60  DadaWriteClient writer(test_db.key(), [&](std::ostream& out){
61  out << write_header;
62  });
63  auto it = input_data.begin();
64  writer.write(it, input_data.end());
65  }
66 
67  std::string read_header;
68  DadaReadClient reader(test_db.key(), _engine, [&](std::istream& in, std::exception_ptr ){
69  in >> read_header;
70  });
71 
72  std::vector<char> output_data(8*1024+222);
73  auto it = output_data.begin();
74  reader.read(it, output_data.end());
75  for (std::size_t jj=0; jj<input_data.size(); ++jj)
76  {
77  ASSERT_EQ(output_data[jj],input_data[jj]);
78  }
79  }
80  test_db.destroy();
81 }
82 
83 TEST_F(DadaReadWriteClientTest, test_header_overflow)
84 {
85  test_utils::TestDadaDB test_db(1, 1, 1, 1);
86  test_db.create();
87  {
88  std::string write_header("This is some header data!");
89  ASSERT_ANY_THROW(DadaWriteClient writer(test_db.key(), [&](std::ostream& out){out << write_header;}));
90  }
91  test_db.destroy();
92 }
93 
94 TEST_F(DadaReadWriteClientTest, test_multi_sequence_readwrite)
95 {
96  test_utils::TestDadaDB test_db(16, 4096, 4, 4096);
97  test_db.create();
98  {
99  std::size_t ii;
100  std::size_t observation_id = 0;
101  auto new_sequence_callback = [&](std::ostream& out)
102  {
103  out << "This is the header for observation ID " << observation_id << "\n";
104  ++observation_id;
105  };
106 
107  { // This is the writer scope
108  DadaWriteClient writer(test_db.key(), new_sequence_callback);
109  //Write one and a half data blocks and mark the EOD
110  std::vector<float> data(4096+2048);
111  for (ii=0; ii<data.size(); ++ii)
112  {
113  data[ii] = (float) (ii%255);
114  }
115  auto it = data.begin();
116  writer.write(it,data.end());
117  writer.new_sequence();
118  it = data.begin();
119  writer.write(it,data.end());
120  }
121 
122  auto next_sequence_callback = [&](std::istream& stream, std::exception_ptr)
123  {
124  std::string tmp_string;
125  while (!stream.eof())
126  {
127  stream >> tmp_string;
128  }
129  };
130 
131  { // This is the reader scope
132  DadaReadClient reader(test_db.key(), _engine, next_sequence_callback);
133  //Read partial data from first observation
134  std::vector<float> partial_data(2048);
135  auto it = partial_data.begin();
136  reader.read(it, partial_data.end());
137  for (ii=0; ii<partial_data.size(); ++ii)
138  {
139  ASSERT_EQ(partial_data[ii],(float) (ii%255));
140  }
141  reader.next_sequence();
142 
143  it = partial_data.begin();
144  reader.read(it, partial_data.end());
145  for (ii=0; ii<partial_data.size(); ++ii)
146  {
147  ASSERT_EQ(partial_data[ii],(float) (ii%255));
148  }
149  }
150 
151  }
152  test_db.destroy();
153 }
154 
155 } // namespace test
156 } // namespace psrdada
157 } // namespace cheetah
158 } // namespace ska
Some limits and constants for FLDO.
Definition: Brdz.h:35