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)