Mercurial > hg > orthanc-databases
comparison MySQL/UnitTests/UnitTestsMain.cpp @ 242:b97a537f4613
MySQL: Support of range reads for the storage area
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 13 Apr 2021 17:00:02 +0200 |
parents | 675f8322eb7c |
children | 33fa478c119a |
comparison
equal
deleted
inserted
replaced
241:a063bbf10a3e | 242:b97a537f4613 |
---|---|
160 OrthancDatabases::MySQLDatabase::OpenDatabaseConnection(globalParameters_)); | 160 OrthancDatabases::MySQLDatabase::OpenDatabaseConnection(globalParameters_)); |
161 | 161 |
162 OrthancDatabases::MySQLStorageArea storageArea(globalParameters_, true /* clear database */); | 162 OrthancDatabases::MySQLStorageArea storageArea(globalParameters_, true /* clear database */); |
163 | 163 |
164 { | 164 { |
165 OrthancDatabases::MySQLStorageArea::Accessor accessor(storageArea); | 165 std::unique_ptr<OrthancDatabases::StorageBackend::IAccessor> accessor(storageArea.CreateAccessor()); |
166 | 166 |
167 ASSERT_EQ(0, CountFiles(*database)); | 167 ASSERT_EQ(0, CountFiles(*database)); |
168 | 168 |
169 for (int i = 0; i < 10; i++) | 169 for (int i = 0; i < 10; i++) |
170 { | 170 { |
171 std::string uuid = boost::lexical_cast<std::string>(i); | 171 std::string uuid = boost::lexical_cast<std::string>(i); |
172 std::string value = "Value " + boost::lexical_cast<std::string>(i * 2); | 172 std::string value = "Value " + boost::lexical_cast<std::string>(i * 2); |
173 accessor.Create(uuid, value.c_str(), value.size(), OrthancPluginContentType_Unknown); | 173 accessor->Create(uuid, value.c_str(), value.size(), OrthancPluginContentType_Unknown); |
174 } | 174 } |
175 | 175 |
176 std::string buffer; | 176 std::string buffer; |
177 ASSERT_THROW(accessor.ReadToString(buffer, "nope", OrthancPluginContentType_Unknown), | 177 ASSERT_THROW(OrthancDatabases::StorageBackend::ReadWholeToString( |
178 buffer, *accessor, "nope", OrthancPluginContentType_Unknown), | |
178 Orthanc::OrthancException); | 179 Orthanc::OrthancException); |
179 | 180 |
180 ASSERT_EQ(10, CountFiles(*database)); | 181 ASSERT_EQ(10, CountFiles(*database)); |
181 accessor.Remove("5", OrthancPluginContentType_Unknown); | 182 accessor->Remove("5", OrthancPluginContentType_Unknown); |
182 | 183 |
183 ASSERT_EQ(9, CountFiles(*database)); | 184 ASSERT_EQ(9, CountFiles(*database)); |
184 | 185 |
185 for (int i = 0; i < 10; i++) | 186 for (int i = 0; i < 10; i++) |
186 { | 187 { |
188 std::string expected = "Value " + boost::lexical_cast<std::string>(i * 2); | 189 std::string expected = "Value " + boost::lexical_cast<std::string>(i * 2); |
189 std::string content; | 190 std::string content; |
190 | 191 |
191 if (i == 5) | 192 if (i == 5) |
192 { | 193 { |
193 ASSERT_THROW(accessor.ReadToString(buffer, uuid, OrthancPluginContentType_Unknown), | 194 ASSERT_THROW(OrthancDatabases::StorageBackend::ReadWholeToString( |
195 buffer, *accessor, uuid, OrthancPluginContentType_Unknown), | |
194 Orthanc::OrthancException); | 196 Orthanc::OrthancException); |
195 } | 197 } |
196 else | 198 else |
197 { | 199 { |
198 accessor.ReadToString(buffer, uuid, OrthancPluginContentType_Unknown); | 200 OrthancDatabases::StorageBackend::ReadWholeToString(buffer, *accessor, uuid, OrthancPluginContentType_Unknown); |
199 ASSERT_EQ(expected, buffer); | 201 ASSERT_EQ(expected, buffer); |
200 } | 202 } |
201 } | 203 } |
202 | 204 |
203 for (int i = 0; i < 10; i++) | 205 for (int i = 0; i < 10; i++) |
204 { | 206 { |
205 accessor.Remove(boost::lexical_cast<std::string>(i), OrthancPluginContentType_Unknown); | 207 accessor->Remove(boost::lexical_cast<std::string>(i), OrthancPluginContentType_Unknown); |
206 } | 208 } |
207 | 209 |
208 ASSERT_EQ(0, CountFiles(*database)); | 210 ASSERT_EQ(0, CountFiles(*database)); |
211 } | |
212 } | |
213 | |
214 | |
215 TEST(MySQL, StorageReadRange) | |
216 { | |
217 std::unique_ptr<OrthancDatabases::MySQLDatabase> database( | |
218 OrthancDatabases::MySQLDatabase::OpenDatabaseConnection(globalParameters_)); | |
219 | |
220 OrthancDatabases::MySQLStorageArea storageArea(globalParameters_, true /* clear database */); | |
221 | |
222 { | |
223 std::unique_ptr<OrthancDatabases::StorageBackend::IAccessor> accessor(storageArea.CreateAccessor()); | |
224 ASSERT_EQ(0, CountFiles(*database)); | |
225 accessor->Create("uuid", "abcd\0\1\2\3\4\5", 10, OrthancPluginContentType_Unknown); | |
226 ASSERT_EQ(1u, CountFiles(*database)); | |
227 } | |
228 | |
229 { | |
230 std::unique_ptr<OrthancDatabases::StorageBackend::IAccessor> accessor(storageArea.CreateAccessor()); | |
231 ASSERT_EQ(1u, CountFiles(*database)); | |
232 | |
233 std::string s; | |
234 OrthancDatabases::StorageBackend::ReadWholeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown); | |
235 ASSERT_EQ(10u, s.size()); | |
236 ASSERT_EQ('a', s[0]); | |
237 ASSERT_EQ('d', s[3]); | |
238 ASSERT_EQ('\0', s[4]); | |
239 ASSERT_EQ('\5', s[9]); | |
240 | |
241 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 0, 0); | |
242 ASSERT_TRUE(s.empty()); | |
243 | |
244 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 0, 1); | |
245 ASSERT_EQ(1u, s.size()); | |
246 ASSERT_EQ('a', s[0]); | |
247 | |
248 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 4, 1); | |
249 ASSERT_EQ(1u, s.size()); | |
250 ASSERT_EQ('\0', s[0]); | |
251 | |
252 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 9, 1); | |
253 ASSERT_EQ(1u, s.size()); | |
254 ASSERT_EQ('\5', s[0]); | |
255 | |
256 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 10, 0); | |
257 ASSERT_TRUE(s.empty()); | |
258 | |
259 // Cannot read non-empty range after the end of the string | |
260 ASSERT_THROW(OrthancDatabases::StorageBackend::ReadRangeToString( | |
261 s, *accessor, "uuid", OrthancPluginContentType_Unknown, 10, 1), Orthanc::OrthancException); | |
262 | |
263 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 0, 4); | |
264 ASSERT_EQ(4u, s.size()); | |
265 ASSERT_EQ('a', s[0]); | |
266 ASSERT_EQ('b', s[1]); | |
267 ASSERT_EQ('c', s[2]); | |
268 ASSERT_EQ('d', s[3]); | |
269 | |
270 OrthancDatabases::StorageBackend::ReadRangeToString(s, *accessor, "uuid", OrthancPluginContentType_Unknown, 4, 6); | |
271 ASSERT_EQ(6u, s.size()); | |
272 ASSERT_EQ('\0', s[0]); | |
273 ASSERT_EQ('\1', s[1]); | |
274 ASSERT_EQ('\2', s[2]); | |
275 ASSERT_EQ('\3', s[3]); | |
276 ASSERT_EQ('\4', s[4]); | |
277 ASSERT_EQ('\5', s[5]); | |
278 | |
279 ASSERT_THROW(OrthancDatabases::StorageBackend::ReadRangeToString( | |
280 s, *accessor, "uuid", OrthancPluginContentType_Unknown, 4, 7), Orthanc::OrthancException); | |
209 } | 281 } |
210 } | 282 } |
211 | 283 |
212 | 284 |
213 TEST(MySQL, ImplicitTransaction) | 285 TEST(MySQL, ImplicitTransaction) |