fog-libvirt-csem 0.9.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.
Files changed (82) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTORS.md +24 -0
  3. data/Gemfile +9 -0
  4. data/LICENSE.md +20 -0
  5. data/README.md +83 -0
  6. data/Rakefile +127 -0
  7. data/fog-libvirt-csem.gemspec +49 -0
  8. data/lib/fog/bin/libvirt.rb +58 -0
  9. data/lib/fog/libvirt/compute.rb +140 -0
  10. data/lib/fog/libvirt/models/compute/README.md +92 -0
  11. data/lib/fog/libvirt/models/compute/interface.rb +25 -0
  12. data/lib/fog/libvirt/models/compute/interfaces.rb +20 -0
  13. data/lib/fog/libvirt/models/compute/network.rb +33 -0
  14. data/lib/fog/libvirt/models/compute/networks.rb +20 -0
  15. data/lib/fog/libvirt/models/compute/nic.rb +50 -0
  16. data/lib/fog/libvirt/models/compute/nics.rb +12 -0
  17. data/lib/fog/libvirt/models/compute/node.rb +29 -0
  18. data/lib/fog/libvirt/models/compute/nodes.rb +20 -0
  19. data/lib/fog/libvirt/models/compute/pool.rb +84 -0
  20. data/lib/fog/libvirt/models/compute/pools.rb +20 -0
  21. data/lib/fog/libvirt/models/compute/server.rb +514 -0
  22. data/lib/fog/libvirt/models/compute/servers.rb +21 -0
  23. data/lib/fog/libvirt/models/compute/templates/network.xml.erb +6 -0
  24. data/lib/fog/libvirt/models/compute/templates/pool.xml.erb +6 -0
  25. data/lib/fog/libvirt/models/compute/templates/server.xml.erb +155 -0
  26. data/lib/fog/libvirt/models/compute/templates/volume.xml.erb +30 -0
  27. data/lib/fog/libvirt/models/compute/util/uri.rb +138 -0
  28. data/lib/fog/libvirt/models/compute/util/util.rb +32 -0
  29. data/lib/fog/libvirt/models/compute/volume.rb +129 -0
  30. data/lib/fog/libvirt/models/compute/volumes.rb +20 -0
  31. data/lib/fog/libvirt/requests/compute/clone_volume.rb +18 -0
  32. data/lib/fog/libvirt/requests/compute/create_domain.rb +17 -0
  33. data/lib/fog/libvirt/requests/compute/create_volume.rb +16 -0
  34. data/lib/fog/libvirt/requests/compute/define_domain.rb +17 -0
  35. data/lib/fog/libvirt/requests/compute/define_pool.rb +16 -0
  36. data/lib/fog/libvirt/requests/compute/destroy_interface.rb +18 -0
  37. data/lib/fog/libvirt/requests/compute/destroy_network.rb +17 -0
  38. data/lib/fog/libvirt/requests/compute/dhcp_leases.rb +37 -0
  39. data/lib/fog/libvirt/requests/compute/get_node_info.rb +37 -0
  40. data/lib/fog/libvirt/requests/compute/libversion.rb +18 -0
  41. data/lib/fog/libvirt/requests/compute/list_domains.rb +128 -0
  42. data/lib/fog/libvirt/requests/compute/list_interfaces.rb +57 -0
  43. data/lib/fog/libvirt/requests/compute/list_networks.rb +63 -0
  44. data/lib/fog/libvirt/requests/compute/list_pool_volumes.rb +19 -0
  45. data/lib/fog/libvirt/requests/compute/list_pools.rb +71 -0
  46. data/lib/fog/libvirt/requests/compute/list_volumes.rb +106 -0
  47. data/lib/fog/libvirt/requests/compute/mock_files/domain.xml +40 -0
  48. data/lib/fog/libvirt/requests/compute/pool_action.rb +19 -0
  49. data/lib/fog/libvirt/requests/compute/update_autostart.rb +18 -0
  50. data/lib/fog/libvirt/requests/compute/update_display.rb +36 -0
  51. data/lib/fog/libvirt/requests/compute/upload_volume.rb +31 -0
  52. data/lib/fog/libvirt/requests/compute/vm_action.rb +19 -0
  53. data/lib/fog/libvirt/requests/compute/volume_action.rb +18 -0
  54. data/lib/fog/libvirt/version.rb +5 -0
  55. data/lib/fog/libvirt.rb +16 -0
  56. data/minitests/server/server_test.rb +64 -0
  57. data/minitests/server/user_data_iso_test.rb +77 -0
  58. data/minitests/test_helper.rb +18 -0
  59. data/tests/helper.rb +17 -0
  60. data/tests/helpers/formats_helper.rb +100 -0
  61. data/tests/helpers/formats_helper_tests.rb +107 -0
  62. data/tests/helpers/mock_helper.rb +14 -0
  63. data/tests/helpers/succeeds_helper.rb +9 -0
  64. data/tests/libvirt/compute_tests.rb +19 -0
  65. data/tests/libvirt/models/compute/interface_tests.rb +27 -0
  66. data/tests/libvirt/models/compute/interfaces_tests.rb +14 -0
  67. data/tests/libvirt/models/compute/network_tests.rb +31 -0
  68. data/tests/libvirt/models/compute/networks_tests.rb +13 -0
  69. data/tests/libvirt/models/compute/nic_tests.rb +31 -0
  70. data/tests/libvirt/models/compute/nics_tests.rb +10 -0
  71. data/tests/libvirt/models/compute/pool_tests.rb +27 -0
  72. data/tests/libvirt/models/compute/pools_tests.rb +13 -0
  73. data/tests/libvirt/models/compute/server_tests.rb +63 -0
  74. data/tests/libvirt/models/compute/servers_tests.rb +14 -0
  75. data/tests/libvirt/models/compute/volume_tests.rb +38 -0
  76. data/tests/libvirt/models/compute/volumes_tests.rb +15 -0
  77. data/tests/libvirt/requests/compute/create_domain_tests.rb +21 -0
  78. data/tests/libvirt/requests/compute/define_domain_tests.rb +11 -0
  79. data/tests/libvirt/requests/compute/dhcp_leases_tests.rb +15 -0
  80. data/tests/libvirt/requests/compute/update_autostart_tests.rb +12 -0
  81. data/tests/libvirt/requests/compute/update_display.rb +13 -0
  82. metadata +335 -0
