test/cases/spec_client.rb in s33r-0.3.1 vs test/cases/spec_client.rb in s33r-0.4
- old
+ new
@@ -5,70 +5,97 @@
require_gem 'FakeWeb'
context 'S33r Client' do
setup do
@base = File.dirname(__FILE__)
+
+ # client for testing: one without SSL, one with
@client = Client.new(Testing::ACCESS_KEY, Testing::SECRET_ACCESS_KEY, :use_ssl => false, :dump_requests => true)
@client2 = Client.new(Testing::ACCESS_KEY, Testing::SECRET_ACCESS_KEY)
- @bucket = 'testingtesting'
- @url = url_join('http://', HOST, @bucket)
+ # test config. files
@plain_config_file = File.join(@base, '../files/client_config.yml')
@custom_config_file = File.join(@base, '../files/namedbucket_config.yml')
+ # OK bucket with attached response
+ @bucket = 'testingtesting'
+ @url = s3_public_url(@bucket)
xml_file = File.join(@base, '../files/bucket_listing.xml')
@bucket_listing_xml = File.open(xml_file) { |f| f.read }
-
listbucket_response = Net::HTTPResponse.new('1.1', '200', 'OK')
listbucket_response.body = @bucket_listing_xml
-
FakeWeb.register_uri(@url, :status => 200, :response => listbucket_response)
- # for testing behaviour if S3 is unavailable
+ # broken bucket: for testing behaviour if S3 is unavailable
@bucket2 = 's3broken'
- @url2 = url_join('http://', HOST, @bucket2)
+ @url2 = s3_public_url(@bucket2)
FakeWeb.register_uri(@url2, :status => 503)
+
+ # OK resource
+ @resource_key = 'iamhere'
+ @url3 = s3_public_url(@bucket, @resource_key)
+ FakeWeb.register_uri(@url3, :status => 200)
+
+ # missing resource
+ @missing_resource = 'iammissing'
+ @url4 = s3_public_url(@bucket, @missing_resource)
+ FakeWeb.register_uri(@url4, :status => 404)
+
+ # missing bucket
+ @missing_bucket = 'iamamissingbucket'
+ @url5 = s3_public_url(@missing_bucket)
+ FakeWeb.register_uri(@url5, :status => 404)
end
specify 'should return use_ssl setting correctly' do
- @client.use_ssl?.should.not.be true
- @client2.use_ssl?.should.be true
+ @client.use_ssl.should.not.be true
+ @client2.use_ssl.should.be true
end
specify 'should trap max_keys too high in bucket listing request' do
lambda { @client.list_bucket('duff', :max_keys => (BUCKET_LIST_MAX_MAX_KEYS + 1)) }.should.raise \
BucketListingMaxKeysError
end
specify 'should fetch bucket listing ok' do
- resp, _ = @client.list_bucket(@bucket)
+ resp, listing = @client.list_bucket(@bucket)
resp.ok?.should.be true
end
+ # NB tests for content of BucketListing in depth are done in spec_bucket_listing
+ specify 'should attach BucketListing instance to ListBucketResult responses' do
+ resp, listing = @client.list_bucket(@bucket)
+ listing.should.be.an_instance_of BucketListing
+ listing.contents.size.should.be 10
+ end
+
specify 'can be initialised from plain config file' do
c = Client.init(@plain_config_file)
c.aws_access_key.should.equal 'youraccesskey'
c.aws_secret_access_key.should.equal 'yoursecretkey'
end
-
- specify 'should attach BucketListing instance to ListBucketResult responses' do
- todo
- end
specify 'should retain leading slashes on keys when constructing request URLs' do
todo
end
specify 'should raise an error if S3 is down' do
lambda { @client.list_bucket(@bucket2) }.should.raise S3FallenOver
end
- specify 'should return S3Object with metadata properties' do
+ specify 'should return S3Object with metadata properties when getting a resource key' do
todo
end
- specify 'should recognise custom config variables passed to configuration file loader' do
- _, _, _, custom = Client.load_config(@custom_config_file)
- custom[:from_email].should.equal 'you@example.com'
- custom[:to_email].should.equal 'me@example.com'
+ specify 'should identify whether resources exist' do
+ # resource_exists? should work just with a bucket name
+ @client.resource_exists?(@bucket).should.be true
+
+ # these ones exist
+ @client.bucket_exists?(@bucket).should.be true
+ @client.resource_exists?(@bucket, @resource_key).should.be true
+
+ # the missing ones
+ @client.resource_exists?(@bucket, @missing_resource).should.be false
+ @client.bucket_exists?(@missing_bucket).should.be false
end
end
\ No newline at end of file