occi 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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