Skip to content

Commit c02f99b

Browse files
committed
add minimal row image test
1 parent 3ede586 commit c02f99b

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

pymysqlreplication/tests/test_basic.py

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,100 @@ def test_update_row_event(self):
221221
self.assertEqual(event.rows[0]["after_values"]["id"], 1)
222222
self.assertEqual(event.rows[0]["after_values"]["data"], "World")
223223

224+
def test_minimal_image_write_row_event(self):
225+
query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
226+
self.execute(query)
227+
query = "SET SESSION binlog_row_image = 'minimal'"
228+
self.execute(query)
229+
query = "INSERT INTO test (data) VALUES('Hello World')"
230+
self.execute(query)
231+
self.execute("COMMIT")
232+
233+
self.assertIsInstance(self.stream.fetchone(), RotateEvent)
234+
self.assertIsInstance(self.stream.fetchone(), FormatDescriptionEvent)
235+
#QueryEvent for the Create Table
236+
self.assertIsInstance(self.stream.fetchone(), QueryEvent)
237+
#QueryEvent for the Set session binlog row image
238+
self.assertIsInstance(self.stream.fetchone(), QueryEvent)
239+
#QueryEvent for the BEGIN
240+
self.assertIsInstance(self.stream.fetchone(), QueryEvent)
241+
242+
self.assertIsInstance(self.stream.fetchone(), TableMapEvent)
243+
244+
event = self.stream.fetchone()
245+
if self.isMySQL56AndMore():
246+
self.assertEqual(event.event_type, WRITE_ROWS_EVENT_V2)
247+
else:
248+
self.assertEqual(event.event_type, WRITE_ROWS_EVENT_V1)
249+
self.assertIsInstance(event, WriteRowsEvent)
250+
self.assertEqual(event.rows[0]["values"]["id"], 1)
251+
self.assertEqual(event.rows[0]["values"]["data"], "Hello World")
252+
self.assertEqual(event.schema, "pymysqlreplication_test")
253+
self.assertEqual(event.table, "test")
254+
self.assertEqual(event.columns[1].name, 'data')
255+
256+
def test_minimal_image_delete_row_event(self):
257+
query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
258+
self.execute(query)
259+
query = "INSERT INTO test (data) VALUES('Hello World')"
260+
self.execute(query)
261+
query = "SET SESSION binlog_row_image = 'minimal'"
262+
self.execute(query)
263+
self.resetBinLog()
264+
265+
query = "DELETE FROM test WHERE id = 1"
266+
self.execute(query)
267+
self.execute("COMMIT")
268+
269+
self.assertIsInstance(self.stream.fetchone(), RotateEvent)
270+
self.assertIsInstance(self.stream.fetchone(), FormatDescriptionEvent)
271+
272+
#QueryEvent for the BEGIN
273+
self.assertIsInstance(self.stream.fetchone(), QueryEvent)
274+
275+
self.assertIsInstance(self.stream.fetchone(), TableMapEvent)
276+
277+
event = self.stream.fetchone()
278+
if self.isMySQL56AndMore():
279+
self.assertEqual(event.event_type, DELETE_ROWS_EVENT_V2)
280+
else:
281+
self.assertEqual(event.event_type, DELETE_ROWS_EVENT_V1)
282+
self.assertIsInstance(event, DeleteRowsEvent)
283+
self.assertEqual(event.rows[0]["values"]["id"], 1)
284+
self.assertEqual(event.rows[0]["values"]["data"], None)
285+
286+
def test_minimal_image_update_row_event(self):
287+
query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
288+
self.execute(query)
289+
query = "INSERT INTO test (data) VALUES('Hello')"
290+
self.execute(query)
291+
query = "SET SESSION binlog_row_image = 'minimal'"
292+
self.execute(query)
293+
self.resetBinLog()
294+
295+
query = "UPDATE test SET data = 'World' WHERE id = 1"
296+
self.execute(query)
297+
self.execute("COMMIT")
298+
299+
self.assertIsInstance(self.stream.fetchone(), RotateEvent)
300+
self.assertIsInstance(self.stream.fetchone(), FormatDescriptionEvent)
301+
302+
#QueryEvent for the BEGIN
303+
self.assertIsInstance(self.stream.fetchone(), QueryEvent)
304+
305+
self.assertIsInstance(self.stream.fetchone(), TableMapEvent)
306+
307+
event = self.stream.fetchone()
308+
if self.isMySQL56AndMore():
309+
self.assertEqual(event.event_type, UPDATE_ROWS_EVENT_V2)
310+
else:
311+
self.assertEqual(event.event_type, UPDATE_ROWS_EVENT_V1)
312+
self.assertIsInstance(event, UpdateRowsEvent)
313+
self.assertEqual(event.rows[0]["before_values"]["id"], 1)
314+
self.assertEqual(event.rows[0]["before_values"]["data"], "Hello")
315+
self.assertEqual(event.rows[0]["after_values"]["id"], None)
316+
self.assertEqual(event.rows[0]["after_values"]["data"], "World")
317+
224318
def test_log_pos(self):
225319
query = "CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, data VARCHAR (50) NOT NULL, PRIMARY KEY (id))"
226320
self.execute(query)

0 commit comments

Comments
 (0)