Source code for jass.test.annotations_manager_test

import unittest
import json
import logging
import random
import os
from pymongo import MongoClient

from jass.annotations_manager import AnnotationManager
from jass import settings
from jass.storage_exception import *


# other useful tools.

[docs]class TestAnnotationsManager(unittest.TestCase): d = None
[docs] def setUp(self): settings.Settings.Instance().LoadConfig( os.path.join(os.path.dirname(__file__), "..", "..", "configs", "test", "config.ini")) c = MongoClient(settings.GetConfigValue("ServiceStockageAnnotations", "MONGO_HOST"), int(settings.GetConfigValue("ServiceStockageAnnotations", "MongoPort")), connect=False) c.drop_database(settings.GetConfigValue("ServiceStockageAnnotations", "MongoDb")) c.close() self.d = AnnotationManager() self.d.setCollection(settings.GetConfigValue("ServiceStockageAnnotations", "HumanAnnotationCollection")) self.d.addStorageCollection(1, settings.GetConfigValue("ServiceStockageAnnotations", "HumanAnnotationCollection")) self.d.addStorageCollection(2, settings.GetConfigValue("ServiceStockageAnnotations", "BatchAnnotationCollection")) self.d.connect()
[docs] def test_connect(self): self.assertEqual(self.d.isConnected(), True)
[docs] def l(self, strContent): # shortcut to load json return json.loads(strContent)
[docs] def test_createAnnotationsS(self): jsonBatch = self.l('{"common":{"@context":"test"},"data":[{"a":1},{"b":2}]}') id = self.d.createMongoDocument(self.l('{"@context":"testing_context"}')) self.assertRaises(AnnotationException, lambda: self.d.createAnnotationS(jsonBatch, "yolo", 1, 1)) # bad id self.assertRaises(AnnotationException, lambda: self.d.createAnnotationS(jsonBatch, id, 1, 3)) # bad storage self.assertRaises(AnnotationException, lambda: self.d.createAnnotationS(jsonBatch, id, 1, 0)) # bad storage self.assertRaises(AnnotationException, lambda: self.d.createAnnotationS(jsonBatch, id, 2, 1)) # Bad format self.assertEqual(0, self.d.createAnnotationS(self.l("{}"), id)) jsonInvalidBatch = self.l('{"data":[{"a":1,"@context":"test"},{"b":2}]}') self.assertRaises(AnnotationException, lambda: self.d.createAnnotationS(jsonInvalidBatch, id, 1, 1)) jsonBatch = self.l('{"data":[{"a":1,"@context":"test"},{"b":2,"@context":"test"}]}') resDifferentBatchFormat = self.d.createAnnotationS(jsonBatch, id, 0, 2) self.assertEqual(2, resDifferentBatchFormat, "Expected to get 2, but got {0} created with batch format 0".format(resDifferentBatchFormat))
[docs] def test_getAnnotationsS(self): id = self.d.createMongoDocument(self.l('{"@context":"testing_context"}')) id2 = self.d.createMongoDocument(self.l('{"@context":"testing_context"}')) jsonBatch = self.l('{"common":{"@context":"test"},"data":[{"a":1,"b":1},{"a":2,"b":1}]}') jsonBatch2 = self.l('{"common":{"@context":"test"},"data":[{"a":1,"c":1},{"a":2,"c":1}]}') self.assertEqual(2, self.d.createAnnotationS(jsonBatch, id, 1, 1)) self.assertEqual(2, self.d.createAnnotationS(jsonBatch2, id2, 1, 1)) # res = self.d.getAnnotationS([id], {}, 0, 1) self.assertEqual(2, len(res["data"])) res = self.d.getAnnotationS([id], {"a": 1}, 0, 1) self.assertEqual(1, len(res["data"]), "Filter a:1 for one docs should return 1 result. Results: {0}".format(str(res))) res = self.d.getAnnotationS([id, id2], {"a": 1}, 0, 1) self.assertEqual(2, len(res["data"]), "Filter a:1 for two docs should return 2 result. Results: {0}".format(str(res))) largeJsonBatch = self.l( '{"common":{"@context":"test"},"data":[{"e":1},{"e":2},{"e":3},{"e":1},{"e":2},{"e":3},{"e":1},{"e":2},{"e":3},{"e":1},{"e":2},{"e":3},{"e":1},{"e":2},{"e":3},{"e":1},{"e":2},{"e":3},{"e":1},{"e":2},{"e":3},{"e":1},{"e":2},{"e":3},{"e":1},{"e":2},{"e":3}]}') self.assertEqual(27, self.d.createAnnotationS(largeJsonBatch, id2, 1, 1)) res = self.d.getAnnotationS([id, id2], {"e": {"$gt": 0}}, 0, 1) self.assertEqual(27, len(res["data"]), "Filter e:1 for largebatch should return 27 result. Returned: {0}".format(len(res["data"]))) # testing by getting # Change for large batch largeJsonBatch1 = self.l( '{"common":{"@context":"test","k":1},"data":[{"a":1,"b":1},{"a":2,"b":1},{"a":3,"b":1}]}') largeJsonBatch2 = self.l('{"common":{"@context":"test","k":2},"data":[{"a":4,"c":1},{"a":5,"c":1}]}') largeJsonBatch3 = self.l( '{"common":{"@context":"test","k":2},"data":[{"a":1,"c":1},{"a":2,"c":1},{"a":3,"c":1},{"a":4,"c":1}]}') # id, 2 batches total 5 anno # id2, 1 batch total 4 anno self.assertEqual(3, self.d.createAnnotationS(largeJsonBatch1, id, 1, 2)) self.assertEqual(2, self.d.createAnnotationS(largeJsonBatch2, id, 1, 2)) self.assertEqual(4, self.d.createAnnotationS(largeJsonBatch3, id2, 1, 2)) # get all annotations in both documents res = self.d.getAnnotationS([id, id2], {}, 0, 2) self.assertEqual(9, len(res["data"])) # get all annotations of doc with id res = self.d.getAnnotationS([id], {}, 0, 2) self.assertEqual(5, len(res["data"])) res = self.d.getAnnotationS([id], {"k": 2}, 0, 2) self.assertEqual(2, len(res["data"])) # get all batch annotations with key k = 2 for both documents res = self.d.getAnnotationS([id, id2], {"k": 2}, 0, 2) self.assertEqual(6, len(res["data"]))
[docs] def test_deleteAnnotationsS(self): id = self.d.createMongoDocument(self.l('{"@context":"testing_context"}')) jsonBatch = self.l('{"common":{"@context":"test"},"data":[{"a":1},{"b":2}]}') jsonLargeBatch1 = self.l('{"common":{"@context":"test","batch":1},"data":[{"a":1},{"b":2}]}') jsonLargeBatch2 = self.l('{"common":{"@context":"test","batch":2},"data":[{"a":1},{"b":2}]}') self.assertEqual(0, self.d.deleteAnnotationS([id], {})) self.assertEqual(2, self.d.createAnnotationS(jsonBatch, id)) self.assertEqual(2, self.d.deleteAnnotationS([id], {})) self.assertEqual(2, self.d.createAnnotationS(jsonBatch, id, 1, 1)) self.assertEqual(2, self.d.createAnnotationS(jsonLargeBatch1, id, 1, 2)) res = self.d.deleteAnnotationS([id], {}, 1) self.assertEqual(2, res, "Should only delete 2 since we created 2 per storage type, but we got {0}".format(res)) res = self.d.deleteAnnotationS([id], {}, 2) self.assertEqual(1, res, "Should delete 1 since we only have one batch".format(res)) self.assertEqual(2, self.d.createAnnotationS(jsonLargeBatch1, id, 1, 2)) self.assertEqual(2, self.d.createAnnotationS(jsonLargeBatch2, id, 1, 2)) res = self.d.deleteAnnotationS([id], {"batch": 1}, 2) self.assertEqual(1, res, "Should delete 1 (only the first batch of 2 batches) we got {0}".format(res))
if __name__ == '__main__': unittest.main()