Add ceph profile rspec testing
authorAlex Schultz <aschultz@redhat.com>
Wed, 5 Oct 2016 18:22:04 +0000 (12:22 -0600)
committerAlex Schultz <aschultz@redhat.com>
Wed, 5 Oct 2016 18:22:04 +0000 (12:22 -0600)
This change adds rspec testing for the ceph profiles in puppet-tripleo.

Change-Id: I08954e011848d6b747735f11b3cbff5707460c26

spec/classes/tripleo_profile_base_ceph_client_spec.rb [new file with mode: 0644]
spec/classes/tripleo_profile_base_ceph_mon_spec.rb [new file with mode: 0644]
spec/classes/tripleo_profile_base_ceph_osd_spec.rb [new file with mode: 0644]
spec/classes/tripleo_profile_base_ceph_rgw_spec.rb [new file with mode: 0644]
spec/classes/tripleo_profile_base_ceph_spec.rb [new file with mode: 0644]
spec/fixtures/hieradata/default.yaml

diff --git a/spec/classes/tripleo_profile_base_ceph_client_spec.rb b/spec/classes/tripleo_profile_base_ceph_client_spec.rb
new file mode 100644 (file)
index 0000000..11367d2
--- /dev/null
@@ -0,0 +1,59 @@
+#
+# Copyright (C) 2016 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+require 'spec_helper'
+
+describe 'tripleo::profile::base::ceph::client' do
+  shared_examples_for 'tripleo::profile::base::ceph::client' do
+    let (:pre_condition) do
+      <<-eof
+      class { '::tripleo::profile::base::ceph':
+        step => #{params[:step]}
+      }
+      eof
+    end
+
+    context 'with step less than 2' do
+      let(:params) { { :step => 1 } }
+      it 'should do nothing' do
+        is_expected.to contain_class('tripleo::profile::base::ceph::client')
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to_not contain_class('ceph::profile::client')
+      end
+    end
+
+    context 'with step 2' do
+      let(:params) { {
+        :step => 2,
+      } }
+
+      it 'should include client configuration' do
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to contain_class('ceph::profile::client')
+      end
+    end
+  end
+
+  on_supported_os.each do |os, facts|
+    context "on #{os}" do
+      let(:facts) do
+        facts.merge({ :hostname => 'node.example.com' })
+      end
+
+      it_behaves_like 'tripleo::profile::base::ceph::client'
+    end
+  end
+end
diff --git a/spec/classes/tripleo_profile_base_ceph_mon_spec.rb b/spec/classes/tripleo_profile_base_ceph_mon_spec.rb
new file mode 100644 (file)
index 0000000..d5dde4f
--- /dev/null
@@ -0,0 +1,77 @@
+#
+# Copyright (C) 2016 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+require 'spec_helper'
+
+describe 'tripleo::profile::base::ceph::mon' do
+  shared_examples_for 'tripleo::profile::base::ceph::mon' do
+    let (:pre_condition) do
+      <<-eof
+      class { '::tripleo::profile::base::ceph':
+        step => #{params[:step]}
+      }
+      eof
+    end
+
+    context 'with step less than 2' do
+      let(:params) { { :step => 1 } }
+      it 'should do nothing' do
+        is_expected.to contain_class('tripleo::profile::base::ceph::mon')
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to_not contain_class('ceph::profile::mon')
+      end
+    end
+
+    context 'with step 2' do
+      let(:params) { {
+        :step => 2,
+      } }
+
+      it 'should include mon configuration' do
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to contain_class('ceph::profile::mon')
+      end
+    end
+
+    context 'with step 4 create pools' do
+      let(:params) { {
+        :step       => 4,
+        :ceph_pools => { 'mypool' => { 'size' => 5, 'pg_num' => 128, 'pgp_num' => 128 } }
+      } }
+
+      it 'should include mon configuration' do
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to contain_class('ceph::profile::mon')
+        is_expected.to contain_ceph__pool('mypool').with({
+          :size => 5,
+          :pg_num => 128,
+          :pgp_num => 128
+        })
+      end
+    end
+
+  end
+
+  on_supported_os.each do |os, facts|
+    context "on #{os}" do
+      let(:facts) do
+        facts.merge({ :hostname => 'node.example.com' })
+      end
+
+      it_behaves_like 'tripleo::profile::base::ceph::mon'
+    end
+  end
+end
diff --git a/spec/classes/tripleo_profile_base_ceph_osd_spec.rb b/spec/classes/tripleo_profile_base_ceph_osd_spec.rb
new file mode 100644 (file)
index 0000000..3008e12
--- /dev/null
@@ -0,0 +1,75 @@
+#
+# Copyright (C) 2016 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+require 'spec_helper'
+
+describe 'tripleo::profile::base::ceph::osd' do
+  shared_examples_for 'tripleo::profile::base::ceph::osd' do
+    let (:pre_condition) do
+      <<-eof
+      class { '::tripleo::profile::base::ceph':
+        step => #{params[:step]}
+      }
+      eof
+    end
+
+    context 'with step less than 3' do
+      let(:params) { { :step => 1 } }
+      it 'should do nothing' do
+        is_expected.to contain_class('tripleo::profile::base::ceph::osd')
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to_not contain_class('ceph::profile::osd')
+      end
+    end
+
+    context 'with step 3 defaults' do
+      let(:params) { {
+        :step => 3,
+      } }
+
+      it 'should include osd configuration' do
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to contain_class('ceph::profile::osd')
+        is_expected.to_not contain_exec('set selinux to permissive on boot')
+        is_expected.to_not contain_exec('set selinux to permissive')
+      end
+    end
+
+    context 'with step 3 enable selinux permissive' do
+      let(:params) { {
+        :step => 3,
+        :ceph_osd_selinux_permissive => true
+      } }
+
+      it 'should include osd configuration' do
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to contain_class('ceph::profile::osd')
+        is_expected.to contain_exec('set selinux to permissive on boot')
+        is_expected.to contain_exec('set selinux to permissive')
+      end
+    end
+  end
+
+  on_supported_os.each do |os, facts|
+    context "on #{os}" do
+      let(:facts) do
+        facts.merge({ :hostname => 'node.example.com' })
+      end
+
+      it_behaves_like 'tripleo::profile::base::ceph::osd'
+    end
+  end
+end
diff --git a/spec/classes/tripleo_profile_base_ceph_rgw_spec.rb b/spec/classes/tripleo_profile_base_ceph_rgw_spec.rb
new file mode 100644 (file)
index 0000000..e9459d0
--- /dev/null
@@ -0,0 +1,91 @@
+#
+# Copyright (C) 2016 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+require 'spec_helper'
+
+describe 'tripleo::profile::base::ceph::rgw' do
+  shared_examples_for 'tripleo::profile::base::ceph::rgw' do
+    let (:pre_condition) do
+      <<-eof
+      class { '::tripleo::profile::base::ceph':
+        step => #{params[:step]}
+      }
+      eof
+    end
+
+    let (:default_params) do
+      {
+        :keystone_admin_token => 'token',
+        :keystone_url         => 'url',
+        :rgw_key              => 'key'
+      }
+    end
+
+    context 'with step less than 3' do
+      let(:params) { default_params.merge({ :step => 1 }) }
+      it 'should do nothing' do
+        is_expected.to contain_class('tripleo::profile::base::ceph::rgw')
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to_not contain_class('ceph::profile::rgw')
+      end
+    end
+
+    context 'with step 3' do
+      let(:params) { default_params.merge({ :step => 3 }) }
+      it 'should include rgw configuration' do
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to contain_class('ceph::profile::rgw')
+        is_expected.to contain_ceph__key('client.radosgw.gateway').with(
+          :secret  => 'key',
+          :cap_mon => 'allow *',
+          :cap_osd => 'allow *',
+          :inject  => true
+        )
+        is_expected.to_not contain_ceph__rgw__keystone('radosgw.gateway')
+      end
+    end
+
+    context 'with step 4' do
+      let(:params) { default_params.merge({ :step => 4 }) }
+      it 'should include rgw configuration' do
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to contain_class('ceph::profile::rgw')
+        is_expected.to contain_ceph__key('client.radosgw.gateway').with(
+          :secret  => 'key',
+          :cap_mon => 'allow *',
+          :cap_osd => 'allow *',
+          :inject  => true
+        )
+        is_expected.to contain_ceph__rgw__keystone('radosgw.gateway').with(
+          :rgw_keystone_accepted_roles => ['admin', '_member_', 'Member'],
+          :use_pki                     => false,
+          :rgw_keystone_admin_token    => 'token',
+          :rgw_keystone_url            => 'url'
+        )
+      end
+    end
+  end
+
+  on_supported_os.each do |os, facts|
+    context "on #{os}" do
+      let(:facts) do
+        facts.merge({ :hostname => 'node.example.com' })
+      end
+
+      it_behaves_like 'tripleo::profile::base::ceph::rgw'
+    end
+  end
+end
diff --git a/spec/classes/tripleo_profile_base_ceph_spec.rb b/spec/classes/tripleo_profile_base_ceph_spec.rb
new file mode 100644 (file)
index 0000000..1532fb7
--- /dev/null
@@ -0,0 +1,99 @@
+#
+# Copyright (C) 2016 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+require 'spec_helper'
+
+describe 'tripleo::profile::base::ceph' do
+  shared_examples_for 'tripleo::profile::base::ceph' do
+    context 'with step less than 2' do
+      let(:params) { { :step => 1 } }
+      it 'should do nothing' do
+        is_expected.to contain_class('tripleo::profile::base::ceph')
+        is_expected.to_not contain_class('ceph::conf')
+        is_expected.to_not contain_class('ceph::profile::params')
+      end
+    end
+
+    context 'with step 2' do
+      let(:params) { {
+        :step => 2,
+      } }
+
+      it 'should trigger complete configuration' do
+        is_expected.to contain_class('ceph::profile::params').with(
+          :mon_initial_members => nil,
+          :mon_host            => '127.0.0.1'
+        )
+        is_expected.to contain_class('ceph::conf')
+      end
+    end
+
+    context 'with step 2 with initial members' do
+      let(:params) { {
+        :step                     => 2,
+        :ceph_mon_initial_members => [ 'monA', 'monB', 'monc' ]
+      } }
+
+      it 'should trigger complete configuration' do
+        is_expected.to contain_class('ceph::profile::params').with(
+          :mon_initial_members => 'mona,monb,monc',
+          :mon_host => '127.0.0.1'
+        )
+        is_expected.to contain_class('ceph::conf')
+      end
+    end
+
+    context 'with step 2 with ipv4 mon host' do
+      let(:params) { {
+        :step          => 2,
+        :ceph_mon_host => ['10.0.0.1', '10.0.0.2']
+      } }
+
+      it 'should trigger complete configuration' do
+        is_expected.to contain_class('ceph::profile::params').with(
+          :mon_initial_members => nil,
+          :mon_host => '10.0.0.1,10.0.0.2'
+        )
+        is_expected.to contain_class('ceph::conf')
+      end
+    end
+
+    context 'with step 2 with ipv6 mon host' do
+      let(:params) { {
+        :step          => 2,
+        :ceph_mon_host => ['fe80::fc54:ff:fe9e:7846', '10.0.0.2']
+      } }
+
+      it 'should trigger complete configuration' do
+        is_expected.to contain_class('ceph::profile::params').with(
+          :mon_initial_members => nil,
+          :mon_host => '[fe80::fc54:ff:fe9e:7846],10.0.0.2'
+        )
+        is_expected.to contain_class('ceph::conf')
+      end
+    end
+  end
+
+  on_supported_os.each do |os, facts|
+    context "on #{os}" do
+      let(:facts) do
+        facts.merge({ :hostname => 'node.example.com' })
+      end
+
+      it_behaves_like 'tripleo::profile::base::ceph'
+    end
+  end
+end
index e9409e7..f0f7f1c 100644 (file)
@@ -9,3 +9,5 @@ aodh::auth::auth_password: 'password'
 aodh::db::mysql::password: 'password'
 aodh::keystone::authtoken::password: 'password'
 ceilometer::keystone::authtoken::password: 'password'
+# ceph related items
+ceph::profile::params::mon_key: 'password'