17
17
super(MessageStoreTest, self).setUp()
19
19
self.temp_dir = tempfile.mkdtemp()
20
self.persist = Persist()
21
self.store = MessageStore(self.persist,
22
self.temp_dir, 20, get_time=self.get_time)
23
self.store.set_accepted_types(["empty", "data"])
24
self.store.add_schema(Message("empty", {}))
25
self.store.add_schema(Message("empty2", {}))
26
self.store.add_schema(Message("data", {"data": String()}))
27
self.store.add_schema(Message("unaccepted", {"data": String()}))
20
self.persist_filename = tempfile.mktemp()
21
self.persist = Persist(filename=self.persist_filename)
22
self.store = self.create_store()
24
def create_store(self):
25
persist = Persist(filename=self.persist_filename)
26
store = MessageStore(persist, self.temp_dir, 20, get_time=self.get_time)
27
store.set_accepted_types(["empty", "data"])
28
store.add_schema(Message("empty", {}))
29
store.add_schema(Message("empty2", {}))
30
store.add_schema(Message("data", {"data": String()}))
31
store.add_schema(Message("unaccepted", {"data": String()}))
29
34
def tearDown(self):
30
35
super(MessageStoreTest, self).tearDown()
31
36
shutil.rmtree(self.temp_dir)
37
if os.path.isfile(self.persist_filename):
38
os.unlink(self.persist_filename)
33
40
def get_time(self):
36
def test_get_sequence(self):
43
def test_get_set_sequence(self):
37
44
self.assertEquals(self.store.get_sequence(), 0)
38
45
self.store.set_sequence(3)
39
46
self.assertEquals(self.store.get_sequence(), 3)
48
# Ensure it's actually saved.
50
store = self.create_store()
51
self.assertEquals(store.get_sequence(), 3)
53
def test_get_set_server_sequence(self):
54
self.assertEquals(self.store.get_server_sequence(), 0)
55
self.store.set_server_sequence(3)
56
self.assertEquals(self.store.get_server_sequence(), 3)
58
# Ensure it's actually saved.
60
store = self.create_store()
61
self.assertEquals(store.get_server_sequence(), 3)
63
def test_get_set_server_uuid(self):
64
self.assertEquals(self.store.get_server_uuid(), None)
65
self.store.set_server_uuid("abcd-efgh")
66
self.assertEquals(self.store.get_server_uuid(), "abcd-efgh")
68
# Ensure it's actually saved.
70
store = self.create_store()
71
self.assertEquals(store.get_server_uuid(), "abcd-efgh")
41
73
def test_get_pending_offset(self):
42
74
self.assertEquals(self.store.get_pending_offset(), 0)
43
75
self.store.set_pending_offset(3)
242
274
If the server gets unplugged halfway through writing a file,
243
275
the message should not be half-written.
245
store = MessageStore(self.persist, self.temp_dir,
246
get_time=self.get_time)
247
store.add_schema(Message("data", {"data": Int()}))
248
store.add({"type": "data", "data": 1})
277
self.store.add_schema(Message("data", {"data": Int()}))
278
self.store.add({"type": "data", "data": 1})
249
279
# We simulate it by creating a fake file which raises halfway through
250
280
# writing a file.
251
281
replaced_file_factory = self.mocker.replace("__builtin__.open",
257
287
# This kind of ensures that raising an exception is somewhat
258
288
# similar to unplugging the power -- i.e., we're not relying
259
289
# on special exception-handling in the file-writing code.
260
self.assertRaises(IOError, store.add, {"type": "data", "data": 2})
290
self.assertRaises(IOError, self.store.add, {"type": "data", "data": 2})
261
291
self.mocker.verify()
262
292
self.mocker.reset()
263
self.assertEquals(store.get_pending_messages(),
264
[{"type": "data", "data": 1,
293
self.assertEquals(self.store.get_pending_messages(),
294
[{"type": "data", "data": 1, "api": API}])
267
296
def test_api_attribute(self):
268
297
self.assertEquals(self.store.api, API)