ruby-atmos 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/atmos/util.rb ADDED
@@ -0,0 +1,40 @@
1
+ module Atmos
2
+ class Util # :nodoc:
3
+
4
+ #
5
+ # Utility method to convert from a standard Atmos key/value pair return header.
6
+ #
7
+ def self.header2hash(value)
8
+ return nil if (value.nil?)
9
+ raise Atmos::Exceptions::ArgumentException, "The 'value' parameter must be a String" if (!value.kind_of?(String))
10
+
11
+ rv = {}
12
+ if (!value.nil?)
13
+ value.split(',').each do |elt|
14
+ key,val = elt.split('=')
15
+ rv[key.strip] = val.nil? ? "" : val.strip
16
+ end
17
+ end
18
+
19
+ rv
20
+ end
21
+
22
+
23
+ #
24
+ # Utility method to convert to a standard header value.
25
+ #
26
+ def self.hash2header(value)
27
+ return nil if (value.nil?)
28
+ raise Atmos::Exceptions::ArgumentException, "The 'value' parameter must be a Hash" if (!value.kind_of?(Hash))
29
+
30
+ rv = ""
31
+ if (!value.nil?)
32
+ value.each do |k,v|
33
+ rv += "#{k}=#{v}, "
34
+ end
35
+ end
36
+
37
+ rv[0..-3]
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,12 @@
1
+ module Atmos
2
+
3
+ # Version number of this library.
4
+ VERSION = "0.6.0"
5
+
6
+ # Array of version strings this library has been tested against.
7
+ SUPPORTED_VERSIONS = ["1.2.7", "1.3.4", "1.4.0", "1.4.1", "2.0.1"].freeze
8
+
9
+ # The logger used by the entire gem.
10
+ LOG = Log4r::Logger.get('atmos')
11
+
12
+ end
@@ -0,0 +1,141 @@
1
+ module Atmos
2
+ module Test
3
+ class Util
4
+ $stdout.sync = true
5
+ @use_proxy = false
6
+ @proxy = 'http://127.0.0.1:3128'
7
+ @store = nil
8
+ @server = :atmosonline
9
+ @servers =
10
+ {:alma => {
11
+ :url => 'https://10.5.113.71',
12
+ :redirect_url=> nil,
13
+ :version => '2.0.1',
14
+ :default_tag => 'atmos-ruby',
15
+ :tenant => '69eb3dc3bf9746f895d1ce12ae1d9589',
16
+ :user => 'dragaf-test',
17
+ :group => 'other',
18
+ :secret => 'p97mki4AkiAyVi+/7QpdxFAU/jY=',
19
+ :other_user => nil,
20
+ :other_group => nil,
21
+ },
22
+ :atmosonline => {
23
+ :url => 'https://accesspoint.atmosonline.com',
24
+ :redirect_url=> 'http://accesspoint.atmosonline.com',
25
+ :version => '1.3.4',
26
+ :default_tag => 'atmos-ruby',
27
+ :tenant => 'b245ad26f5c94bcbbaffa315a833f27a',
28
+ :user => 'A79755852684b2e05d00',
29
+ :group => 'other',
30
+ :secret => 'sM6oN/k6e03iW7lNSUzFav9rwck=',
31
+ :other_user => 'A797558526171ea693ce',
32
+ :other_group => 'grouptest',
33
+ },
34
+ :cambridge_71 => {
35
+ :url => 'https://10.5.113.74',
36
+ :redirect_url=> nil,
37
+ :version => '1.4.1',
38
+ :default_tag => 'atmos-ruby',
39
+ :tenant => 'ab9090e754b549eeb460a468abdf7fc2',
40
+ :user => 'dragaf-test-tenant-user1',
41
+ :group => 'other',
42
+ :secret => 't5R1ftRNLXQ3ejv6fvJLNFMFrPo=',
43
+ :other_user => 'another',
44
+ :other_group => nil,
45
+ },
46
+ :matt => {
47
+ :url => 'http://137.69.164.126',
48
+ :redirect_url=> nil,
49
+ :version => "1.4.0",
50
+ :default_tag => 'atmos-ruby',
51
+ #:tenant => 'fdragan-atmos-ruby-test',
52
+ :tenant => '4aba2817d7eb4a2d93dfdccb3caedb9f',
53
+ :user => 'testuser02',
54
+ :group => 'other',
55
+ :secret => 'sWNxtrhorOpi0R3PNPSo1uKV4Vo=',
56
+ :other_user => 'testuser01',
57
+ :other_group => nil,
58
+ },
59
+ }
60
+
61
+ def self.parser_type
62
+ Atmos::Parser::NOKOGIRI
63
+ #Atmos::Parser::REXML
64
+ end
65
+
66
+ #
67
+ # Provides the same store object to all who request it.
68
+ # This is the default for running tests. If tests fail
69
+ # you can change the mode to get a new store each time
70
+ # and see if that fixes it. If so, you know that something
71
+ # weird is going on with the Atmos::Store object.
72
+ #
73
+ def self.static_store
74
+ if (@store.nil?)
75
+ Atmos::Parser::parser = parser_type
76
+ @store = Atmos::Store.new(:url => url,
77
+ :uid => uid,
78
+ :secret => secret,
79
+ :proxy => proxy
80
+ )
81
+ end
82
+
83
+ return @store
84
+ end
85
+
86
+ def self.new_store
87
+ Atmos::Parser::parser = parser_type
88
+ Atmos::Store.new(:url => url,
89
+ :uid => uid,
90
+ :secret => secret,
91
+ :proxy => proxy
92
+ )
93
+ end
94
+
95
+
96
+ def self.server
97
+ @server
98
+ end
99
+
100
+ def self.use_proxy=(bool)
101
+ @use_proxy = bool
102
+ end
103
+
104
+ def self.proxy
105
+ (@use_proxy == true) ? @proxy : nil
106
+ end
107
+
108
+ def self.small_text_filename
109
+ File.join(File.dirname(__FILE__),
110
+ 'files/something.txt')
111
+ end
112
+
113
+ def self.small_binary_filename
114
+ File.join(File.dirname(__FILE__),
115
+ 'files/dragaf-tiny-from-vsphere.ova')
116
+ end
117
+
118
+ def self.large_binary_filename
119
+ File.join(File.dirname(__FILE__),
120
+ 'SmallImageForTest.iso')
121
+ end
122
+
123
+ def self.test_server_info(key)
124
+ @servers[key]
125
+ end
126
+
127
+ def self.uid
128
+ return "#{Atmos::Test::Util.tenant}/#{Atmos::Test::Util.user}"
129
+ end
130
+
131
+ def self.method_missing(sym, *args)
132
+ if (@servers[@server].has_key?(sym))
133
+ return @servers[@server][sym]
134
+ else
135
+ return super.method_missing(sym, *args)
136
+ end
137
+ end
138
+
139
+ end
140
+ end
141
+ end
data/test/esutest.rb ADDED
@@ -0,0 +1,499 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'tempfile'
4
+ require 'EsuApi'
5
+ require 'uri'
6
+
7
+ class Esutest < Test::Unit::TestCase
8
+ def initialize( id )
9
+ super(id)
10
+ @esu = EsuApi::EsuRestApi.new( "192.168.15.115",80,"connectic","D7qsp4j16PBHWSiUbc/bt3lbPBY=")
11
+ end
12
+
13
+ def setup
14
+ @cleanup = []
15
+ @cleanfiles = []
16
+ end
17
+
18
+ def teardown
19
+ @cleanup.each { |id| @esu.delete_object( id ) }
20
+ @cleanfiles.each { |file| file.close! }
21
+ end
22
+
23
+ #
24
+ # Test creating one empty object. No metadata, no content.
25
+ #
26
+ def test_create_empty_object()
27
+ id = @esu.create_object( nil, nil, nil, nil )
28
+ assert_not_nil( id, "nil ID returned" );
29
+ @cleanup.push( id )
30
+
31
+ # Read back the content
32
+ content = @esu.read_object( id, nil, nil )
33
+ assert_equal( "", content, "object content wrong" );
34
+ end
35
+
36
+ def test_hmac
37
+ str = "Hello World"
38
+ value = HMAC::SHA1.digest( Base64.decode64( "D7qsp4j16PBHWSiUbc/bt3lbPBY=" ), str )
39
+ signature = Base64.encode64( value ).chomp()
40
+ print "String to sign: #{str}\nSignature: #{signature}\nValue: #{value}\n"
41
+ assert_equal( "kFcjtduMr0rljJHxJRqF8i1DNp4=", signature, "HMAC failed to validate" )
42
+ end
43
+
44
+ # def test_create_empty_object_on_path()
45
+ # op = EsuApi::ObjectPath.new( '/' + randomstr( 8 ) )
46
+ # id = @esu.create_object_on_path( op, nil, nil, nil, nil )
47
+ # assert_not_nil( id, "nil ID returned" );
48
+ # @cleanup.push( id )
49
+ #
50
+ # # Read back the content
51
+ # content = @esu.read_object( id, nil, nil )
52
+ # assert_equal( "", content, "object content wrong" );
53
+ # end
54
+ #
55
+ def test_create_object_with_content()
56
+ id = @esu.create_object( nil, nil, "hello", "text/plain" )
57
+ assert_not_nil( id, "nil ID returned" );
58
+ @cleanup.push( id )
59
+
60
+ # Read back the content
61
+ content = @esu.read_object( id, nil, nil )
62
+ assert_equal( "hello", content, "object content wrong" );
63
+ end
64
+
65
+ def test_update_object
66
+ id = @esu.create_object( nil, nil, "hello", "text/plain" )
67
+ assert_not_nil( id, "nil ID returned" );
68
+ @cleanup.push( id )
69
+
70
+ # Change the content
71
+ @esu.update_object( id, nil, nil, "Hello World", "text/plain" )
72
+
73
+ # Read back the content
74
+ content = @esu.read_object( id, nil, nil )
75
+ assert_equal( "Hello World", content, "object content wrong" );
76
+
77
+ end
78
+
79
+ #
80
+ # def test_create_object_with_stream()
81
+ # stream = createTestStream( 40 )
82
+ # id = @esu.create_object( nil, nil, stream.open, "text/plain" )
83
+ #
84
+ # @cleanup.push( id )
85
+ #
86
+ # # Read back the content
87
+ # content = @esu.read_object( id, nil, nil )
88
+ # assert_equal( content, stream.open.readlines, "object content wrong" );
89
+ # end
90
+ #
91
+ # def test_create_object_with_metadata()
92
+ # meta = {}
93
+ # meta['listable'] = EsuApi::Metadata.new( "listable", "foo", true )
94
+ # meta['unlistable'] = EsuApi::Metadata.new( "unlistable", "bar", false )
95
+ # meta['listable2'] = EsuApi::Metadata.new( "listable2", "foo2 foo2", true )
96
+ # meta['unlistable2'] = EsuApi::Metadata.new( "unlistable2", "bar2 bar2", false )
97
+ # id = @esu.create_object( nil, meta, nil, nil )
98
+ # @cleanup.push( id )
99
+ #
100
+ # # Read back and check
101
+ # meta = @esu.get_user_metadata( id )
102
+ #
103
+ # assert_equal( "foo", meta["listable"].value, "Value of listable wrong" )
104
+ # assert_equal( "bar", meta["unlistable"].value, "Value of unlistable wrong" )
105
+ # assert_equal( "foo2 foo2", meta["listable2"].value, "Value of listable2 wrong" )
106
+ # assert_equal( "bar2 bar2", meta["unlistable2"].value, "Value of unlistable2 wrong" )
107
+ # end
108
+ #
109
+ # def test_acl
110
+ # acl = createAcl
111
+ # id = @esu.create_object( acl, nil, nil, nil )
112
+ # @cleanup.push( id )
113
+ #
114
+ # # Read back and check
115
+ # newacl = @esu.getAcl( id )
116
+ # check_acl( acl, newacl )
117
+ # end
118
+ #
119
+ # def test_acl_on_path
120
+ # acl = createAcl
121
+ # op = EsuApi::ObjectPath.new( '/' + randomstr( 8 ) )
122
+ # id = @esu.create_object_on_path( op, acl, nil, nil, nil )
123
+ # @cleanup.push( id )
124
+ #
125
+ # # Read back and check
126
+ # newacl = @esu.get_acl( id )
127
+ # check_acl( acl, newacl )
128
+ # end
129
+ #
130
+ # def test_delete_user_metadata
131
+ # meta = {}
132
+ # meta['listable'] = EsuApi::Metadata.new( "listable", "foo", true )
133
+ # meta['unlistable'] = EsuApi::Metadata.new( "unlistable", "bar", false )
134
+ # meta['listable2'] = EsuApi::Metadata.new( "listable2", "foo2 foo2", true )
135
+ # meta['unlistable2'] = EsuApi::Metadata.new( "unlistable2", "bar2 bar2", false )
136
+ # id = @esu.create_object( nil, meta, nil, nil )
137
+ # @cleanup.push( id )
138
+ #
139
+ # # Delete some metadata
140
+ # deleteList = [ 'listable', 'unlistable' ]
141
+ # @esu.delete_user_metadata( id, deleteList )
142
+ #
143
+ # # Read back and check
144
+ # meta = @esu.get_user_metadata( id )
145
+ #
146
+ # assert_nil( meta["listable"], "listable should have been deleted" )
147
+ # assert_nil( meta["unlistable"], "unlistable should have been deleted" )
148
+ # assert_equal( "foo2 foo2", meta["listable2"].value, "Value of listable2 wrong" )
149
+ # assert_equal( "bar2 bar2", meta["unlistable2"].value, "Value of unlistable2 wrong" )
150
+ # end
151
+ #
152
+ # def test_delete_version
153
+ # id = @esu.create_object( nil, nil, nil, nil )
154
+ # @cleanup.push( id )
155
+ #
156
+ # # Create some versions
157
+ # vid1 = @esu.version_object( id );
158
+ # vid2 = @esu.version_object( id );
159
+ #
160
+ # # Delete one of the versions
161
+ # @esu.delete_version( vid1 )
162
+ #
163
+ # # List back the versions
164
+ # vlist = @esu.listVersions( id );
165
+ # assert_equal( 1, vlist.size, "Only expected one version" )
166
+ # assert_equal( vid2, vlist[0], "Expected second vid" )
167
+ # end
168
+ #
169
+ # def test_restore_version
170
+ # id = @esu.create_object( nil, nil, "Original Content", "text/plain" )
171
+ # @cleanup.push( id )
172
+ #
173
+ # # Version the object
174
+ # vid1 = @esu.version_object( id )
175
+ #
176
+ # # Change the content
177
+ # @esu.update_object( id, nil, nil, "New content you should never see", "text/plain" )
178
+ #
179
+ # # restore the first version
180
+ # @esu.restore_version( id, vid1 )
181
+ #
182
+ # # Read back the content
183
+ # content = @esu.read_object( id )
184
+ # assert_equal( "Original Content", content, "Expected original content" )
185
+ # end
186
+ #
187
+ # def test_get_system_metadata
188
+ # id = @esu.create_object( nil, nil, "12345", "text/plain" )
189
+ # @cleanup.push( id )
190
+ #
191
+ # tags = [ 'ctime', 'size' ]
192
+ # smeta = @esu.get_system_metadata( id, tags )
193
+ #
194
+ # assert_not_nil( smeta['ctime'], "Expected ctime to be set" )
195
+ # assert_equal( 5, smeta['size'].value, "Expected object size to be five" )
196
+ # end
197
+ #
198
+ # def test_list_objects
199
+ # meta = {}
200
+ # meta['listable'] = EsuApi::Metadata.new( "listable", "foo", true )
201
+ # meta['unlistable'] = EsuApi::Metadata.new( "unlistable", "bar", false )
202
+ # meta['listable2'] = EsuApi::Metadata.new( "list/able/2", "foo2 foo2", true )
203
+ # meta['unlistable2'] = EsuApi::Metadata.new( "un/list/able2", "bar2 bar2", false )
204
+ # id = @esu.create_object( nil, meta, nil, nil )
205
+ # @cleanup.push( id )
206
+ #
207
+ # # List tags and check membership
208
+ # objects = @esu.list_objects( "listable" );
209
+ # assert_true( objects.include?(id), "Expected object to be listable" );
210
+ #
211
+ # objects = @esu.list_objects( "unlistable" )
212
+ # assert_true( !objects.include?(id), "Expected object to not be unlistable" )
213
+ #
214
+ # objects = @esu.list_objects( "list/able/2" )
215
+ # assert_true( objects.include?(id), "Expected object to be listable" )
216
+ # end
217
+ #
218
+ # def test_list_objects_with_metadata
219
+ # meta = {}
220
+ # meta['listable'] = EsuApi::Metadata.new( "listable", "foo", true )
221
+ # meta['unlistable'] = EsuApi::Metadata.new( "unlistable", "bar", false )
222
+ # meta['listable2'] = EsuApi::Metadata.new( "list/able/2", "foo2 foo2", true )
223
+ # meta['unlistable2'] = EsuApi::Metadata.new( "un/list/able2", "bar2 bar2", false )
224
+ # id = @esu.create_object( nil, meta, nil, nil )
225
+ # @cleanup.push( id )
226
+ #
227
+ # # List tags and check membership
228
+ # objects = @esu.list_objects_with_metadata( "listable" );
229
+ # assert_true( objects.include?(id), "Expected object to be listable" );
230
+ #
231
+ # oid = objects[ objects.index(id) ]
232
+ #
233
+ # # Check metadata
234
+ # assert_equal( "foo", oid.meta['listable'], "Expected metadata to be set on object" )
235
+ # end
236
+ #
237
+ # def test_get_listable_tags
238
+ # meta = {}
239
+ # meta['listable'] = EsuApi::Metadata.new( "listable", "foo", true )
240
+ # meta['unlistable'] = EsuApi::Metadata.new( "unlistable", "bar", false )
241
+ # meta['listable2'] = EsuApi::Metadata.new( "list/able/2", "foo2 foo2", true )
242
+ # meta['unlistable2'] = EsuApi::Metadata.new( "list/able/not", "bar2 bar2", false )
243
+ # id = @esu.create_object( nil, meta, nil, nil )
244
+ # @cleanup.push( id )
245
+ #
246
+ # # Check root tags
247
+ # tags = @esu.get_listable_tags( nil )
248
+ # assert( tags.include?('listable'), "Expected listable in root" )
249
+ # assert( tags.include?('list'), "Expected list in root" )
250
+ # assert( !tags.include?('unlistable'), "Expected unlistable to be missing" )
251
+ #
252
+ # # Check deeper tag
253
+ # tags = @esu.get_listable_tags( 'list/able' )
254
+ # assert( tags.include?( '2' ), "Expected child tag" )
255
+ # assert( !tags.include?( 'listable' ), "Root tag found in child" )
256
+ # assert( !tags.include?( 'not' ), "Found unlistable tag" )
257
+ # end
258
+ #
259
+ # def test_list_user_metadata_tags
260
+ # meta = {}
261
+ # meta['listable'] = EsuApi::Metadata.new( "listable", "foo", true )
262
+ # meta['unlistable'] = EsuApi::Metadata.new( "unlistable", "bar", false )
263
+ # meta['listable2'] = EsuApi::Metadata.new( "list/able/2", "foo2 foo2", true )
264
+ # meta['unlistable2'] = EsuApi::Metadata.new( "list/able/not", "bar2 bar2", false )
265
+ # id = @esu.create_object( nil, meta, nil, nil )
266
+ # @cleanup.push( id )
267
+ #
268
+ # # Check tags
269
+ # tags = @esu.list_user_metadata_tags( id )
270
+ # assert( tags.include?('listable'), "Metadata listable tag missing" );
271
+ # assert( tags.include?('unlistable'), "Metadata unlistable tag missing" );
272
+ # assert( tags.include?('list/able/2'), "Metadata list/able/2 tag missing" );
273
+ # assert( tags.include?('list/able/not'), "Metadata list/able/not tag missing" );
274
+ # end
275
+ #
276
+ # def test_update_object
277
+ # meta = {}
278
+ # meta['listable'] = EsuApi::Metadata.new( "listable", "foo", true )
279
+ # meta['unlistable'] = EsuApi::Metadata.new( "unlistable", "bar", false )
280
+ # id = @esu.create_object( nil, meta, "Four score and seven years ago", "text/plain" )
281
+ # @cleanup.push( id )
282
+ #
283
+ # # Update object
284
+ # meta = {}
285
+ # meta['listable'] = EsuApi::Metadata.new( "listable", "xxx", true )
286
+ # meta['unlistable'] = EsuApi::Metadata.new( "unlistable", "yyy", false )
287
+ # @esu.update_object( nil, meta, "New content here", "text/plain" )
288
+ #
289
+ # # Read back metadata and check
290
+ # meta = @esu.get_user_metadata( id )
291
+ #
292
+ # assert_equal( "xxx", meta["listable"].value, "Value of listable wrong" )
293
+ # assert_equal( "yyy", meta["unlistable"].value, "Value of unlistable wrong" )
294
+ #
295
+ # # Read back the content
296
+ # content = @esu.read_object( id, nil, nil )
297
+ # assert_equal( "New content here", content, "object content wrong" );
298
+ # end
299
+ #
300
+ # def test_update_object_with_stream()
301
+ # stream = createTestStream( 40 )
302
+ # id = @esu.create_object( nil, nil, stream.open, "text/plain" )
303
+ #
304
+ # @cleanup.push( id )
305
+ #
306
+ # stream2 = createTestStream( 45 )
307
+ # @esu.update_object( nil, nil, stream2.open(), "text/plain" )
308
+ #
309
+ # # Read back the content
310
+ # content = @esu.read_object( id, nil, nil )
311
+ # assert_equal( content, stream2.open.readlines, "object content wrong" );
312
+ # end
313
+ #
314
+ # def test_list_directory()
315
+ # dir = '/' + randomstr( 8 )
316
+ #
317
+ # file1 = EsuApi::ObjectPath.new( dir + '/' + randomstr( 8 ) )
318
+ # file2 = EsuApi::ObjectPath.new( dir + '/' + randomstr( 8 ) )
319
+ # dir2 = EsuApi::ObjectPath.new( dir + '/' + randomstr( 8 ) + '/' )
320
+ # id1 = @esu.create_object_on_path( file1, nil, nil, nil, nil )
321
+ # @cleanup.push( id1 )
322
+ # id2 = @esu.create_object_on_path( file2, nil, nil, nil, nil )
323
+ # @cleanup.push( id2 )
324
+ # id3 = @esu.create_object_on_path( dir2, nil, nil, nil, nil )
325
+ # @cleanup.push( id3 )
326
+ #
327
+ # dirlist = @esu.list_directory( EsuApi::ObjectPath.new( dir + '/' ) )
328
+ # assert( dirlist.find { |entry| entry == file1 }, "could not locate " + file1 )
329
+ # assert( dirlist.find { |entry| entry == file2 }, "could not locate " + file2 )
330
+ # assert( dirlist.find { |entry| entry == dir2 }, "could not locate " + dir2 )
331
+ # end
332
+ #
333
+ # def test_get_all_metadata()
334
+ # meta = {}
335
+ # meta['listable'] = EsuApi::Metadata.new( "listable", "foo", true )
336
+ # meta['unlistable'] = EsuApi::Metadata.new( "unlistable", "bar", false )
337
+ # meta['listable2'] = EsuApi::Metadata.new( "listable2", "foo2 foo2", true )
338
+ # meta['unlistable2'] = EsuApi::Metadata.new( "unlistable2", "bar2 bar2", false )
339
+ # acl = createAcl
340
+ # op = EsuApi::ObjectPath.new( '/' + randomstr( 8 ) )
341
+ # id = @esu.create_object_on_path( op, acl, meta, "object content", "text/plain" )
342
+ #
343
+ # om = @esu.get_object_metadata( op )
344
+ #
345
+ # check_acl( acl, om.acl )
346
+ # assert_equal( "text/plain", om.mimetype, "wrong mimetype" )
347
+ # assert_equal( "foo", om.meta["listable"].value, "Value of listable wrong" )
348
+ # assert_equal( "bar", om.meta["unlistable"].value, "Value of unlistable wrong" )
349
+ # assert_equal( "foo2 foo2", om.meta["listable2"].value, "Value of listable2 wrong" )
350
+ # assert_equal( "bar2 bar2", om.meta["unlistable2"].value, "Value of unlistable2 wrong" )
351
+ # end
352
+ #
353
+ # def test_get_shareable_url()
354
+ # text = "The quick brown fox jumped over the lazy dog"
355
+ # id = @esu.create_object( nil, nil, text, 'text/plain' )
356
+ # @cleanup.push( id )
357
+ #
358
+ # expires = Time.new()
359
+ # expires += 3600
360
+ # url = @esu.get_shareable_url( id, expires )
361
+ #
362
+ # uri = URI.parse( url )
363
+ # io = uri.open()
364
+ #
365
+ # assert_equal( text, io.readlines, "object content wrong" )
366
+ # end
367
+ #
368
+ # def test_read_object_stream()
369
+ # text = "The quick brown fox jumped over the lazy dog"
370
+ # id = @esu.create_object( nil, nil, text, 'text/plain' )
371
+ # @cleanup.push( id )
372
+ #
373
+ # io = @esu.read_object_stream( id )
374
+ # assert_equal( text, io.readlines, "object content wrong" )
375
+ # end
376
+ #
377
+ # def test_checksum()
378
+ # text = "hello world"
379
+ #
380
+ # ck = EsuApi::Checksum.new( EsuApi::Checksum::SHA0 )
381
+ # ck.update( text )
382
+ # assert_equal( "SHA0/11/9fce82c34887c1953b40b3a2883e18850c4fa8a6", ck.to_s(), "Checkum test failed" )
383
+ # end
384
+ #
385
+ # def test_create_checksum()
386
+ # ck = EsuApi::Checksum.new( EsuApi::Checksum::SHA0 )
387
+ # ObjectId id = @esu.create_object( nil, nil, "hello world", "text/plain", ck );
388
+ # @cleanup.push( id )
389
+ # end
390
+ #
391
+ # def test_rename()
392
+ # op1 = EsuApi::ObjectPath.new( '/' + randomstr( 8 ) )
393
+ # op2 = EsuApi::ObjectPath.new( '/' + randomstr( 8 ) )
394
+ #
395
+ # id = @esu.create_object_on_path( op1, nil, nil, "hello world", "text/plain" )
396
+ # @cleanup.push( id )
397
+ #
398
+ # # Rename it
399
+ # @esu.rename( op1, op2 )
400
+ #
401
+ # # Check loading from new name
402
+ # text = @esu.read_object( op2 )
403
+ #
404
+ # assert_equals( "hello world", text, "Renamed object content wrong" )
405
+ # end
406
+ #
407
+ # def test_overwrite()
408
+ # op1 = EsuApi::ObjectPath.new( '/' + randomstr( 8 ) )
409
+ # op2 = EsuApi::ObjectPath.new( '/' + randomstr( 8 ) )
410
+ #
411
+ # id = @esu.create_object_on_path( op1, nil, nil, "hello world", "text/plain" )
412
+ # @cleanup.push( id )
413
+ # @esu.create_object_on_path( op2, nil, nil, "you shouldn't see me", "text/plain" )
414
+ #
415
+ # # Rename it and overwrite
416
+ # @esu.rename( op1, op2, true )
417
+ #
418
+ # # Wait 5 seconds for server to overwrite object
419
+ # sleep( 5 )
420
+ #
421
+ # # Check loading from new name
422
+ # text = @esu.read_object( op2 )
423
+ #
424
+ # assert_equals( "hello world", text, "Renamed object content wrong" )
425
+ # end
426
+ #
427
+ #
428
+ # def test_get_service_information()
429
+ # si = @esu.get_service_information()
430
+ #
431
+ # assert_not_nil( si.atmos_version, "Atmos version is nil" )
432
+ # end
433
+ #
434
+ # # Tests readback with checksum verification. In order to test this, create a policy
435
+ # # with erasure coding and then set a policy selector with "policy=erasure" to invoke
436
+ # # the erasure coding policy.
437
+ # def test_read_checksum()
438
+ # meta = {}
439
+ # meta["policy"] = EsuApi::Metadata.new( "policy", "erasure", false )
440
+ # ck = EsuApi::Checksum.new( EsuApi::Checksum::SHA0 )
441
+ # id = @esu.create_object( nil, meta, "hello world", "text/plain", ck )
442
+ # @cleanup.push( id )
443
+ #
444
+ # ck2 = EsuApi::Checksum.new( EsuApi::Checksum::SHA0 )
445
+ # text = @esu.read_object( id, nil, nil, ck2 )
446
+ # assert_equal( "hello world", text, "object content wrong" )
447
+ # assert_equal( ck1.to_s(), ck2.to_s(), "checksums don't match" )
448
+ # assert_equal( ck2.expected_value, ck2.to_s(), "checksum doesn't match expected value" )
449
+ # end
450
+ #
451
+ # private
452
+ #
453
+ # #
454
+ # # Generate a random string that does not start or end with a space but can
455
+ # # contain a space.
456
+ # #
457
+ # def randomstr( len )
458
+ # chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a + " ".to_a
459
+ # endchars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
460
+ # newstr = ""
461
+ # newstr << endchars[rand(endchars.size-1)]
462
+ # 2.upto(len-1) { |i| newstr << chars[rand(chars.size-1)] }
463
+ # newstr << endchars[rand(endchars.size-1)]
464
+ # return newstr
465
+ # end
466
+ #
467
+ # #
468
+ # # Creates a file/stream with the given count of
469
+ # # random characters
470
+ # #
471
+ # def createTestStream( len )
472
+ # tmpfile = Tempfile.new( "esutest" )
473
+ # @cleanfiles.push( tmpfile )
474
+ #
475
+ # tmpfile.open() do |aFile|
476
+ # aFile << randomstr( len )
477
+ # end
478
+ #
479
+ # return tmpfile
480
+ # end
481
+ #
482
+ # def createAcl
483
+ # acl = []
484
+ #
485
+ # acl.push( EsuApi::Grant.new( EsuApi::Grantee( @uid, EsuApi::Grantee::USER ), EsuApi::Grant::FULL_CONTROL ) )
486
+ # acl.push( EsuApi::Grant::OTHER, EsuApi::Grant::READ )
487
+ #
488
+ # return acl
489
+ # end
490
+ #
491
+ # #
492
+ # # Check to make sure that all the entries in acl1 exist
493
+ # # in ACL2. We do it this way because some Atmos servers
494
+ # # are configured to add default grants to objects
495
+ # #
496
+ # def checkAcl( acl1, acl2 )
497
+ # acl1.each { |entry| assert( acl2.include?(entry), "ACL entry" + entry + " not found in " + acl2 ) }
498
+ # end
499
+ end