238 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			238 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
require 'spec_helper'
 | 
						|
 | 
						|
describe 'swift::storage::server' do
 | 
						|
  let :pre_condition do
 | 
						|
    "class { 'swift': swift_hash_path_suffix => 'foo' }
 | 
						|
     class { 'swift::storage': storage_local_net_ip => '10.0.0.1' }
 | 
						|
     swift::storage::filter::healthcheck { 'container': }
 | 
						|
     swift::storage::filter::recon { 'container': }
 | 
						|
     swift::storage::filter::healthcheck { 'object': }
 | 
						|
     swift::storage::filter::recon { 'object': }
 | 
						|
     swift::storage::filter::healthcheck { 'account': }
 | 
						|
     swift::storage::filter::recon { 'account': }
 | 
						|
    "
 | 
						|
  end
 | 
						|
 | 
						|
  let :default_params do
 | 
						|
    {
 | 
						|
      :devices         => '/srv/node',
 | 
						|
      :owner           => 'swift',
 | 
						|
      :group           => 'swift',
 | 
						|
      :incoming_chmod  => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r',
 | 
						|
      :outgoing_chmod  => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r',
 | 
						|
      :max_connections => '25',
 | 
						|
      :log_requests    => true
 | 
						|
    }
 | 
						|
  end
 | 
						|
 | 
						|
  shared_examples 'swift::storage::server' do
 | 
						|
    describe 'with an invalid title' do
 | 
						|
      let :params do
 | 
						|
        {:storage_local_net_ip => '127.0.0.1',
 | 
						|
        :type => 'object'}
 | 
						|
      end
 | 
						|
 | 
						|
      let :title do
 | 
						|
        'foo'
 | 
						|
      end
 | 
						|
 | 
						|
      it { should raise_error(Puppet::Error) }
 | 
						|
    end
 | 
						|
 | 
						|
    ['account', 'object', 'container'].each do |t|
 | 
						|
      describe "for type #{t}" do
 | 
						|
        let :title do
 | 
						|
          '8000'
 | 
						|
        end
 | 
						|
 | 
						|
        let :req_params do
 | 
						|
          {:storage_local_net_ip => '10.0.0.1', :type => t}
 | 
						|
        end
 | 
						|
 | 
						|
        let :params do
 | 
						|
          req_params
 | 
						|
        end
 | 
						|
 | 
						|
        it { is_expected.to contain_package("swift-#{t}").with_ensure('present') }
 | 
						|
        it { is_expected.to contain_service("swift-#{t}-server").with(
 | 
						|
          :ensure     => 'running',
 | 
						|
          :enable     => true,
 | 
						|
          :hasstatus  => true,
 | 
						|
        )}
 | 
						|
 | 
						|
        describe 'when parameters are overridden' do
 | 
						|
          {
 | 
						|
            :devices     => '/tmp/foo',
 | 
						|
            :user        => 'dan',
 | 
						|
            :mount_check => true,
 | 
						|
            :workers     => 7,
 | 
						|
            :pipeline    => ['healthcheck'],
 | 
						|
          }.each do |k,v|
 | 
						|
            describe "when #{k} is set" do
 | 
						|
              let :params do req_params.merge({k => v}) end
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^#{k.to_s}\s*=\s*#{v.is_a?(Array) ? v.join(' ') : v}\s*$/) }
 | 
						|
            end
 | 
						|
          end
 | 
						|
 | 
						|
          describe "when pipeline is passed an array" do
 | 
						|
            let :params do req_params.merge({:pipeline => ['healthcheck','recon']})  end
 | 
						|
            it { is_expected.to contain_concat__fragment("swift-#{t}-#{title}").with(
 | 
						|
              :content => /^pipeline\s*=\s*healthcheck recon\s*$/,
 | 
						|
              :before => ["Swift::Storage::Filter::Healthcheck[#{t}]", "Swift::Storage::Filter::Recon[#{t}]",]
 | 
						|
            )}
 | 
						|
          end
 | 
						|
 | 
						|
          describe "when pipeline is not passed an array" do
 | 
						|
            let :params do req_params.merge({:pipeline => 'not an array'}) end
 | 
						|
            it { should raise_error(Puppet::Error) }
 | 
						|
          end
 | 
						|
 | 
						|
          describe "when replicator_concurrency is set" do
 | 
						|
            let :params do req_params.merge({:replicator_concurrency => 42}) end
 | 
						|
            it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/\[#{t}-replicator\]\nconcurrency\s*=\s*42\s*$/m) }
 | 
						|
          end
 | 
						|
 | 
						|
          if t != 'object'
 | 
						|
            describe "when replicator_concurrency and replicator_interval are set" do
 | 
						|
              let :params do req_params.merge(
 | 
						|
                { :replicator_concurrency => 42,
 | 
						|
                  :replicator_interval => 42})
 | 
						|
              end
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/\[#{t}-replicator\]\nconcurrency\s*=\s*42\ninterval\s*=\s*42\s*$/m) }
 | 
						|
            end
 | 
						|
          end
 | 
						|
 | 
						|
          if t != 'account'
 | 
						|
            describe "when updater_concurrency is set" do
 | 
						|
              let :params do req_params.merge({:updater_concurrency => 73}) end
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/\[#{t}-updater\]\nconcurrency\s*=\s*73\s*$/m) }
 | 
						|
            end
 | 
						|
          else
 | 
						|
            describe "when reaper_concurrency is set" do
 | 
						|
              let :params do req_params.merge({:reaper_concurrency => 4682}) end
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/\[#{t}-reaper\]\nconcurrency\s*=\s*4682\s*$/m) }
 | 
						|
            end
 | 
						|
          end
 | 
						|
 | 
						|
          if t == 'container'
 | 
						|
            describe "when allow_versioning is set" do
 | 
						|
             let :params do req_params.merge({ :allow_versions => false, }) end
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/\[app:container-server\]\nallow_versions\s*=\s*false\s*$/m) }
 | 
						|
            end
 | 
						|
          end
 | 
						|
 | 
						|
          if t == 'object'
 | 
						|
            describe "when splice is not set" do
 | 
						|
             it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^splice\s*=\s*false\s*$/) }
 | 
						|
            end
 | 
						|
            describe "when splice is set" do
 | 
						|
             let :params do req_params.merge({ :splice => true, }) end
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^splice\s*=\s*true\s*$/) }
 | 
						|
            end
 | 
						|
 | 
						|
            describe "when client_timeout is not set" do
 | 
						|
             it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^client_timeout\s*=\s*60\s*$/) }
 | 
						|
            end
 | 
						|
            describe "when client_timeout is set" do
 | 
						|
             let :params do req_params.merge({ :client_timeout => 30, }) end
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^client_timeout\s*=\s*30\s*$/) }
 | 
						|
            end
 | 
						|
 | 
						|
            describe "when rsync_timeout is not set" do
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^rsync_timeout\s*=\s*900\s*$/) }
 | 
						|
            end
 | 
						|
            describe "when rsync_timeout is set" do
 | 
						|
             let :params do req_params.merge({ :rsync_timeout => 600, }) end
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^rsync_timeout\s*=\s*600\s*$/) }
 | 
						|
            end
 | 
						|
 | 
						|
            describe "when rsync_bwlimit is not set" do
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^rsync_bwlimit\s*=\s*0\s*$/) }
 | 
						|
            end
 | 
						|
            describe "when rsync_bwlimit is set" do
 | 
						|
             let :params do req_params.merge({ :rsync_bwlimit => 2048, }) end
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^rsync_bwlimit\s*=\s*2048\s*$/) }
 | 
						|
            end
 | 
						|
          end
 | 
						|
 | 
						|
          describe "when log_udp_port is set" do
 | 
						|
            context 'and log_udp_host is not set' do
 | 
						|
              let :params do req_params.merge({ :log_udp_port => 514}) end
 | 
						|
               it_raises 'a Puppet::Error', /log_udp_port requires log_udp_host to be set/
 | 
						|
              end
 | 
						|
            context 'and log_udp_host is set' do
 | 
						|
              let :params do req_params.merge(
 | 
						|
                { :log_udp_host => '127.0.0.1',
 | 
						|
                  :log_udp_port => '514'})
 | 
						|
              end
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^log_udp_host\s*=\s*127\.0\.0\.1\s*$/) }
 | 
						|
              it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^log_udp_port\s*=\s*514\s*$/) }
 | 
						|
            end
 | 
						|
          end
 | 
						|
 | 
						|
          describe "when using swift_#{t}_config resource" do
 | 
						|
            let :pre_condition do
 | 
						|
              "
 | 
						|
              class { 'swift': swift_hash_path_suffix => 'foo' }
 | 
						|
              class { 'swift::storage': storage_local_net_ip => '10.0.0.1' }
 | 
						|
              swift_#{t}_config { 'foo/bar': value => 'foo' }
 | 
						|
              "
 | 
						|
            end
 | 
						|
            it { is_expected.to contain_concat("/etc/swift/#{t}-server.conf").that_comes_before("Swift_#{t}_config[foo/bar]") }
 | 
						|
          end
 | 
						|
 | 
						|
          describe "when log_requests is turned off" do
 | 
						|
            let :params do req_params.merge({:log_requests => false}) end
 | 
						|
            it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_requests\s*=\s*false\s*$/) }
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        describe 'with all allowed defaults' do
 | 
						|
          let :params do
 | 
						|
            req_params
 | 
						|
          end
 | 
						|
 | 
						|
          it { is_expected.to contain_rsync__server__module("#{t}").with(
 | 
						|
            :path            => '/srv/node',
 | 
						|
            :lock_file       => "/var/lock/#{t}.lock",
 | 
						|
            :uid             => 'swift',
 | 
						|
            :gid             => 'swift',
 | 
						|
            :incoming_chmod  => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r',
 | 
						|
            :outgoing_chmod  => 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r',
 | 
						|
            :max_connections => 25,
 | 
						|
            :read_only       => false
 | 
						|
          )}
 | 
						|
 | 
						|
          # verify template lines
 | 
						|
          it { is_expected.to contain_concat("/etc/swift/#{t}-server.conf") }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^devices\s*=\s*\/srv\/node\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^bind_ip\s*=\s*10\.0\.0\.1\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^bind_port\s*=\s*#{title}\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^mount_check\s*=\s*true\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^user\s*=\s*swift\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_name\s*=\s*#{t}-server\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_facility\s*=\s*LOG_LOCAL2\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_level\s*=\s*INFO\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_address\s*=\s*\/dev\/log\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^set log_requests\s*=\s*true\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^workers\s*=\s*2\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^concurrency\s*=\s*1\s*$/) }
 | 
						|
          it { is_expected.to contain_concat_fragment("swift-#{t}-#{title}").with_content(/^pipeline\s*=\s*#{t}-server\s*$/) }
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  on_supported_os({
 | 
						|
    :supported_os => OSDefaults.get_supported_os
 | 
						|
  }).each do |os,facts|
 | 
						|
    context "on #{os}" do
 | 
						|
      let (:facts) do
 | 
						|
        facts.merge(OSDefaults.get_facts())
 | 
						|
      end
 | 
						|
 | 
						|
      it_configures 'swift::storage::server'
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |