import psutil
import os
import perspective as psp
client = psp.Server().new_local_client()
Table = client.table
class TestDelete(object):
def test_table_delete(self):
process = psutil.Process(os.getpid())
data = [{"a": 1, "b": 2}, {"a": 3, "b": 4}]
tbl = Table(data)
tbl.delete()
mem = process.memory_info().rss
for x in range(10000):
data = [{"a": 1, "b": 2}, {"a": 3, "b": 4}]
tbl = Table(data)
tbl.delete()
mem2 = process.memory_info().rss
assert (mem2 - mem) < 2000000
def test_table_delete_with_view(self, sentinel):
data = [{"a": 1, "b": 2}, {"a": 3, "b": 4}]
tbl = Table(data)
process = psutil.Process(os.getpid())
mem = process.memory_info().rss
for x in range(10000):
view = tbl.view()
view.delete()
tbl.delete()
mem2 = process.memory_info().rss
assert (mem2 - mem) < 2000000
class TestExpressionVocab(object):
def test_string_expression_update_no_leak(self):
long_literal = "X" * 256
tbl = Table({"x": "integer", "c": "string"}, index="x")
view = tbl.view(expressions={"e": 'concat("c", \'' + long_literal + "')"})
for _ in range(100):
tbl.update([{"x": 1, "c": "value"}])
process = psutil.Process(os.getpid())
mem = process.memory_info().rss
for _ in range(5000):
tbl.update([{"x": 1, "c": "value"}])
mem2 = process.memory_info().rss
view.delete()
tbl.delete()
assert (mem2 - mem) < 2000000
def test_string_expression_update_bounded_vocab_no_leak(self):
values = ["alpha", "bravo", "charlie", "delta", "echo"]
tbl = Table({"x": "integer", "c": "string"}, index="x")
view = tbl.view(expressions={"e": 'upper("c")'})
for i in range(100):
tbl.update([{"x": 1, "c": values[i % len(values)]}])
process = psutil.Process(os.getpid())
mem = process.memory_info().rss
for i in range(5000):
tbl.update([{"x": 1, "c": values[i % len(values)]}])
mem2 = process.memory_info().rss
view.delete()
tbl.delete()
assert (mem2 - mem) < 2000000