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.
@@ -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