openstack_spec.rb 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. require 'puppet'
  2. require 'spec_helper'
  3. require 'puppet/provider/nova_aggregate/openstack'
  4. provider_class = Puppet::Type.type(:nova_aggregate).provider(:openstack)
  5. describe provider_class do
  6. shared_examples 'authenticated with environment variables' do
  7. ENV['OS_USERNAME'] = 'test'
  8. ENV['OS_PASSWORD'] = 'abc123'
  9. ENV['OS_PROJECT_NAME'] = 'test'
  10. ENV['OS_AUTH_URL'] = 'http://127.0.0.1:35357/v3'
  11. end
  12. describe 'managing aggregates' do
  13. let(:aggregate_attrs) do
  14. {
  15. :name => 'just',
  16. :availability_zone => 'simple',
  17. :hosts => ['example'],
  18. :ensure => 'present',
  19. :metadata => 'nice=cookie',
  20. }
  21. end
  22. let(:resource) do
  23. Puppet::Type::Nova_aggregate.new(aggregate_attrs)
  24. end
  25. let(:provider) do
  26. provider_class.new(resource)
  27. end
  28. it_behaves_like 'authenticated with environment variables' do
  29. describe '#instances' do
  30. it 'finds existing aggregates' do
  31. provider_class.expects(:openstack)
  32. .with('aggregate', 'list', '--quiet', '--format', 'csv', [])
  33. .returns('"ID","Name","Availability Zone"
  34. just,"simple","just"
  35. ')
  36. provider_class.expects(:openstack)
  37. .with('aggregate', 'show', '--format', 'shell', 'simple')
  38. .returns('"id="just"
  39. name="simple"
  40. availability_zone=just"
  41. properties="key=\'2value\'"
  42. hosts="[]"
  43. ')
  44. instances = provider_class.instances
  45. expect(instances.count).to eq(1)
  46. expect(instances[0].name).to eq('simple')
  47. end
  48. end
  49. describe '#create' do
  50. it 'creates aggregate' do
  51. provider.class.stubs(:openstack)
  52. .with('aggregate', 'list', '--quiet', '--format', 'csv', '--long')
  53. .returns('"ID","Name","Availability Zone","Properties"
  54. ')
  55. provider.class.stubs(:openstack)
  56. .with('aggregate', 'create', '--format', 'shell', ['just', '--zone', 'simple', '--property', 'nice=cookie' ])
  57. .returns('name="just"
  58. id="just"
  59. availability_zone="simple"
  60. properties="{u\'nice\': u\'cookie\'}"
  61. hosts="[]"
  62. ')
  63. provider.class.stubs(:openstack)
  64. .with('aggregate', 'add host', ['just', 'example'])
  65. .returns('name="just"
  66. id="just"
  67. availability_zone="simple"
  68. properties="{u\'nice\': u\'cookie\'}"
  69. hosts="[u\'example\']"
  70. ')
  71. provider.exists?
  72. provider.create
  73. expect(provider.exists?).to be_falsey
  74. end
  75. end
  76. describe '#destroy' do
  77. it 'removes aggregate with hosts' do
  78. provider_class.expects(:openstack)
  79. .with('aggregate', 'remove host', ['just', 'example'])
  80. provider_class.expects(:openstack)
  81. .with('aggregate', 'delete', 'just')
  82. provider.instance_variable_set(:@property_hash, aggregate_attrs)
  83. provider.destroy
  84. expect(provider.exists?).to be_falsey
  85. end
  86. end
  87. end
  88. end
  89. end