95
98
parsed_message = _parse_message(TEST_MESSAGE)[1]
96
99
for key, value in parsed_message.iteritems():
97
100
self.assertEqual(value, cmsg[key])
103
class TestGetMessages(unittest.TestCase):
105
def assertMessages(self, expected_ids, messages):
107
'<message%d@example.com>' % id for id in expected_ids]
108
actual_msgids = [msg['message-id'] for msg in messages]
109
self.assertEqual(expected_msgids, actual_msgids)
111
def makeMessages(self, conn, archive, count):
115
TEMPLATE_MESSAGE.format(
116
date=formatdate(i * 100),
117
id='<message%d@example.com>' % i))
118
for i in range(count)]
120
def makeArchive(self):
121
conn = CassandraConnection(
122
os.environ['GRACKLE_TEST_KEYSPACE'], ['localhost:9160'])
123
archive = next(_RandomNameSequence())
126
def test_single_message(self):
127
conn, archive = self.makeArchive()
128
self.makeMessages(conn, archive, 1)
130
[0], conn.get_messages(archive, 'date', 1, '')[1])
132
def test_limit(self):
133
conn, archive = self.makeArchive()
134
self.makeMessages(conn, archive, 4)
136
[0, 1], conn.get_messages(archive, 'date', 2, '')[1])
138
def test_order(self):
139
conn, archive = self.makeArchive()
140
self.makeMessages(conn, archive, 4)
142
[3, 2], conn.get_messages(archive, '-date', 2, '')[1])
144
def test_batching_forward(self):
145
conn, archive = self.makeArchive()
146
self.makeMessages(conn, archive, 5)
147
prev, messages, next = conn.get_messages(archive, 'date', 2, '')
148
self.assertMessages([0, 1], messages)
149
prev, messages, next = conn.get_messages(archive, 'date', 2, next)
150
self.assertMessages([2, 3], messages)
151
prev, messages, next = conn.get_messages(archive, 'date', 2, next)
152
self.assertMessages([4], messages)
153
prev, messages, next = conn.get_messages(archive, 'date', 2, next)
154
self.assertIs(None, prev)
155
self.assertMessages([], messages)
156
self.assertIs(None, next)
158
def test_batching_backward(self):
159
conn, archive = self.makeArchive()
160
self.makeMessages(conn, archive, 5)
161
prev, messages, next = conn.get_messages(archive, 'date', 2, '')
162
self.assertMessages([0, 1], messages)
163
prev, messages, next = conn.get_messages(archive, 'date', 2, next)
164
self.assertMessages([2, 3], messages)
165
# XXX: We shouldn't have to reverse the sort order. There should
166
# be a flag to work backwards, but I'm not sure if we can get
167
# that from Cassandra without reversing in Python.
168
prev, messages, next = conn.get_messages(archive, '-date', 2, prev)
169
self.assertMessages([1, 0], messages)