Mercurial > hg > orthanc-databases
comparison MySQL/UnitTests/UnitTestsMain.cpp @ 230:675f8322eb7c
refactored StorageBackend by introducing an accessor class
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 06 Apr 2021 11:17:00 +0200 |
parents | a4918d57435c |
children | b97a537f4613 |
comparison
equal
deleted
inserted
replaced
229:5744f09b0b1b | 230:675f8322eb7c |
---|---|
135 } | 135 } |
136 | 136 |
137 | 137 |
138 static int64_t CountFiles(OrthancDatabases::MySQLDatabase& db) | 138 static int64_t CountFiles(OrthancDatabases::MySQLDatabase& db) |
139 { | 139 { |
140 OrthancDatabases::Query query("SELECT COUNT(*) FROM StorageArea", true); | 140 OrthancDatabases::MySQLTransaction transaction(db, OrthancDatabases::TransactionType_ReadOnly); |
141 OrthancDatabases::MySQLStatement s(db, query); | 141 |
142 OrthancDatabases::MySQLTransaction t(db, OrthancDatabases::TransactionType_ReadOnly); | 142 int64_t count; |
143 OrthancDatabases::Dictionary d; | 143 { |
144 std::unique_ptr<OrthancDatabases::IResult> result(s.Execute(t, d)); | 144 OrthancDatabases::Query query("SELECT COUNT(*) FROM StorageArea", true); |
145 return dynamic_cast<const OrthancDatabases::Integer64Value&>(result->GetField(0)).GetValue(); | 145 OrthancDatabases::MySQLStatement s(db, query); |
146 OrthancDatabases::MySQLTransaction t(db, OrthancDatabases::TransactionType_ReadOnly); | |
147 OrthancDatabases::Dictionary d; | |
148 std::unique_ptr<OrthancDatabases::IResult> result(s.Execute(t, d)); | |
149 count = dynamic_cast<const OrthancDatabases::Integer64Value&>(result->GetField(0)).GetValue(); | |
150 } | |
151 | |
152 transaction.Commit(); | |
153 return count; | |
146 } | 154 } |
147 | 155 |
148 | 156 |
149 TEST(MySQL, StorageArea) | 157 TEST(MySQL, StorageArea) |
150 { | 158 { |
151 OrthancDatabases::MySQLStorageArea storageArea(globalParameters_, true); | 159 std::unique_ptr<OrthancDatabases::MySQLDatabase> database( |
152 | 160 OrthancDatabases::MySQLDatabase::OpenDatabaseConnection(globalParameters_)); |
153 { | 161 |
154 OrthancDatabases::DatabaseManager::Transaction transaction(storageArea.GetManager(), OrthancDatabases::TransactionType_ReadWrite); | 162 OrthancDatabases::MySQLStorageArea storageArea(globalParameters_, true /* clear database */); |
155 OrthancDatabases::MySQLDatabase& db = | 163 |
156 dynamic_cast<OrthancDatabases::MySQLDatabase&>(transaction.GetDatabase()); | 164 { |
157 | 165 OrthancDatabases::MySQLStorageArea::Accessor accessor(storageArea); |
158 ASSERT_EQ(0, CountFiles(db)); | 166 |
167 ASSERT_EQ(0, CountFiles(*database)); | |
159 | 168 |
160 for (int i = 0; i < 10; i++) | 169 for (int i = 0; i < 10; i++) |
161 { | 170 { |
162 std::string uuid = boost::lexical_cast<std::string>(i); | 171 std::string uuid = boost::lexical_cast<std::string>(i); |
163 std::string value = "Value " + boost::lexical_cast<std::string>(i * 2); | 172 std::string value = "Value " + boost::lexical_cast<std::string>(i * 2); |
164 storageArea.Create(transaction, uuid, value.c_str(), value.size(), OrthancPluginContentType_Unknown); | 173 accessor.Create(uuid, value.c_str(), value.size(), OrthancPluginContentType_Unknown); |
165 } | 174 } |
166 | 175 |
167 std::string buffer; | 176 std::string buffer; |
168 ASSERT_THROW(storageArea.ReadToString(buffer, transaction, "nope", OrthancPluginContentType_Unknown), | 177 ASSERT_THROW(accessor.ReadToString(buffer, "nope", OrthancPluginContentType_Unknown), |
169 Orthanc::OrthancException); | 178 Orthanc::OrthancException); |
170 | 179 |
171 ASSERT_EQ(10, CountFiles(db)); | 180 ASSERT_EQ(10, CountFiles(*database)); |
172 storageArea.Remove(transaction, "5", OrthancPluginContentType_Unknown); | 181 accessor.Remove("5", OrthancPluginContentType_Unknown); |
173 | 182 |
174 ASSERT_EQ(9, CountFiles(db)); | 183 ASSERT_EQ(9, CountFiles(*database)); |
175 | 184 |
176 for (int i = 0; i < 10; i++) | 185 for (int i = 0; i < 10; i++) |
177 { | 186 { |
178 std::string uuid = boost::lexical_cast<std::string>(i); | 187 std::string uuid = boost::lexical_cast<std::string>(i); |
179 std::string expected = "Value " + boost::lexical_cast<std::string>(i * 2); | 188 std::string expected = "Value " + boost::lexical_cast<std::string>(i * 2); |
180 std::string content; | 189 std::string content; |
181 | 190 |
182 if (i == 5) | 191 if (i == 5) |
183 { | 192 { |
184 ASSERT_THROW(storageArea.ReadToString(buffer, transaction, uuid, OrthancPluginContentType_Unknown), | 193 ASSERT_THROW(accessor.ReadToString(buffer, uuid, OrthancPluginContentType_Unknown), |
185 Orthanc::OrthancException); | 194 Orthanc::OrthancException); |
186 } | 195 } |
187 else | 196 else |
188 { | 197 { |
189 storageArea.ReadToString(buffer, transaction, uuid, OrthancPluginContentType_Unknown); | 198 accessor.ReadToString(buffer, uuid, OrthancPluginContentType_Unknown); |
190 ASSERT_EQ(expected, buffer); | 199 ASSERT_EQ(expected, buffer); |
191 } | 200 } |
192 } | 201 } |
193 | 202 |
194 for (int i = 0; i < 10; i++) | 203 for (int i = 0; i < 10; i++) |
195 { | 204 { |
196 storageArea.Remove(transaction, boost::lexical_cast<std::string>(i), | 205 accessor.Remove(boost::lexical_cast<std::string>(i), OrthancPluginContentType_Unknown); |
197 OrthancPluginContentType_Unknown); | |
198 } | 206 } |
199 | 207 |
200 ASSERT_EQ(0, CountFiles(db)); | 208 ASSERT_EQ(0, CountFiles(*database)); |
201 | |
202 transaction.Commit(); | |
203 } | 209 } |
204 } | 210 } |
205 | 211 |
206 | 212 |
207 TEST(MySQL, ImplicitTransaction) | 213 TEST(MySQL, ImplicitTransaction) |