occi 1.0.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.
- data/.rvmrc +1 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +41 -0
- data/LICENSE +4 -0
- data/README.md +28 -0
- data/Rakefile +25 -0
- data/VERSION +1 -0
- data/lib/occi.rb +1 -0
- data/lib/occi/client.rb +35 -0
- data/lib/occi/entity.rb +63 -0
- data/lib/occi/pool.rb +52 -0
- data/test/fixtures/cassettes/compute_delete.yml +22 -0
- data/test/fixtures/cassettes/compute_get.yml +109 -0
- data/test/fixtures/cassettes/compute_put.yml +35 -0
- data/test/fixtures/cassettes/computes_get.yml +28 -0
- data/test/fixtures/cassettes/computes_post.yml +45 -0
- data/test/fixtures/cassettes/network_delete.yml +22 -0
- data/test/fixtures/cassettes/network_get.yml +109 -0
- data/test/fixtures/cassettes/networks_get.yml +28 -0
- data/test/fixtures/cassettes/networks_post.yml +37 -0
- data/test/fixtures/cassettes/storage_delete.yml +22 -0
- data/test/fixtures/cassettes/storage_get.yml +109 -0
- data/test/fixtures/cassettes/storages_get.yml +28 -0
- data/test/fixtures/cassettes/storages_post.yml +50 -0
- data/test/lib/occi/test_entity.rb +54 -0
- data/test/lib/occi/test_pool.rb +99 -0
- data/test/support.rb +47 -0
- metadata +208 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
require "support"
|
2
|
+
|
3
|
+
describe Occi::Entity do
|
4
|
+
Magic_Ids = [
|
5
|
+
cassette_for("computes_post"),
|
6
|
+
cassette_for("networks_post"),
|
7
|
+
cassette_for("storages_post")
|
8
|
+
].map { |ele| ele.xpath('//ID').text }
|
9
|
+
|
10
|
+
Occi::Entity::Gets.each_with_index do |method, i|
|
11
|
+
describe "#{method}/#{Magic_Ids[i]}" do
|
12
|
+
|
13
|
+
it "returns a parsed XML document" do
|
14
|
+
VCR.use_cassette method do
|
15
|
+
response = Connection.send method, Magic_Ids[i]
|
16
|
+
|
17
|
+
is_okay response
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
Occi::Entity::Deletes.each_with_index do |method, i|
|
24
|
+
describe "#{method}/#{Magic_Ids[i]}" do
|
25
|
+
|
26
|
+
it "returns a parsed XML document" do
|
27
|
+
VCR.use_cassette method do
|
28
|
+
response = Connection.send method, Magic_Ids[i]
|
29
|
+
|
30
|
+
is_no_content response
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Magic_Vm = "134"
|
37
|
+
describe "#compute_put/#{Magic_Vm}" do
|
38
|
+
before do
|
39
|
+
@builder = Nokogiri::XML::Builder.new do
|
40
|
+
COMPUTE {
|
41
|
+
STATE "shutdown"
|
42
|
+
}
|
43
|
+
end.to_xml
|
44
|
+
end
|
45
|
+
|
46
|
+
it "returns a parsed XML document" do
|
47
|
+
VCR.use_cassette "compute_put" do
|
48
|
+
response = Connection.compute_put Magic_Vm, :body => @builder
|
49
|
+
|
50
|
+
is_accepted response
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require "support"
|
2
|
+
|
3
|
+
describe Occi::Pool do
|
4
|
+
Occi::Pool::Gets.each do |method|
|
5
|
+
describe "#{method}" do
|
6
|
+
it "returns a parsed XML document" do
|
7
|
+
VCR.use_cassette method do
|
8
|
+
response = Connection.send method
|
9
|
+
|
10
|
+
is_okay response
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#computes_post" do
|
17
|
+
before do
|
18
|
+
##
|
19
|
+
# Adding NETWORK_NAME to the CONTEXT should be reworked.
|
20
|
+
# We want the vm to divine it's IP from its MAC Address on
|
21
|
+
# boot. Then we no longer need the coupling in the XML.
|
22
|
+
# CLOUD-35 open to address this.
|
23
|
+
|
24
|
+
@builder = Nokogiri::XML::Builder.new do
|
25
|
+
COMPUTE {
|
26
|
+
NAME "Test Framework"
|
27
|
+
INSTANCE_TYPE "small"
|
28
|
+
DISK {
|
29
|
+
STORAGE(:href => "http://www.opennebula.org/storage/11")
|
30
|
+
}
|
31
|
+
NIC {
|
32
|
+
NETWORK(:href => "http://www.opennebula.org/network/14")
|
33
|
+
}
|
34
|
+
CONTEXT {
|
35
|
+
NETWORK_NAME "10.3.172.0"
|
36
|
+
}
|
37
|
+
}
|
38
|
+
end.to_xml
|
39
|
+
end
|
40
|
+
|
41
|
+
it "returns a parsed XML document" do
|
42
|
+
VCR.use_cassette "computes_post" do
|
43
|
+
response = Connection.computes_post :body => @builder
|
44
|
+
|
45
|
+
is_created response
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#networks_post" do
|
51
|
+
before do
|
52
|
+
@builder = Nokogiri::XML::Builder.new do
|
53
|
+
NETWORK {
|
54
|
+
NAME "Test Framework"
|
55
|
+
ADDRESS "192.168.1.1"
|
56
|
+
SIZE "200"
|
57
|
+
}
|
58
|
+
end.to_xml
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns a parsed XML document" do
|
62
|
+
VCR.use_cassette "networks_post" do
|
63
|
+
response = Connection.networks_post :body => @builder
|
64
|
+
|
65
|
+
is_created response
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "#storages_post" do
|
71
|
+
before do
|
72
|
+
@builder = Nokogiri::XML::Builder.new do
|
73
|
+
STORAGE {
|
74
|
+
NAME "Test Framework"
|
75
|
+
DESCRIPTION "Test Framework Image."
|
76
|
+
TYPE "OS"
|
77
|
+
### Not exactly sure what URL does.
|
78
|
+
URL "file:///dev/null"
|
79
|
+
}
|
80
|
+
end.to_xml
|
81
|
+
|
82
|
+
@upload = {
|
83
|
+
:parts => {
|
84
|
+
:file => "/dev/null",
|
85
|
+
:occixml => @builder,
|
86
|
+
},
|
87
|
+
:content_type => "application/octet-stream"
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
it "returns a parsed XML document" do
|
92
|
+
VCR.use_cassette "storages_post" do
|
93
|
+
response = Connection.storages_post :upload => @upload
|
94
|
+
|
95
|
+
is_created response
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
data/test/support.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
Bundler.setup :default, :test
|
2
|
+
|
3
|
+
%w(minitest/spec nokogiri vcr webmock occi).each { |r| require r }
|
4
|
+
|
5
|
+
class MiniTest::Unit::TestCase
|
6
|
+
Connection = Occi::Client.new(
|
7
|
+
:host => "one.example.com",
|
8
|
+
:user => ENV['ONE_USER'],
|
9
|
+
:password => ENV['ONE_PASSWORD'],
|
10
|
+
)
|
11
|
+
|
12
|
+
def okay response, code
|
13
|
+
response.body.must_be_kind_of Nokogiri::XML::Document
|
14
|
+
response.code.must_equal code
|
15
|
+
end
|
16
|
+
|
17
|
+
def is_okay response
|
18
|
+
okay response, "200"
|
19
|
+
end
|
20
|
+
|
21
|
+
def is_accepted response
|
22
|
+
okay response, "202"
|
23
|
+
end
|
24
|
+
|
25
|
+
def is_no_content response
|
26
|
+
okay response, "204"
|
27
|
+
end
|
28
|
+
|
29
|
+
def is_created response
|
30
|
+
okay response, "201"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def cassette_for cassette
|
35
|
+
c = VCR::Cassette.new(cassette).send :recorded_interactions
|
36
|
+
|
37
|
+
Nokogiri::XML::Document.parse c.first.response.body
|
38
|
+
end
|
39
|
+
|
40
|
+
WebMock.disable_net_connect! :allow => "one.example.com"
|
41
|
+
VCR.config do |c|
|
42
|
+
c.stub_with :webmock
|
43
|
+
c.cassette_library_dir = "test/fixtures/cassettes"
|
44
|
+
c.default_cassette_options = { :record => :new_episodes }
|
45
|
+
end
|
46
|
+
|
47
|
+
MiniTest::Unit.autorun
|
metadata
ADDED
@@ -0,0 +1,208 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: occi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 1.0.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- retr0h
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-12-23 00:00:00 -08:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: hugs
|
22
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
prerelease: false
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: multipart-post
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 1
|
42
|
+
- 0
|
43
|
+
- 1
|
44
|
+
version: 1.0.1
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: nokogiri
|
50
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 1
|
57
|
+
- 4
|
58
|
+
- 4
|
59
|
+
version: 1.4.4
|
60
|
+
type: :runtime
|
61
|
+
prerelease: false
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rake
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
version: "0"
|
73
|
+
type: :development
|
74
|
+
prerelease: false
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: jeweler
|
78
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ~>
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
segments:
|
84
|
+
- 1
|
85
|
+
- 5
|
86
|
+
- 1
|
87
|
+
version: 1.5.1
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *id005
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: webmock
|
93
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
segments:
|
99
|
+
- 1
|
100
|
+
- 6
|
101
|
+
- 1
|
102
|
+
version: 1.6.1
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: *id006
|
106
|
+
- !ruby/object:Gem::Dependency
|
107
|
+
name: vcr
|
108
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ~>
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
segments:
|
114
|
+
- 1
|
115
|
+
- 4
|
116
|
+
- 0
|
117
|
+
version: 1.4.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: *id007
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: minitest
|
123
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
125
|
+
requirements:
|
126
|
+
- - ~>
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
segments:
|
129
|
+
- 2
|
130
|
+
- 0
|
131
|
+
- 0
|
132
|
+
version: 2.0.0
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: *id008
|
136
|
+
description:
|
137
|
+
email: john@dewey.ws
|
138
|
+
executables: []
|
139
|
+
|
140
|
+
extensions: []
|
141
|
+
|
142
|
+
extra_rdoc_files:
|
143
|
+
- LICENSE
|
144
|
+
- README.md
|
145
|
+
files:
|
146
|
+
- .rvmrc
|
147
|
+
- Gemfile
|
148
|
+
- Gemfile.lock
|
149
|
+
- LICENSE
|
150
|
+
- README.md
|
151
|
+
- Rakefile
|
152
|
+
- VERSION
|
153
|
+
- lib/occi.rb
|
154
|
+
- lib/occi/client.rb
|
155
|
+
- lib/occi/entity.rb
|
156
|
+
- lib/occi/pool.rb
|
157
|
+
- test/fixtures/cassettes/compute_delete.yml
|
158
|
+
- test/fixtures/cassettes/compute_get.yml
|
159
|
+
- test/fixtures/cassettes/compute_put.yml
|
160
|
+
- test/fixtures/cassettes/computes_get.yml
|
161
|
+
- test/fixtures/cassettes/computes_post.yml
|
162
|
+
- test/fixtures/cassettes/network_delete.yml
|
163
|
+
- test/fixtures/cassettes/network_get.yml
|
164
|
+
- test/fixtures/cassettes/networks_get.yml
|
165
|
+
- test/fixtures/cassettes/networks_post.yml
|
166
|
+
- test/fixtures/cassettes/storage_delete.yml
|
167
|
+
- test/fixtures/cassettes/storage_get.yml
|
168
|
+
- test/fixtures/cassettes/storages_get.yml
|
169
|
+
- test/fixtures/cassettes/storages_post.yml
|
170
|
+
- test/lib/occi/test_entity.rb
|
171
|
+
- test/lib/occi/test_pool.rb
|
172
|
+
- test/support.rb
|
173
|
+
has_rdoc: true
|
174
|
+
homepage: http://github.com/retr0h/occi
|
175
|
+
licenses: []
|
176
|
+
|
177
|
+
post_install_message:
|
178
|
+
rdoc_options: []
|
179
|
+
|
180
|
+
require_paths:
|
181
|
+
- lib
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
183
|
+
none: false
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
segments:
|
188
|
+
- 0
|
189
|
+
version: "0"
|
190
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
|
+
none: false
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
segments:
|
196
|
+
- 0
|
197
|
+
version: "0"
|
198
|
+
requirements: []
|
199
|
+
|
200
|
+
rubyforge_project:
|
201
|
+
rubygems_version: 1.3.7
|
202
|
+
signing_key:
|
203
|
+
specification_version: 3
|
204
|
+
summary: Ruby bindings to Open Cloud Computing Interface (OCCI).
|
205
|
+
test_files:
|
206
|
+
- test/lib/occi/test_entity.rb
|
207
|
+
- test/lib/occi/test_pool.rb
|
208
|
+
- test/support.rb
|