openstack_activeresource 0.3.5 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -42,3 +42,11 @@ Rake::RDocTask.new do |rdoc|
42
42
  rdoc.rdoc_files.include('README*')
43
43
  rdoc.rdoc_files.include('lib/**/*.rb')
44
44
  end
45
+
46
+ require 'rake/testtask'
47
+
48
+ Rake::TestTask.new do |t|
49
+ t.libs << "test"
50
+ t.test_files = FileList['test/test*.rb']
51
+ t.verbose = true
52
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.5
1
+ 0.4.0
@@ -33,6 +33,7 @@ module OpenStack
33
33
  autoload :Server
34
34
  autoload :SimpleTenantUsage
35
35
  autoload :VolumeAttachment
36
+ autoload :QuotaSet
36
37
  end
37
38
 
38
39
  end
@@ -0,0 +1,91 @@
1
+ # This file is part of the OpenStack-ActiveResource
2
+ #
3
+ # Copyright (C) 2012 Unidata S.p.A. (Davide Guerri - d.guerri@unidata.it)
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+
18
+ module OpenStack
19
+ module Nova
20
+ module Compute
21
+
22
+ # An OpenStack Quota-Set
23
+ #
24
+ # ==== Attributes
25
+ # * +instances+ - Number of permitted instances
26
+ # * +cores+ - Number of instanceable cores
27
+ # * +ram+ - Quantity of instanceable RAM (MBytes)
28
+ # * +floating_ips+ - Number of floating IP
29
+ # * +key_pairs+ - Number of keypairs
30
+ # * +metadata_items+ - Metadata items permitted
31
+ # * +security_groups+ - Number of security groups permitted
32
+ # * +security_group_rules+ - Number of rules per security group permitted
33
+ # * +injected_files+ - Number of injectable files
34
+ # * +injected_file_content_bytes+ - Injected file maximum length
35
+ # * +injected_file_path_bytes+ - Injected file path name maximum length
36
+ class QuotaSet < Base
37
+ self.collection_name = "os-quota-sets"
38
+
39
+ schema do
40
+ attribute :instances, :integer
41
+ attribute :cores, :integer
42
+ attribute :ram, :integer
43
+ attribute :floating_ips, :integer
44
+ attribute :key_pairs, :integer
45
+ attribute :metadata_items, :integer
46
+ attribute :security_groups, :integer
47
+ attribute :security_group_rules, :integer
48
+ attribute :injected_files, :integer
49
+ attribute :injected_file_content_bytes, :integer
50
+ attribute :injected_file_path_bytes, :integer
51
+ end
52
+
53
+ validates :cores,
54
+ :presence => true,
55
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
56
+ validates :floating_ips,
57
+ :presence => true,
58
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
59
+ validates :injected_file_content_bytes,
60
+ :presence => true,
61
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
62
+ validates :injected_file_path_bytes,
63
+ :presence => true,
64
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
65
+ validates :injected_files,
66
+ :presence => true,
67
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
68
+ validates :instances,
69
+ :presence => true,
70
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
71
+ validates :key_pairs,
72
+ :presence => true,
73
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
74
+ validates :metadata_items,
75
+ :presence => true,
76
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
77
+ validates :ram,
78
+ :presence => true,
79
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
80
+ validates :security_group_rules,
81
+ :presence => true,
82
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
83
+ validates :security_groups,
84
+ :presence => true,
85
+ :numericality => {:greater_than_or_equal_to => 1, :allow_blank => true}
86
+
87
+ end
88
+
89
+ end
90
+ end
91
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "openstack_activeresource"
8
- s.version = "0.3.5"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Davide Guerri"]
12
- s.date = "2013-02-18"
12
+ s.date = "2013-02-19"
13
13
  s.description = "OpenStack Ruby and RoR bindings implemented with ActiveResource - See also http://www.unicloud.it"
14
14
  s.email = "d.guerri@rd.unidata.it"
