1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
|
require File.dirname(__FILE__) + '/test_helper.rb'
require File.dirname(__FILE__) + '/../test_credentials.rb'
class TestSdb < Test::Unit::TestCase
def setup
TestCredentials.get_credentials
STDOUT.sync = true
@domain = 'right_sdb_awesome_test_domain'
@item = 'toys'
@attr = {'Jon' => %w{beer car}}
# Interface instance
@sdb = Aws::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
end
SDB_DELAY = 2
def wait(delay, msg='')
print "waiting #{delay} seconds #{msg}"
while delay>0 do
delay -= 1
print '.'
sleep 1
end
puts
end
#---------------------------
# Aws::SdbInterface
#---------------------------
def test_00_delete_domain
# delete the domain to reset all the things
assert @sdb.delete_domain(@domain), 'delete_domain fail'
wait SDB_DELAY, 'after domain deletion'
end
def test_01_create_domain
# check that domain does not exist
assert !@sdb.list_domains[:domains].include?(@domain)
# create domain
assert @sdb.create_domain(@domain), 'create_domain fail'
wait SDB_DELAY, 'after domain creation'
# check that we have received new domain from Amazin
assert @sdb.list_domains[:domains].include?(@domain)
end
def test_02_put_attributes
# put attributes
assert @sdb.put_attributes(@domain, @item, @attr)
wait SDB_DELAY, 'after putting attributes'
end
def test_03_get_attributes
# get attributes
values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon'].to_a.sort
# compare to original list
assert_equal values, @attr['Jon'].sort
end
def test_04_add_attributes
# add new attribute
new_value = 'girls'
@sdb.put_attributes @domain, @item, {'Jon' => new_value}
wait SDB_DELAY, 'after putting attributes'
# get attributes ('girls' must be added to already existent attributes)
values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon'].to_a.sort
assert_equal values, (@attr['Jon'] << new_value).sort
end
def test_05_replace_attributes
# replace attributes
@sdb.put_attributes @domain, @item, {'Jon' => 'pub'}, :replace
wait SDB_DELAY, 'after replacing attributes'
# get attributes (all must be removed except of 'pub')
values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon']
assert_equal values, ['pub']
end
def test_06_delete_attribute
# add value 'girls' and 'vodka' to 'Jon'
@sdb.put_attributes @domain, @item, {'Jon' => ['girls', 'vodka']}
wait SDB_DELAY, 'after adding attributes'
# get attributes ('girls' and 'vodka' must be added 'pub')
values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon'].to_a.sort
assert_equal values, ['girls', 'pub', 'vodka']
# delete a single value 'girls' from attribute 'Jon'
@sdb.delete_attributes @domain, @item, 'Jon' => ['girls']
wait SDB_DELAY, 'after the deletion of attribute'
# get attributes ('girls' must be removed)
values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon']
assert_equal values, ['pub', 'vodka']
# delete all values from attribute 'Jon'
@sdb.delete_attributes @domain, @item, ['Jon']
wait SDB_DELAY, 'after the deletion of attributes'
# get attributes (values must be empty)
values = @sdb.get_attributes(@domain, @item)[:attributes]['Jon']
assert_equal values, nil
end
def test_07_delete_item
@sdb.put_attributes @domain, @item, {'Volodya' => ['girls', 'vodka']}
wait SDB_DELAY, 'after adding attributes'
# get attributes ('girls' and 'vodka' must be there)
values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya'].to_a.sort
assert_equal ['girls', 'vodka'], values
# delete an item
@sdb.delete_attributes @domain, @item
sleep 1
# get attributes (values must be empty)
values = @sdb.get_attributes(@domain, @item)[:attributes]['Volodya']
assert_nil values
end
def test_08_batch_put_and_delete_attributes
items = []
10.times do |i|
items << Aws::SdbInterface::Item.new("#{@item}_#{i}", {:name=>"name_#{i}"}, true)
end
@sdb.batch_put_attributes @domain, items
sleep 1
@sdb.batch_delete_attributes @domain, items.collect { |x| x.item_name }
end
def test_11_signature_version_2
sdb = Aws::SdbInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key, :signature_version => '2')
domains = nil
assert_nothing_thrown "Failed to use signature V2" do
domains = sdb.list_domains
end
assert domains
end
def test_12_unicode
# This was creating a bad signature
s = ''
File.open("unicode.txt", "r") { |f|
s = f.read
}
# s = s.force_encoding("UTF-8")
puts 's=' + s.inspect
puts "encoding? " + s.encoding.name
# s = s.encode("ASCII")
# todo: I'm thinking just iterate through characters and swap out ones that aren't in ascii range.
@sdb.put_attributes @domain, @item, {"badname"=>[s]}
sleep 1
value = @sdb.get_attributes(@domain, @item)[:attributes]['badname'][0]
puts 'value=' + value.inspect
# assert value == s # NOT WORKING, not even sure this is a valid test though
end
def test_15_array_of_attrs
item = 'multiples'
assert_nothing_thrown "Failed to put multiple attrs" do
@sdb.put_attributes(@domain, item, {:one=>1, :two=>2, :three=>3})
end
end
def test_16_zero_len_attrs
item = 'zeroes'
assert_nothing_thrown "Failed to put zero-length attributes" do
@sdb.put_attributes(@domain, item, {:one=>"", :two=>"", :three=>""})
end
end
def test_17_nil_attrs
item = 'nils'
res = nil
assert_nothing_thrown do
@sdb.put_attributes(@domain, item, {:one=>nil, :two=>nil, :three=>'chunder'})
end
sleep 1
assert_nothing_thrown do
res = @sdb.get_attributes(@domain, item)
end
assert_nil(res[:attributes]['one'][0])
assert_nil(res[:attributes]['two'][0])
assert_not_nil(res[:attributes]['three'][0])
end
def test_18_url_escape
item = 'urlescapes'
content = {:a=>"one & two & three",
:b=>"one ? two / three"}
@sdb.put_attributes(@domain, item, content)
res = @sdb.get_attributes(@domain, item)
assert_equal(content[:a], res[:attributes]['a'][0])
assert_equal(content[:b], res[:attributes]['b'][0])
end
def test_19_put_attrs_by_post
item = 'reqgirth'
i = 0
sa = ""
while (i < 64) do
sa += "aaaaaaaa"
i += 1
end
@sdb.put_attributes(@domain, item, {:a => sa, :b => sa, :c => sa, :d => sa, :e => sa})
end
# from https://github.com/appoxy/aws/issues#issue/15
def test_21_query_with_single_quotes
sel = "select * from `#{@domain}` where one=#{@sdb.escape("ain't good")}"
puts sel
@sdb.select(sel)
sel = "select * from `#{@domain}` where one=#{@sdb.escape('ain\t good')}"
puts sel
@sdb.select(sel)
end
# Keep this test last, because it deletes the domain...
def test_40_delete_domain
assert @sdb.delete_domain(@domain), 'delete_domain fail'
wait SDB_DELAY, 'after domain deletion'
# check that domain does not exist
assert !@sdb.list_domains[:domains].include?(@domain)
end
end
|