Skip to content

Commit

Permalink
Merge pull request #63 from gnulnx/jf/test
Browse files Browse the repository at this point in the history
Working reference 'perf' test
  • Loading branch information
gnulnx committed Sep 29, 2016
2 parents f014024 + d65c2f5 commit 758eb4b
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 23 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ v0.7.4
* Added base paramter 'max_keep' that is used for embedded documents to determine how many records to keep
* Lower Django major version number to 1.7.
* embedded document type unit test
* reference document unit test
* Bumped mongo version up to 3.2 in .travis.yml

v0.7.3
Expand Down
21 changes: 15 additions & 6 deletions mongolog/handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,21 @@ def connect(self, test=False):
# This is the timestamp collection
self.timestamp = self.db.timestamp

def get_db(self):
"""
Return a handler to the database handler
"""
return getattr(self, "db", None)

def get_timestamp_collection(self):
return getattr(self, "timestamp", None)

def get_collection(self):
"""
Return the collection being used by MongoLogHandler
"""
return getattr(self, "mongolog", None)

def connect_pymongo3(self, test=False):

try:
Expand All @@ -161,12 +176,6 @@ def connect_pymongo2(self):
self.client.server_info()
return self.client

def get_collection(self):
"""
Return the collection being used by MongoLogHandler
"""
return getattr(self, "mongolog", None)

def new_key(self, old_key):
"""
Repalce . and $ with Unicode full width equivalents
Expand Down
59 changes: 42 additions & 17 deletions mongolog/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@


from django.core.management import call_command

from django.test import TestCase
from django.test import Client
from django.core.urlresolvers import reverse
from django.conf import settings
LOGGING = settings.LOGGING
console = logging.getLogger("console")
Expand Down Expand Up @@ -128,14 +130,13 @@ def remove_test_entries(self, test_key="msg.test"):
Called in setUp and tearDown.
TODO: Remove entries from timestamp collection
"""
self.collection.remove({test_key: True}) if pymongo_major_version < 3 else self.collection.delete_many({test_key: True})
#self.collection.remove({test_key: True}) if pymongo_major_version < 3 else self.collection.delete_many({test_key: True})
# Drop the timetamp collection completely
self.handler.get_db().command("dropDatabase")

# Ensure that we don't have any test entries
self.assertEqual(0, self.collection.find({test_key: True}).count())

from django.test import TestCase
from django.test import Client
from django.core.urlresolvers import reverse


class TestBaseMongoLogHandler(TestCase, TestRemoveEntriesMixin):
def setUp(self):
Expand Down Expand Up @@ -546,12 +547,17 @@ def test_analog(self):
class TestPerformanceTests(unittest.TestCase, TestRemoveEntriesMixin):
def setUp(self):
self.handler = get_mongolog_handler('test.embedded')

# Get some pointers to the collections for easy querying
self.collection = self.handler.get_collection()
self.timestamp = self.handler.get_timestamp_collection()

self.remove_test_entries()
self.remove_test_entries(test_key='msg.Test')
self.iterations = 100


def _check_results(self, results, iterations):
def _check_embedded_results(self, results, iterations):
self.assertEqual(1, results.count())
rec = results[0]
self.assertEqual(iterations, rec['counter'])
Expand All @@ -570,19 +576,17 @@ def test_embedded(self):

self.logger = logging.getLogger('test.embedded')

iterations = 100
console.info("Starting embedded test: max_keep(%s) iteration(%s)", self.handler.max_keep, iterations)
console.info("Starting embedded test: max_keep(%s) iteration(%s)", self.handler.max_keep, self.iterations)

start = time.time()
for i in range(iterations):
console.warn("i(%s)" % i)
for i in range(self.iterations):
self.logger.info({'Test': True, 'Test1': 1})
results = self.collection.find({'msg.Test': True, 'msg.Test1': 1})
self._check_results(results, i+1)
self._check_embedded_results(results, i+1)

end = time.time()
results = self.collection.find({'msg.Test': True})
self._check_results(results, iterations)
self._check_embedded_results(results, self.iterations)
console.warn("Test time: %s", end-start)


Expand All @@ -594,20 +598,41 @@ def test_embedded(self):
self.logger = logging.getLogger('test.embedded')


console.info("Starting embedded test: max_keep(%s) iteration(%s)", self.handler.max_keep, iterations)
console.info("Starting embedded test: max_keep(%s) iteration(%s)", self.handler.max_keep, self.iterations)

start = time.time()
for i in range(iterations):
for i in range(self.iterations):
self.logger.info({'Test': True})
results = self.collection.find({'msg.Test': True})
self._check_results(results, i+1)
self._check_embedded_results(results, i+1)
end = time.time()
results = self.collection.find({'msg.Test': True})
self._check_results(results, iterations)
self._check_embedded_results(results, self.iterations)
console.warn("Test time: %s", end-start)


LOGGING['handlers']['test_embedded']['max_keep'] = max_keep
logging.config.dictConfig(LOGGING)
self.setUp()
self.logger = logging.getLogger('test.embedded')

def _check_reference_results(self, results, i):
# confirm that only one document is ever created for the same message
self.assertEqual(1, len(results))
uuid = results[0]['uuid']
ts_results = self.timestamp.find({'uuid': uuid})
td_results = list(ts_results)
self.assertEqual(i+1, len(td_results))


def test_reference(self):
console.debug(self)
self.logger = logging.getLogger('test.reference')
console.info("Starting embedded test: max_keep(%s) iteration(%s)", self.handler.max_keep, self.iterations)

start = time.time()
for i in range(self.iterations):
self.logger.info({'Test': True, 'Test1': 1})
results = list(self.collection.find({'msg.Test': True, 'msg.Test1': 1}))

self._check_reference_results(results, i)

0 comments on commit 758eb4b

Please sign in to comment.