deltacloud-client 1.0.5 → 1.1.0

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.
@@ -0,0 +1,141 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ describe "Buckets" do
22
+
23
+ it "should allow retrieval of all buckets" do
24
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
25
+ buckets = client.buckets
26
+ buckets.wont_be_empty
27
+ buckets.each do |bucket|
28
+ bucket.uri.wont_be_nil
29
+ bucket.uri.must_be_kind_of String
30
+ bucket.name.wont_be_nil
31
+ bucket.name.must_be_kind_of String
32
+ end
33
+ end
34
+ end
35
+
36
+ it "should allow retrieval of a named bucket" do
37
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
38
+ bucket = client.bucket("bucket1")
39
+ bucket.wont_be_nil
40
+ bucket.uri.must_equal API_URL + "/buckets/bucket1"
41
+ bucket.size.must_equal 3.0
42
+ bucket.name.wont_be_nil
43
+ bucket.name.must_be_kind_of String
44
+ blob_list = bucket.blob_list.split(", ")
45
+ blob_list.size.must_equal bucket.size.to_i
46
+ end
47
+ end
48
+
49
+ end
50
+
51
+ describe "Operations on buckets" do
52
+
53
+ it "should allow creation of a new bucket" do
54
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
55
+ new_bucket = client.create_bucket({'id' => "my_new_bucket"})
56
+ new_bucket.wont_be_nil
57
+ new_bucket.uri.must_equal API_URL + "/buckets/my_new_bucket"
58
+ new_bucket.name.wont_be_nil
59
+ new_bucket.name.must_be_kind_of String
60
+ new_bucket.name.must_equal "my_new_bucket"
61
+ end
62
+ end
63
+
64
+ it "should allow deletion of an existing bucket" do
65
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
66
+ new_bucket = client.bucket("my_new_bucket")
67
+ new_bucket.wont_be_nil
68
+ new_bucket.name.must_equal "my_new_bucket"
69
+ client.destroy_bucket('id' => "my_new_bucket").must_be_nil
70
+ end
71
+ end
72
+
73
+ it "should throw error if you delete a non existing bucket" do
74
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
75
+ lambda {
76
+ client.destroy_bucket({'id' => "i_dont_exist"}).must_be_nil
77
+ }.must_raise DeltaCloud::HTTPError::DeltacloudError
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+ describe "Blobs" do
84
+
85
+ it "should allow retrieval of a bucket's blobs" do
86
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
87
+ bucket = client.bucket("bucket1")
88
+ bucket.wont_be_nil
89
+ blob_list = bucket.blob_list.split(", ")
90
+ blob_list.size.must_equal bucket.size.to_i
91
+ blob_list.each do |b_id|
92
+ blob = client.blob("bucket" => bucket.name, :id => b_id)
93
+ blob.bucket.wont_be_nil
94
+ blob.bucket.must_be_kind_of String
95
+ blob.bucket.must_equal bucket.name
96
+ blob.content_length.wont_be_nil
97
+ blob.content_length.must_be_kind_of Float
98
+ blob.content_length.must_be :'>=', 0
99
+ blob_data = client.blob_data("bucket" => bucket.name, :id => b_id)
100
+ blob_data.size.to_f.must_equal blob.content_length
101
+ blob.last_modified.wont_be_nil
102
+ end
103
+ end
104
+ end
105
+
106
+ end
107
+
108
+ describe "Operations on blobs" do
109
+
110
+ it "should successfully create a new blob" do
111
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
112
+ blob_data = File.new("./blob_data_file", "w+")
113
+ blob_data.write("this is some blob data \n")
114
+ blob_data.rewind
115
+ some_new_blob = client.create_blob(
116
+ :id => "some_new_blob",
117
+ 'bucket' => "bucket1",
118
+ 'file_path' => blob_data.path
119
+ )
120
+ some_new_blob.wont_be_nil
121
+ some_new_blob.content_length.wont_be_nil
122
+ some_new_blob.content_length.must_equal 24.0
123
+ File.delete(blob_data.path)
124
+ end
125
+ end
126
+
127
+ it "should allow deletion of an existing blob" do
128
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
129
+ client.destroy_blob(:id=>"some_new_blob", 'bucket'=>"bucket1").must_be_nil
130
+ end
131
+ end
132
+
133
+ it "should throw error if you delete a non existing blob" do
134
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
135
+ lambda {
136
+ client.destroy_blob(:id=>"no_such_blob", 'bucket'=>"bucket1").must_be_nil
137
+ }.must_raise DeltaCloud::HTTPError::DeltacloudError
138
+ end
139
+ end
140
+
141
+ end
@@ -0,0 +1,59 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ describe "initializing the client" do
22
+
23
+ it "should parse valid API URIs" do
24
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
25
+ client.api_host.must_equal API_HOST
26
+ client.api_port.must_equal API_PORT.to_i
27
+ client.api_path.must_equal API_PATH
28
+ end
29
+
30
+ it "should discover entry points upon connection" do
31
+ DeltaCloud.new( "name", "password", API_URL ) do |client|
32
+ client.entry_points[:hardware_profiles].must_equal "#{API_URL}/hardware_profiles"
33
+ client.entry_points[:images].must_equal "#{API_URL}/images"
34
+ client.entry_points[:instances].must_equal "#{API_URL}/instances"
35
+ client.entry_points[:storage_volumes].must_equal "#{API_URL}/storage_volumes"
36
+ client.entry_points[:storage_snapshots].must_equal "#{API_URL}/storage_snapshots"
37
+ client.entry_points[:buckets].must_equal "#{API_URL}/buckets"
38
+ client.entry_points[:keys].must_equal "#{API_URL}/keys"
39
+ end
40
+ end
41
+
42
+ it "should provide the current driver name via client" do
43
+ DeltaCloud.new( "name", "password", API_URL ) do |client|
44
+ client.driver_name.must_equal 'mock'
45
+ end
46
+ end
47
+
48
+ it "should provide the current driver name without client" do
49
+ DeltaCloud.driver_name( API_URL ).must_equal 'mock'
50
+ end
51
+
52
+ describe "without a block" do
53
+ it "should connect without a block" do
54
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
55
+ client.images.wont_be_nil
56
+ end
57
+ end
58
+
59
+ end
@@ -0,0 +1,127 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ def client; RestClient::Resource.new(API_URL); end
22
+
23
+ def headers(header)
24
+ encoded_credentials = ["#{API_NAME}:#{API_PASSWORD}"].pack("m0").gsub(/\n/,'')
25
+ { :authorization => "Basic " + encoded_credentials }.merge(header)
26
+ end
27
+
28
+ describe "return JSON" do
29
+
30
+ it 'should return JSON when using application/json, */*' do
31
+ header_hash = {
32
+ # FIXME: There is a bug in rack-accept that cause to respond with HTML
33
+ # to the configuration below.
34
+ #
35
+ # 'Accept' => "application/json, */*"
36
+ 'Accept' => "application/json"
37
+ }
38
+ client.get(header_hash) do |response, request, &block|
39
+ response.code.must_equal 200
40
+ response.headers[:content_type].must_match /^application\/json/
41
+ end
42
+ end
43
+
44
+ it 'should return JSON when using just application/json' do
45
+ header_hash = {
46
+ 'Accept' => "application/json"
47
+ }
48
+ client.get(header_hash) do |response, request, &block|
49
+ response.code.must_equal 200
50
+ response.headers[:content_type].must_match /^application\/json/
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ describe "return HTML in different browsers" do
57
+
58
+ it "wants XML using format parameter" do
59
+ client.get(:params => { 'format' => 'xml' }, 'Accept' => 'application/xhtml+xml') do |response, request, &block|
60
+ response.code.must_equal 200
61
+ response.headers[:content_type].must_match /^application\/xml/
62
+ end
63
+ end
64
+
65
+ it "raise 406 error on wrong accept" do
66
+ client['hardware_profiles'].get('Accept' => 'image/png;q=1') do |response, request, &block|
67
+ response.code.must_equal 406
68
+ end
69
+ end
70
+
71
+ it "wants HTML using format parameter and accept set to XML" do
72
+ client.get(:params => { 'format' => 'html'}, 'Accept' => 'application/xml') do |response, request, &block|
73
+ response.code.must_equal 200
74
+ response.headers[:content_type].must_match /^text\/html/
75
+ end
76
+ end
77
+
78
+ it "doesn't have accept header" do
79
+ client.get('Accept' => '') do |response, request, &block|
80
+ response.code.must_equal 200
81
+ response.headers[:content_type].must_match /^application\/xml/
82
+ end
83
+ end
84
+
85
+ it "can handle unknown formats" do
86
+ client.get('Accept' => 'format/unknown') do |response, request, &block|
87
+ response.code.must_equal 406
88
+ end
89
+ end
90
+
91
+ it "wants explicitly XML" do
92
+ client.get('Accept' => 'application/xml') do |response, request, &block|
93
+ response.code.must_equal 200
94
+ response.headers[:content_type].must_match /^application\/xml/
95
+ end
96
+ end
97
+
98
+ it "Internet Explorer" do
99
+ header_hash = {
100
+ 'Accept' => "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*",
101
+ 'User-agent' => "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)"
102
+ }
103
+ client.get(header_hash) do |response, request, &block|
104
+ response.code.must_equal 200
105
+ response.headers[:content_type].must_match /^text\/html/
106
+ end
107
+ end
108
+
109
+ it "Mozilla Firefox" do
110
+ client.get('Accept' => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") do |response, request, &block|
111
+ response.code.must_equal 200
112
+ response.headers[:content_type].must_match /^text\/html/
113
+ end
114
+ end
115
+
116
+ it "Opera" do
117
+ header_hash = {
118
+ 'Accept' => "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1",
119
+ 'User-agent' => "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11"
120
+ }
121
+ client.get(header_hash) do |response, request, &block|
122
+ response.code.must_equal 200
123
+ response.headers[:content_type].must_match /^text\/html/
124
+ end
125
+ end
126
+
127
+ end
@@ -0,0 +1,57 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ describe "server error handler" do
22
+
23
+ it 'should capture HTTP 500 error as DeltacloudError' do
24
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
25
+ lambda { client.realm('500') }.must_raise DeltaCloud::HTTPError::DeltacloudError
26
+ end
27
+ end
28
+
29
+ it 'should capture HTTP 502 error as ProviderError' do
30
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
31
+ lambda { client.realm('502') }.must_raise DeltaCloud::HTTPError::ProviderError
32
+ end
33
+ end
34
+
35
+ it 'should capture HTTP 501 error as NotImplemented' do
36
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
37
+ lambda { client.realm('501') }.must_raise DeltaCloud::HTTPError::NotImplemented
38
+ end
39
+ end
40
+
41
+ it 'should capture HTTP 504 error as ProviderTimeout' do
42
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
43
+ lambda { client.realm('504') }.must_raise DeltaCloud::HTTPError::ProviderTimeout
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ describe "client error handler" do
50
+
51
+ it 'should capture HTTP 404 error as NotFound' do
52
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
53
+ lambda { client.realm('non-existing-realm') }.must_raise DeltaCloud::HTTPError::NotFound
54
+ end
55
+ end
56
+
57
+ end
@@ -0,0 +1,75 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ def prop_check(prop, value_class)
22
+ if prop.present?
23
+ prop.value.wont_be_nil
24
+ prop.value.must_be_kind_of value_class
25
+ end
26
+ end
27
+
28
+ describe "Hardware Profiles" do
29
+
30
+ it "should allow retrieval of all hardware profiles" do
31
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
32
+ hardware_profiles = client.hardware_profiles
33
+ hardware_profiles.wont_be_empty
34
+ hardware_profiles.each do |hwp|
35
+ hwp.uri.wont_be_nil
36
+ hwp.uri.must_be_kind_of String
37
+ prop_check(hwp.architecture, String) unless hwp.name.eql?("opaque")
38
+ end
39
+ end
40
+ end
41
+
42
+ it "should allow filtering of hardware_profiles by architecture" do
43
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
44
+ hardware_profiles = client.hardware_profiles( :architecture=>'i386' )
45
+ hardware_profiles.wont_be_empty
46
+ hardware_profiles.size.must_equal 1
47
+ hardware_profiles.first.architecture.value.must_equal 'i386'
48
+ end
49
+ end
50
+
51
+ it "should allow fetching a hardware_profile by id" do
52
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
53
+ hwp = client.hardware_profile( 'm1-small' )
54
+ hwp.wont_be_nil
55
+ hwp.id.must_equal 'm1-small'
56
+ end
57
+ end
58
+
59
+ it "should allow fetching different hardware_profiles" do
60
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
61
+ hwp1 = client.hardware_profile( 'm1-small' )
62
+ hwp2 = client.hardware_profile( 'm1-large' )
63
+ hwp1.storage.value.wont_equal hwp2.storage.value
64
+ hwp1.memory.value.wont_equal hwp2.memory.value
65
+ end
66
+
67
+ it "should allow fetching a hardware_profile by URI" do
68
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
69
+ hwp = client.fetch_hardware_profile( API_URL + '/hardware_profiles/m1-small' )
70
+ hwp.wont_be_nil
71
+ hwp.id.must_equal 'm1-small'
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,102 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ describe "Images" do
22
+
23
+ it "should allow retrieval of all images" do
24
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
25
+ images = client.images
26
+ images.wont_be_empty
27
+ images.size.must_equal 3
28
+ images.each do |image|
29
+ image.uri.wont_be_nil
30
+ image.uri.must_be_kind_of String
31
+ image.description.wont_be_nil
32
+ image.description.must_be_kind_of String
33
+ image.architecture.wont_be_nil
34
+ image.architecture.must_be_kind_of String
35
+ image.owner_id.wont_be_nil
36
+ image.owner_id.must_be_kind_of String
37
+ end
38
+ end
39
+ end
40
+
41
+ it "should allow retrieval of my own images" do
42
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
43
+ images = client.images( :owner_id=>:self )
44
+ images.wont_be_empty
45
+ images.size.must_equal 1
46
+ images.each do |image|
47
+ image.uri.wont_be_nil
48
+ image.uri.must_be_kind_of String
49
+ image.description.wont_be_nil
50
+ image.description.must_be_kind_of String
51
+ image.architecture.wont_be_nil
52
+ image.architecture.must_be_kind_of String
53
+ image.owner_id.wont_be_nil
54
+ image.owner_id.must_be_kind_of String
55
+ end
56
+ end
57
+ end
58
+
59
+ it "should allow retrieval of a single image by ID" do
60
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
61
+ image = client.image( 'img1' )
62
+ image.wont_be_nil
63
+ image.uri.must_equal API_URL + '/images/img1'
64
+ image.id.must_equal 'img1'
65
+ image.architecture.must_equal 'x86_64'
66
+ end
67
+ end
68
+
69
+ it "should allow retrieval of a single image by URI" do
70
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
71
+ image = client.fetch_image( API_URL + '/images/img1' )
72
+ image.wont_be_nil
73
+ image.uri.must_equal API_URL + '/images/img1'
74
+ image.id.must_equal 'img1'
75
+ image.architecture.must_equal 'x86_64'
76
+ end
77
+ end
78
+
79
+ describe "filtering by architecture" do
80
+ it "return matching images" do
81
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
82
+ images = client.images( :architecture=>'x86_64' )
83
+ images.wont_be_empty
84
+ images.each do |image|
85
+ image.architecture.must_equal 'x86_64'
86
+ end
87
+ images = client.images( :architecture=>'i386' )
88
+ images.wont_be_empty
89
+ images.each do |image|
90
+ image.architecture.must_equal 'i386'
91
+ end
92
+ end
93
+ end
94
+
95
+ it "should return an empty array for no matches" do
96
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
97
+ images = client.images( :architecture=>'8088' )
98
+ images.must_be_empty
99
+ end
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,66 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ describe "Instance States" do
22
+
23
+ it "should allow retrieval of instance-state information" do
24
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
25
+ instance_states = client.instance_states
26
+ instance_states.wont_be_nil
27
+ instance_states.wont_be_empty
28
+
29
+ instance_states[0].name.must_equal 'start'
30
+ instance_states[0].transitions.size.must_equal 1
31
+ instance_states[0].transitions[0].wont_equal :auto
32
+
33
+ instance_states[1].name.must_equal 'pending'
34
+ instance_states[1].transitions.size.must_equal 1
35
+ instance_states[1].transitions[0].wont_equal :auto
36
+
37
+ instance_states[2].name.must_equal 'running'
38
+ instance_states[2].transitions.size.must_equal 2
39
+ includes_transition( instance_states[2].transitions, :reboot, :running ).must_equal true
40
+ includes_transition( instance_states[2].transitions, :stop, :stopped ).must_equal true
41
+ end
42
+ end
43
+
44
+ it "should allow retrieval of a single instance-state blob" do
45
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
46
+ instance_state = client.instance_state( :pending )
47
+ instance_state.wont_be_nil
48
+ instance_state.name.must_equal 'pending'
49
+ instance_state.transitions.size.must_equal 1
50
+ instance_state.transitions[0].wont_equal :auto
51
+
52
+ instance_state = client.instance_state( :running )
53
+ instance_state.name.must_equal 'running'
54
+ instance_state.transitions.size.must_equal 2
55
+ includes_transition( instance_state.transitions, :reboot, :running ).must_equal true
56
+ includes_transition( instance_state.transitions, :stop, :stopped ).must_equal true
57
+ end
58
+ end
59
+
60
+ def includes_transition( transitions, action, to )
61
+ found = transitions.find{|e| e.action.to_s == action.to_s && e.to.to_s == to.to_s }
62
+ ! found.nil?
63
+ end
64
+
65
+
66
+ end
@@ -0,0 +1,203 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ describe "Instances" do
22
+
23
+ it "should allow retrieval of all instances" do
24
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
25
+ instances = client.instances
26
+ instances.wont_be_empty
27
+ instances.each do |instance|
28
+ instance.uri.wont_be_nil
29
+ instance.uri.must_be_kind_of String
30
+ instance.owner_id.wont_be_nil
31
+ instance.owner_id.must_be_kind_of String
32
+ instance.image.wont_be_nil
33
+ instance.image.to_s.must_match /DeltaCloud::API::.*::Image/
34
+ instance.hardware_profile.wont_be_nil
35
+ instance.hardware_profile.must_be_kind_of DeltaCloud::API::Base::HardwareProfile
36
+ instance.state.wont_be_nil
37
+ instance.state.must_be_kind_of String
38
+ instance.public_addresses.wont_be_nil
39
+ instance.public_addresses.wont_be_empty
40
+ instance.public_addresses.must_be_kind_of Array
41
+ instance.private_addresses.wont_be_nil
42
+ instance.private_addresses.wont_be_empty
43
+ instance.private_addresses.must_be_kind_of Array
44
+ end
45
+ end
46
+ end
47
+
48
+ it "should allow navigation from instance to image" do
49
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
50
+ instances = client.instances
51
+ instances.wont_be_empty
52
+ instance = instances.first
53
+ instance.image.wont_be_nil
54
+ instance.image.description.wont_be_nil
55
+ instance.image.description.must_be_kind_of String
56
+ end
57
+ end
58
+
59
+ it "should allow retrieval of a single instance" do
60
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
61
+ instance = client.instance( "inst0" )
62
+ instance.wont_be_nil
63
+ instance.name.wont_be_nil
64
+ instance.name.must_equal 'Mock Instance With Profile Change'
65
+ instance.uri.wont_be_nil
66
+ instance.uri.must_be_kind_of String
67
+ instance.owner_id.must_equal "mockuser"
68
+ instance.public_addresses.first.class.must_equal Hash
69
+ instance.public_addresses.first[:type].must_equal 'hostname'
70
+ instance.public_addresses.first[:address].must_equal 'img1.inst0.public.com'
71
+ instance.image.wont_be_nil
72
+ instance.image.uri.must_equal API_URL + "/images/img1"
73
+ instance.hardware_profile.wont_be_nil
74
+ instance.hardware_profile.wont_be_nil
75
+ instance.hardware_profile.uri.must_equal API_URL + "/hardware_profiles/m1-large"
76
+ instance.hardware_profile.memory.value.must_equal '10240'
77
+ instance.hardware_profile.storage.value.must_equal '850'
78
+ instance.state.must_equal "RUNNING"
79
+ instance.actions.wont_be_nil
80
+ end
81
+ end
82
+
83
+ it "should allow creation of new instances with reasonable defaults" do
84
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
85
+ instance = client.create_instance( 'img1', :name=>'TestInstance', :hardware_profile => 'm1-large' )
86
+ instance.wont_be_nil
87
+ instance.uri.must_match %r{#{API_URL}/instances/inst[0-9]+}
88
+ instance.id.must_match /inst[0-9]+/
89
+ instance.name.must_equal 'TestInstance'
90
+ instance.image.id.must_equal 'img1'
91
+ instance.hardware_profile.id.must_equal 'm1-large'
92
+ instance.realm.id.must_equal 'us'
93
+ end
94
+ end
95
+
96
+ it "should allow creation of new instances with specific realm" do
97
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
98
+ instance = client.create_instance( 'img1', :realm=>'eu', :hardware_profile => 'm1-large' )
99
+ instance.wont_be_nil
100
+ instance.uri.must_match %r{#{API_URL}/instances/inst[0-9]+}
101
+ instance.id.must_match /inst[0-9]+/
102
+ instance.image.id.must_equal 'img1'
103
+ instance.hardware_profile.id.must_equal 'm1-large'
104
+ instance.realm.id.must_equal 'eu'
105
+ end
106
+ end
107
+
108
+ it "should allow creation of new instances with specific hardware profile" do
109
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
110
+ instance = client.create_instance( 'img1',
111
+ :hardware_profile=>'m1-xlarge' )
112
+ instance.wont_be_nil
113
+ instance.uri.must_match %r{#{API_URL}/instances/inst[0-9]+}
114
+ instance.id.must_match /inst[0-9]+/
115
+ instance.image.id.must_equal 'img1'
116
+ instance.hardware_profile.id.must_equal 'm1-xlarge'
117
+ instance.realm.id.must_equal 'us'
118
+ end
119
+ end
120
+
121
+ it "should allow creation of new instances with specific hardware profile overriding memory" do
122
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
123
+ hwp = { :id => 'm1-xlarge', :memory => 32768 }
124
+ instance = client.create_instance( 'img1', :hardware_profile=> hwp )
125
+ instance.wont_be_nil
126
+ instance.uri.must_match %r{#{API_URL}/instances/inst[0-9]+}
127
+ instance.id.must_match /inst[0-9]+/
128
+ instance.image.id.must_equal 'img1'
129
+ instance.hardware_profile.id.must_equal 'm1-xlarge'
130
+ instance.hardware_profile.memory.value.must_equal'12288'
131
+ instance.realm.id.must_equal 'us'
132
+ end
133
+ end
134
+
135
+ it "should allow creation of new instances with specific realm and hardware profile" do
136
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
137
+ instance = client.create_instance( 'img1', :realm=>'eu',
138
+ :hardware_profile=>'m1-xlarge' )
139
+ instance.wont_be_nil
140
+ instance.uri.must_match %r{#{API_URL}/instances/inst[0-9]+}
141
+ instance.id.must_match /inst[0-9]+/
142
+ instance.image.id.must_equal 'img1'
143
+ instance.hardware_profile.id.must_equal 'm1-xlarge'
144
+ instance.realm.id.must_equal 'eu'
145
+ end
146
+ end
147
+
148
+ it "should allow fetching of instances by id" do
149
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
150
+ instance = client.instance( 'inst1' )
151
+ instance.wont_be_nil
152
+ instance.uri.wont_be_nil
153
+ instance.uri.must_be_kind_of String
154
+ end
155
+ end
156
+
157
+ it "should allow fetching of instances by URI" do
158
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
159
+ instance = client.fetch_instance( API_URL + '/instances/inst1' )
160
+ instance.wont_be_nil
161
+ instance.uri.must_equal API_URL + '/instances/inst1'
162
+ instance.id.must_equal 'inst1'
163
+ end
164
+ end
165
+
166
+ describe "performing actions on instances" do
167
+ it "should allow actions that are valid" do
168
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
169
+ instance = client.instance( 'inst1' )
170
+ instance.wont_be_nil
171
+ instance.state.must_equal "RUNNING"
172
+ instance.uri.must_equal API_URL + '/instances/inst1'
173
+ instance.id.must_equal 'inst1'
174
+ instance.stop!
175
+ instance.state.must_equal "STOPPED"
176
+ instance.start!
177
+ instance.state.must_equal "RUNNING"
178
+ end
179
+ end
180
+
181
+ it "should not allow actions that are invalid" do
182
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
183
+ instance = client.instance( 'inst1' )
184
+ instance.wont_be_nil
185
+ unless instance.state.eql?("RUNNING")
186
+ instance.start!
187
+ end
188
+ instance.state.must_equal "RUNNING"
189
+ lambda{instance.start!}.must_raise NoMethodError
190
+ end
191
+ end
192
+
193
+ it "should not throw exception when destroying an instance" do
194
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
195
+ instance = client.create_instance( 'img1',
196
+ :name=>'TestDestroyInstance',
197
+ :hardware_profile => 'm1-xlarge' )
198
+ instance.stop!
199
+ instance.destroy!.must_be_nil
200
+ end
201
+ end
202
+ end
203
+ end
@@ -0,0 +1,81 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ def check_key(the_key, key_name = "")
22
+ the_key.wont_be_nil
23
+ the_key.id.must_be_kind_of String
24
+ the_key.id.must_equal key_name
25
+ the_key.actions.wont_be_nil
26
+ the_key.actions.size.must_equal 1
27
+ the_key.actions.first[0].must_equal "destroy"
28
+ the_key.actions.first[1].must_equal "#{API_URL}/keys/#{key_name}"
29
+ the_key.fingerprint.wont_be_nil
30
+ the_key.fingerprint.must_be_kind_of String
31
+ the_key.pem.wont_be_nil
32
+ the_key.pem.must_be_kind_of String
33
+ end
34
+
35
+ def create_key_if_necessary(client, key_name)
36
+ the_key = client.key(key_name)
37
+ unless the_key
38
+ client.create_key()
39
+ end
40
+ end
41
+
42
+
43
+ describe "Keys" do
44
+ it "should allow retrieval of all keys" do
45
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
46
+ client.keys.wont_be_empty
47
+ end
48
+ end
49
+ end
50
+
51
+ describe "Operations on Keys" do
52
+
53
+ it "should allow successful creation and destroy of a new key" do
54
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
55
+ new_key = client.create_key({:name => "my_new_key"})
56
+ check_key(new_key, "my_new_key")
57
+ the_key = client.key('my_new_key')
58
+ the_key.destroy!.must_be_nil
59
+ end
60
+ end
61
+
62
+ it "should allow retrieval of an existing named key" do
63
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
64
+ key_name = "test-key"
65
+ create_key_if_necessary(client, key_name)
66
+ the_key = client.key(key_name)
67
+ check_key(the_key, key_name)
68
+ end
69
+ end
70
+
71
+ it "should raise error if you create a key with the same name as an existing key" do
72
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
73
+ name = "test-key"
74
+ create_key_if_necessary(client, name)
75
+ lambda{
76
+ client.create_key({:name => name})
77
+ }.must_raise DeltaCloud::HTTPError::Forbidden
78
+ end
79
+ end
80
+
81
+ end
@@ -0,0 +1,64 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ describe "Realms" do
22
+
23
+ before do
24
+ @client = DeltaCloud.new(API_NAME, API_PASSWORD, API_URL)
25
+ end
26
+
27
+ it "should allow retrieval of all realms" do
28
+ realms = @client.realms
29
+ realms.wont_be_empty
30
+ realms.each do |realm|
31
+ realm.uri.wont_be_nil
32
+ realm.uri.must_be_kind_of String
33
+ realm.id.wont_be_nil
34
+ realm.id.must_be_kind_of String
35
+ realm.name.wont_be_nil
36
+ realm.name.must_be_kind_of String
37
+ end
38
+ end
39
+
40
+
41
+ it "should allow fetching a realm by id" do
42
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
43
+ realm = client.realm( 'us' )
44
+ realm.wont_be_nil
45
+ realm.id.must_equal 'us'
46
+ realm.name.must_equal 'United States'
47
+ realm.state.must_equal 'AVAILABLE'
48
+ realm = client.realm( 'eu' )
49
+ realm.wont_be_nil
50
+ realm.id.must_equal 'eu'
51
+ realm.name.must_equal 'Europe'
52
+ realm.state.must_equal 'AVAILABLE'
53
+ end
54
+ end
55
+
56
+ it "should allow fetching a realm by URI" do
57
+ DeltaCloud.new( API_NAME, API_PASSWORD, API_URL ) do |client|
58
+ realm = client.fetch_realm( API_URL + '/realms/us' )
59
+ realm.wont_be_nil
60
+ realm.id.must_equal 'us'
61
+ end
62
+ end
63
+
64
+ end
@@ -0,0 +1,76 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ describe "Storage Snapshot" do
22
+
23
+ it "allow retrieval of all storage volumes owned by the current user" do
24
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
25
+ client.connect do |c|
26
+ storage_snapshots = c.storage_snapshots
27
+ storage_snapshots.wont_be_nil
28
+ storage_snapshots.wont_be_empty
29
+ ids = storage_snapshots.collect{|e| e.id}
30
+ ids.size.must_equal 3
31
+ ids.must_include 'snap2'
32
+ ids.must_include 'snap3'
33
+ end
34
+ end
35
+
36
+ it "should allow fetching of storage volume by id" do
37
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
38
+ client.connect do |c|
39
+ storage_snapshot = c.storage_snapshot( 'snap2' )
40
+ storage_snapshot.wont_be_nil
41
+ storage_snapshot.id.must_equal 'snap2'
42
+ storage_snapshot.storage_volume.capacity.must_equal 1.0
43
+ storage_snapshot.storage_volume.id.must_equal 'vol2'
44
+ end
45
+ end
46
+
47
+ it "should allow fetching of storage volume by URI" do
48
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
49
+ client.connect do |c|
50
+ storage_snapshot = c.fetch_storage_snapshot( API_URL + '/storage_snapshots/snap2' )
51
+ storage_snapshot.wont_be_nil
52
+ storage_snapshot.id.must_equal 'snap2'
53
+ storage_snapshot.storage_volume.capacity.must_equal 1.0
54
+ storage_snapshot.storage_volume.id.must_equal 'vol2'
55
+ end
56
+ end
57
+
58
+ it "should return nil for unknown storage volume by ID" do
59
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
60
+ lambda {
61
+ client.connect do |c|
62
+ c.storage_snapshot( "bogus" )
63
+ end
64
+ }.must_raise DeltaCloud::HTTPError::NotFound
65
+ end
66
+
67
+ it "should return nil for unknown storage volume by URI" do
68
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
69
+ lambda {
70
+ client.connect do |c|
71
+ c.fetch_storage_snapshot( API_URL + '/storage_snapshots/bogus' )
72
+ end
73
+ }.must_raise DeltaCloud::HTTPError::NotFound
74
+ end
75
+
76
+ end
@@ -0,0 +1,86 @@
1
+ # Licensed to the Apache Software Foundation (ASF) under one or more
2
+ # contributor license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright ownership. The
4
+ # ASF licenses this file to you under the Apache License, Version 2.0 (the
5
+ # "License"); you may not use this file except in compliance with the
6
+ # License. You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
+ # License for the specific language governing permissions and limitations
14
+ # under the License.
15
+
16
+ require 'rubygems'
17
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
18
+
19
+ require_relative './test_helper.rb'
20
+
21
+ describe "Storage Volumes" do
22
+
23
+ it "allow retrieval of all storage volumes owned by the current user" do
24
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
25
+ client.connect do |c|
26
+ storage_volumes = c.storage_volumes
27
+ storage_volumes.wont_be_nil
28
+ storage_volumes.wont_be_nil
29
+ ids = storage_volumes.collect{|e| e.id}
30
+ ids.size.must_equal 3
31
+ ids.must_include 'vol1'
32
+ ids.must_include 'vol3'
33
+ end
34
+ end
35
+
36
+ it "should allow fetching of storage volume by id" do
37
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
38
+ client.connect do |c|
39
+ storage_volume = c.storage_volume( 'vol3' )
40
+ storage_volume.id.must_equal 'vol3'
41
+ storage_volume.uri.must_equal API_URL + '/storage_volumes/vol3'
42
+ storage_volume.capacity.must_equal 1.0
43
+ storage_volume.device.must_equal '/dev/sda1'
44
+ storage_volume.instance.wont_be_nil
45
+ storage_volume.instance.id.must_equal 'inst1'
46
+ ip = storage_volume.instance
47
+ ip.hardware_profile.architecture.value.must_equal 'i386'
48
+ end
49
+ end
50
+
51
+ it "should allow fetching of storage volume by URI" do
52
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
53
+ client.connect do |c|
54
+ storage_volume = c.fetch_storage_volume( API_URL + '/storage_volumes/vol3' )
55
+ storage_volume.wont_be_nil
56
+ storage_volume.id.must_equal 'vol3'
57
+ storage_volume.uri.must_equal API_URL + '/storage_volumes/vol3'
58
+ storage_volume.capacity.must_equal 1.0
59
+ storage_volume.device.must_equal '/dev/sda1'
60
+ storage_volume.instance.wont_be_nil
61
+ storage_volume.instance.id.must_equal 'inst1'
62
+ ip = storage_volume.instance
63
+ ip.hardware_profile.architecture.value.must_equal 'i386'
64
+ end
65
+ end
66
+
67
+ it "should raise exception for unknown storage volume by ID" do
68
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
69
+ lambda {
70
+ client.connect do |c|
71
+ c.storage_volume( 'bogus' )
72
+ end
73
+ }.must_raise DeltaCloud::HTTPError::NotFound
74
+ end
75
+
76
+ it "should raise exception for unknown storage volume by URI" do
77
+ client = DeltaCloud.new( API_NAME, API_PASSWORD, API_URL )
78
+ lambda {
79
+ client.connect do |c|
80
+ client.fetch_storage_volume( API_URL + '/storage_volumes/bogus' )
81
+ end
82
+ }.must_raise DeltaCloud::HTTPError::NotFound
83
+ end
84
+
85
+
86
+ end
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ require 'require_relative' if RUBY_VERSION =~ /^1\.8/
3
+ require 'minitest/autorun'
4
+
5
+ require_relative '../lib/deltacloud.rb'
6
+
7
+ # Configuration:
8
+
9
+ API_HOST = 'localhost'
10
+ API_PORT = '3001'
11
+ API_PATH = '/api'
12
+
13
+ API_NAME = 'mockuser'
14
+ API_PASSWORD = 'mockpassword'
15
+
16
+ API_URL = "http://#{API_HOST}:#{API_PORT}#{API_PATH}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deltacloud-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-12 00:00:00.000000000 Z
12
+ date: 2013-02-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -76,6 +76,19 @@ files:
76
76
  - lib/instance_state.rb
77
77
  - lib/client_bucket_methods.rb
78
78
  - lib/errors.rb
79
+ - tests/realms_test.rb
80
+ - tests/content_negotiation_test.rb
81
+ - tests/images_test.rb
82
+ - tests/instances_test.rb
83
+ - tests/errors_test.rb
84
+ - tests/storage_snapshot_test.rb
85
+ - tests/storage_volume_test.rb
86
+ - tests/keys_test.rb
87
+ - tests/hardware_profiles_test.rb
88
+ - tests/buckets_test.rb
89
+ - tests/instance_states_test.rb
90
+ - tests/client_test.rb
91
+ - tests/test_helper.rb
79
92
  - LICENSE
80
93
  - NOTICE
81
94
  homepage: http://www.deltacloud.org
@@ -102,4 +115,17 @@ rubygems_version: 1.8.23
102
115
  signing_key:
103
116
  specification_version: 3
104
117
  summary: Deltacloud REST Client
105
- test_files: []
118
+ test_files:
119
+ - tests/realms_test.rb
120
+ - tests/content_negotiation_test.rb
121
+ - tests/images_test.rb
122
+ - tests/instances_test.rb
123
+ - tests/errors_test.rb
124
+ - tests/storage_snapshot_test.rb
125
+ - tests/storage_volume_test.rb
126
+ - tests/keys_test.rb
127
+ - tests/hardware_profiles_test.rb
128
+ - tests/buckets_test.rb
129
+ - tests/instance_states_test.rb
130
+ - tests/client_test.rb
131
+ - tests/test_helper.rb