forked from coleifer/peewee
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tests_read_slave.py
101 lines (76 loc) · 2.51 KB
/
tests_read_slave.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import unittest
from peewee import *
from playhouse.read_slave import ReadSlaveModel
queries = []
def reset():
global queries
queries = []
class QueryLogDatabase(SqliteDatabase):
name = ''
def execute_sql(self, query, *args, **kwargs):
queries.append((self.name, query))
return super(QueryLogDatabase, self).execute_sql(
query, *args, **kwargs)
class Master(QueryLogDatabase):
name = 'master'
class Slave1(QueryLogDatabase):
name = 'slave1'
class Slave2(QueryLogDatabase):
name = 'slave2'
master = Master('tmp.db')
slave1 = Slave1('tmp.db')
slave2 = Slave2('tmp.db')
class BaseModel(ReadSlaveModel):
class Meta:
database = master
read_slaves = [slave1, slave2]
class User(BaseModel):
username = CharField()
class Thing(BaseModel):
name = CharField()
class Meta:
read_slaves = [slave2]
class TestMasterSlave(unittest.TestCase):
def setUp(self):
User.drop_table(True)
User.create_table()
Thing.drop_table(True)
Thing.create_table()
User.create(username='peewee')
Thing.create(name='something')
reset()
def tearDown(self):
User.drop_table(True)
Thing.drop_table(True)
def assertQueries(self, databases):
self.assertEqual([q[0] for q in queries], databases)
def test_balance_pair(self):
for i in range(6):
User.get()
self.assertQueries([
'slave1',
'slave2',
'slave1',
'slave2',
'slave1',
'slave2'])
def test_balance_single(self):
for i in range(3):
Thing.get()
self.assertQueries(['slave2', 'slave2', 'slave2'])
def test_query_types(self):
u = User.create(username='charlie')
User.select().where(User.username == 'charlie').get()
self.assertQueries(['master', 'slave1'])
User.get(User.username == 'charlie')
self.assertQueries(['master', 'slave1', 'slave2'])
u.username = 'edited'
u.save() # Update.
self.assertQueries(['master', 'slave1', 'slave2', 'master'])
u.delete_instance()
self.assertQueries(['master', 'slave1', 'slave2', 'master', 'master'])
def test_raw_queries(self):
User.raw('insert into user (username) values (?)', 'charlie').execute()
rq = list(User.raw('select * from user where username = ?', 'charlie'))
self.assertEqual(rq[0].username, 'charlie')
self.assertQueries(['master', 'slave1'])