summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSergey Shepelev <temotor@gmail.com>2014-09-01 04:21:50 +0400
committerSergey Shepelev <temotor@gmail.com>2014-09-01 04:21:50 +0400
commitf574c4feb153ad925ebe0dcf4a2020e5b6abc56d (patch)
treeef401b8e86287b5837f52c8b01467c943642e682 /tests
parenta5fa0e050913a273ec03b2a6a22809b7f4b52c41 (diff)
downloadeventlet-f574c4feb153ad925ebe0dcf4a2020e5b6abc56d.tar.gz
greenio: manual memory leak test
https://github.com/eventlet/eventlet/pull/125
Diffstat (limited to 'tests')
-rw-r--r--tests/manual/__init__.py0
-rw-r--r--tests/manual/greenio_memtest.py83
2 files changed, 83 insertions, 0 deletions
diff --git a/tests/manual/__init__.py b/tests/manual/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/manual/__init__.py
diff --git a/tests/manual/greenio_memtest.py b/tests/manual/greenio_memtest.py
new file mode 100644
index 0000000..cb3390b
--- /dev/null
+++ b/tests/manual/greenio_memtest.py
@@ -0,0 +1,83 @@
+import eventlet
+from eventlet import greenio
+import os
+
+
+__test__ = False
+_proc_status = '/proc/%d/status' % os.getpid()
+
+_scale = {'kB': 1024.0, 'mB': 1024.0*1024.0,
+ 'KB': 1024.0, 'MB': 1024.0*1024.0}
+
+
+def _VmB(VmKey):
+ '''Private.
+ '''
+ global _proc_status, _scale
+ # get pseudo file /proc/<pid>/status
+ try:
+ t = open(_proc_status)
+ v = t.read()
+ t.close()
+ except:
+ return 0.0 # non-Linux?
+ # get VmKey line e.g. 'VmRSS: 9999 kB\n ...'
+ i = v.index(VmKey)
+ v = v[i:].split(None, 3) # whitespace
+ if len(v) < 3:
+ return 0.0 # invalid format?
+ # convert Vm value to bytes
+ return float(v[1]) * _scale[v[2]]
+
+
+def memory(since=0.0):
+ '''Return memory usage in bytes.
+ '''
+ return _VmB('VmSize:') - since
+
+
+def resident(since=0.0):
+ '''Return resident memory usage in bytes.
+ '''
+ return _VmB('VmRSS:') - since
+
+
+def stacksize(since=0.0):
+ '''Return stack size in bytes.
+ '''
+ return _VmB('VmStk:') - since
+
+
+def test_pipe_writes_large_messages():
+ r, w = os.pipe()
+
+ r = greenio.GreenPipe(r)
+ w = greenio.GreenPipe(w, 'w')
+
+ large_message = b"".join([1024 * chr(i) for i in range(65)])
+
+ def writer():
+ w.write(large_message)
+ w.close()
+
+ gt = eventlet.spawn(writer)
+
+ for i in range(65):
+ buf = r.read(1024)
+ expected = 1024 * chr(i)
+ if buf != expected:
+ print(
+ "expected=%r..%r, found=%r..%r iter=%d"
+ % (expected[:4], expected[-4:], buf[:4], buf[-4:], i))
+ gt.wait()
+
+
+if __name__ == "__main__":
+ _iter = 1
+ while True:
+ test_pipe_writes_large_messages()
+
+ _iter += 1
+ if _iter % 10 == 0:
+ print("_iter = %d, VmSize: %d, VmRSS = %d, VmStk = %d" %
+ (_iter, memory(), resident(), stacksize()))