15
15
  s.extra_rdoc_files = [
@@ -53,6 +53,7 @@ Gem::Specification.new do |s|
53
53
  "lib/open_stack/nova/compute/image.rb",
54
54
  "lib/open_stack/nova/compute/key_pair.rb",
55
55
  "lib/open_stack/nova/compute/network.rb",
56
+ "lib/open_stack/nova/compute/quota_set.rb",
56
57
  "lib/open_stack/nova/compute/security_group.rb",
57
58
  "lib/open_stack/nova/compute/server.rb",
58
59
  "lib/open_stack/nova/compute/simple_tenant_usage.rb",
@@ -65,7 +66,18 @@ Gem::Specification.new do |s|
65
66
  "test/.gitignore",
66
67
  "test/helper.rb",
67
68
  "test/test_configuration-sample.yml",
68
- "test/test_openstack-activeresource.rb"
69
+ "test/test_keystone_authentications.rb",
70
+ "test/test_keystone_tenants.rb",
71
+ "test/test_keystone_users.rb",
72
+ "test/test_nova_flavors.rb",
73
+ "test/test_nova_floating_ips.rb",
74
+ "test/test_nova_images.rb",
75
+ "test/test_nova_keypairs.rb",
76
+ "test/test_nova_quota_sets.rb",
77
+ "test/test_nova_security_groups.rb",
78
+ "test/test_nova_servers.rb",
79
+ "test/test_simple_tenant_usages.rb",
80
+ "test/utils.rb"
69
81
  ]
70
82
  s.homepage = "https://github.com/Unidata-SpA/openstack_activeresource"
71
83
  s.licenses = ["GPLv3"]
