Skip to content

Commit d19f758

Browse files
Add a test
1 parent babd2f8 commit d19f758

1 file changed

Lines changed: 35 additions & 0 deletions

File tree

tests/test_redis_ut.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import time
2+
from threading import Thread
3+
from pympler.tracker import SummaryTracker
24
from swsscommon import swsscommon
35

46
def test_ProducerTable():
@@ -87,3 +89,36 @@ def test_DBConnectorRedisClientName():
8789
db.setClientName(client_name)
8890
time.sleep(1)
8991
assert db.getClientName() == client_name
92+
93+
94+
def test_SelectMemoryLeak():
95+
N = 50000
96+
def table_set(t, state):
97+
fvs = swsscommon.FieldValuePairs([("status", state)])
98+
t.set("123", fvs)
99+
100+
def generator_SelectMemoryLeak():
101+
app_db = swsscommon.DBConnector("APPL_DB", 0, True)
102+
t = swsscommon.Table(app_db, "TABLE")
103+
for i in xrange(N/2):
104+
table_set(t, "up")
105+
table_set(t, "down")
106+
107+
tracker = SummaryTracker()
108+
appl_db = swsscommon.DBConnector("APPL_DB", 0, True)
109+
sel = swsscommon.Select()
110+
sst = swsscommon.SubscriberStateTable(appl_db, "TABLE")
111+
sel.addSelectable(sst)
112+
thr = Thread(target=generator_SelectMemoryLeak)
113+
thr.daemon = True
114+
thr.start()
115+
time.sleep(5)
116+
for _ in xrange(N):
117+
state, c = sel.select(1000)
118+
diff = tracker.diff()
119+
cases = []
120+
for name, count, _ in diff:
121+
if count >= N:
122+
cases.append("%s - %d objects for %d repeats" % (name, count, N))
123+
thr.join()
124+
assert not cases

0 commit comments

Comments
 (0)