| OLD | NEW |
| (Empty) |
| 1 #!/usr/bin/env python | |
| 2 | |
| 3 # Copyright (c) 2006-2010 Mitch Garnaat http://garnaat.org/ | |
| 4 # Copyright (c) 2010, Eucalyptus Systems, Inc. | |
| 5 # All rights reserved. | |
| 6 # | |
| 7 # Permission is hereby granted, free of charge, to any person obtaining a | |
| 8 # copy of this software and associated documentation files (the | |
| 9 # "Software"), to deal in the Software without restriction, including | |
| 10 # without limitation the rights to use, copy, modify, merge, publish, dis- | |
| 11 # tribute, sublicense, and/or sell copies of the Software, and to permit | |
| 12 # persons to whom the Software is furnished to do so, subject to the fol- | |
| 13 # lowing conditions: | |
| 14 # | |
| 15 # The above copyright notice and this permission notice shall be included | |
| 16 # in all copies or substantial portions of the Software. | |
| 17 # | |
| 18 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
| 19 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- | |
| 20 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | |
| 21 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
| 22 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
| 23 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
| 24 # IN THE SOFTWARE. | |
| 25 | |
| 26 """ | |
| 27 Some unit tests for the SDBConnection | |
| 28 """ | |
| 29 | |
| 30 import unittest | |
| 31 import time | |
| 32 from boto.sdb.connection import SDBConnection | |
| 33 from boto.exception import SDBResponseError | |
| 34 | |
| 35 class SDBConnectionTest (unittest.TestCase): | |
| 36 | |
| 37 def test_1_basic(self): | |
| 38 print '--- running SDBConnection tests ---' | |
| 39 c = SDBConnection() | |
| 40 rs = c.get_all_domains() | |
| 41 num_domains = len(rs) | |
| 42 | |
| 43 # try illegal name | |
| 44 try: | |
| 45 domain = c.create_domain('bad:domain:name') | |
| 46 except SDBResponseError: | |
| 47 pass | |
| 48 | |
| 49 # now create one that should work and should be unique (i.e. a new one) | |
| 50 domain_name = 'test%d' % int(time.time()) | |
| 51 domain = c.create_domain(domain_name) | |
| 52 rs = c.get_all_domains() | |
| 53 assert len(rs) == num_domains + 1 | |
| 54 | |
| 55 # now let's a couple of items and attributes | |
| 56 item_1 = 'item1' | |
| 57 same_value = 'same_value' | |
| 58 attrs_1 = {'name1' : same_value, 'name2' : 'diff_value_1'} | |
| 59 domain.put_attributes(item_1, attrs_1) | |
| 60 item_2 = 'item2' | |
| 61 attrs_2 = {'name1' : same_value, 'name2' : 'diff_value_2'} | |
| 62 domain.put_attributes(item_2, attrs_2) | |
| 63 | |
| 64 # try to get the attributes and see if they match | |
| 65 item = domain.get_attributes(item_1, consistent_read=True) | |
| 66 assert len(item.keys()) == len(attrs_1.keys()) | |
| 67 assert item['name1'] == attrs_1['name1'] | |
| 68 assert item['name2'] == attrs_1['name2'] | |
| 69 | |
| 70 # try a search or two | |
| 71 query = 'select * from %s where name1="%s"' % (domain_name, same_value) | |
| 72 rs = domain.select(query, consistent_read=True) | |
| 73 n = 0 | |
| 74 for item in rs: | |
| 75 n += 1 | |
| 76 assert n == 2 | |
| 77 query = 'select * from %s where name2="diff_value_2"' % domain_name | |
| 78 rs = domain.select(query, consistent_read=True) | |
| 79 n = 0 | |
| 80 for item in rs: | |
| 81 n += 1 | |
| 82 assert n == 1 | |
| 83 | |
| 84 # delete all attributes associated with item_1 | |
| 85 stat = domain.delete_attributes(item_1) | |
| 86 assert stat | |
| 87 | |
| 88 # now try a batch put operation on the domain | |
| 89 item3 = {'name3_1' : 'value3_1', | |
| 90 'name3_2' : 'value3_2', | |
| 91 'name3_3' : ['value3_3_1', 'value3_3_2']} | |
| 92 | |
| 93 item4 = {'name4_1' : 'value4_1', | |
| 94 'name4_2' : ['value4_2_1', 'value4_2_2'], | |
| 95 'name4_3' : 'value4_3'} | |
| 96 items = {'item3' : item3, 'item4' : item4} | |
| 97 domain.batch_put_attributes(items) | |
| 98 | |
| 99 item = domain.get_attributes('item3', consistent_read=True) | |
| 100 assert item['name3_2'] == 'value3_2' | |
| 101 | |
| 102 # now try a batch delete operation (variation #1) | |
| 103 items = {'item3' : item3} | |
| 104 stat = domain.batch_delete_attributes(items) | |
| 105 | |
| 106 item = domain.get_attributes('item3', consistent_read=True) | |
| 107 assert not item | |
| 108 | |
| 109 # now try a batch delete operation (variation #2) | |
| 110 stat = domain.batch_delete_attributes({'item4' : None}) | |
| 111 | |
| 112 item = domain.get_attributes('item4', consistent_read=True) | |
| 113 assert not item | |
| 114 | |
| 115 # now delete the domain | |
| 116 stat = c.delete_domain(domain) | |
| 117 assert stat | |
| 118 | |
| 119 print '--- tests completed ---' | |
| 120 | |
| OLD | NEW |