|
21 | 21 | ApplicationServiceStore, ApplicationServiceTransactionStore |
22 | 22 | ) |
23 | 23 |
|
| 24 | +import json |
24 | 25 | from mock import Mock |
25 | 26 | from tests.utils import SQLiteMemoryDbPool, MockClock |
26 | 27 |
|
@@ -166,6 +167,20 @@ def _set_state(self, id, state, txn=None): |
166 | 167 | (id, state, txn) |
167 | 168 | ) |
168 | 169 |
|
| 170 | + def _insert_txn(self, as_id, txn_id, content): |
| 171 | + return self.db_pool.runQuery( |
| 172 | + "INSERT INTO application_services_txns(as_id, txn_id, content) " |
| 173 | + "VALUES(?,?,?)", |
| 174 | + (as_id, txn_id, json.dumps(content)) |
| 175 | + ) |
| 176 | + |
| 177 | + def _set_last_txn(self, as_id, txn_id): |
| 178 | + return self.db_pool.runQuery( |
| 179 | + "INSERT INTO application_services_state(as_id, last_txn, state) " |
| 180 | + "VALUES(?,?,?)", |
| 181 | + (as_id, txn_id, ApplicationServiceState.UP) |
| 182 | + ) |
| 183 | + |
169 | 184 | @defer.inlineCallbacks |
170 | 185 | def test_get_appservice_state_none(self): |
171 | 186 | service = Mock(id=999) |
@@ -237,6 +252,58 @@ def test_set_appservices_state_multiple_up(self): |
237 | 252 | ) |
238 | 253 | self.assertEquals(service.id, rows[0][0]) |
239 | 254 |
|
| 255 | + @defer.inlineCallbacks |
| 256 | + def test_create_appservice_txn_first(self): |
| 257 | + service = Mock(id=self.as_list[0]["id"]) |
| 258 | + events = [{"type": "nothing"}, {"type": "here"}] |
| 259 | + txn = yield self.store.create_appservice_txn(service, events) |
| 260 | + self.assertEquals(txn.id, 1) |
| 261 | + self.assertEquals(txn.events, events) |
| 262 | + self.assertEquals(txn.service, service) |
| 263 | + |
| 264 | + @defer.inlineCallbacks |
| 265 | + def test_create_appservice_txn_older_last_txn(self): |
| 266 | + service = Mock(id=self.as_list[0]["id"]) |
| 267 | + events = [{"type": "nothing"}, {"type": "here"}] |
| 268 | + yield self._set_last_txn(service.id, 9643) # AS is falling behind |
| 269 | + yield self._insert_txn(service.id, 9644, events) |
| 270 | + yield self._insert_txn(service.id, 9645, events) |
| 271 | + txn = yield self.store.create_appservice_txn(service, events) |
| 272 | + self.assertEquals(txn.id, 9646) |
| 273 | + self.assertEquals(txn.events, events) |
| 274 | + self.assertEquals(txn.service, service) |
| 275 | + |
| 276 | + @defer.inlineCallbacks |
| 277 | + def test_create_appservice_txn_up_to_date_last_txn(self): |
| 278 | + service = Mock(id=self.as_list[0]["id"]) |
| 279 | + events = [{"type": "nothing"}, {"type": "here"}] |
| 280 | + yield self._set_last_txn(service.id, 9643) |
| 281 | + txn = yield self.store.create_appservice_txn(service, events) |
| 282 | + self.assertEquals(txn.id, 9644) |
| 283 | + self.assertEquals(txn.events, events) |
| 284 | + self.assertEquals(txn.service, service) |
| 285 | + |
| 286 | + @defer.inlineCallbacks |
| 287 | + def test_create_appservice_txn_up_fuzzing(self): |
| 288 | + service = Mock(id=self.as_list[0]["id"]) |
| 289 | + events = [{"type": "nothing"}, {"type": "here"}] |
| 290 | + yield self._set_last_txn(service.id, 9643) |
| 291 | + |
| 292 | + # dump in rows with higher IDs to make sure the queries aren't wrong. |
| 293 | + yield self._set_last_txn(self.as_list[1]["id"], 119643) |
| 294 | + yield self._set_last_txn(self.as_list[2]["id"], 9) |
| 295 | + yield self._set_last_txn(self.as_list[3]["id"], 9643) |
| 296 | + yield self._insert_txn(self.as_list[1]["id"], 119644, events) |
| 297 | + yield self._insert_txn(self.as_list[1]["id"], 119645, events) |
| 298 | + yield self._insert_txn(self.as_list[1]["id"], 119646, events) |
| 299 | + yield self._insert_txn(self.as_list[2]["id"], 10, events) |
| 300 | + yield self._insert_txn(self.as_list[3]["id"], 9643, events) |
| 301 | + |
| 302 | + txn = yield self.store.create_appservice_txn(service, events) |
| 303 | + self.assertEquals(txn.id, 9644) |
| 304 | + self.assertEquals(txn.events, events) |
| 305 | + self.assertEquals(txn.service, service) |
| 306 | + |
240 | 307 | @defer.inlineCallbacks |
241 | 308 | def test_get_appservices_by_state_single(self): |
242 | 309 | yield self._set_state( |
|
0 commit comments