From b53ff31212ae401dc09b1909529bcb2bdafe0b0f Mon Sep 17 00:00:00 2001 From: Jim Paris Date: Sat, 16 Feb 2013 18:53:15 -0500 Subject: [PATCH] client: Add must_close() decorator to nilmdb.Client, and fix tests Test suite wasn't closing connections correctly. --- nilmdb/client/client.py | 1 + tests/test_client.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/nilmdb/client/client.py b/nilmdb/client/client.py index 3e1d4e5..02db52c 100644 --- a/nilmdb/client/client.py +++ b/nilmdb/client/client.py @@ -13,6 +13,7 @@ def float_to_string(f): """Use repr to maintain full precision in the string output.""" return repr(float(f)) +@nilmdb.utils.must_close() class Client(object): """Main client interface to the Nilm database.""" diff --git a/tests/test_client.py b/tests/test_client.py index 838abc6..5236658 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -50,20 +50,24 @@ class TestClient(object): client = nilmdb.Client(url = "http://localhost:1/") with assert_raises(nilmdb.client.ServerError): client.version() + client.close() # Trigger same error with a PUT request client = nilmdb.Client(url = "http://localhost:1/") with assert_raises(nilmdb.client.ServerError): client.version() + client.close() # Then a fake URL on a real host client = nilmdb.Client(url = "http://localhost:12380/fake/") with assert_raises(nilmdb.client.ClientError): client.version() + client.close() # Now a real URL with no http:// prefix client = nilmdb.Client(url = "localhost:12380") version = client.version() + client.close() # Now use the real URL client = nilmdb.Client(url = "http://localhost:12380/") @@ -74,6 +78,7 @@ class TestClient(object): # Bad URLs should give 404, not 500 with assert_raises(ClientError): client.http.get("/stream/create") + client.close() def test_client_2_createlist(self): # Basic stream tests, like those in test_nilmdb:test_stream @@ -117,6 +122,7 @@ class TestClient(object): client.stream_create("/newton/hello", "RawData") resource.setrlimit(resource.RLIMIT_FSIZE, limit) + client.close() def test_client_3_metadata(self): client = nilmdb.Client(url = "http://localhost:12380/") @@ -150,6 +156,7 @@ class TestClient(object): client.stream_set_metadata("/newton/prep", [1,2,3]) with assert_raises(ClientError): client.stream_update_metadata("/newton/prep", [1,2,3]) + client.close() def test_client_4_insert(self): client = nilmdb.Client(url = "http://localhost:12380/") @@ -226,6 +233,8 @@ class TestClient(object): in_("400 Bad Request", str(e.exception)) in_("verlap", str(e.exception)) + client.close() + def test_client_5_extractremove(self): # Misc tests for extract and remove. Most of them are in test_cmdline. client = nilmdb.Client(url = "http://localhost:12380/") @@ -236,6 +245,8 @@ class TestClient(object): with assert_raises(ClientError) as e: client.stream_remove("/newton/prep", 123, 120) + client.close() + def test_client_6_generators(self): # A lot of the client functionality is already tested by test_cmdline, # but this gets a bit more coverage that cmdline misses. @@ -285,6 +296,8 @@ class TestClient(object): in_("404 Not Found", str(e.exception)) in_("No such stream", str(e.exception)) + client.close() + def test_client_7_headers(self): # Make sure that /stream/intervals and /stream/extract # properly return streaming, chunked, text/plain response. @@ -324,6 +337,8 @@ class TestClient(object): "header in /stream/extract response:\n" + http._headers) + client.close() + def test_client_8_unicode(self): # Basic Unicode tests client = nilmdb.Client(url = "http://localhost:12380/") @@ -361,6 +376,8 @@ class TestClient(object): eq_(client.stream_get_metadata(raw[0], [ "alpha" ]), meta2) eq_(client.stream_get_metadata(raw[0], [ "alpha", "β" ]), meta1) + client.close() + def test_client_9_closing(self): # Make sure we actually close sockets correctly. New # connections will block for a while if they're not, since the