def setUp(self): log.debug("cfg %s", repr(CFG['server'].keys())) server = CFG['server']['couchdb']['host'] username = CFG['server']['couchdb']['username'] password = CFG['server']['couchdb']['password'] self.subject = CouchStore('test-db', server, username=username, password=password, can_create=True)
def __getitem__(self, name): if name in self.keys(): return super(CouchDBPoolDict, self).__getitem__(name) factory_method = lambda name: CouchStore(self.prefix + name, **self. db_args) pool = Pool(name, factory_method=factory_method, **self.pool_args) self.__setitem__(name, pool) return pool
def setUp(self): log.debug("cfg %s", repr(CFG['server'].keys())) server=CFG['server']['couchdb']['host'] username=CFG['server']['couchdb']['username'] password=CFG['server']['couchdb']['password'] self.subject = CouchStore('test-db', server, username=username, password=password, can_create=True)
class TestCouchStore(IonIntegrationTestCase): def setUp(self): log.debug("cfg %s", repr(CFG['server'].keys())) server=CFG['server']['couchdb']['host'] username=CFG['server']['couchdb']['username'] password=CFG['server']['couchdb']['password'] self.subject = CouchStore('test-db', server, username=username, password=password, can_create=True) def tearDown(self): self.subject.drop() def testCreateDrop(self): pass def testInsertRead(self): # insert single doc = { 'a':'1', 'b':'2', '_id':'1' } self.subject.insert(doc) # self.assertTrue('_rev' in doc.keys()) succ,id,doc_out = self.subject.read('1') for key in doc.keys(): self.assertEquals(doc[key], doc_out[key]) self.assertTrue('_rev' in doc_out.keys(), msg=repr(doc_out.keys())) # insert list docs = [ { 'a':'1', 'b':'2', '_id':'2' }, { 'a':'1', 'b':'2', '_id':'3' } ] self.subject.insert(docs) docs_out = self.subject.read(['3','1','2']) doc_in = docs[1] succ,id,doc_out = docs_out[0] for key in doc_in.keys(): self.assertEquals(doc_in[key], doc_out[key], msg='out=%s'%repr(doc_out)) # insert duplicate out = self.subject.insert(doc) self.assertFalse(out[0]) docs = [ { 'a':'1', 'b':'2', '_id':'0' }, { 'a':'1', 'b':'2', '_id':'2' }, # duplicate ID { 'a':'1', 'b':'2', '_id':'5' } ] out = self.subject.insert(docs) self.assertTrue(out[0][0]) self.assertFalse(out[1][0]) self.assertTrue(out[2][0]) def testUpdate(self): docs = [ { 'a':'1', 'b':'2', '_id':'2' }, { 'a':'1', 'b':'2', '_id':'3' } ] self.subject.insert(docs) self.assertTrue('_rev' in docs[0]) # couchdb library updates dictionary! # normal update should succeed docs[0]['a'] = 'changed' docs[1]['b'] = 'changed' out = self.subject.update(docs) self.assertTrue(out[0][0]) self.assertTrue(out[1][0]) # missing or wrong _rev and update should fail del(docs[0]['_rev']) # 1-1d11ff1d76bfac091a6ca550c9d0863d docs[1]['_rev'] = '1-1d11ff1d76bfac091a6ca550c9d0863e' out = self.subject.update(docs) self.assertFalse(out[0][0]) self.assertFalse(out[1][0]) # with force, should find and update latest revision out = self.subject.update(docs, force=True) self.assertTrue(out[0][0]) self.assertTrue(out[1][0]) # doc not in DB should fail doc = { 'a':'1', '_id':5 } out = self.subject.update(doc) self.assertFalse(out[0]) def testDelete(self): docs = [ { 'a':'1', 'b':'2', '_id':'1' }, { 'a':'1', 'b':'2', '_id':'2' }, { 'a':'1', 'b':'2', '_id':'3' }, { 'a':'1', 'b':'2', '_id':'4' }, { 'a':'1', 'b':'2', '_id':'5' } ] self.subject.insert(docs) self.subject.delete(['2','3','4']) try: succ,id,doc = self.subject.read('3') except Exception,e: log.error('throws', exc_info=True) self.fail('should return, not raise exception %s'%str(e)) self.assertFalse(succ, msg="should not be able to read deleted doc") docs = [ { 'a':'1', 'b':'2', '_id':'1' }, { 'a':'1', 'b':'2', '_id':'2' }, { 'a':'1', 'b':'2', '_id':'3' }, { 'a':'1', 'b':'2', '_id':'4' }, { 'a':'1', 'b':'2', '_id':'5' } ] self.subject.insert(docs) out = self.subject.delete(['0','3','6']) self.assertFalse(out[0][0]) self.assertTrue(out[1][0]) self.assertFalse(out[2][0])
class TestCouchStore(IonIntegrationTestCase): def setUp(self): log.debug("cfg %s", repr(CFG['server'].keys())) server = CFG['server']['couchdb']['host'] username = CFG['server']['couchdb']['username'] password = CFG['server']['couchdb']['password'] self.subject = CouchStore('test-db', server, username=username, password=password, can_create=True) def tearDown(self): self.subject.drop() def testCreateDrop(self): pass def testInsertRead(self): # insert single doc = {'a': '1', 'b': '2', '_id': '1'} self.subject.insert(doc) # self.assertTrue('_rev' in doc.keys()) succ, id, doc_out = self.subject.read('1') for key in doc.keys(): self.assertEquals(doc[key], doc_out[key]) self.assertTrue('_rev' in doc_out.keys(), msg=repr(doc_out.keys())) # insert list docs = [{ 'a': '1', 'b': '2', '_id': '2' }, { 'a': '1', 'b': '2', '_id': '3' }] self.subject.insert(docs) docs_out = self.subject.read(['3', '1', '2']) doc_in = docs[1] succ, id, doc_out = docs_out[0] for key in doc_in.keys(): self.assertEquals(doc_in[key], doc_out[key], msg='out=%s' % repr(doc_out)) # insert duplicate out = self.subject.insert(doc) self.assertFalse(out[0]) docs = [ { 'a': '1', 'b': '2', '_id': '0' }, { 'a': '1', 'b': '2', '_id': '2' }, # duplicate ID { 'a': '1', 'b': '2', '_id': '5' } ] out = self.subject.insert(docs) self.assertTrue(out[0][0]) self.assertFalse(out[1][0]) self.assertTrue(out[2][0]) def testUpdate(self): docs = [{ 'a': '1', 'b': '2', '_id': '2' }, { 'a': '1', 'b': '2', '_id': '3' }] self.subject.insert(docs) self.assertTrue('_rev' in docs[0]) # couchdb library updates dictionary! # normal update should succeed docs[0]['a'] = 'changed' docs[1]['b'] = 'changed' out = self.subject.update(docs) self.assertTrue(out[0][0]) self.assertTrue(out[1][0]) # missing or wrong _rev and update should fail del (docs[0]['_rev']) # 1-1d11ff1d76bfac091a6ca550c9d0863d docs[1]['_rev'] = '1-1d11ff1d76bfac091a6ca550c9d0863e' out = self.subject.update(docs) self.assertFalse(out[0][0]) self.assertFalse(out[1][0]) # with force, should find and update latest revision out = self.subject.update(docs, force=True) self.assertTrue(out[0][0]) self.assertTrue(out[1][0]) # doc not in DB should fail doc = {'a': '1', '_id': 5} out = self.subject.update(doc) self.assertFalse(out[0]) def testDelete(self): docs = [{ 'a': '1', 'b': '2', '_id': '1' }, { 'a': '1', 'b': '2', '_id': '2' }, { 'a': '1', 'b': '2', '_id': '3' }, { 'a': '1', 'b': '2', '_id': '4' }, { 'a': '1', 'b': '2', '_id': '5' }] self.subject.insert(docs) self.subject.delete(['2', '3', '4']) try: succ, id, doc = self.subject.read('3') except Exception, e: log.error('throws', exc_info=True) self.fail('should return, not raise exception %s' % str(e)) self.assertFalse(succ, msg="should not be able to read deleted doc") docs = [{ 'a': '1', 'b': '2', '_id': '1' }, { 'a': '1', 'b': '2', '_id': '2' }, { 'a': '1', 'b': '2', '_id': '3' }, { 'a': '1', 'b': '2', '_id': '4' }, { 'a': '1', 'b': '2', '_id': '5' }] self.subject.insert(docs) out = self.subject.delete(['0', '3', '6']) self.assertFalse(out[0][0]) self.assertTrue(out[1][0]) self.assertFalse(out[2][0])