openstack-compute 1.0.0 → 1.0.1
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/README.rdoc +6 -4
- data/VERSION +1 -1
- data/lib/openstack/compute.rb +1 -1
- data/lib/openstack/compute/authentication.rb +66 -13
- data/lib/openstack/compute/connection.rb +20 -15
- data/test/authentication_test.rb +36 -0
- data/test/connection_test.rb +39 -0
- data/test/exception_test.rb +49 -0
- data/test/servers_test.rb +123 -0
- data/test/test_helper.rb +23 -0
- metadata +15 -6
data/README.rdoc
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
= Ruby OpenStack
|
1
|
+
= Ruby OpenStack Compute
|
2
2
|
|
3
3
|
== Description
|
4
4
|
|
5
|
-
Ruby Openstack Compute binding.
|
5
|
+
Ruby Openstack Compute binding for the v1.0 OSAPI.
|
6
|
+
|
7
|
+
Currently supports both v1.0 and v2.0 (keystone) auth.
|
6
8
|
|
7
9
|
== Examples
|
8
10
|
|
@@ -10,7 +12,7 @@ See the class definitions for documentation on specific methods and operations.
|
|
10
12
|
|
11
13
|
require 'openstack/compute'
|
12
14
|
|
13
|
-
cs = OpenStack::Compute::Connection.new(:username => USERNAME, :api_key => API_KEY, :
|
15
|
+
cs = OpenStack::Compute::Connection.new(:username => USERNAME, :api_key => API_KEY, :auth_url => API_URL)
|
14
16
|
|
15
17
|
# Get a listing of all current servers
|
16
18
|
>> cs.servers
|
@@ -63,7 +65,7 @@ See the class definitions for documentation on specific methods and operations.
|
|
63
65
|
|
64
66
|
== Authors
|
65
67
|
|
66
|
-
By Dan Prince <dan.prince@rackspace.com
|
68
|
+
By Dan Prince <dan.prince@rackspace.com>, Naveed Massjouni <naveedm9@gmail.com>
|
67
69
|
|
68
70
|
Based on the Rackspace Cloud Servers Ruby API.
|
69
71
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.1
|
data/lib/openstack/compute.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
# To begin reviewing the available methods and examples, view the README.rdoc file, or begin by looking at documentation for the OpenStack::Compute::Connection class.
|
10
10
|
#
|
11
11
|
# Example:
|
12
|
-
# OpenStack::Compute::Connection.new(:username => USERNAME, :api_key => API_KEY, :
|
12
|
+
# OpenStack::Compute::Connection.new(:username => USERNAME, :api_key => API_KEY, :auth_url => API_URL) method.
|
13
13
|
module OpenStack
|
14
14
|
module Compute
|
15
15
|
|
@@ -1,19 +1,70 @@
|
|
1
1
|
module OpenStack
|
2
2
|
module Compute
|
3
|
+
|
3
4
|
class Authentication
|
5
|
+
|
6
|
+
# Performs an authentication to the OpenStack auth server.
|
7
|
+
# If it succeeds, it sets the svrmgmthost, svrmgtpath, svrmgmtport,
|
8
|
+
# svrmgmtscheme, authtoken, and authok variables on the connection.
|
9
|
+
# If it fails, it raises an exception.
|
10
|
+
def self.init(conn)
|
11
|
+
if conn.auth_path =~ /.*v2.0\/tokens$/
|
12
|
+
AuthV20.new(conn)
|
13
|
+
else
|
14
|
+
AuthV10.new(conn)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
class AuthV20
|
22
|
+
|
23
|
+
def initialize(connection)
|
24
|
+
begin
|
25
|
+
server = Net::HTTP::Proxy(connection.proxy_host, connection.proxy_port).new(connection.auth_host, connection.auth_port)
|
26
|
+
if connection.auth_scheme == "https"
|
27
|
+
server.use_ssl = true
|
28
|
+
server.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
29
|
+
end
|
30
|
+
server.start
|
31
|
+
rescue
|
32
|
+
raise OpenStack::Compute::Exception::Connection, "Unable to connect to #{server}"
|
33
|
+
end
|
34
|
+
|
35
|
+
auth_data = JSON.generate({ "passwordCredentials" => { "username" => connection.authuser, "password" => connection.authkey }})
|
36
|
+
response = server.post(connection.auth_path, auth_data, {'Content-Type' => 'application/json'})
|
37
|
+
if (response.code =~ /^20./)
|
38
|
+
resp_data=JSON.parse(response.body)
|
39
|
+
connection.authtoken = resp_data['auth']['token']['id']
|
40
|
+
if resp_data['auth']['serviceCatalog'] and resp_data['auth']['serviceCatalog'][connection.service_name] and resp_data['auth']['serviceCatalog'][connection.service_name][0] then
|
41
|
+
uri = URI.parse(resp_data['auth']['serviceCatalog'][connection.service_name][0]['publicURL'])
|
42
|
+
connection.svrmgmthost = uri.host
|
43
|
+
connection.svrmgmtpath = uri.path
|
44
|
+
# Force the path into the v1.0 URL space
|
45
|
+
connection.svrmgmtpath.sub!(/\/.*\/?/, '/v1.0/')
|
46
|
+
connection.svrmgmtport = uri.port
|
47
|
+
connection.svrmgmtscheme = uri.scheme
|
48
|
+
connection.authok = true
|
49
|
+
else
|
50
|
+
connection.authok = false
|
51
|
+
end
|
52
|
+
else
|
53
|
+
connection.authtoken = false
|
54
|
+
raise OpenStack::Compute::Exception::Authentication, "Authentication failed with response code #{response.code}"
|
55
|
+
end
|
56
|
+
server.finish
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class AuthV10
|
4
61
|
|
5
|
-
# Performs an authentication to the OpenStack authorization servers. Opens a new HTTP connection to the API server,
|
6
|
-
# sends the credentials, and looks for a successful authentication. If it succeeds, it sets the svrmgmthost,
|
7
|
-
# svrmgtpath, svrmgmtport, svrmgmtscheme, authtoken, and authok variables on the connection. If it fails, it raises
|
8
|
-
# an exception.
|
9
|
-
#
|
10
|
-
# Should probably never be called directly.
|
11
62
|
def initialize(connection)
|
12
63
|
path = '/v1.0'
|
13
64
|
hdrhash = { "X-Auth-User" => connection.authuser, "X-Auth-Key" => connection.authkey }
|
14
65
|
begin
|
15
|
-
server = Net::HTTP::Proxy(connection.proxy_host, connection.proxy_port).new(connection.
|
16
|
-
if connection.
|
66
|
+
server = Net::HTTP::Proxy(connection.proxy_host, connection.proxy_port).new(connection.auth_host, connection.auth_port)
|
67
|
+
if connection.auth_scheme == "https"
|
17
68
|
server.use_ssl = true
|
18
69
|
server.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
19
70
|
end
|
@@ -24,12 +75,13 @@ module Compute
|
|
24
75
|
response = server.get(path,hdrhash)
|
25
76
|
if (response.code =~ /^20./)
|
26
77
|
connection.authtoken = response["x-auth-token"]
|
27
|
-
|
28
|
-
connection.
|
78
|
+
uri = URI.parse(response["x-server-management-url"])
|
79
|
+
connection.svrmgmthost = uri.host
|
80
|
+
connection.svrmgmtpath = uri.path
|
29
81
|
# Force the path into the v1.0 URL space
|
30
|
-
connection.svrmgmtpath.sub!(
|
31
|
-
connection.svrmgmtport =
|
32
|
-
connection.svrmgmtscheme =
|
82
|
+
connection.svrmgmtpath.sub!(/\/.*\/?/, '/v1.0/')
|
83
|
+
connection.svrmgmtport = uri.port
|
84
|
+
connection.svrmgmtscheme = uri.scheme
|
33
85
|
connection.authok = true
|
34
86
|
else
|
35
87
|
connection.authtoken = false
|
@@ -38,5 +90,6 @@ module Compute
|
|
38
90
|
server.finish
|
39
91
|
end
|
40
92
|
end
|
93
|
+
|
41
94
|
end
|
42
95
|
end
|
@@ -10,9 +10,11 @@ module Compute
|
|
10
10
|
attr_accessor :svrmgmtpath
|
11
11
|
attr_accessor :svrmgmtport
|
12
12
|
attr_accessor :svrmgmtscheme
|
13
|
-
attr_reader :
|
14
|
-
attr_reader :
|
15
|
-
attr_reader :
|
13
|
+
attr_reader :auth_host
|
14
|
+
attr_reader :auth_port
|
15
|
+
attr_reader :auth_scheme
|
16
|
+
attr_reader :auth_path
|
17
|
+
attr_accessor :service_name
|
16
18
|
attr_reader :proxy_host
|
17
19
|
attr_reader :proxy_port
|
18
20
|
|
@@ -22,34 +24,37 @@ module Compute
|
|
22
24
|
#
|
23
25
|
# :username - Your Openstack username *required*
|
24
26
|
# :api_key - Your Openstack API key *required*
|
25
|
-
# :
|
27
|
+
# :auth_url - Configurable auth_url endpoint.
|
28
|
+
# :service_name - (Optional for v2.0 auth only). The name of the compute service to use. Defaults to 'nova'.
|
26
29
|
# :retry_auth - Whether to retry if your auth token expires (defaults to true)
|
27
30
|
# :proxy_host - If you need to connect through a proxy, supply the hostname here
|
28
31
|
# :proxy_port - If you need to connect through a proxy, supply the port here
|
29
32
|
#
|
30
|
-
# cf = OpenStack::Compute::Connection.new(:username => 'USERNAME', :api_key => 'API_KEY', :
|
33
|
+
# cf = OpenStack::Compute::Connection.new(:username => 'USERNAME', :api_key => 'API_KEY', :auth_url => 'AUTH_URL')
|
31
34
|
def initialize(options = {:retry_auth => true})
|
32
35
|
@authuser = options[:username] || (raise Exception::MissingArgument, "Must supply a :username")
|
33
36
|
@authkey = options[:api_key] || (raise Exception::MissingArgument, "Must supply an :api_key")
|
34
|
-
@
|
37
|
+
@auth_url = options[:auth_url] || (raise Exception::MissingArgument, "Must supply an :auth_url")
|
38
|
+
@service_name = options[:service_name] || "nova"
|
35
39
|
|
36
|
-
|
40
|
+
auth_uri=nil
|
37
41
|
begin
|
38
|
-
|
42
|
+
auth_uri=URI.parse(@auth_url)
|
39
43
|
rescue Exception => e
|
40
|
-
raise Exception::InvalidArgument, "Invalid :
|
44
|
+
raise Exception::InvalidArgument, "Invalid :auth_url parameter: #{e.message}"
|
41
45
|
end
|
42
|
-
raise Exception::InvalidArgument, "Invalid :
|
43
|
-
@
|
44
|
-
@
|
45
|
-
@
|
46
|
+
raise Exception::InvalidArgument, "Invalid :auth_url parameter." if auth_uri.nil? or auth_uri.host.nil?
|
47
|
+
@auth_host = auth_uri.host
|
48
|
+
@auth_port = auth_uri.port
|
49
|
+
@auth_scheme = auth_uri.scheme
|
50
|
+
@auth_path = auth_uri.path
|
46
51
|
|
47
52
|
@retry_auth = options[:retry_auth]
|
48
53
|
@proxy_host = options[:proxy_host]
|
49
54
|
@proxy_port = options[:proxy_port]
|
50
55
|
@authok = false
|
51
56
|
@http = {}
|
52
|
-
OpenStack::Compute::Authentication.
|
57
|
+
OpenStack::Compute::Authentication.init(self)
|
53
58
|
end
|
54
59
|
|
55
60
|
# Returns true if the authentication was successful and returns false otherwise.
|
@@ -79,7 +84,7 @@ module Compute
|
|
79
84
|
retry
|
80
85
|
rescue OpenStack::Compute::Exception::ExpiredAuthToken
|
81
86
|
raise OpenStack::Compute::Exception::Connection, "Authentication token expired and you have requested not to retry" if @retry_auth == false
|
82
|
-
OpenStack::Compute::Authentication.
|
87
|
+
OpenStack::Compute::Authentication.init(self)
|
83
88
|
retry
|
84
89
|
end
|
85
90
|
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class AuthenticationTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_good_authentication
|
6
|
+
response = {'x-server-management-url' => 'http://server-manage.example.com/path', 'x-auth-token' => 'dummy_token'}
|
7
|
+
response.stubs(:code).returns('204')
|
8
|
+
server = mock(:use_ssl= => true, :verify_mode= => true, :start => true, :finish => true)
|
9
|
+
server.stubs(:get).returns(response)
|
10
|
+
Net::HTTP.stubs(:new).returns(server)
|
11
|
+
connection = stub(:authuser => 'bad_user', :authkey => 'bad_key', :auth_host => "a.b.c", :auth_port => "443", :auth_scheme => "https", :auth_path => "/v1.0", :authok= => true, :authtoken= => true, :svrmgmthost= => "", :svrmgmtpath= => "", :svrmgmtpath => "", :svrmgmtport= => "", :svrmgmtscheme= => "", :proxy_host => nil, :proxy_port => nil)
|
12
|
+
result = OpenStack::Compute::Authentication.init(connection)
|
13
|
+
assert_equal result.class, OpenStack::Compute::AuthV10
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_bad_authentication
|
17
|
+
response = mock()
|
18
|
+
response.stubs(:code).returns('499')
|
19
|
+
server = mock(:use_ssl= => true, :verify_mode= => true, :start => true)
|
20
|
+
server.stubs(:get).returns(response)
|
21
|
+
Net::HTTP.stubs(:new).returns(server)
|
22
|
+
connection = stub(:authuser => 'bad_user', :authkey => 'bad_key', :auth_host => "a.b.c", :auth_port => "443", :auth_scheme => "https", :auth_path => "/v1.0", :authok= => true, :authtoken= => true, :proxy_host => nil, :proxy_port => nil)
|
23
|
+
assert_raises(OpenStack::Compute::Exception::Authentication) do
|
24
|
+
result = OpenStack::Compute::Authentication.init(connection)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_bad_hostname
|
29
|
+
Net::HTTP.stubs(:new).raises(OpenStack::Compute::Exception::Connection)
|
30
|
+
connection = stub(:authuser => 'bad_user', :authkey => 'bad_key', :auth_host => "a.b.c", :auth_port => "443", :auth_scheme => "https", :auth_path => "/v1.0", :authok= => true, :authtoken= => true, :proxy_host => nil, :proxy_port => nil)
|
31
|
+
assert_raises(OpenStack::Compute::Exception::Connection) do
|
32
|
+
result = OpenStack::Compute::Authentication.init(connection)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class ComputeConnectionTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
connection = stub()
|
7
|
+
OpenStack::Compute::Authentication.stubs(:init).returns(connection)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_init_connection_no_credentials
|
11
|
+
assert_raises(OpenStack::Compute::Exception::MissingArgument) do
|
12
|
+
conn = OpenStack::Compute::Connection.new(:api_key => "AABBCCDD11", :auth_url => "a.b.c")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_init_connection_no_password
|
17
|
+
assert_raises(OpenStack::Compute::Exception::MissingArgument) do
|
18
|
+
conn = OpenStack::Compute::Connection.new(:username => "test_account", :auth_url => "a.b.c")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_init_connection_no_auth_url
|
23
|
+
assert_raises(OpenStack::Compute::Exception::MissingArgument) do
|
24
|
+
conn = OpenStack::Compute::Connection.new(:username => "test_account", :api_key => "AABBCCDD11")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_init_connection_bad_auth_url
|
29
|
+
assert_raises(OpenStack::Compute::Exception::InvalidArgument) do
|
30
|
+
conn = OpenStack::Compute::Connection.new(:username => "test_account", :api_key => "AABBCCDD11", :auth_url => "***")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_init_connection
|
35
|
+
conn = OpenStack::Compute::Connection.new(:username => "test_account", :api_key => "AABBCCDD11", :auth_url => "https://a.b.c")
|
36
|
+
assert_not_nil conn, "Connection.new returned nil."
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class ExceptionTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_400_cloud_servers_fault
|
6
|
+
response = mock()
|
7
|
+
response.stubs(:code => "400", :body => "{\"ComputeFault\":{\"message\":\"422 Unprocessable Entity: We could not process your request at this time. We have been notified and are looking into the issue. [E03]\",\"details\":\"com.rackspace.cloud.service.servers.OpenStack::ComputeFault: Fault occured\",\"code\":400}}" )
|
8
|
+
exception=nil
|
9
|
+
begin
|
10
|
+
OpenStack::Compute::Exception.raise_exception(response)
|
11
|
+
rescue Exception => e
|
12
|
+
exception=e
|
13
|
+
end
|
14
|
+
assert_equal(OpenStack::Compute::Exception::ComputeFault, e.class)
|
15
|
+
assert_equal("400", e.response_code)
|
16
|
+
assert_not_nil(e.response_body)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_413_over_limit
|
20
|
+
response = mock()
|
21
|
+
response.stubs(:code => "413", :body => "{\"overLimit\":{\"message\":\"Too many requests...\",\"code\":413,\"retryAfter\":\"2010-08-25T10:47:57.890-05:00\"}}")
|
22
|
+
exception=nil
|
23
|
+
begin
|
24
|
+
OpenStack::Compute::Exception.raise_exception(response)
|
25
|
+
rescue Exception => e
|
26
|
+
exception=e
|
27
|
+
end
|
28
|
+
assert_equal(OpenStack::Compute::Exception::OverLimit, e.class)
|
29
|
+
assert_equal("413", e.response_code)
|
30
|
+
assert_not_nil(e.response_body)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_other
|
34
|
+
response = mock()
|
35
|
+
body="{\"blahblah\":{\"message\":\"Failed...\",\"code\":500}}"
|
36
|
+
response.stubs(:code => "500", :body => body)
|
37
|
+
exception=nil
|
38
|
+
begin
|
39
|
+
OpenStack::Compute::Exception.raise_exception(response)
|
40
|
+
rescue Exception => e
|
41
|
+
exception=e
|
42
|
+
end
|
43
|
+
assert_equal(OpenStack::Compute::Exception::Other, exception.class)
|
44
|
+
assert_equal("500", exception.response_code)
|
45
|
+
assert_not_nil(exception.response_body)
|
46
|
+
assert_equal(body, exception.response_body)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class ServersTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
include TestConnection
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@conn=get_test_connection
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_list_servers
|
12
|
+
|
13
|
+
json_response = %{{
|
14
|
+
"servers" : [
|
15
|
+
{
|
16
|
+
"id" : 1234,
|
17
|
+
"name" : "sample-server",
|
18
|
+
"imageId" : 2,
|
19
|
+
"flavorId" : 1,
|
20
|
+
"hostId" : "e4d909c290d0fb1ca068ffaddf22cbd0",
|
21
|
+
"status" : "BUILD",
|
22
|
+
"progress" : 60,
|
23
|
+
"addresses" : {
|
24
|
+
"public" : [
|
25
|
+
"67.23.10.132",
|
26
|
+
"67.23.10.131"
|
27
|
+
],
|
28
|
+
"private" : [
|
29
|
+
"10.176.42.16"
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"metadata" : {
|
33
|
+
"Server Label" : "Web Head 1",
|
34
|
+
"Image Version" : "2.1"
|
35
|
+
}
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"id" : 5678,
|
39
|
+
"name" : "sample-server2",
|
40
|
+
"imageId" : 2,
|
41
|
+
"flavorId" : 1,
|
42
|
+
"hostId" : "9e107d9d372bb6826bd81d3542a419d6",
|
43
|
+
"status" : "ACTIVE",
|
44
|
+
"addresses" : {
|
45
|
+
"public" : [
|
46
|
+
"67.23.10.133"
|
47
|
+
],
|
48
|
+
"private" : [
|
49
|
+
"10.176.42.17"
|
50
|
+
]
|
51
|
+
},
|
52
|
+
"metadata" : {
|
53
|
+
"Server Label" : "DB 1"
|
54
|
+
}
|
55
|
+
}
|
56
|
+
]
|
57
|
+
}}
|
58
|
+
response = mock()
|
59
|
+
response.stubs(:code => "200", :body => json_response)
|
60
|
+
|
61
|
+
@conn.stubs(:csreq).returns(response)
|
62
|
+
servers=@conn.list_servers
|
63
|
+
|
64
|
+
assert_equal 2, servers.size
|
65
|
+
assert_equal 1234, servers[0][:id]
|
66
|
+
assert_equal "sample-server", servers[0][:name]
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_get_server
|
71
|
+
|
72
|
+
server=get_test_server
|
73
|
+
assert "sample-server", server.name
|
74
|
+
assert "2", server.imageId
|
75
|
+
assert "1", server.flavorId
|
76
|
+
assert "e4d909c290d0fb1ca068ffaddf22cbd0", server.hostId
|
77
|
+
assert "BUILD", server.status
|
78
|
+
assert "60", server.progress
|
79
|
+
assert "67.23.10.132", server.addresses[:public][0]
|
80
|
+
assert "67.23.10.131", server.addresses[:public][1]
|
81
|
+
assert "10.176.42.16", server.addresses[:private][1]
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
def get_test_server
|
87
|
+
|
88
|
+
json_response = %{{
|
89
|
+
"server" : {
|
90
|
+
"id" : 1234,
|
91
|
+
"name" : "sample-server",
|
92
|
+
"imageId" : 2,
|
93
|
+
"flavorId" : 1,
|
94
|
+
"hostId" : "e4d909c290d0fb1ca068ffaddf22cbd0",
|
95
|
+
"status" : "BUILD",
|
96
|
+
"progress" : 60,
|
97
|
+
"addresses" : {
|
98
|
+
"public" : [
|
99
|
+
"67.23.10.132",
|
100
|
+
"67.23.10.131"
|
101
|
+
],
|
102
|
+
"private" : [
|
103
|
+
"10.176.42.16"
|
104
|
+
]
|
105
|
+
},
|
106
|
+
"metadata" : {
|
107
|
+
"Server Label" : "Web Head 1",
|
108
|
+
"Image Version" : "2.1"
|
109
|
+
}
|
110
|
+
}
|
111
|
+
}}
|
112
|
+
|
113
|
+
response = mock()
|
114
|
+
response.stubs(:code => "200", :body => json_response)
|
115
|
+
|
116
|
+
@conn=get_test_connection
|
117
|
+
|
118
|
+
@conn.stubs(:csreq).returns(response)
|
119
|
+
return @conn.server(1234)
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
3
|
+
require 'openstack/compute'
|
4
|
+
require 'rubygems'
|
5
|
+
require 'mocha'
|
6
|
+
|
7
|
+
module TestConnection
|
8
|
+
|
9
|
+
def get_test_connection
|
10
|
+
|
11
|
+
conn_response = {'x-server-management-url' => 'http://server-manage.example.com/path', 'x-auth-token' => 'dummy_token'}
|
12
|
+
conn_response.stubs(:code).returns('204')
|
13
|
+
#server = mock(:use_ssl= => true, :verify_mode= => true, :start => true, :finish => true)
|
14
|
+
server = mock(:start => true, :finish => true)
|
15
|
+
server.stubs(:get => conn_response, :use_ssl= => true, :verify_mode= => true)
|
16
|
+
#server.stubs(:get).returns(conn_response)
|
17
|
+
Net::HTTP.stubs(:new).returns(server)
|
18
|
+
|
19
|
+
OpenStack::Compute::Connection.new(:username => "test_account", :api_key => "AABBCCDD11", :auth_url => "http://a.b.c")
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstack-compute
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 1
|
10
|
+
version: 1.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Dan Prince
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-29 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -51,6 +51,11 @@ files:
|
|
51
51
|
- lib/openstack/compute/flavor.rb
|
52
52
|
- lib/openstack/compute/image.rb
|
53
53
|
- lib/openstack/compute/server.rb
|
54
|
+
- test/authentication_test.rb
|
55
|
+
- test/exception_test.rb
|
56
|
+
- test/test_helper.rb
|
57
|
+
- test/connection_test.rb
|
58
|
+
- test/servers_test.rb
|
54
59
|
has_rdoc: true
|
55
60
|
homepage: https://launchpad.net/ruby-openstack-compute
|
56
61
|
licenses: []
|
@@ -85,5 +90,9 @@ rubygems_version: 1.3.7
|
|
85
90
|
signing_key:
|
86
91
|
specification_version: 3
|
87
92
|
summary: OpenStack Compute Ruby API
|
88
|
-
test_files:
|
89
|
-
|
93
|
+
test_files:
|
94
|
+
- test/authentication_test.rb
|
95
|
+
- test/exception_test.rb
|
96
|
+
- test/test_helper.rb
|
97
|
+
- test/connection_test.rb
|
98
|
+
- test/servers_test.rb
|