nova_db_spec.rb 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. require 'spec_helper'
  2. describe 'nova::db' do
  3. let :params do
  4. {}
  5. end
  6. shared_examples 'nova::db' do
  7. context 'with default parameters' do
  8. it { is_expected.to_not contain_nova_config('database/db_max_retries') }
  9. it { is_expected.to_not contain_nova_config('database/connection') }
  10. it { is_expected.to_not contain_nova_config('database/slave_connection') }
  11. it { is_expected.to_not contain_nova_config('api_database/connection') }
  12. it { is_expected.to_not contain_nova_config('api_database/slave_connection') }
  13. it { is_expected.to_not contain_nova_config('placement_database/connection') }
  14. it { is_expected.to_not contain_nova_config('placement_database/slave_connection') }
  15. it { is_expected.to_not contain_nova_config('database/idle_timeout') }
  16. it { is_expected.to_not contain_nova_config('database/min_pool_size') }
  17. it { is_expected.to_not contain_nova_config('database/max_retries') }
  18. it { is_expected.to_not contain_nova_config('database/retry_interval') }
  19. end
  20. context 'with overriden parameters' do
  21. before :each do
  22. params.merge!(
  23. :database_connection => 'mysql+pymysql://user:pass@db/db1',
  24. :slave_connection => 'mysql+pymysql://user:pass@slave/db1',
  25. :api_database_connection => 'mysql+pymysql://user:pass@db/db2',
  26. :api_slave_connection => 'mysql+pymysql://user:pass@slave/db2',
  27. :placement_database_connection => 'mysql+pymysql://user:pass@db/db2',
  28. :placement_slave_connection => 'mysql+pymysql://user:pass@slave/db2',
  29. )
  30. end
  31. it { is_expected.to contain_nova_config('database/db_max_retries').with_value('<SERVICE DEFAULT>') }
  32. it { is_expected.to contain_nova_config('database/connection').with_value('mysql+pymysql://user:pass@db/db1').with_secret(true) }
  33. it { is_expected.to contain_nova_config('database/slave_connection').with_value('mysql+pymysql://user:pass@slave/db1').with_secret(true) }
  34. it { is_expected.to contain_nova_config('api_database/connection').with_value('mysql+pymysql://user:pass@db/db2').with_secret(true) }
  35. it { is_expected.to contain_nova_config('api_database/slave_connection').with_value('mysql+pymysql://user:pass@slave/db2').with_secret(true) }
  36. it { is_expected.to contain_nova_config('placement_database/connection').with_value('mysql+pymysql://user:pass@db/db2').with_secret(true) }
  37. it { is_expected.to contain_nova_config('placement_database/slave_connection').with_value('mysql+pymysql://user:pass@slave/db2').with_secret(true) }
  38. it { is_expected.to contain_nova_config('database/idle_timeout').with_value('<SERVICE DEFAULT>') }
  39. it { is_expected.to contain_nova_config('database/min_pool_size').with_value('<SERVICE DEFAULT>') }
  40. it { is_expected.to contain_nova_config('database/max_retries').with_value('<SERVICE DEFAULT>') }
  41. it { is_expected.to contain_nova_config('database/retry_interval').with_value('<SERVICE DEFAULT>') }
  42. end
  43. context 'with postgresql backend' do
  44. let :params do
  45. { :database_connection => 'postgresql://nova:nova@localhost/nova', }
  46. end
  47. it 'install the proper backend package' do
  48. is_expected.to contain_package('python-psycopg2').with(:ensure => 'present')
  49. end
  50. end
  51. context 'with MySQL-python library as backend package' do
  52. let :params do
  53. { :database_connection => 'mysql://user:pass@db/db', }
  54. end
  55. it { is_expected.to contain_package('python-mysqldb').with(:ensure => 'present') }
  56. end
  57. context 'with incorrect database_connection string' do
  58. let :params do
  59. { :database_connection => 'redis://nova:nova@localhost/nova', }
  60. end
  61. it_raises 'a Puppet::Error', /validate_re/
  62. end
  63. context 'with incorrect pymysql database_connection string' do
  64. let :params do
  65. { :database_connection => 'foo+pymysql://user:pass@db/db', }
  66. end
  67. it_raises 'a Puppet::Error', /validate_re/
  68. end
  69. end
  70. shared_examples_for 'nova::db RedHat' do
  71. context 'using pymysql driver' do
  72. let :params do
  73. { :database_connection => 'mysql+pymysql://user:pass@db/db', }
  74. end
  75. it { is_expected.not_to contain_package('db_backend_package') }
  76. end
  77. end
  78. shared_examples_for 'nova::db Debian' do
  79. context 'using pymysql driver' do
  80. let :params do
  81. { :database_connection => 'mysql+pymysql://user:pass@db/db', }
  82. end
  83. it 'install the proper backend package' do
  84. is_expected.to contain_package('db_backend_package').with(
  85. :ensure => 'present',
  86. :name => 'python-pymysql',
  87. :tag => ['openstack'],
  88. )
  89. end
  90. end
  91. context 'with sqlite backend' do
  92. let :params do
  93. { :database_connection => 'sqlite:///var/lib/nova/nova.sqlite', }
  94. end
  95. it 'install the proper backend package' do
  96. is_expected.to contain_package('db_backend_package').with(
  97. :ensure => 'present',
  98. :name => 'python-pysqlite2',
  99. :tag => ['openstack'],
  100. )
  101. end
  102. end
  103. end
  104. on_supported_os({
  105. :supported_os => OSDefaults.get_supported_os
  106. }).each do |os,facts|
  107. context "on #{os}" do
  108. let (:facts) do
  109. facts.merge!(OSDefaults.get_facts())
  110. end
  111. it_configures 'nova::db'
  112. it_configures "nova::db #{facts[:osfamily]}"
  113. end
  114. end
  115. end