class SimpleDBBackend: def __init__(self): self.connection = SDBConnection(aws_credentials.accessKey, aws_credentials.secretKey) self.domain = self.connection.get_domain(TABLE_NAME) def put(self, key, value): sampler.begin() try: self.domain.put_attributes(key, {VALUE:value}) finally: sampler.end() def get(self, key): sampler.begin() try: # First try an eventually consistent read. result = self.domain.get_attributes(key, consistent_read=False) return result[VALUE] except KeyError: # The eventually consistent read failed. Try a strongly consistent # read. result = self.domain.get_attributes(key, consistent_read=True) return result[VALUE] finally: sampler.end() def incRefCount(self, key): # Not implemented. pass def decRefCount(self, key): # Not implemented. pass def nuke(self): # Delete and re-create the table. self.connection.delete_domain(TABLE_NAME) self.domain = self.connection.create_domain(TABLE_NAME) def flush(self): pass # No-op.
def test_1_basic(self): print '--- running SDBConnection tests ---' c = SDBConnection() rs = c.get_all_domains() num_domains = len(rs) # try illegal name try: domain = c.create_domain('bad:domain:name') except SDBResponseError: pass # now create one that should work and should be unique (i.e. a new one) domain_name = 'test%d' % int(time.time()) domain = c.create_domain(domain_name) rs = c.get_all_domains() assert len(rs) == num_domains+1 # now let's a couple of items and attributes item_1 = 'item1' same_value = 'same_value' attrs_1 = {'name1' : same_value, 'name2' : 'diff_value_1'} domain.put_attributes(item_1, attrs_1) item_2 = 'item2' attrs_2 = {'name1' : same_value, 'name2' : 'diff_value_2'} domain.put_attributes(item_2, attrs_2) time.sleep(10) # try to get the attributes and see if they match item = domain.get_attributes(item_1) assert len(item.keys()) == len(attrs_1.keys()) assert item['name1'] == attrs_1['name1'] assert item['name2'] == attrs_1['name2'] # try a search or two rs = domain.query("['name1'='%s']" % same_value) n = 0 for item in rs: n += 1 assert n == 2 rs = domain.query("['name2'='diff_value_2']") n = 0 for item in rs: n += 1 assert n == 1 # delete all attributes associated with item_1 stat = domain.delete_attributes(item_1) assert stat # now delete the domain stat = c.delete_domain(domain) assert stat print '--- tests completed ---'
def test_1_basic(self): print '--- running SDBConnection tests ---' c = SDBConnection() rs = c.get_all_domains() num_domains = len(rs) # try illegal name try: domain = c.create_domain('bad:domain:name') except SDBResponseError: pass # now create one that should work and should be unique (i.e. a new one) domain_name = 'test%d' % int(time.time()) domain = c.create_domain(domain_name) rs = c.get_all_domains() assert len(rs) == num_domains + 1 # now let's a couple of items and attributes item_1 = 'item1' same_value = 'same_value' attrs_1 = {'name1': same_value, 'name2': 'diff_value_1'} domain.put_attributes(item_1, attrs_1) item_2 = 'item2' attrs_2 = {'name1': same_value, 'name2': 'diff_value_2'} domain.put_attributes(item_2, attrs_2) time.sleep(10) # try to get the attributes and see if they match item = domain.get_attributes(item_1) assert len(item.keys()) == len(attrs_1.keys()) assert item['name1'] == attrs_1['name1'] assert item['name2'] == attrs_1['name2'] # try a search or two rs = domain.query("['name1'='%s']" % same_value) n = 0 for item in rs: n += 1 assert n == 2 rs = domain.query("['name2'='diff_value_2']") n = 0 for item in rs: n += 1 assert n == 1 # delete all attributes associated with item_1 stat = domain.delete_attributes(item_1) assert stat # now delete the domain stat = c.delete_domain(domain) assert stat print '--- tests completed ---'
def test_1_basic(self): print '--- running SDBConnection tests ---' c = SDBConnection() rs = c.get_all_domains() num_domains = len(rs) # try illegal name try: domain = c.create_domain('bad:domain:name') except SDBResponseError: pass # now create one that should work and should be unique (i.e. a new one) domain_name = 'test%d' % int(time.time()) domain = c.create_domain(domain_name) rs = c.get_all_domains() assert len(rs) == num_domains+1 # now let's a couple of items and attributes item_1 = 'item1' same_value = 'same_value' attrs_1 = {'name1' : same_value, 'name2' : 'diff_value_1'} domain.put_attributes(item_1, attrs_1) item_2 = 'item2' attrs_2 = {'name1' : same_value, 'name2' : 'diff_value_2'} domain.put_attributes(item_2, attrs_2) time.sleep(10) # try to get the attributes and see if they match item = domain.get_attributes(item_1) assert len(item.keys()) == len(attrs_1.keys()) assert item['name1'] == attrs_1['name1'] assert item['name2'] == attrs_1['name2'] # try a search or two query = 'select * from %s where name1="%s"' % (domain_name, same_value) rs = domain.select(query) n = 0 for item in rs: n += 1 assert n == 2 query = 'select * from %s where name2="diff_value_2"' % domain_name rs = domain.select(query) n = 0 for item in rs: n += 1 assert n == 1 # delete all attributes associated with item_1 stat = domain.delete_attributes(item_1) assert stat # now try a batch put operation on the domain item3 = {'name3_1' : 'value3_1', 'name3_2' : 'value3_2', 'name3_3' : ['value3_3_1', 'value3_3_2']} item4 = {'name4_1' : 'value4_1', 'name4_2' : ['value4_2_1', 'value4_2_2'], 'name4_3' : 'value4_3'} items = {'item3' : item3, 'item4' : item4} domain.batch_put_attributes(items) time.sleep(10) item = domain.get_attributes('item3') assert item['name3_2'] == 'value3_2' # now delete the domain stat = c.delete_domain(domain) assert stat print '--- tests completed ---'
def test_1_basic(self): print '--- running SDBConnection tests ---' c = SDBConnection() rs = c.get_all_domains() num_domains = len(rs) # try illegal name try: domain = c.create_domain('bad:domain:name') except SDBResponseError: pass # now create one that should work and should be unique (i.e. a new one) domain_name = 'test%d' % int(time.time()) domain = c.create_domain(domain_name) rs = c.get_all_domains() assert len(rs) == num_domains + 1 # now let's a couple of items and attributes item_1 = 'item1' same_value = 'same_value' attrs_1 = {'name1' : same_value, 'name2' : 'diff_value_1'} domain.put_attributes(item_1, attrs_1) item_2 = 'item2' attrs_2 = {'name1' : same_value, 'name2' : 'diff_value_2'} domain.put_attributes(item_2, attrs_2) # try to get the attributes and see if they match item = domain.get_attributes(item_1, consistent_read=True) assert len(item.keys()) == len(attrs_1.keys()) assert item['name1'] == attrs_1['name1'] assert item['name2'] == attrs_1['name2'] # try a search or two query = 'select * from %s where name1="%s"' % (domain_name, same_value) rs = domain.select(query, consistent_read=True) n = 0 for item in rs: n += 1 assert n == 2 query = 'select * from %s where name2="diff_value_2"' % domain_name rs = domain.select(query, consistent_read=True) n = 0 for item in rs: n += 1 assert n == 1 # delete all attributes associated with item_1 stat = domain.delete_attributes(item_1) assert stat # now try a batch put operation on the domain item3 = {'name3_1' : 'value3_1', 'name3_2' : 'value3_2', 'name3_3' : ['value3_3_1', 'value3_3_2']} item4 = {'name4_1' : 'value4_1', 'name4_2' : ['value4_2_1', 'value4_2_2'], 'name4_3' : 'value4_3'} items = {'item3' : item3, 'item4' : item4} domain.batch_put_attributes(items) item = domain.get_attributes('item3', consistent_read=True) assert item['name3_2'] == 'value3_2' # now try a batch delete operation (variation #1) items = {'item3' : item3} stat = domain.batch_delete_attributes(items) item = domain.get_attributes('item3', consistent_read=True) assert not item # now try a batch delete operation (variation #2) stat = domain.batch_delete_attributes({'item4' : None}) item = domain.get_attributes('item4', consistent_read=True) assert not item # now delete the domain stat = c.delete_domain(domain) assert stat print '--- tests completed ---'