hollownest-ruby-aws 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+ require 'flexmock/test_unit'
4
+
5
+ class TestLocalSearch < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @rg = ResponseGroup.new( :Small )
9
+ @req = Request.new(@@key_id, @@associates_id)
10
+ @req.locale = 'us'
11
+ @req.cache = false
12
+ end
13
+
14
+ def test_movie_search
15
+ flexmock(Amazon::AWS).should_receive(:get_page).and_return(read_cache('movies.xml'))
16
+
17
+ is = ItemSearch.new( 'Books', { 'Title' => 'Ruby' } )
18
+ response = @req.search( is, @rg )
19
+
20
+ results = response.kernel
21
+
22
+ # Ensure we got some actual results back.
23
+ #
24
+ assert( results.size == 10 )
25
+ end
26
+
27
+ def read_cache(file)
28
+ data = File.open( File.dirname(__FILE__) + "/cache_files/#{file}" ).readlines.to_s
29
+ end
30
+
31
+ end
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+
4
+ class TestAmazonBasics < Test::Unit::TestCase
5
+
6
+ def test_uncamelise
7
+ str = 'ALongStringWithACRONYM'
8
+ uncamel_str = 'a_long_string_with_acronym'
9
+
10
+ # Ensure uncamelisation of strings occurs properly.
11
+ #
12
+ assert_equal( uncamel_str, Amazon::uncamelise( str ) )
13
+ assert_equal( 'asin', Amazon::uncamelise( 'ASIN' ) )
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+ require 'fileutils'
4
+ require 'tmpdir'
5
+ require 'amazon/locale'
6
+
7
+ class TestAWSBasics < Test::Unit::TestCase
8
+
9
+ CACHE_DIR = Amazon::AWS::Cache::DEFAULT_CACHE_DIR
10
+ CACHE_PATH = File.join( Dir.tmpdir, 'aws_cache' )
11
+
12
+ def setup
13
+ @rg = ResponseGroup.new( :Small )
14
+ @req = Request.new(@@key_id, @@associates_id)
15
+ @req.locale = 'uk'
16
+ @req.cache = false
17
+ end
18
+
19
+ def test_version
20
+ v = '1.8.6'
21
+ assert( RUBY_VERSION >= v, "Ruby version is lower than #{v}." )
22
+ end
23
+
24
+ def test_cache
25
+
26
+ # Assure we can create a cache with a non-default path.
27
+ #
28
+ c = Cache.new( CACHE_PATH )
29
+ assert( CACHE_PATH, c.path )
30
+ assert( File.directory?( c.path ) )
31
+ FileUtils.rmdir( c.path )
32
+
33
+ c = Cache.new
34
+
35
+ # Ensure that default cache path has been chosen.
36
+ #
37
+ assert( CACHE_DIR, c.path )
38
+
39
+ # Ensure that cache directory has been created.
40
+ #
41
+ assert( File.directory?( c.path ) )
42
+
43
+ f = File.join( c.path, 'foobar' )
44
+
45
+ # Just over a day ago.
46
+ #
47
+ t = Time.now - 86460
48
+
49
+ FileUtils.touch f, { :mtime => t }
50
+ assert( File.exist?( f ) )
51
+
52
+ # Ensure expired file is properly flushed.
53
+ #
54
+ c.flush_expired
55
+ assert( ! File.exist?( f ) )
56
+
57
+ FileUtils.touch f
58
+ assert( File.exist?( f ) )
59
+
60
+ # Ensure unexpired file is properly retained.
61
+ #
62
+ c.flush_expired
63
+ assert( File.exist?( f ) )
64
+
65
+ # Ensure file is properly flushed.
66
+ #
67
+ c.flush_all
68
+ assert( ! File.exist?( f ) )
69
+
70
+ h = Help.new( :ResponseGroup, :Large )
71
+ h_rg = ResponseGroup.new( :Help )
72
+
73
+ # Ensure that file is not cached when no cache is desired.
74
+ #
75
+ @req.cache = false
76
+ resp = @req.search( h, h_rg )
77
+ assert_equal( 0, Dir.glob( File.join( c.path, '*' ) ).size )
78
+
79
+ # Ensure that file is cached when cache is desired.
80
+ #
81
+ @req.cache = c
82
+ resp = @req.search( h, h_rg )
83
+ assert_equal( 1, Dir.glob( File.join( c.path, '*' ) ).size )
84
+
85
+ # Flush it away.
86
+ #
87
+ c.flush_all
88
+ assert_equal( 0, Dir.glob( File.join( c.path, '*' ) ).size )
89
+
90
+ FileUtils.rmdir( c.path )
91
+
92
+ # Turn off caching for future tests. This happens in the setup method,
93
+ # anyway, but it can't hurt to tidy up after ourselves.
94
+ #
95
+ @req.cache = false
96
+
97
+ end
98
+
99
+ def test_config
100
+ # Test bad quoting.
101
+ #
102
+ assert_raise( Amazon::Config::ConfigError ) do
103
+ cf = Amazon::Config.new( <<' EOF' )
104
+ bad_syntax = 'bad quotes"
105
+ EOF
106
+ end
107
+
108
+ # Test good quoting.
109
+ #
110
+ assert_nothing_raised do
111
+ cf = Amazon::Config.new( <<' EOF' )
112
+ good_syntax = 'good quotes'
113
+ EOF
114
+ end
115
+
116
+ # Test that config files are properly read from $AMAZONRC.
117
+ #
118
+ Dir.mktmpdir do |td|
119
+ ENV['AMAZONRCDIR'] = td
120
+ ENV['AMAZONRCFILE'] = '.user_defined_name'
121
+ File.open( File.join( td, '.user_defined_name' ), 'w' ) do |tf|
122
+ tf.puts( 'foo = bar' )
123
+ end
124
+
125
+ cf = Amazon::Config.new
126
+ assert_equal( 'bar', cf['foo'] )
127
+ ENV['AMAZONRCDIR'] = nil
128
+ ENV['AMAZONRCFILE'] = nil
129
+ end
130
+ end
131
+
132
+ def test_exceptions
133
+ assert_raise( Amazon::AWS::HTTPError ) { raise Amazon::AWS::HTTPError }
134
+ end
135
+
136
+ end
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+
4
+ class TestItemSearch < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @rg = ResponseGroup.new( :Small )
8
+ @req = Request.new(@@key_id, @@associates_id)
9
+ @req.locale = 'uk'
10
+ @req.cache = false
11
+ end
12
+
13
+ def test_item_search
14
+ is = ItemSearch.new( 'Books', { 'Title' => 'Ruby' } )
15
+ response = @req.search( is, @rg )
16
+
17
+ results = response.kernel
18
+
19
+ # Ensure we got some actual results back.
20
+ #
21
+ assert( results.size > 0 )
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+
4
+ class TestMultipleOperation < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @rg = ResponseGroup.new( :Small )
8
+ @req = Request.new(@@key_id, @@associates_id)
9
+ @req.locale = 'uk'
10
+ @req.cache = false
11
+ end
12
+
13
+ def test_item_search
14
+ il = ItemLookup.new( 'ASIN', { 'ItemId' => 'B000AE4QEC',
15
+ 'MerchantId' => 'Amazon' } )
16
+ il2 = ItemLookup.new( 'ASIN', { 'ItemId' => 'B000051WBE',
17
+ 'MerchantId' => 'Amazon' } )
18
+
19
+ # Create a batch request of the two ItemLookup operations.
20
+ #
21
+ il.batch( il2 )
22
+
23
+ is = ItemSearch.new( 'Books', { 'Title' => 'Ruby' } )
24
+
25
+ # Create a multiple operation of the ItemSearch operation and the two
26
+ # batched ItemLookup operations.
27
+ #
28
+ mo = MultipleOperation.new( is, il )
29
+
30
+ response = @req.search( mo, @rg )
31
+
32
+ mor = response.multi_operation_response[0]
33
+
34
+ # Ensure we received a MultiOperationResponse.
35
+ #
36
+ assert_instance_of( Amazon::AWS::AWSObject::MultiOperationResponse, mor )
37
+
38
+ # Ensure response contains an ItemSearchResponse.
39
+ #
40
+ assert_instance_of( Amazon::AWS::AWSObject::ItemSearchResponse,
41
+ mor.item_search_response[0] )
42
+
43
+ # Ensure response also contains an ItemLookupResponse.
44
+ #
45
+ assert_instance_of( Amazon::AWS::AWSObject::ItemLookupResponse,
46
+ mor.item_lookup_response[0] )
47
+
48
+ is_set = response.multi_operation_response.item_search_response[0].items
49
+ il_set = response.multi_operation_response.item_lookup_response[0].items
50
+ is_arr = is_set.item
51
+ il_arr1 = il_set[0].item
52
+ il_arr2 = il_set[1].item
53
+
54
+ # Ensure that there's one <ItemSet> for the ItemSearch.
55
+ #
56
+ assert_equal( 1, is_set.size )
57
+
58
+ # Ensure that there are two <ItemSet>s for the ItemLookup, because it was
59
+ # a batched operation.
60
+ #
61
+ assert_equal( 2, il_set.size )
62
+
63
+ # Assure that all item sets have some results.
64
+ #
65
+ assert( is_arr.size > 0 )
66
+ assert( il_arr1.size > 0 )
67
+ assert( il_arr2.size > 0 )
68
+ end
69
+
70
+ end
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+
4
+ class TestOperationRequest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @rg = ResponseGroup.new( :Small )
8
+ @req = Request.new(@@key_id, @@associates_id)
9
+ @req.locale = 'uk'
10
+ @req.cache = false
11
+ end
12
+
13
+ def test_operation_request
14
+ is = ItemSearch.new( 'Books', { 'Title' => 'Ruby' } )
15
+ response = @req.search( is, ResponseGroup.new( 'Request' ) )
16
+
17
+ # Same again with Symbols.
18
+ #
19
+ is = ItemSearch.new( :Books, { :Title => 'Ruby' } )
20
+ response = @req.search( is, ResponseGroup.new( :Request ) )
21
+
22
+ # Make sure undocumented AWSObject#results provides an accurate shortcut
23
+ # to the most interesting part of the data returned by AWS.
24
+ #
25
+ assert_equal( response.item_search_response[0].items[0].item,
26
+ response.kernel )
27
+
28
+ # Ensure response is an Amazon::AWS::AWSObject.
29
+ #
30
+ assert_instance_of( Amazon::AWS::AWSObject, response )
31
+
32
+ # Ensure non-existent instance variables return nil.
33
+ #
34
+ assert_nil( response.foo_bar_baz )
35
+
36
+ # Ensure top level of response is an Amazon::AWS::AWSArray.
37
+ #
38
+ assert_instance_of( Amazon::AWS::AWSArray, response.item_search_response )
39
+
40
+ # Ensure delegation of method from AWSArray to single element.
41
+ #
42
+ assert_equal( response.item_search_response[0].operation_request,
43
+ response.item_search_response.operation_request )
44
+
45
+ # Test for correct user-agent in response.
46
+ #
47
+ assert_equal( Amazon::AWS::USER_AGENT,
48
+ response.item_search_response[0].operation_request[0].
49
+ http_headers[0].header[0].attrib['value'] )
50
+
51
+ # Ensure that the correct version of the AWS API was requested.
52
+ #
53
+ response.item_search_response[0].operation_request[0].arguments[0].
54
+ argument.each do |arg|
55
+ next unless arg.attrib['name'] == 'Version'
56
+ assert_equal( Amazon::AWS::SERVICE['Version'], arg.attrib['value'] )
57
+ break
58
+ end
59
+
60
+ end
61
+
62
+ end
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../test_helper'
3
+ require 'yaml'
4
+ require 'tempfile'
5
+
6
+ class AWSSerialisationTest < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @rg = ResponseGroup.new( :Small )
10
+ @req = Request.new(@@key_id, @@associates_id)
11
+ @req.locale = 'uk'
12
+ @req.cache = false
13
+ end
14
+
15
+ def test_yaml_load
16
+
17
+ results_file = Tempfile.new( 'ruby_aws' )
18
+
19
+ # Serialise some results.
20
+ #
21
+ is = ItemSearch.new( 'Music', { 'Artist' => 'Voice Of The Beehive' } )
22
+ response = @req.search( is, @rg )
23
+ results = response.kernel
24
+
25
+ YAML.dump( results, results_file )
26
+ results = nil
27
+
28
+ # Remove knowledge of Amazon::AWS::AWSObject, so that YAML.load knows
29
+ # nothing of its subclasses.
30
+ #
31
+ Amazon::AWS.module_eval( %Q( remove_const :AWSObject ) )
32
+
33
+ # Silence warnings about redefined constants.
34
+ #
35
+ v = $VERBOSE
36
+ $VERBOSE = nil
37
+
38
+ # Reload Amazon::AWS and friends.
39
+ #
40
+ load 'amazon/aws.rb'
41
+
42
+ # Reset warning status.
43
+ #
44
+ $VERBOSE = v
45
+
46
+ # Demonstrate that normal YAML.load can't cope with instantiating objects
47
+ # from classes it knows nothing about.
48
+ #
49
+ results_file.open
50
+ results = YAML.load( results_file )
51
+ assert_instance_of( YAML::Object, results[0] )
52
+
53
+ # Ensure that AWSObject.yaml_load does the right thing.
54
+ #
55
+ results_file.open
56
+ results = Amazon::AWS::AWSObject.yaml_load( results_file )
57
+ assert_instance_of( Amazon::AWS::AWSObject::Item, results[0] )
58
+ end
59
+
60
+
61
+ def test_marshal_load
62
+
63
+ results_file = Tempfile.new( 'ruby_aws' )
64
+
65
+ # Serialise some results.
66
+ #
67
+ is = ItemSearch.new( 'Music', { 'Artist' => 'Voice Of The Beehive' } )
68
+ response = @req.search( is, @rg )
69
+ results = response.kernel
70
+
71
+ results_file.puts Marshal.dump( results )
72
+ results = nil
73
+
74
+ # Remove knowledge of Amazon::AWS::AWSObject, so that Marshal.load knows
75
+ # nothing of its subclasses.
76
+ #
77
+ Amazon::AWS.module_eval( %Q( remove_const :AWSObject ) )
78
+
79
+ # Silence warnings about redefined constants.
80
+ #
81
+ v = $VERBOSE
82
+ $VERBOSE = nil
83
+
84
+ # Reload Amazon::AWS and friends.
85
+ #
86
+ load 'amazon/aws.rb'
87
+
88
+ # Reset warning status.
89
+ #
90
+ $VERBOSE = v
91
+
92
+ # Demonstrate that normal Marshal.load can't cope with instantiating
93
+ # objects from classes it knows nothing about.
94
+ #
95
+ results_file.open
96
+
97
+ assert_raise ArgumentError do
98
+ Marshal.load( results_file )
99
+ end
100
+
101
+ # Ensure that Amazon::AWS::AWSObject.load does the right thing.
102
+ #
103
+ results_file.open
104
+ results = Amazon::AWS::AWSObject.load( results_file )
105
+ assert_instance_of( Amazon::AWS::AWSObject::Item, results[0] )
106
+ end
107
+ end