ruby-atmos-pure 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +8 -0
- data/README +129 -0
- data/Rakefile +103 -0
- data/lib/atmos.rb +35 -0
- data/lib/atmos/attributes.rb +545 -0
- data/lib/atmos/exceptions.rb +28 -0
- data/lib/atmos/object.rb +321 -0
- data/lib/atmos/parser.rb +110 -0
- data/lib/atmos/parser/rexml.rb +1 -0
- data/lib/atmos/request.rb +221 -0
- data/lib/atmos/response.rb +116 -0
- data/lib/atmos/rest.rb +145 -0
- data/lib/atmos/store.rb +220 -0
- data/lib/atmos/util.rb +40 -0
- data/lib/atmos/version.rb +12 -0
- data/test/credentials.rb +141 -0
- data/test/esutest.rb +499 -0
- data/test/files/SmallImageForTest.iso +0 -0
- data/test/files/dragaf-tiny-from-vsphere.ova +0 -0
- data/test/files/something.txt +1 -0
- data/test/require_test.rb +2 -0
- data/test/suite.rb +11 -0
- data/test/suite_noproxy.rb +12 -0
- data/test/suite_proxy.rb +14 -0
- data/test/test_acl.rb +283 -0
- data/test/test_metadata.rb +162 -0
- data/test/test_object_create.rb +167 -0
- data/test/test_object_get.rb +55 -0
- data/test/test_object_misc.rb +80 -0
- data/test/test_object_read.rb +98 -0
- data/test/test_object_update.rb +59 -0
- data/test/test_request.rb +49 -0
- data/test/test_store.rb +125 -0
- data/test/test_util.rb +58 -0
- metadata +155 -0
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'credentials'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'atmos'
|
4
|
+
|
5
|
+
|
6
|
+
class AtmosObjectCreateTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def initialize(id)
|
9
|
+
super(id)
|
10
|
+
@cleanup = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@s = Atmos::Test::Util.static_store
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
@cleanup.each do |obj|
|
20
|
+
obj.delete
|
21
|
+
end
|
22
|
+
$stdout.flush
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_create_empty_object_via_object_interface
|
26
|
+
obj = @s.create
|
27
|
+
@cleanup.push(obj)
|
28
|
+
|
29
|
+
assert_not_nil(obj)
|
30
|
+
assert_equal({}, obj.metadata)
|
31
|
+
assert_equal({}, obj.listable_metadata)
|
32
|
+
assert_equal({Atmos::Test::Util.user => :full}, obj.user_acl)
|
33
|
+
assert_equal({Atmos::Test::Util.group => :none}, obj.group_acl)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_create_empty_object_via_namespace_interface
|
37
|
+
time = Time.now()
|
38
|
+
time = time.to_i
|
39
|
+
ns = "/foo/bar#{time}"
|
40
|
+
|
41
|
+
obj = @s.create(:namespace => ns)
|
42
|
+
@cleanup.push(obj)
|
43
|
+
|
44
|
+
assert_not_nil(obj)
|
45
|
+
assert_equal({}, obj.metadata)
|
46
|
+
assert_equal({}, obj.listable_metadata)
|
47
|
+
assert_equal({Atmos::Test::Util.user => :full}, obj.user_acl)
|
48
|
+
assert_equal({Atmos::Test::Util.group => :none}, obj.group_acl)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_create_object_with_bad_option
|
52
|
+
assert_raise Atmos::Exceptions::ArgumentException do
|
53
|
+
@cleanup.push(@s.create(:tag => ['testtag']))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_create_object_with_md_as_string
|
58
|
+
assert_raise Atmos::Exceptions::ArgumentException do
|
59
|
+
@cleanup.push(@s.create(:metadata => 'testtag'))
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_create_object_with_md_as_array
|
64
|
+
assert_raise Atmos::Exceptions::ArgumentException do
|
65
|
+
@cleanup.push(@s.create(:metadata => ['testtag']))
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_create_object_with_metadata
|
70
|
+
md = {'non' => 'listable', 'user' => 'metadata', 'a' => 'b'}
|
71
|
+
obj = @s.create(:metadata => md)
|
72
|
+
@cleanup.push(obj)
|
73
|
+
assert_not_nil(obj)
|
74
|
+
|
75
|
+
assert(obj.metadata.non_listable?)
|
76
|
+
assert(!obj.metadata.listable?)
|
77
|
+
assert_not_equal({}, obj.metadata)
|
78
|
+
assert_equal(md, obj.metadata)
|
79
|
+
|
80
|
+
assert_equal({}, obj.listable_metadata)
|
81
|
+
assert_equal({Atmos::Test::Util.user => :full}, obj.user_acl)
|
82
|
+
assert_equal({Atmos::Test::Util.group => :none}, obj.group_acl)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_create_object_with_listable_metadata
|
86
|
+
lmd = {'x' => 'a', 'y' => 'b', 'z' => 'c'}
|
87
|
+
obj = @s.create(:listable_metadata => lmd)
|
88
|
+
@cleanup.push(obj)
|
89
|
+
assert_not_nil(obj)
|
90
|
+
assert_equal({}, obj.metadata)
|
91
|
+
assert_equal({Atmos::Test::Util.user => :full}, obj.user_acl)
|
92
|
+
assert_equal({Atmos::Test::Util.group => :none}, obj.group_acl)
|
93
|
+
|
94
|
+
assert_not_equal({}, obj.listable_metadata)
|
95
|
+
assert_equal(lmd, obj.listable_metadata)
|
96
|
+
assert(!obj.listable_metadata.non_listable?)
|
97
|
+
assert(obj.listable_metadata.listable?)
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_create_object_with_mixed_metadata
|
101
|
+
md = {'non' => 'listable', 'user' => 'metadata', 'a' => 'b'}
|
102
|
+
lmd = {'x' => 'a', 'y' => 'b', 'z' => 'c'}
|
103
|
+
obj = @s.create(:metadata => md, :listable_metadata => lmd)
|
104
|
+
@cleanup.push(obj)
|
105
|
+
assert_not_nil(obj)
|
106
|
+
assert_equal({Atmos::Test::Util.user => :full}, obj.user_acl)
|
107
|
+
assert_equal({Atmos::Test::Util.group => :none}, obj.group_acl)
|
108
|
+
|
109
|
+
assert(!obj.listable_metadata.non_listable?)
|
110
|
+
assert(obj.listable_metadata.listable?)
|
111
|
+
assert_not_equal({}, obj.listable_metadata)
|
112
|
+
assert_equal(lmd, obj.listable_metadata)
|
113
|
+
|
114
|
+
assert(obj.metadata.non_listable?)
|
115
|
+
assert(!obj.metadata.listable?)
|
116
|
+
assert_not_equal({}, obj.metadata)
|
117
|
+
assert_equal(md, obj.metadata)
|
118
|
+
end
|
119
|
+
|
120
|
+
# def test_create_object_with_acl
|
121
|
+
# end
|
122
|
+
|
123
|
+
def test_create_object_with_data_as_string_with_length
|
124
|
+
data = "some stupid blob content"
|
125
|
+
obj = @s.create(:data => data, :length => data.length)
|
126
|
+
@cleanup.push(obj)
|
127
|
+
assert_equal(data, obj.data)
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_create_object_with_data_as_string_without_length
|
131
|
+
data = "some stupid blob content"
|
132
|
+
obj = @s.create(:data => data)
|
133
|
+
@cleanup.push(obj)
|
134
|
+
assert_equal(data, obj.data)
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_create_object_with_data_as_stream_with_length
|
138
|
+
contents = open(Atmos::Test::Util.small_text_filename).read
|
139
|
+
data = open(Atmos::Test::Util.small_text_filename)
|
140
|
+
obj = @s.create(:data => data, :length => data.stat.size)
|
141
|
+
@cleanup.push(obj)
|
142
|
+
assert_equal(contents, obj.data)
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_create_object_with_data_as_stream_without_length
|
146
|
+
file = open(Atmos::Test::Util.small_text_filename)
|
147
|
+
contents = file.read
|
148
|
+
file.close
|
149
|
+
data = open(Atmos::Test::Util.small_text_filename)
|
150
|
+
obj = @s.create(:data => data)
|
151
|
+
@cleanup.push(obj)
|
152
|
+
assert_equal(contents, obj.data)
|
153
|
+
end
|
154
|
+
|
155
|
+
def donttest_create_with_IO_as_data
|
156
|
+
@s = Atmos::Test::Util.static_store
|
157
|
+
@md = {'non' => 'listable', 'user' => 'metadata', 'a' => 'b'}
|
158
|
+
@lmd = {'x' => 'a', 'y' => 'b', 'z' => 'c'}
|
159
|
+
data = open(Atmos::Test::Util.small_binary_filename)
|
160
|
+
obj = @s.create(:metadata => @md,
|
161
|
+
:listable_metadata => @lmd,
|
162
|
+
:data => File.new(Atmos::Test::Util.small_binary_filename, "rb"))
|
163
|
+
@cleanup.push(obj)
|
164
|
+
@aoid = obj.aoid
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'credentials'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'atmos'
|
4
|
+
|
5
|
+
|
6
|
+
class AtmosObjectGetTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def initialize(id)
|
9
|
+
super(id)
|
10
|
+
@cleanup = []
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def setup
|
15
|
+
@s = Atmos::Test::Util.static_store
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def teardown
|
20
|
+
@cleanup.each do |obj|
|
21
|
+
obj.delete
|
22
|
+
end
|
23
|
+
$stdout.flush
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_get_object_via_object_interface
|
27
|
+
obj = @s.create
|
28
|
+
@cleanup.push(obj)
|
29
|
+
|
30
|
+
obj = @s.get(:id => obj.aoid)
|
31
|
+
assert_not_nil(obj)
|
32
|
+
assert_equal({}, obj.metadata)
|
33
|
+
assert_equal({}, obj.listable_metadata)
|
34
|
+
assert_equal({Atmos::Test::Util.user => :full}, obj.user_acl)
|
35
|
+
assert_equal({Atmos::Test::Util.group => :none}, obj.group_acl)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_get_object_via_namespace_interface
|
39
|
+
time = Time.now()
|
40
|
+
time = time.to_i#{}"%.6f" % a.to_f #=> "1195480202.282373"
|
41
|
+
|
42
|
+
ns = "/foo/bar#{time}"
|
43
|
+
obj = @s.create(:namespace => ns)
|
44
|
+
obj = @s.get(:namespace => ns)
|
45
|
+
|
46
|
+
assert_not_nil(obj)
|
47
|
+
assert_equal({}, obj.metadata)
|
48
|
+
assert_equal({}, obj.listable_metadata)
|
49
|
+
assert_equal({Atmos::Test::Util.user => :full}, obj.user_acl)
|
50
|
+
assert_equal({Atmos::Test::Util.group => :none}, obj.group_acl)
|
51
|
+
|
52
|
+
obj.delete()
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'credentials'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'atmos'
|
4
|
+
|
5
|
+
|
6
|
+
class AtmosObjectMiscTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def initialize(id)
|
9
|
+
super(id)
|
10
|
+
@cleanup = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@s = Atmos::Test::Util.static_store
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
@cleanup.each do |obj|
|
20
|
+
obj.delete
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def test_delete_existing_object
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_exists_on_existant_object
|
29
|
+
obj = @s.create()
|
30
|
+
@cleanup.push(obj)
|
31
|
+
assert(obj.exists?)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_exists_on_non_existant_object
|
35
|
+
obj = @s.create()
|
36
|
+
obj.delete
|
37
|
+
assert(!obj.exists?)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_delete_nonexisting_object
|
41
|
+
first = @s.create
|
42
|
+
assert_not_nil(first)
|
43
|
+
second = @s.get(:id => first.aoid)
|
44
|
+
assert_not_nil(second)
|
45
|
+
first.delete
|
46
|
+
assert_raise Atmos::Exceptions::NoSuchObjectException do
|
47
|
+
second.delete
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_truncate_text_object
|
52
|
+
file = open(Atmos::Test::Util.small_text_filename)
|
53
|
+
contents = file.read
|
54
|
+
file.close
|
55
|
+
data = open(Atmos::Test::Util.small_text_filename)
|
56
|
+
obj = @s.create(:data => data)
|
57
|
+
@cleanup.push(obj)
|
58
|
+
assert_equal(contents, obj.data)
|
59
|
+
|
60
|
+
obj.truncate
|
61
|
+
assert_equal("", obj.data)
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
def test_truncate_binary_object
|
66
|
+
file = open(Atmos::Test::Util.small_binary_filename)
|
67
|
+
contents = file.read
|
68
|
+
file.close
|
69
|
+
data = open(Atmos::Test::Util.small_binary_filename)
|
70
|
+
obj = @s.create(:data => data)
|
71
|
+
@cleanup.push(obj)
|
72
|
+
|
73
|
+
# assert_equal(contents, obj.data)
|
74
|
+
|
75
|
+
obj.truncate
|
76
|
+
assert_equal("", obj.data)
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'credentials'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'atmos'
|
4
|
+
|
5
|
+
|
6
|
+
class AtmosObjectReadTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def initialize(id)
|
9
|
+
super(id)
|
10
|
+
@cleanup = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@s = Atmos::Test::Util.static_store
|
15
|
+
@md = {'non' => 'listable', 'user' => 'metadata', 'a' => 'b'}
|
16
|
+
@lmd = {'x' => 'a', 'y' => 'b', 'z' => 'c'}
|
17
|
+
data = open(Atmos::Test::Util.small_binary_filename)
|
18
|
+
obj = @s.create(:metadata => @md,
|
19
|
+
:listable_metadata => @lmd,
|
20
|
+
:data => File.new(Atmos::Test::Util.small_binary_filename, "rb"))
|
21
|
+
@cleanup.push(obj)
|
22
|
+
@aoid = obj.aoid
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def teardown
|
27
|
+
@cleanup.each do |obj|
|
28
|
+
obj.delete
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def test_read_partial_data_as_stream
|
34
|
+
obj = @s.get(:id => @aoid)
|
35
|
+
|
36
|
+
file = open(Atmos::Test::Util.small_binary_filename)
|
37
|
+
contents = file.read
|
38
|
+
assert_equal(contents, obj.data)
|
39
|
+
|
40
|
+
f = File.new(Atmos::Test::Util.small_binary_filename, "rb")
|
41
|
+
contents = f.read(61)
|
42
|
+
data = obj.data(0...60)
|
43
|
+
|
44
|
+
readin = ""
|
45
|
+
obj.data_as_stream(0...60) do |chunk|
|
46
|
+
readin.concat(chunk)
|
47
|
+
end
|
48
|
+
|
49
|
+
assert_equal(61, readin.length)
|
50
|
+
assert_equal(contents.length, readin.length)
|
51
|
+
assert_equal(contents, readin)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_read_data_as_stream
|
55
|
+
|
56
|
+
file = open(Atmos::Test::Util.small_binary_filename)
|
57
|
+
contents = file.read
|
58
|
+
obj = @s.get(:id => @aoid)
|
59
|
+
obj.update(contents)
|
60
|
+
assert_equal(contents, obj.data)
|
61
|
+
|
62
|
+
readin = ""
|
63
|
+
obj.data_as_stream do |chunk|
|
64
|
+
readin.concat(chunk)
|
65
|
+
end
|
66
|
+
|
67
|
+
assert_equal(contents, readin)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_read_partial_data_as_string
|
71
|
+
|
72
|
+
file = open(Atmos::Test::Util.small_binary_filename)
|
73
|
+
contents = file.read
|
74
|
+
obj = @s.get(:id => @aoid)
|
75
|
+
obj.update(contents)
|
76
|
+
assert_equal(contents, obj.data)
|
77
|
+
|
78
|
+
|
79
|
+
f = File.new(Atmos::Test::Util.small_binary_filename, "rb")
|
80
|
+
contents = f.read(61)
|
81
|
+
data = obj.data(0...60)
|
82
|
+
len = data.length
|
83
|
+
assert_equal(61, obj.data(0...60).length)
|
84
|
+
assert_equal(contents, obj.data(0...60))
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_read_data_as_string
|
88
|
+
file = open(Atmos::Test::Util.small_binary_filename)
|
89
|
+
contents = file.read
|
90
|
+
obj = @s.get(:id => @aoid)
|
91
|
+
obj.update(contents)
|
92
|
+
assert_equal(contents, obj.data)
|
93
|
+
|
94
|
+
assert_equal(contents, obj.data)
|
95
|
+
assert(obj.data.length > 0)
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'credentials'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'atmos'
|
4
|
+
|
5
|
+
|
6
|
+
class AtmosObjectUpdateTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def initialize(id)
|
9
|
+
super(id)
|
10
|
+
@cleanup = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@s = Atmos::Test::Util.static_store
|
15
|
+
@obj = @s.create
|
16
|
+
@cleanup.push(@obj)
|
17
|
+
#print "test_object_update.setup(): obj: #{@obj}; objid: #{@obj.aoid}\n"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def teardown
|
22
|
+
@cleanup.each do |obj|
|
23
|
+
obj.delete
|
24
|
+
end
|
25
|
+
$stdout.flush
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_object_ok
|
29
|
+
assert_not_nil(@obj)
|
30
|
+
assert_equal({}, @obj.metadata)
|
31
|
+
assert_equal({}, @obj.listable_metadata)
|
32
|
+
assert_equal({Atmos::Test::Util.user => :full}, @obj.user_acl)
|
33
|
+
assert_equal({Atmos::Test::Util.group => :none}, @obj.group_acl)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_update_empty_obj
|
37
|
+
data = "Hello World"
|
38
|
+
@obj.update(data)
|
39
|
+
assert_equal(data, @obj.data)
|
40
|
+
end
|
41
|
+
|
42
|
+
# def test_append_non_empty_object
|
43
|
+
# data = @obj.data
|
44
|
+
# @obj.append("!")
|
45
|
+
# assert_equal(data+"!", @obj.data)
|
46
|
+
# print "appended hello world object with !: #{@obj.data}\n"
|
47
|
+
# end
|
48
|
+
|
49
|
+
def test_update_object_in_place
|
50
|
+
data = "Hello World!"
|
51
|
+
@obj.update(data)
|
52
|
+
assert_equal(data, @obj.data)
|
53
|
+
|
54
|
+
range = 0..4
|
55
|
+
@obj.update("Mad ", range)
|
56
|
+
assert_equal("Mad World!", @obj.data)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|