@@ -0,0 +1,49 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ # Keystone
15
+
16
+ # Authentication
17
+
18
+ def test_authentications
19
+ OpenStack::Keystone::Public::Base.site = TEST_CONFIG[:public_base_site]
20
+
21
+ # User auth
22
+ assert_nothing_raised ActiveResource::ClientError, "Cannot authenticate as user" do
23
+ auth = OpenStack::Keystone::Public::Auth.create :username => TEST_CONFIG[:user_username],
24
+ :password => TEST_CONFIG[:user_password],
25
+ :tenant_id => TEST_CONFIG[:user_tenant_id]
26
+
27
+ assert_not_nil auth.token, "Cannot authenticate as user"
28
+
29
+ auth = OpenStack::Keystone::Public::Auth.create :username => "baduser",
30
+ :password => "badpassword",
31
+ :tenant_id => TEST_CONFIG[:user_tenant_id]
32
+
33
+ assert_nil auth.token, "Authentication seems broken!"
34
+ end
35
+
36
+ # Admin auth
37
+ return unless admin_test_possible?
38
+
39
+ assert_nothing_raised ActiveResource::ClientError, "Cannot authenticate as admin" do
40
+ auth = OpenStack::Keystone::Public::Auth.create :username => TEST_CONFIG[:admin_username],
41
+ :password => TEST_CONFIG[:admin_password],
42
+ :tenant_id => TEST_CONFIG[:admin_tenant_id]
43
+
44
+ assert_not_nil auth.token, "Cannot authenticate as admin"
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,29 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ def test_list_tenant
15
+ return unless admin_test_possible?
16
+
17
+ auth_admin
18
+
19
+ assert_nothing_raised ActiveResource::ClientError, "Cannot list tenants" do
20
+ tenants = OpenStack::Keystone::Public::Tenant.all
21
+
22
+ assert_block("No tenants?") do
23
+ !tenants.empty?
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,29 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ def test_list_users
15
+ return unless admin_test_possible?
16
+
17
+ auth_admin
18
+
19
+ assert_nothing_raised ActiveResource::ClientError, "Cannot list users" do
20
+ users = OpenStack::Keystone::Admin::User.all
21
+
22
+ assert_block("No users?") do
23
+ !users.nil? && !users.empty?
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,26 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ def test_list_flavor
15
+ auth_user
16
+
17
+ assert_nothing_raised ActiveResource::ClientError, "Cannot list flavors" do
18
+ flavors = OpenStack::Nova::Compute::Flavor.all
19
+
20
+ assert_block("No flavors?") do
21
+ !flavors.empty?
22
+ end
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,44 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ def test_floating_ip_list
15
+ auth_user
16
+
17
+ assert_nothing_raised ActiveResource::ClientError, "Cannot list floating IP" do
18
+ floating_ips = OpenStack::Nova::Compute::FloatingIp.all
19
+
20
+ assert_not_nil floating_ips, "Cannot retrieve key-pairs"
21
+ end
22
+ end
23
+
24
+ def test_floating_ip_allocation
25
+ auth_user
26
+
27
+ assert_nothing_raised ActiveResource::ClientError, "Cannot list floating IP" do
28
+ floating_ip = nil
29
+ OpenStack::Nova::Compute::FloatingIpPool.all.each do |ip_pool|
30
+ begin
31
+ floating_ip = OpenStack::Nova::Compute::FloatingIp.create(:pool => ip_pool.name)
32
+ break
33
+ rescue ActiveResource::ClientError => e
34
+ next # Retry with the next pool
35
+ end
36
+ end
37
+
38
+ assert_not_nil floating_ip, "Failed to allocate a floating IP"
39
+
40
+ floating_ip.destroy
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,26 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ def test_list_images
15
+ auth_user
16
+
17
+ assert_nothing_raised ActiveResource::ClientError, "Cannot list images" do
18
+ images = OpenStack::Nova::Compute::Image.all
19
+
20
+ assert_block("No images?") do
21
+ !images.empty?
22
+ end
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,48 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ def test_keypair_list
15
+ auth_user
16
+
17
+ assert_nothing_raised ActiveResource::ClientError, "Cannot list keypair" do
18
+ keys = OpenStack::Nova::Compute::KeyPair.all
19
+
20
+ assert_not_nil keys, "Cannot retrieve key-pairs"
21
+ end
22
+
23
+ end
24
+
25
+ def test_keypair_create_destroy
26
+ auth_user
27
+
28
+ keypair_name = '___my_new_keypair'
29
+ key = nil
30
+ assert_nothing_raised ActiveResource::ClientError, "Cannot create key pair" do
31
+ key = OpenStack::Nova::Compute::KeyPair.create :name => keypair_name
32
+ end
33
+ assert_not_nil key, "Cannot create key pair"
34
+
35
+ key = nil
36
+ assert_nothing_raised ActiveResource::ClientError, "Cannot find keypair '#{keypair_name}'" do
37
+ key = OpenStack::Nova::Compute::KeyPair.find_by_name keypair_name
38
+ end
39
+
40
+ assert_not_nil key, "Cannot find key pair"
41
+
42
+ assert_nothing_raised "Cannot destroy key pair" do
43
+ key.destroy
44
+ end
45
+
46
+ end
47
+
48
+ end
@@ -0,0 +1,70 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ def test_get_quota_set
15
+ auth_user
16
+
17
+ assert_nothing_raised ActiveResource::ClientError, "Cannot get quota-set as user" do
18
+ quota_set = OpenStack::Nova::Compute::QuotaSet.find TEST_CONFIG[:user_tenant_id]
19
+
20
+ assert_not_nil quota_set, "Cannot retrieve quota-set as user"
21
+ end
22
+
23
+ return unless admin_test_possible?
24
+
25
+ auth_admin
26
+
27
+ assert_nothing_raised ActiveResource::ClientError, "Cannot get quota-set as admin" do
28
+ quota_set = OpenStack::Nova::Compute::QuotaSet.find TEST_CONFIG[:user_tenant_id]
29
+
30
+ assert_not_nil quota_set, "Cannot retrieve quota-set as admin"
31
+ end
32
+ end
33
+
34
+ def test_update_quota_set
35
+ auth_user
36
+
37
+ quota_set = OpenStack::Nova::Compute::QuotaSet.find TEST_CONFIG[:user_tenant_id]
38
+ old_instances = quota_set.instances
39
+
40
+ assert_raises ActiveResource::ForbiddenAccess, "It shouldn't be possible for a generic user to update its quotas!" do
41
+ quota_set.instances = old_instances + 1
42
+ quota_set.save
43
+ end
44
+
45
+ return unless admin_test_possible?
46
+
47
+ auth_admin
48
+
49
+ quota_set = OpenStack::Nova::Compute::QuotaSet.find TEST_CONFIG[:user_tenant_id]
50
+ old_instances = quota_set.instances
51
+
52
+ assert_nothing_raised ActiveResource::ClientError, "Cannot update quota-set" do
53
+ quota_set.instances = old_instances + 1
54
+ assert quota_set.save, "Cannot update quota-set"
55
+ end
56
+
57
+ quota_set = OpenStack::Nova::Compute::QuotaSet.find TEST_CONFIG[:user_tenant_id]
58
+ assert quota_set.instances == old_instances + 1, "Quota-set verification failed: not updated"
59
+
60
+ assert_nothing_raised ActiveResource::ClientError, "Cannot get quota-set" do
61
+ quota_set.instances = old_instances
62
+ assert quota_set.save, "Cannot update quota-set to its original value"
63
+ end
64
+
65
+ quota_set = OpenStack::Nova::Compute::QuotaSet.find TEST_CONFIG[:user_tenant_id]
66
+ assert quota_set.instances == old_instances, "Quota-set verification failed: not updated"
67
+
68
+ end
69
+
70
+ end
@@ -0,0 +1,26 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ def test_list_security_groups
15
+ auth_user
16
+
17
+ assert_nothing_raised ActiveResource::ClientError, "Cannot list security group" do
18
+ security_groups = OpenStack::Nova::Compute::SecurityGroup.all
19
+
20
+ assert_block("No security_groups?") do
21
+ !security_groups.empty?
22
+ end
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,68 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ # Servers
15
+
16
+ def test_list_server
17
+ auth_user
18
+
19
+ assert_nothing_raised ActiveResource::ClientError, "Cannot list server" do
20
+ OpenStack::Nova::Compute::Server.all
21
+ end
22
+ end
23
+
24
+ def test_server_create_destroy
25
+ auth_user
26
+
27
+ flavor = OpenStack::Nova::Compute::Flavor.find_by_name TEST_CONFIG[:flavor_name]
28
+ assert_not_nil flavor
29
+
30
+ image = OpenStack::Nova::Compute::Image.find TEST_CONFIG[:image_id]
31
+ assert_not_nil image
32
+
33
+ new_server_id = nil
34
+ assert_nothing_raised ActiveResource::ClientError, "Failed to create a new server" do
35
+ new_server = OpenStack::Nova::Compute::Server.create :name => 'test_server',
36
+ :flavor => flavor,
37
+ :image => image
38
+ assert_not_nil new_server
39
+ new_server_id = new_server.id
40
+ end
41
+
42
+ # Verify server
43
+ my_server = loop_block(5) do
44
+ begin
45
+ OpenStack::Nova::Compute::Server.find new_server_id
46
+ rescue ActiveResource::ResourceNotFound
47
+
48
+ nil
49
+ end
50
+ end
51
+ assert_not_nil my_server, "Server not spawned after 5 seconds!?!"
52
+
53
+ # Wait for a network address
54
+ my_address = loop_block(60) do
55
+ my_server = OpenStack::Nova::Compute::Server.find new_server_id
56
+ my_server.addresses.keys.count > 0 ? my_server.addresses : nil
57
+ end
58
+ assert_not_nil my_address, "No address after a minute!"
59
+
60
+ assert_nothing_raised ActiveResource::ClientError, "Problem retrieving the server '#{new_server_id}'" do
61
+ my_server = OpenStack::Nova::Compute::Server.find new_server_id
62
+ my_server.destroy
63
+ end
64
+
65
+ end
66
+
67
+
68
+ end
@@ -0,0 +1,27 @@
1
+ lib_path = File.expand_path('../../lib', __FILE__)
2
+ $:.unshift(lib_path)
3
+
4
+ test_path = File.expand_path('..', __FILE__)
5
+ $:.unshift(test_path)
6
+
7
+ require 'helper'
8
+ require 'openstack_activeresource'
9
+ require 'utils'
10
+
11
+ class TestOpenStackActiveResource < Test::Unit::TestCase
12
+ include OpenstackTestUtils
13
+
14
+ def test_simple_tenant_usage
15
+ return unless admin_test_possible?
16
+
17
+ auth_admin
18
+
19
+ assert_nothing_raised ActiveResource::ClientError, "Cannot retrieve simple_usages" do
20
+ simple_usages = OpenStack::Nova::Compute::SimpleTenantUsage.find_from_date(:all, 5.days.ago)
21
+
22
+ assert_not_nil simple_usages
23
+ end
24
+
25
+ end
26
+
27
+ end
data/test/utils.rb ADDED
@@ -0,0 +1,51 @@
1
+ module OpenstackTestUtils
2
+
3
+ private
4
+
5
+ def auth_admin
6
+ OpenStack::Keystone::Public::Base.site = TEST_CONFIG[:public_base_site]
7
+ OpenStack::Keystone::Admin::Base.site = TEST_CONFIG[:public_admin_site]
8
+
9
+ auth = OpenStack::Keystone::Public::Auth.create :username => TEST_CONFIG[:admin_username],
10
+ :password => TEST_CONFIG[:admin_password],
11
+ :tenant_id => TEST_CONFIG[:admin_tenant_id]
12
+
13
+ OpenStack::Base.token = auth.token
14
+ OpenStack::Nova::Compute::Base.site = auth.endpoint_for('compute').publicURL
15
+ OpenStack::Nova::Volume::Base.site = auth.endpoint_for('volume').publicURL
16
+
17
+ end
18
+
19
+ def auth_user
20
+ OpenStack::Keystone::Public::Base.site = TEST_CONFIG[:public_base_site]
21
+
22
+ auth = OpenStack::Keystone::Public::Auth.create :username => TEST_CONFIG[:user_username],
23
+ :password => TEST_CONFIG[:user_password],
24
+ :tenant_id => TEST_CONFIG[:user_tenant_id]
25
+
26
+ OpenStack::Base.token = auth.token
27
+ OpenStack::Nova::Compute::Base.site = auth.endpoint_for('compute').publicURL
28
+ OpenStack::Nova::Volume::Base.site = auth.endpoint_for('volume').publicURL
29
+
30
+ end
31
+
32
+ def admin_test_possible?
33
+ TEST_CONFIG[:admin_username] and TEST_CONFIG[:admin_password] and TEST_CONFIG[:admin_tenant_id]
34
+ end
35
+
36
+ def loop_block(seconds=10)
37
+ ret = nil
38
+ if block_given? and seconds > 0
39
+ begin
40
+ ret = yield
41
+ return ret unless ret.nil?
42
+ seconds-=1
43
+ sleep 1
44
+ end while seconds > 0
45
+ end
46
+
47
+ ret
48
+ end
49
+
50
+
51
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openstack_activeresource
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.4.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: 2013-02-18 00:00:00.000000000 Z
12
+ date: 2013-02-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -200,6 +200,7 @@ files:
200
200
  - lib/open_stack/nova/compute/image.rb