@@ -0,0 +1,5 @@
1
+ module Fog
2
+ module Libvirt
3
+ VERSION = '0.9.0'
4
+ end
5
+ end
@@ -0,0 +1,16 @@
1
+ require 'fog/core'
2
+ require 'fog/xml'
3
+ require 'fog/json'
4
+ require 'libvirt'
5
+
6
+ require File.expand_path('../libvirt/version', __FILE__)
7
+
8
+ module Fog
9
+ module Libvirt
10
+ extend Fog::Provider
11
+
12
+ autoload :Compute, File.expand_path('../libvirt/compute', __FILE__)
13
+
14
+ service(:compute, 'Compute')
15
+ end
16
+ end
@@ -0,0 +1,64 @@
1
+ require 'test_helper'
2
+
3
+ class ServerTest < Minitest::Test
4
+ def setup
5
+ @compute = Fog::Compute[:libvirt]
6
+ @server = @compute.servers.new(:name => "test")
7
+ end
8
+
9
+ def test_addresses_calls_compat_version_for_no_dhcp_leases_support
10
+ network = Libvirt::Network.new
11
+ @compute.expects(:networks).returns([network])
12
+ network.expects(:dhcp_leases).raises(NoMethodError)
13
+ @server.expects(:addresses_ip_command).returns(true)
14
+
15
+ @server.send(:addresses)
16
+ end
17
+
18
+ def test_addresses_calls_compat_version_for_older_libvirt
19
+ network = Libvirt::Network.new
20
+ @compute.expects(:libversion).returns(1002007)
21
+ @compute.expects(:networks).returns([network])
22
+ network.expects(:dhcp_leases).returns(true)
23
+ @server.expects(:addresses_ip_command).returns(true)
24
+
25
+ @server.send(:addresses)
26
+ end
27
+
28
+ def test_addresses_calls_compat_version_for_newer_libvirt
29
+ network = Libvirt::Network.new
30
+ @compute.expects(:libversion).returns(1002008)
31
+ @compute.expects(:networks).returns([network])
32
+ network.expects(:dhcp_leases).returns(true)
33
+ @server.expects(:addresses_dhcp).returns(true)
34
+
35
+ @server.send(:addresses)
36
+ end
37
+
38
+ def test_ssh_ip_command_success
39
+ fog_ssh = MiniTest::Mock.new
40
+ result = MiniTest::Mock.new
41
+ result.expect(:status, 0)
42
+ result.expect(:stdout, "any_ip")
43
+ fog_ssh.expect(:run, [result], [String])
44
+ uri = ::Fog::Libvirt::Util::URI.new('qemu+ssh://localhost:22?keyfile=nofile')
45
+ Fog::SSH.stub(:new, fog_ssh) do
46
+ @server.send(:ssh_ip_command, "test command", uri)
47
+ end
48
+ fog_ssh.verify
49
+ end
50
+
51
+ def test_local_ip_command_success
52
+ proc_info = MiniTest::Mock.new
53
+ proc_info.expect(:each_line, "127.0.0.1")
54
+ proc_info.expect(:pid, 0)
55
+ status = MiniTest::Mock.new
56
+ status.expect(:exitstatus, 0)
57
+ Process.stubs(:waitpid2).returns([0, status])
58
+ IO.stub(:popen, true, proc_info) do
59
+ @server.send(:local_ip_command, "test command")
60
+ end
61
+ proc_info.verify
62
+ status.verify
63
+ end
64
+ end
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+
3
+ class UserDataIsoTest < Minitest::Test
4
+ def setup
5
+ @compute = Fog::Compute[:libvirt]
6
+ @server = @compute.servers.new(:name => "test")
7
+ @test_data = "test data"
8
+ end
9
+
10
+ def test_contains_meta_data_file
11
+ @server.stubs(:system).returns(true)
12
+ in_a_temp_dir do |d|
13
+ @server.generate_config_iso_in_dir(d, @test_data) {|iso| assert File.exist?(File.join(d, 'meta-data')) }
14
+ end
15
+ end
16
+
17
+ def test_contains_user_data_file
18
+ @server.stubs(:system).returns(true)
19
+ in_a_temp_dir do |d|
20
+ @server.generate_config_iso_in_dir(d, @test_data) do |iso|
21
+ assert File.exist?(File.join(d, 'user-data'))
22
+ assert_equal @test_data, File.read(File.join(d, 'user-data'))
23
+ end
24
+ end
25
+ end
26
+
27
+ def test_iso_is_generated
28
+ in_a_temp_dir do |d|
29
+ @server.expects(:system).with(regexp_matches(/^genisoimage/)).returns(true)
30
+ @server.generate_config_iso_in_dir(d, @test_data) {|iso| }
31
+ end
32
+ end
33
+
34
+ def test_volume_is_created_during_user_data_iso_generation
35
+ @server.stubs(:system).returns(true)
36
+ Fog::Libvirt::Compute::Volumes.any_instance.expects(:create).
37
+ with(has_entries(:name => @server.cloud_init_volume_name)).
38
+ returns(@compute.volumes.new)
39
+ Fog::Libvirt::Compute::Volume.any_instance.stubs(:upload_image)
40
+
41
+ @server.create_user_data_iso
42
+ end
43
+
44
+ def test_volume_is_uploaded_during_user_data_iso_generation
45
+ @server.stubs(:system).returns(true)
46
+ Fog::Libvirt::Compute::Volumes.any_instance.stubs(:create).returns(@compute.volumes.new)
47
+ Fog::Libvirt::Compute::Volume.any_instance.expects(:upload_image).returns(true)
48
+
49
+ @server.create_user_data_iso
50
+ end
51
+
52
+ def test_iso_file_is_set_during_user_data_iso_generation
53
+ @server.stubs(:system).returns(true)
54
+ Fog::Libvirt::Compute::Volumes.any_instance.stubs(:create).returns(@compute.volumes.new)
55
+ Fog::Libvirt::Compute::Volume.any_instance.stubs(:upload_image)
56
+
57
+ @server.create_user_data_iso
58
+ assert_equal @server.cloud_init_volume_name, @server.iso_file
59
+ end
60
+
61
+ def test_iso_dir_is_set_during_user_data_iso_generation
62
+ @server.stubs(:system).returns(true)
63
+ volume = @compute.volumes.new
64
+ volume.stubs(:path).returns("/srv/libvirt/#{@server.cloud_init_volume_name}")
65
+ Fog::Libvirt::Compute::Volumes.any_instance.stubs(:create).returns(volume)
66
+ Fog::Libvirt::Compute::Volume.any_instance.stubs(:upload_image)
67
+
68
+ @server.create_user_data_iso
69
+ assert_equal '/srv/libvirt', @server.iso_dir
70
+ end
71
+
72
+ def in_a_temp_dir
73
+ Dir.mktmpdir('test-dir') do |d|
74
+ yield d
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,18 @@
1
+ require 'minitest/autorun'
2
+ require 'mocha/minitest'
3
+ require 'fileutils'
4
+
5
+ $: << File.join(File.dirname(__FILE__), '..', 'lib')
6
+
7
+ logdir = File.join(File.dirname(__FILE__), '..', 'logs')
8
+ FileUtils.mkdir_p(logdir) unless File.exist?(logdir)
9
+
10
+ ENV['TMPDIR'] = 'test/tmp'
11
+ FileUtils.rm_f Dir.glob 'test/tmp/*.tmp'
12
+
13
+ require 'fog/libvirt'
14
+
15
+ Fog.mock!
16
+ Fog.credentials = {
17
+ :libvirt_uri => 'qemu://libvirt/system',
18
+ }.merge(Fog.credentials)
data/tests/helper.rb ADDED
@@ -0,0 +1,17 @@
1
+ ENV['FOG_RC'] = ENV['FOG_RC'] || File.expand_path('../.fog', __FILE__)
2
+ ENV['FOG_CREDENTIAL'] = ENV['FOG_CREDENTIAL'] || 'default'
3
+
4
+ require 'fog/libvirt'
5
+
6
+ Excon.defaults.merge!(debug_request: true, debug_response: true)
7
+
8
+ require File.expand_path(File.join(File.dirname(__FILE__), 'helpers', 'mock_helper'))
9
+
10
+ # This overrides the default 600 seconds timeout during live test runs
11
+ if Fog.mocking?
12
+ FOG_TESTING_TIMEOUT = ENV['FOG_TEST_TIMEOUT'] || 2000
13
+ Fog.timeout = 2000
14
+ Fog::Logger.warning "Setting default fog timeout to #{Fog.timeout} seconds"
15
+ else
16
+ FOG_TESTING_TIMEOUT = Fog.timeout
17
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fog/schema/data_validator'
4
+
5
+ # format related hackery
6
+ # allows both true.is_a?(Fog::Boolean) and false.is_a?(Fog::Boolean)
7
+ # allows both nil.is_a?(Fog::Nullable::String) and ''.is_a?(Fog::Nullable::String)
8
+ module Fog
9
+ module Boolean; end
10
+ module Nullable
11
+ module Boolean; end
12
+ module Integer; end
13
+ module String; end
14
+ module Time; end
15
+ module Float; end
16
+ module Hash; end
17
+ module Array; end
18
+ end
19
+ end
20
+ [FalseClass, TrueClass].each { |klass| klass.send(:include, Fog::Boolean) }
21
+ [FalseClass, TrueClass, NilClass, Fog::Boolean].each { |klass| klass.send(:include, Fog::Nullable::Boolean) }
22
+ [NilClass, String].each { |klass| klass.send(:include, Fog::Nullable::String) }
23
+ [NilClass, Time].each { |klass| klass.send(:include, Fog::Nullable::Time) }
24
+ [Integer, NilClass].each { |klass| klass.send(:include, Fog::Nullable::Integer) }
25
+ [Float, NilClass].each { |klass| klass.send(:include, Fog::Nullable::Float) }
26
+ [Hash, NilClass].each { |klass| klass.send(:include, Fog::Nullable::Hash) }
27
+ [Array, NilClass].each { |klass| klass.send(:include, Fog::Nullable::Array) }
28
+
29
+ module Shindo
30
+ # Generates a Shindo test that compares a hash schema to the result
31
+ # of the passed in block returning true if they match.
32
+ #
33
+ # The schema that is passed in is a Hash or Array of hashes that
34
+ # have Classes in place of values. When checking the schema the
35
+ # value should match the Class.
36
+ #
37
+ # Strict mode will fail if the data has additional keys. Setting
38
+ # +strict+ to +false+ will allow additional keys to appear.
39
+ #
40
+ # @param [Hash] schema A Hash schema
41
+ # @param [Hash] options Options to change validation rules
42
+ # @option options [Boolean] :allow_extra_keys
43
+ # If +true+ does not fail when keys are in the data that are
44
+ # not specified in the schema. This allows new values to
45
+ # appear in API output without breaking the check.
46
+ # @option options [Boolean] :allow_optional_rules
47
+ # If +true+ does not fail if extra keys are in the schema
48
+ # that do not match the data. Not recommended!
49
+ # @yield Data to check with schema
50
+ #
51
+ # @example Using in a test
52
+ # Shindo.tests("comparing welcome data against schema") do
53
+ # data = {:welcome => "Hello" }
54
+ # data_matches_schema(:welcome => String) { data }
55
+ # end
56
+ #
57
+ # comparing welcome data against schema
58
+ # + data matches schema
59
+ #
60
+ # @example Example schema
61
+ # {
62
+ # "id" => String,
63
+ # "ram" => Integer,
64
+ # "disks" => [
65
+ # {
66
+ # "size" => Float
67
+ # }
68
+ # ],
69
+ # "dns_name" => Fog::Nullable::String,
70
+ # "active" => Fog::Boolean,
71
+ # "created" => DateTime
72
+ # }
73
+ #
74
+ # @return [Boolean]
75
+ class Tests
76
+ def data_matches_schema(schema, options = {})
77
+ test('data matches schema') do
78
+ validator = Fog::Schema::DataValidator.new
79
+ valid = validator.validate(yield, schema, options)
80
+ @message = validator.message unless valid
81
+ valid
82
+ end
83
+ end
84
+
85
+ # @deprecated #formats is deprecated. Use #data_matches_schema instead
86
+ def formats(format, strict = true)
87
+ test('has proper format') do
88
+ if strict
89
+ options = { allow_extra_keys: false, allow_optional_rules: true }
90
+ else
91
+ options = { allow_extra_keys: true, allow_optional_rules: true }
92
+ end
93
+ validator = Fog::Schema::DataValidator.new
94
+ valid = validator.validate(yield, format, options)
95
+ @message = validator.message unless valid
96
+ valid
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,107 @@
1
+ Shindo.tests('test_helper', 'meta') do
2
+
3
+ tests('comparing welcome data against schema') do
4
+ data = { welcome: 'Hello' }
5
+ data_matches_schema(welcome: String) { data }
6
+ end
7
+
8
+ tests('#data_matches_schema') do
9
+ tests('when value matches schema expectation') do
10
+ data_matches_schema('key' => String) { { 'key' => 'Value' } }
11
+ end
12
+
13
+ tests('when values within an array all match schema expectation') do
14
+ data_matches_schema('key' => [Integer]) { { 'key' => [1, 2] } }
15
+ end
16
+
17
+ tests('when nested values match schema expectation') do
18
+ data_matches_schema('key' => { nested_key: String }) { { 'key' => { nested_key: 'Value' } } }
19
+ end
20
+
21
+ tests('when collection of values all match schema expectation') do
22
+ data_matches_schema([{ 'key' => String }]) { [{ 'key' => 'Value' }, { 'key' => 'Value' }] }
23
+ end
24
+
25
+ tests('when collection is empty although schema covers optional members') do
26
+ data_matches_schema([{ 'key' => String }], allow_optional_rules: true) { [] }
27
+ end
28
+
29
+ tests('when additional keys are passed and not strict') do
30
+ data_matches_schema({ 'key' => String }, allow_extra_keys: true) { { 'key' => 'Value', extra: 'Bonus' } }
31
+ end
32
+
33
+ tests('when value is nil and schema expects NilClass') do
34
+ data_matches_schema('key' => NilClass) { { 'key' => nil } }
35
+ end
36
+
37
+ tests('when value and schema match as hashes') do
38
+ data_matches_schema({}) { {} }
39
+ end
40
+
41
+ tests('when value and schema match as arrays') do
42
+ data_matches_schema([]) { [] }
43
+ end
44
+
45
+ tests('when value is a Time') do
46
+ data_matches_schema('time' => Time) { { 'time' => Time.now } }
47
+ end
48
+
49
+ tests('when key is missing but value should be NilClass (#1477)') do
50
+ data_matches_schema({ 'key' => NilClass }, allow_optional_rules: true) { {} }
51
+ end
52
+
53
+ tests('when key is missing but value is nullable (#1477)') do
54
+ data_matches_schema({ 'key' => Fog::Nullable::String }, allow_optional_rules: true) { {} }
55
+ end
56
+ end
57
+
58
+ tests('#formats backwards compatible changes') do
59
+ tests('when value matches schema expectation') do
60
+ formats('key' => String) { { 'key' => 'Value' } }
61
+ end
62
+
63
+ tests('when values within an array all match schema expectation') do
64
+ formats('key' => [Integer]) { { 'key' => [1, 2] } }
65
+ end
66
+
67
+ tests('when nested values match schema expectation') do
68
+ formats('key' => { nested_key: String }) { { 'key' => { nested_key: 'Value' } } }
69
+ end
70
+
71
+ tests('when collection of values all match schema expectation') do
72
+ formats([{ 'key' => String }]) { [{ 'key' => 'Value' }, { 'key' => 'Value' }] }
73
+ end
74
+
75
+ tests('when collection is empty although schema covers optional members') do
76
+ formats([{ 'key' => String }]) { [] }
77
+ end
78
+
79
+ tests('when additional keys are passed and not strict') do
80
+ formats({ 'key' => String }, false) { { 'key' => 'Value', :extra => 'Bonus' } }
81
+ end
82
+
83
+ tests('when value is nil and schema expects NilClass') do
84
+ formats('key' => NilClass) { { 'key' => nil } }
85
+ end
86
+
87
+ tests('when value and schema match as hashes') do
88
+ formats({}) { {} }
89
+ end
90
+
91
+ tests('when value and schema match as arrays') do
92
+ formats([]) { [] }
93
+ end
94
+
95
+ tests('when value is a Time') do
96
+ formats('time' => Time) { { 'time' => Time.now } }
97
+ end
98
+
99
+ tests('when key is missing but value should be NilClass (#1477)') do
100
+ formats('key' => NilClass) { {} }
101
+ end
102
+
103
+ tests('when key is missing but value is nullable (#1477)') do
104
+ formats('key' => Fog::Nullable::String) { {} }
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,14 @@
1
+ # Use so you can run in mock mode from the command line
2
+ #
3
+ # FOG_MOCK=true fog
4
+
5
+ if ENV["FOG_MOCK"] == "true"
6
+ Fog.mock!
7
+ end
8
+
9
+ # if in mocked mode, fill in some fake credentials for us
10
+ if Fog.mock?
11
+ Fog.credentials = {
12
+ libvirt_uri: 'qemu://libvirt/system',
13
+ }.merge(Fog.credentials)
14
+ end
@@ -0,0 +1,9 @@
1
+ module Shindo
2
+ class Tests
3
+ def succeeds(&block)
4
+ test('succeeds') do
5
+ !instance_eval(&Proc.new(&block)).nil?
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ Shindo.tests('Fog::Compute[:libvirt]', ['libvirt']) do
2
+
3
+ compute = Fog::Compute[:libvirt]
4
+
5
+ tests("Compute collections") do
6
+ %w{ servers interfaces networks nics nodes pools volumes}.each do |collection|
7
+ test("it should respond to #{collection}") { compute.respond_to? collection }
8
+ end
9
+ end
10
+
11
+ tests("Compute requests") do
12
+ %w{ create_domain create_volume define_domain define_pool destroy_interface destroy_network get_node_info
13
+ update_autostart list_domains
14
+ list_interfaces list_networks list_pools list_pool_volumes list_volumes pool_action vm_action volume_action
15
+ dhcp_leases }.each do |request|
16
+ test("it should respond to #{request}") { compute.respond_to? request }
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ Shindo.tests('Fog::Compute[:libvirt] | interface model', ['libvirt']) do
2
+
3
+ interfaces = Fog::Compute[:libvirt].interfaces
4
+ interface = interfaces.last
5
+
6
+ tests('The interface model should') do
7
+ tests('have the action') do
8
+ test('reload') { interface.respond_to? 'reload' }
9
+ end
10
+ tests('have attributes') do
11
+ model_attribute_hash = interface.attributes
12
+ attributes = [ :name, :mac, :active]
13
+ tests("The interface model should respond to") do
14
+ attributes.each do |attribute|
15
+ test("#{attribute}") { interface.respond_to? attribute }
16
+ end
17
+ end
18
+ tests("The attributes hash should have key") do
19
+ attributes.each do |attribute|
20
+ test("#{attribute}") { model_attribute_hash.key? attribute }
21
+ end
22
+ end
23
+ end
24
+ test('be a kind of Fog::Libvirt::Compute::Interface') { interface.kind_of? Fog::Libvirt::Compute::Interface }
25
+ end
26
+
27
+ end
@@ -0,0 +1,14 @@
1
+ Shindo.tests('Fog::Compute[:libvirt] | interfaces collection', ['libvirt']) do
2
+
3
+ interfaces = Fog::Compute[:libvirt].interfaces
4
+
5
+ tests('The interfaces collection') do
6
+ test('should not be empty') { not interfaces.empty? }
7
+ test('should be a kind of Fog::Libvirt::Compute::Interfaces') { interfaces.kind_of? Fog::Libvirt::Compute::Interfaces }
8
+ tests('should be able to reload itself').succeeds { interfaces.reload }
9
+ tests('should be able to get a model') do
10
+ tests('by instance name').succeeds { interfaces.get interfaces.first.name }
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,31 @@
1
+ Shindo.tests('Fog::Compute[:libvirt] | network model', ['libvirt']) do
2
+
3
+ networks = Fog::Compute[:libvirt].networks
4
+ network = networks.last
5
+
6
+ tests('The network model should') do
7
+ tests('have the action') do
8
+ test('reload') { network.respond_to? 'reload' }
9
+ test('dhcp_leases') { network.respond_to? 'dhcp_leases' }
10
+ end
11
+ tests('have a dhcp_leases action that') do
12
+ test('returns an array') { network.dhcp_leases('99:88:77:66:55:44', 0).kind_of? Array }
13
+ end
14
+ tests('have attributes') do
15
+ model_attribute_hash = network.attributes
16
+ attributes = [ :name, :uuid, :bridge_name]
17
+ tests("The network model should respond to") do
18
+ attributes.each do |attribute|
19
+ test("#{attribute}") { network.respond_to? attribute }
20
+ end
21
+ end
22
+ tests("The attributes hash should have key") do
23
+ attributes.each do |attribute|
24
+ test("#{attribute}") { model_attribute_hash.key? attribute }
25
+ end
26
+ end
27
+ end
28
+ test('be a kind of Fog::Libvirt::Compute::Network') { network.kind_of? Fog::Libvirt::Compute::Network }
29
+ end
30
+
31
+ end
@@ -0,0 +1,13 @@
1
+ Shindo.tests('Fog::Compute[:libvirt] | networks collection', ['libvirt']) do
2
+
3
+ networks = Fog::Compute[:libvirt].networks
4
+
5
+ tests('The networks collection') do
6
+ test('should be a kind of Fog::Libvirt::Compute::Networks') { networks.kind_of? Fog::Libvirt::Compute::Networks }
7
+ tests('should be able to reload itself').succeeds { networks.reload }
8
+ tests('should be able to get a model') do
9
+ tests('by instance id').succeeds { networks.get networks.first.uuid }
10
+ end
11
+ end
12
+
13
+ end
@@ -0,0 +1,31 @@
1
+ Shindo.tests('Fog::Compute[:libvirt] | nic model', ['libvirt']) do
2
+
3
+ nic = Fog::Compute[:libvirt].servers.all.select{|v| v.name =~ /^fog/}.first.nics.first
4
+
5
+ tests('The nic model should') do
6
+ tests('have the action') do
7
+ test('reload') { nic.respond_to? 'reload' }
8
+ end
9
+ tests('have attributes') do
10
+ model_attribute_hash = nic.attributes
11
+ attributes = [ :mac,
12
+ :model,
13
+ :type,
14
+ :network,
15
+ :bridge]
16
+ tests("The nic model should respond to") do
17
+ attributes.each do |attribute|
18
+ test("#{attribute}") { nic.respond_to? attribute }
19
+ end
20
+ end
21
+ tests("The attributes hash should have key") do
22
+ attributes.delete(:bridge)
23
+ attributes.each do |attribute|
24
+ test("#{attribute}") { model_attribute_hash.key? attribute }
25
+ end
26
+ end
27
+ end
28
+ test('be a kind of Fog::Libvirt::Compute::Nic') { nic.kind_of? Fog::Libvirt::Compute::Nic }
29
+ end
30
+
31
+ end
@@ -0,0 +1,10 @@
1
+ Shindo.tests('Fog::Compute[:libvirt] | nics collection', ['libvirt']) do
2
+
3
+ nics = Fog::Compute[:libvirt].servers.first.nics
4
+
5
+ tests('The nics collection') do
6
+ test('should not be empty') { not nics.empty? }
7
+ test('should be a kind of Array') { nics.kind_of? Array }
8
+ end
9
+
10
+ end
@@ -0,0 +1,27 @@
1
+ Shindo.tests('Fog::Compute[:libvirt] | interface model', ['libvirt']) do
2
+
3
+ pools = Fog::Compute[:libvirt].pools
4
+ pool = pools.last
5
+
6
+ tests('The interface model should') do
7
+ tests('have the action') do
8
+ test('reload') { pool.respond_to? 'reload' }
9
+ end
10
+ tests('have attributes') do
11
+ model_attribute_hash = pool.attributes
12
+ attributes = [ :uuid, :name, :persistent, :active, :autostart, :allocation, :capacity, :num_of_volumes, :state]
13
+ tests("The interface model should respond to") do
14
+ attributes.each do |attribute|
15
+ test("#{attribute}") { pool.respond_to? attribute }
16
+ end
17
+ end
18
+ tests("The attributes hash should have key") do
19
+ attributes.each do |attribute|
20
+ test("#{attribute}") { model_attribute_hash.key? attribute }
21
+ end
22
+ end
23
+ end
24
+ test('be a kind of Fog::Libvirt::Compute::Pool') { pool.kind_of? Fog::Libvirt::Compute::Pool }
25
+ end
26
+
27
+ end
@@ -0,0 +1,13 @@
1
+ Shindo.tests('Fog::Compute[:libvirt] | pools request', ['libvirt']) do
2
+
3
+ pools = Fog::Compute[:libvirt].pools
4
+
5
+ tests('The pools collection') do
6
+ test('should not be empty') { not pools.empty? }
7
+ test('should be a kind of Fog::Libvirt::Compute::Pools') { pools.kind_of? Fog::Libvirt::Compute::Pools }
8
+ tests('should be able to reload itself').succeeds { pools.reload }
9
+ tests('should be able to get a model') do
10
+ tests('by instance id').succeeds { pools.get pools.first.uuid }
11
+ end
12
+ end
13
+ end