right_aws 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../../lib/right_aws'
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'pp'
3
+
4
+ class TestAwsbase < Test::Unit::TestCase
5
+
6
+ def setup
7
+ end
8
+
9
+ def test_01_create_describe_key_pairs
10
+ end
11
+
12
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../../lib/right_aws'
@@ -0,0 +1,67 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+ require 'pp'
3
+
4
+ class TestEc2 < Test::Unit::TestCase
5
+
6
+ # Some of RightEc2 instance methods concerning instance launching and image registration
7
+ # are not tested here due to their potentially risk.
8
+
9
+ def setup
10
+ @ec2 = Rightscale::Ec2.new(TestCredentials.aws_access_key_id,
11
+ TestCredentials.aws_secret_access_key)
12
+ @key = 'right_ec2_awesome_test_key'
13
+ @group = 'right_ec2_awesome_test_security_group'
14
+ end
15
+
16
+ def test_01_create_describe_key_pairs
17
+ new_key = @ec2.create_key_pair(@key)
18
+ assert new_key[:aws_material][/BEGIN RSA PRIVATE KEY/], "New key material is absent"
19
+ keys = @ec2.describe_key_pairs
20
+ assert keys.map{|key| key[:aws_key_name] }.include?(@key), "#{@key} must exist"
21
+ end
22
+
23
+ def test_02_create_security_group
24
+ assert @ec2.create_security_group(@group,'My awesone test group'), 'Create_security_group fail'
25
+ group = @ec2.describe_security_groups([@group])[0]
26
+ assert_equal @group, group[:aws_group_name], 'Group must be created but does not exist'
27
+ end
28
+
29
+ def test_03_perms_add
30
+ assert @ec2.authorize_security_group_named_ingress(@group, TestCredentials.account_number, 'default')
31
+ assert @ec2.authorize_security_group_IP_ingress(@group, 80,80,'udp','192.168.1.0/8')
32
+ end
33
+
34
+ def test_04_check_new_perms_exist
35
+ assert_equal 2, @ec2.describe_security_groups([@group])[0][:aws_perms].size
36
+ end
37
+
38
+ def test_05_perms_remove
39
+ assert @ec2.revoke_security_group_IP_ingress(@group, 80,80,'udp','192.168.1.0/8')
40
+ assert @ec2.revoke_security_group_named_ingress(@group,
41
+ TestCredentials.account_number, 'default')
42
+ end
43
+
44
+ def test_06_describe_images
45
+ images = @ec2.describe_images
46
+ assert images.size>0, 'Amazon must have at least some public images'
47
+ # unknown image
48
+ assert_raise(Rightscale::AwsError){ @ec2.describe_images(['ami-ABCDEFGH'])}
49
+ end
50
+
51
+ def test_07_describe_instanses
52
+ assert @ec2.describe_instances
53
+ # unknown image
54
+ assert_raise(Rightscale::AwsError){ @ec2.describe_instances(['i-ABCDEFGH'])}
55
+ end
56
+
57
+ def test_08_delete_security_group
58
+ assert @ec2.delete_security_group(@group), 'Delete_security_group fail'
59
+ end
60
+
61
+ def test_09_delete_key_pair
62
+ assert @ec2.delete_key_pair(@key), 'Delete_key_pair fail'
63
+ # key must be deleted already
64
+ assert_raise(Rightscale::AwsError) { @ec2.delete_key_pair(@key) }
65
+ end
66
+
67
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../../lib/right_aws'
@@ -0,0 +1,217 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestS3 < Test::Unit::TestCase
4
+
5
+ RIGHT_OBJECT_TEXT = 'Right test message'
6
+
7
+ def setup
8
+ @s3 = Rightscale::S3Interface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
9
+ @bucket = 'right_s3_awesome_test_bucket'
10
+ @key1 = 'test/woohoo1'
11
+ @key2 = 'test1/key/woohoo2'
12
+ @s = Rightscale::S3.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
13
+ end
14
+
15
+ #---------------------------
16
+ # Rightscale::S3Interface
17
+ #---------------------------
18
+
19
+ def test_01_create_bucket
20
+ assert @s3.create_bucket(@bucket), 'Create_bucket fail'
21
+ end
22
+
23
+ def test_02_list_all_my_buckets
24
+ assert @s3.list_all_my_buckets.map{|bucket| bucket[:name]}.include?(@bucket), "#{@bucket} must exist in bucket list"
25
+ end
26
+
27
+ def test_03_list_empty_bucket
28
+ assert_equal 0, @s3.list_bucket(@bucket).size, "#{@queue_name} must exist!"
29
+ end
30
+
31
+ def test_04_put
32
+ assert @s3.put(@bucket, @key1, RIGHT_OBJECT_TEXT, 'x-amz-meta-family'=>'Woohoo1!'), 'Put bucket fail'
33
+ assert @s3.put(@bucket, @key2, RIGHT_OBJECT_TEXT, 'x-amz-meta-family'=>'Woohoo2!'), 'Put bucket fail'
34
+ end
35
+
36
+ def test_05_get_and_get_object
37
+ assert_raise(Rightscale::AwsError) { @s3.get(@bucket, 'undefined/key') }
38
+ data1 = @s3.get(@bucket, @key1)
39
+ assert_equal RIGHT_OBJECT_TEXT, data1[:object], "Object text must be equal to '#{RIGHT_OBJECT_TEXT}'"
40
+ assert_equal RIGHT_OBJECT_TEXT, @s3.get_object(@bucket, @key1), "Get_object text must return '#{RIGHT_OBJECT_TEXT}'"
41
+ assert_equal 'Woohoo1!', data1[:headers]['x-amz-meta-family'], "x-amz-meta-family header must be equal to 'Woohoo1!'"
42
+ end
43
+
44
+ def test_06_head
45
+ assert_equal 'Woohoo1!', @s3.head(@bucket,@key1)['x-amz-meta-family'], "x-amz-meta-family header must be equal to 'Woohoo1!'"
46
+ end
47
+
48
+ def test_07_delete_folder
49
+ assert_equal 1, @s3.delete_folder(@bucket, 'test').size, "Only one key(#{@key1}) must be deleted!"
50
+ end
51
+
52
+ def test_08_delete_bucket
53
+ assert_raise(Rightscale::AwsError) { @s3.delete_bucket(@bucket) }
54
+ assert @s3.clear_bucket(@bucket), 'Clear_bucket fail'
55
+ assert_equal 0, @s3.list_bucket(@bucket).size, 'Bucket must be empty'
56
+ assert @s3.delete_bucket(@bucket)
57
+ assert !@s3.list_all_my_buckets.map{|bucket| bucket[:name]}.include?(@bucket), "#{@bucket} must not exist"
58
+ end
59
+
60
+ #---------------------------
61
+ # Rightscale::S3 classes
62
+ #---------------------------
63
+
64
+ def test_20_s3
65
+ # create bucket
66
+ bucket = @s.bucket(@bucket, true)
67
+ assert bucket
68
+ # check that the bucket exists
69
+ assert @s.buckets.map{|b| b.name}.include?(@bucket)
70
+ # delete bucket
71
+ assert bucket.clear
72
+ assert bucket.delete
73
+ end
74
+
75
+ def test_21_bucket_create_put_get_key
76
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, true)
77
+ # check that the bucket exists
78
+ assert @s.buckets.map{|b| b.name}.include?(@bucket)
79
+ assert bucket.keys.empty?
80
+ # put data
81
+ assert bucket.put(@key1, RIGHT_OBJECT_TEXT, {'family'=>'123456'})
82
+ # get data and compare
83
+ assert_equal RIGHT_OBJECT_TEXT, bucket.get(@key1)
84
+ # get key object
85
+ key = bucket.key(@key1, true)
86
+ assert_equal Rightscale::S3::Key, key.class
87
+ assert key.exists?
88
+ assert_equal '123456', key.meta_headers['family']
89
+ end
90
+
91
+ def test_22_keys
92
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
93
+ # create first key
94
+ key1 = Rightscale::S3::Key.create(bucket, @key1)
95
+ key1.refresh
96
+ assert key1.exists?
97
+ assert_equal '123456', key1.meta_headers['family']
98
+ # create second key
99
+ key2 = Rightscale::S3::Key.create(bucket, @key2)
100
+ assert !key2.refresh
101
+ assert !key2.exists?
102
+ assert_raise(Rightscale::AwsError) { key2.head }
103
+ # store key
104
+ key2.meta_headers = {'family'=>'111222333'}
105
+ assert key2.put(RIGHT_OBJECT_TEXT)
106
+ # make sure that the key exists
107
+ assert key2.refresh
108
+ assert key2.exists?
109
+ assert key2.head
110
+ # get its data
111
+ assert_equal RIGHT_OBJECT_TEXT, key2.get
112
+ # drop key
113
+ assert key2.delete
114
+ assert !key2.exists?
115
+ end
116
+
117
+ def test_23_clear_delete
118
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
119
+ # add another key
120
+ bucket.put(@key2, RIGHT_OBJECT_TEXT)
121
+ # delete 'folder'
122
+ assert_equal 1, bucket.delete_folder(@key1).size
123
+ # delete
124
+ assert_raise(Rightscale::AwsError) { bucket.delete }
125
+ bucket.delete(true)
126
+ end
127
+
128
+ # Grantees
129
+
130
+ def test_30_create_bucket
131
+ bucket = @s.bucket(@bucket, true, 'public-read')
132
+ assert bucket
133
+ end
134
+
135
+ def test_31_list_grantees
136
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
137
+ # get grantees list
138
+ grantees = bucket.grantees
139
+ # check that the grantees count equal to 2 (root, AllUsers)
140
+ assert_equal 2, grantees.size
141
+ end
142
+
143
+ def test_32_grant_revoke_drop
144
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
145
+ grantees = bucket.grantees
146
+ # Take one of grantees
147
+ grantee = grantees[0]
148
+ # Add grant as String
149
+ assert grantee.grant('WRITE')
150
+ # Add grants as Array
151
+ assert grantee.grant(['READ_ACP', 'WRITE_ACP'])
152
+ # Check perms count
153
+ assert_equal 4, grantee.perms.size
154
+ # revoke 'WRITE_ACP'
155
+ assert grantee.revoke('WRITE_ACP')
156
+ # Check manual perm removal method
157
+ grantee.perms -= ['READ_ACP']
158
+ grantee.apply
159
+ assert_equal 2, grantee.perms.size
160
+ # check 'Drop' method
161
+ assert grantee.drop
162
+ assert_equal 1, bucket.grantees.size
163
+ # Delete bucket
164
+ bucket.delete(true)
165
+ end
166
+
167
+ def test_33_key_grantees
168
+ # Create bucket
169
+ bucket = @s.bucket(@bucket, true)
170
+ # Create key
171
+ key = bucket.key(@key1)
172
+ assert key.put(RIGHT_OBJECT_TEXT, 'public-read')
173
+ # Get grantees list (must be == 2)
174
+ grantees = key.grantees
175
+ assert grantees
176
+ assert_equal 2, grantees.size
177
+ # Take one of grantees and give him 'Write' perms
178
+ grantee = grantees[0]
179
+ assert grantee.grant('WRITE')
180
+ # Drop grantee
181
+ assert grantee.drop
182
+ # Drop bucket
183
+ bucket.delete(true)
184
+ end
185
+
186
+ def test_34_bucket_create_put_with_perms
187
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, true)
188
+ # check that the bucket exists
189
+ assert @s.buckets.map{|b| b.name}.include?(@bucket)
190
+ assert bucket.keys.empty?
191
+ # put data (with canned ACL)
192
+ assert bucket.put(@key1, RIGHT_OBJECT_TEXT, {'family'=>'123456'}, "public-read")
193
+ # get data and compare
194
+ assert_equal RIGHT_OBJECT_TEXT, bucket.get(@key1)
195
+ # get key object
196
+ key = bucket.key(@key1, true)
197
+ assert_equal Rightscale::S3::Key, key.class
198
+ assert key.exists?
199
+ assert_equal '123456', key.meta_headers['family']
200
+ end
201
+
202
+ def test_35_key_put_with_perms
203
+ bucket = Rightscale::S3::Bucket.create(@s, @bucket, false)
204
+ # create first key
205
+ key1 = Rightscale::S3::Key.create(bucket, @key1)
206
+ key1.refresh
207
+ assert key1.exists?
208
+ assert key1.put(RIGHT_OBJECT_TEXT, "public-read")
209
+ # get its data
210
+ assert_equal RIGHT_OBJECT_TEXT, key1.get
211
+ # drop key
212
+ assert key1.delete
213
+ assert !key1.exists?
214
+ end
215
+
216
+
217
+ end
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../../lib/right_aws'
@@ -0,0 +1,226 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestSqs < Test::Unit::TestCase
4
+
5
+ GRANTEE_EMAIL_ADDRESS = 'fester@example.com'
6
+ RIGHT_MESSAGE_TEXT = 'Right test message'
7
+
8
+
9
+ def setup
10
+ @sqs = Rightscale::SqsInterface.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
11
+ @queue_name = 'right_sqs_test_awesome_queue'
12
+ # for classes
13
+ @s = Rightscale::Sqs.new(TestCredentials.aws_access_key_id, TestCredentials.aws_secret_access_key)
14
+ end
15
+
16
+ #---------------------------
17
+ # Rightscale::SqsInterface
18
+ #---------------------------
19
+
20
+ def test_01_create_queue
21
+ queue_url = @sqs.create_queue @queue_name
22
+ assert queue_url[/http.*#{@queue_name}/], 'New queue creation fail'
23
+ end
24
+
25
+ def test_02_list_queues
26
+ queues = @sqs.list_queues('right_')
27
+ assert queues.size>0, 'Must more that 0 queues in list'
28
+ end
29
+
30
+ def test_03_set_and_get_queue_attributes
31
+ queue_url = @sqs.queue_url_by_name(@queue_name)
32
+ assert queue_url[/http.*#{@queue_name}/], "#{@queue_name} must exist!"
33
+ assert @sqs.set_queue_attributes(queue_url, 'VisibilityTimeout', 111), 'Set_queue_attributes fail'
34
+ sleep 5 # Amazon needs some time to change attribute
35
+ assert_equal '111', @sqs.get_queue_attributes(queue_url)['VisibilityTimeout'], 'New VisibilityTimeout must be equal to 111'
36
+ end
37
+
38
+ def test_04_set_and_get_visibility_timeout
39
+ queue_url = @sqs.queue_url_by_name(@queue_name)
40
+ assert @sqs.set_visibility_timeout(queue_url, 222), 'Set_visibility_timeout fail'
41
+ assert_equal 222, @sqs.get_visibility_timeout(queue_url), 'Get_visibility_timeout must return to 222'
42
+ end
43
+
44
+ def test_05_add_test_remove_grant
45
+ queue_url = @sqs.queue_url_by_name(@queue_name)
46
+ assert @sqs.add_grant(queue_url, GRANTEE_EMAIL_ADDRESS, 'FULLCONTROL'), 'Add grant fail'
47
+ grants_list = @sqs.list_grants(queue_url, GRANTEE_EMAIL_ADDRESS)
48
+ assert grants_list.size>0, 'List_grants must return at least 1 record for user #{GRANTEE_EMAIL_ADDRESS}'
49
+ assert @sqs.remove_grant(queue_url, GRANTEE_EMAIL_ADDRESS, 'FULLCONTROL'), 'Remove_grant fail'
50
+ end
51
+
52
+ def test_06_send_message
53
+ queue_url = @sqs.queue_url_by_name(@queue_name)
54
+ # send 5 messages for the tests below
55
+ assert @sqs.send_message(queue_url, RIGHT_MESSAGE_TEXT)
56
+ assert @sqs.send_message(queue_url, RIGHT_MESSAGE_TEXT)
57
+ assert @sqs.send_message(queue_url, RIGHT_MESSAGE_TEXT)
58
+ assert @sqs.send_message(queue_url, RIGHT_MESSAGE_TEXT)
59
+ assert @sqs.send_message(queue_url, RIGHT_MESSAGE_TEXT)
60
+ end
61
+
62
+ def test_07_get_queue_length
63
+ queue_url = @sqs.queue_url_by_name(@queue_name)
64
+ assert_equal 5, @sqs.get_queue_length(queue_url), 'Queue must have 5 messages'
65
+ end
66
+
67
+ def test_08_receive_message
68
+ queue_url = @sqs.queue_url_by_name(@queue_name)
69
+ r_message = @sqs.receive_message(queue_url, 1)
70
+ assert_equal RIGHT_MESSAGE_TEXT, r_message[:body], 'Receive message get wron message text'
71
+ p_message = @sqs.peek_message(queue_url, r_message[:id])
72
+ assert_equal r_message[:body], p_message[:body], 'Received and Peeked messages must be equal'
73
+ assert @sqs.change_message_visibility(queue_url, r_message[:id], 0), 'Change_message_visibility fail'
74
+ end
75
+
76
+ def test_09_delete_message
77
+ queue_url = @sqs.queue_url_by_name(@queue_name)
78
+ message = @sqs.receive_message(queue_url)
79
+ assert @sqs.delete_message(queue_url, message[:id]), 'Delete_message fail'
80
+ assert @sqs.pop_message(queue_url), 'Pop_message fail'
81
+ end
82
+
83
+ def test_10_clear_and_delete_queue
84
+ queue_url = @sqs.queue_url_by_name(@queue_name)
85
+ assert_raise(Rightscale::AwsError) { @sqs.delete_queue(queue_url) }
86
+ assert @sqs.force_clear_queue(queue_url), 'Force_clear_queue fail'
87
+ assert @sqs.delete_queue(queue_url), 'Delete_queue fail'
88
+ end
89
+
90
+ #---------------------------
91
+ # Rightscale::Sqs classes
92
+ #---------------------------
93
+
94
+ def test_20_sqs_create_delete_queue
95
+ assert @s, 'Rightscale::Sqs must exist'
96
+ # get queues list
97
+ queues = @s.queues
98
+ # create new queue
99
+ queue = @s.queue("#{@queue_name}_20", true)
100
+ # check that it is created
101
+ assert queue.is_a?(Rightscale::Sqs::Queue)
102
+ # check that amount of queues has increased
103
+ assert_equal queues.size+1, @s.queues.size
104
+ # delete queue
105
+ assert queue.delete
106
+ end
107
+
108
+ def test_21_queue_create
109
+ # create new queue
110
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_21", true)
111
+ # check that it is created
112
+ assert queue.is_a?(Rightscale::Sqs::Queue)
113
+ # Don't test this - just for cleanup purposes
114
+ queue.delete
115
+ end
116
+
117
+ def test_22_queue_attributes
118
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_22", false)
119
+ # get a list of attrinutes
120
+ attributes = queue.get_attribute
121
+ assert attributes.is_a?(Hash) && attributes.size>0
122
+ # get attribute value and increase it by 10
123
+ v = (queue.get_attribute('VisibilityTimeout').to_i + 10).to_s
124
+ # set attribute
125
+ assert queue.set_attribute('VisibilityTimeout', v)
126
+ # wait a bit
127
+ sleep 5
128
+ # check that attribute has changed
129
+ assert_equal v, queue.get_attribute('VisibilityTimeout')
130
+ # get queue visibility timeout
131
+ assert v.to_i, queue.visibility
132
+ # change it
133
+ queue.visibility += 10
134
+ # make sure that it is changed
135
+ assert v.to_i + 10, queue.visibility
136
+ # Don't test this - just for cleanup purposes
137
+ queue.delete
138
+ end
139
+
140
+ def test_23_grantees
141
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_23", false)
142
+ # get a list of grantees
143
+ grantees = queue.grantees
144
+ # create new grantee
145
+ grantee = Rightscale::Sqs::Grantee.new(queue, GRANTEE_EMAIL_ADDRESS)
146
+ assert grantee.perms.empty?
147
+ # grant perms
148
+ assert grantee.grant('FULLCONTROL')
149
+ assert grantee.grant('RECEIVEMESSAGE')
150
+ assert_equal 2, grantee.perms.size
151
+ # make sure that amount of grantees has increased
152
+ assert grantees.size < queue.grantees.size
153
+ # revoke perms
154
+ assert grantee.revoke('RECEIVEMESSAGE')
155
+ assert_equal 1, grantee.perms.size
156
+ # remove grantee
157
+ assert grantee.drop
158
+ # Don't test this - just for cleanup purposes
159
+ queue.delete
160
+ end
161
+
162
+ def test_24_send_size
163
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_24", false)
164
+ # send 5 messages
165
+ assert queue.push('a1')
166
+ assert queue.push('a2')
167
+ assert queue.push('a3')
168
+ assert queue.push('a4')
169
+ assert queue.push('a5')
170
+ # check queue size
171
+ assert_equal 5, queue.size
172
+ # send one more
173
+ assert queue.push('a6')
174
+ # check queue size again
175
+ assert_equal 6, queue.size
176
+ # Don't test this - just for cleanup purposes
177
+ queue.clear
178
+ queue.delete
179
+ end
180
+
181
+ def test_25_message_receive_pop_peek_delete
182
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_25", false)
183
+ # get queue size
184
+ size = queue.size
185
+ # get first message
186
+ m1 = queue.receive(10)
187
+ assert m1.is_a?(Rightscale::Sqs::Message)
188
+ # pop second message
189
+ m2 = queue.pop
190
+ assert m2.is_a?(Rightscale::Sqs::Message)
191
+ # make sure that queue size has decreased
192
+ assert_equal size-1, queue.size
193
+ # peek message 1
194
+ m1p = queue.peek(m1.id)
195
+ assert m1p.is_a?(Rightscale::Sqs::Message)
196
+ assert_equal m1.id, m1p.id
197
+ assert_equal m1.body, m1p.body
198
+ # change message visibility
199
+ assert m1.visibility = 30
200
+ # delete messsage
201
+ assert m1.delete
202
+ # make sure that queue size has decreased again
203
+ assert_equal size-2, queue.size
204
+ # Don't test this - just for cleanup purposes
205
+ queue.delete
206
+ end
207
+
208
+ def test_26
209
+ queue = Rightscale::Sqs::Queue.create(@s, "#{@queue_name}_26", false)
210
+ # lock message
211
+ queue.receive(100)
212
+ # clear queue
213
+ assert queue.clear
214
+ # queue size is greater than zero
215
+ assert queue.size>0
216
+ # force clear queue
217
+ assert queue.clear(true)
218
+ # queue size must be equal to zero
219
+ assert queue.size==0
220
+ # push new message
221
+ queue.push('123456')
222
+ assert_raise(Rightscale::AwsError) { queue.delete }
223
+ assert queue.delete(true)
224
+ end
225
+
226
+ end