201
201
  - lib/open_stack/nova/compute/key_pair.rb
202
202
  - lib/open_stack/nova/compute/network.rb
203
+ - lib/open_stack/nova/compute/quota_set.rb
203
204
  - lib/open_stack/nova/compute/security_group.rb
204
205
  - lib/open_stack/nova/compute/server.rb
205
206
  - lib/open_stack/nova/compute/simple_tenant_usage.rb
@@ -212,7 +213,18 @@ files:
212
213
  - test/.gitignore
213
214
  - test/helper.rb
214
215
  - test/test_configuration-sample.yml
215
- - test/test_openstack-activeresource.rb
216
+ - test/test_keystone_authentications.rb
217
+ - test/test_keystone_tenants.rb
218
+ - test/test_keystone_users.rb
219
+ - test/test_nova_flavors.rb
220
+ - test/test_nova_floating_ips.rb
221
+ - test/test_nova_images.rb
222
+ - test/test_nova_keypairs.rb
223
+ - test/test_nova_quota_sets.rb
224
+ - test/test_nova_security_groups.rb
225
+ - test/test_nova_servers.rb
226
+ - test/test_simple_tenant_usages.rb
227
+ - test/utils.rb
216
228
  homepage: https://github.com/Unidata-SpA/openstack_activeresource
