fog-libvirt-csem 0.9.0

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