217
229
  licenses:
218
230
  - GPLv3
@@ -228,7 +240,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
228
240
  version: '0'
229
241
  segments:
230
242
  - 0
231
- hash: 1745572783411320343
243
+ hash: 1700532988989412175
232
244
  required_rubygems_version: !ruby/object:Gem::Requirement
233
245
  none: false
234
246
  requirements:
@@ -1,303 +0,0 @@
1
- lib_path = File.expand_path('../../lib', __FILE__)
2
- $:.unshift(lib_path)
3
-
4
- test_path = File.expand_path('..', __FILE__)
5
- $:.unshift(test_path)
6
-
7
- require 'helper'
8
- require 'openstack_activeresource'
9
-
10
- class TestOpenStackActiveResource < Test::Unit::TestCase
11
-
12
- # Keystone
13
-
14
- # Authentication
15
-
16
- def test_authentication
17
- OpenStack::Keystone::Public::Base.site = TEST_CONFIG[:public_base_site]
18
-
19
- # User auth
20
- assert_nothing_raised ActiveResource::ClientError, "Cannot authenticate as user" do
21
- auth = OpenStack::Keystone::Public::Auth.create :username => TEST_CONFIG[:user_username],
22
- :password => TEST_CONFIG[:user_password],
23
- :tenant_id => TEST_CONFIG[:user_tenant_id]
24
-
25
- assert_not_nil auth.token, "Cannot authenticate as user"
26
-
27
- auth = OpenStack::Keystone::Public::Auth.create :username => "baduser",
28
- :password => "badpassword",
29
- :tenant_id => TEST_CONFIG[:user_tenant_id]
30
-
31
- assert_nil auth.token, "Authentication seems broken!"
32
- end
33
-
34
- # Admin auth
35
- return unless admin_test_possible?
36
-
37
- assert_nothing_raised ActiveResource::ClientError, "Cannot authenticate as admin" do
38
- auth = OpenStack::Keystone::Public::Auth.create :username => TEST_CONFIG[:admin_username],
39
- :password => TEST_CONFIG[:admin_password],
40
- :tenant_id => TEST_CONFIG[:admin_tenant_id]
41
-
42
- assert_not_nil auth.token, "Cannot authenticate as admin"
43
- end
44
-
45
- end
46
-
47
- def test_list_tenant
48
- return unless admin_test_possible?
49
-
50
- auth_admin
51
-
52
- assert_nothing_raised ActiveResource::ClientError, "Cannot list tenants" do
53
- tenants = OpenStack::Keystone::Public::Tenant.all
54
-
55
- assert_block("No tenants?") do
56
- !tenants.empty?
57
- end
58
- end
59
-
60
- end
61
-
62
- def test_simple_tenant_usage
63
- return unless admin_test_possible?
64
-
65
- auth_admin
66
-
67
- assert_nothing_raised ActiveResource::ClientError, "Cannot retrieve simple_usages" do
68
- simple_usages = OpenStack::Nova::Compute::SimpleTenantUsage.find_from_date(:all, 5.days.ago)
69
-
70
- assert_not_nil simple_usages
71
- end
72
-
73
- end
74
-
75
- def test_list_users
76
- return unless admin_test_possible?
77
-
78
- auth_admin
79
-
80
- assert_nothing_raised ActiveResource::ClientError, "Cannot list users" do
81
- users = OpenStack::Keystone::Admin::User.all
82
-
83
- assert_block("No users?") do
84
- !users.nil? && !users.empty?
85
- end
86
- end
87
-
88
- end
89
-
90
- # Nova
91
-
92
- ## Flavors
93
-
94
- def test_list_flavor
95
- auth_user
96
-
97
- assert_nothing_raised ActiveResource::ClientError, "Cannot list flavors" do
98
- flavors = OpenStack::Nova::Compute::Flavor.all
99
-
100
- assert_block("No flavors?") do
101
- !flavors.empty?
102
- end
103
- end
104
- end
105
-
106
- # Images
107
-
108
- def test_list_images
109
- auth_user
110
-
111
- assert_nothing_raised ActiveResource::ClientError, "Cannot list images" do
112
- images = OpenStack::Nova::Compute::Image.all
113
-
114
- assert_block("No images?") do
115
- !images.empty?
116
- end
117
- end
118
- end
119
-
120
- # Security groups
121
-
122
- def test_list_security_groups
123
- auth_user
124
-
125
- assert_nothing_raised ActiveResource::ClientError, "Cannot list security group" do
126
- security_groups = OpenStack::Nova::Compute::SecurityGroup.all
127
-
128
- assert_block("No security_groups?") do
129
- !security_groups.empty?
130
- end
131
- end
132
- end
133
-
134
- # Keypairs
135
-
136
- def test_keypair_list
137
- auth_user
138
-
139
- assert_nothing_raised ActiveResource::ClientError, "Cannot list keypair" do
140
- keys = OpenStack::Nova::Compute::KeyPair.all
141
-
142
- assert_not_nil keys, "Cannot retrieve key-pairs"
143
- end
144
-
145
- end
146
-
147
- def test_keypair_create_destroy
148
- auth_user
149
-
150
- keypair_name = '___my_new_keypair'
151
- key = nil
152
- assert_nothing_raised ActiveResource::ClientError, "Cannot create key pair" do
153
- key = OpenStack::Nova::Compute::KeyPair.create :name => keypair_name
154
- end
155
- assert_not_nil key, "Cannot create key pair"
156
-
157
- key = nil
158
- assert_nothing_raised ActiveResource::ClientError, "Cannot find keypair '#{keypair_name}'" do
159
- key = OpenStack::Nova::Compute::KeyPair.find_by_name keypair_name
160
- end
161
-
162
- assert_not_nil key, "Cannot find key pair"
163
-
164
- assert_nothing_raised "Cannot destroy key pair" do
165
- key.destroy
166
- end
167
-
168
- end
169
-
170
- # Floating IPs
171
- def test_floating_ip_list
172
- auth_user
173
-
174
- assert_nothing_raised ActiveResource::ClientError, "Cannot list floating IP" do
175
- floating_ips = OpenStack::Nova::Compute::FloatingIp.all
176
-
177
- assert_not_nil floating_ips, "Cannot retrieve key-pairs"
178
- end
179
- end
180
-
181
- def test_floating_ip_allocation
182
- auth_user
183
-
184
- assert_nothing_raised ActiveResource::ClientError, "Cannot list floating IP" do
185
- floating_ip = nil
186
- OpenStack::Nova::Compute::FloatingIpPool.all.each do |ip_pool|
187
- begin
188
- floating_ip = OpenStack::Nova::Compute::FloatingIp.create(:pool => ip_pool.name)
189
- break
190
- rescue ActiveResource::ClientError => e
191
- next # Retry with the next pool
192
- end
193
- end
194
-
195
- assert_not_nil floating_ip, "Failed to allocate a floating IP"
196
-
197
- floating_ip.destroy
198
- end
199
- end
200
-
201
- # Servers
202
-
203
- def test_list_server
204
- auth_user
205
-
206
- assert_nothing_raised ActiveResource::ClientError, "Cannot list server" do
207
- OpenStack::Nova::Compute::Server.all
208
- end
209
- end
210
-
211
- def test_server_create_destroy
212
- auth_user
213
-
214
- flavor = OpenStack::Nova::Compute::Flavor.find_by_name TEST_CONFIG[:flavor_name]
215
- assert_not_nil flavor
216
-
217
- image = OpenStack::Nova::Compute::Image.find TEST_CONFIG[:image_id]
218
- assert_not_nil image
219
-
220
- new_server_id = nil
221
- assert_nothing_raised ActiveResource::ClientError, "Failed to create a new server" do
222
- new_server = OpenStack::Nova::Compute::Server.create :name => 'test_server',
223
- :flavor => flavor,
224
- :image => image
225
- assert_not_nil new_server
226
- new_server_id = new_server.id
227
- end
228
-
229
- # Verify server
230
- my_server = loop_block(5) do
231
- begin
232
- OpenStack::Nova::Compute::Server.find new_server_id
233
- rescue ActiveResource::ResourceNotFound
234
-
235
- nil
236
- end
237
- end
238
- assert_not_nil my_server, "Server not spawned after 5 seconds!?!"
239
-
240
- # Wait for a network address
241
- my_address = loop_block(60) do
242
- my_server = OpenStack::Nova::Compute::Server.find new_server_id
243
- my_server.addresses.keys.count > 0 ? my_server.addresses : nil
244
- end
245
- assert_not_nil my_address, "No address after a minute!"
246
-
247
- assert_nothing_raised ActiveResource::ClientError, "Problem retrieving the server '#{new_server_id}'" do
248
- my_server = OpenStack::Nova::Compute::Server.find new_server_id
249
- my_server.destroy
250
- end
251
-
252
- end
253
-
254
- private
255
-
256
- # Utilities
257
-
258
- def auth_admin
259
- OpenStack::Keystone::Public::Base.site = TEST_CONFIG[:public_base_site]
260
- OpenStack::Keystone::Admin::Base.site = TEST_CONFIG[:public_admin_site]
261
-
262
- auth = OpenStack::Keystone::Public::Auth.create :username => TEST_CONFIG[:admin_username],
263
- :password => TEST_CONFIG[:admin_password],
264
- :tenant_id => TEST_CONFIG[:admin_tenant_id]
265
-
266
- OpenStack::Base.token = auth.token
267
- OpenStack::Nova::Compute::Base.site = auth.endpoint_for('compute').publicURL
268
- OpenStack::Nova::Volume::Base.site = auth.endpoint_for('volume').publicURL
269
-
270
- end
271
-
272
- def auth_user
273
- OpenStack::Keystone::Public::Base.site = TEST_CONFIG[:public_base_site]
274
-
275
- auth = OpenStack::Keystone::Public::Auth.create :username => TEST_CONFIG[:user_username],
276
- :password => TEST_CONFIG[:user_password],
277
- :tenant_id => TEST_CONFIG[:user_tenant_id]
278
-
279
- OpenStack::Base.token = auth.token
280
- OpenStack::Nova::Compute::Base.site = auth.endpoint_for('compute').publicURL
281
- OpenStack::Nova::Volume::Base.site = auth.endpoint_for('volume').publicURL
282
-
283
- end
284
-
285
- def admin_test_possible?
286
- TEST_CONFIG[:admin_username] and TEST_CONFIG[:admin_password] and TEST_CONFIG[:admin_tenant_id]
287
- end
288
-
289
- def loop_block(seconds=10)
290
- ret = nil
291
- if block_given? and seconds > 0
292
- begin
293
- ret = yield
294
- return ret unless ret.nil?
295
- seconds-=1
296
- sleep 1
297
- end while seconds > 0
298
- end
299
-
300
- ret
301
- end
302
-
303
- end