]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/memcached/spec/classes/memcached_spec.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / memcached / spec / classes / memcached_spec.rb
diff --git a/3rdparty/modules/memcached/spec/classes/memcached_spec.rb b/3rdparty/modules/memcached/spec/classes/memcached_spec.rb
new file mode 100644 (file)
index 0000000..d8f2981
--- /dev/null
@@ -0,0 +1,231 @@
+require 'spec_helper'
+describe 'memcached' do
+
+  describe 'with manage_firewall parameter' do
+    ['Debian','RedHat'].each do |osfam|
+      context "on osfamily #{osfam}" do
+        let(:facts) do
+          { :osfamily       => osfam,
+            :memorysize     => '1000 MB',
+            :processorcount => '1',
+          }
+        end
+
+        ['true',true].each do |value|
+          context "set to #{value}" do
+            let(:params) { { :manage_firewall => value } }
+
+            it { should contain_class('memcached') }
+
+            it { should contain_firewall('100_tcp_11211_for_memcached') }
+            it { should contain_firewall('100_udp_11211_for_memcached') }
+          end
+        end
+
+        ['false',false].each do |value|
+          context "set to #{value}" do
+            let(:params) { { :manage_firewall => value } }
+
+            it { should contain_class('memcached') }
+
+            it { should_not contain_firewall('100_tcp_11211_for_memcached') }
+            it { should_not contain_firewall('100_udp_11211_for_memcached') }
+          end
+        end
+
+        context 'set to an invalid type (array)' do
+          let(:params) { { :manage_firewall => ['invalid','type'] } }
+
+          it do
+            expect {
+              should contain_class('memcached')
+            }.to raise_error(Puppet::Error)
+          end
+        end
+      end
+    end
+  end
+
+  let :default_params do
+    {
+      :package_ensure  => 'present',
+      :logfile         => '/var/log/memcached.log',
+      :max_memory      => false,
+      :item_size       => false,
+      :lock_memory     => false,
+      :listen_ip       => '0.0.0.0',
+      :tcp_port        => '11211',
+      :udp_port        => '11211',
+      :user            => 'nobody',
+      :max_connections => '8192',
+      :install_dev     => false,
+      :processorcount  => 1,
+      :use_sasl        => false,
+      :large_mem_pages => false,
+    }
+  end
+
+  [ {},
+    {
+      :package_ensure  => 'latest',
+      :logfile         => '/var/log/memcached.log',
+      :max_memory      => '2',
+      :item_size       => false,
+      :lock_memory     => true,
+      :listen_ip       => '127.0.0.1',
+      :tcp_port        => '11212',
+      :udp_port        => '11213',
+      :user            => 'somebdy',
+      :max_connections => '8193',
+      :verbosity       => 'vvv',
+      :processorcount  => 3,
+      :use_sasl        => true,
+      :large_mem_pages => true,
+    },
+    {
+      :package_ensure  => 'present',
+      :logfile         => '/var/log/memcached.log',
+      :max_memory      => '20%',
+      :lock_memory     => false,
+      :listen_ip       => '127.0.0.1',
+      :tcp_port        => '11212',
+      :udp_port        => '11213',
+      :user            => 'somebdy',
+      :max_connections => '8193',
+      :verbosity       => 'vvv',
+      :install_dev     => true,
+      :processorcount  => 1
+    },
+    {
+      :listen_ip       => '',
+    },
+    {
+      :pidfile         => false,
+    },
+    {
+      :pidfile         => '/var/log/memcached.pid',
+    },
+    {
+      :package_ensure  => 'absent',
+      :install_dev     => true
+    },
+    {
+      :service_manage => false
+    }
+  ].each do |param_set|
+    describe "when #{param_set == {} ? "using default" : "specifying"} class parameters" do
+
+      let :param_hash do
+        default_params.merge(param_set)
+      end
+
+      let :params do
+        param_set
+      end
+
+      ['Debian'].each do |osfamily|
+
+        let :facts do
+          {
+            :osfamily => osfamily,
+            :memorysize => '1000 MB',
+            :processorcount => '1',
+          }
+        end
+
+        describe "on supported osfamily: #{osfamily}" do
+
+          it { should contain_class("memcached::params") }
+
+          it { should contain_package("memcached").with_ensure(param_hash[:package_ensure]) }
+
+          it { should_not contain_firewall('100_tcp_11211_for_memcached') }
+          it { should_not contain_firewall('100_udp_11211_for_memcached') }
+
+          it {
+            if param_hash[:install_dev]
+            should contain_package("libmemcached-dev").with_ensure(param_hash[:package_ensure])
+            end
+          }
+
+          it { should contain_file("/etc/memcached.conf").with(
+            'owner'   => 'root',
+            'group'   => 'root'
+          )}
+
+          it { 
+            if param_hash[:service_manage] == false
+              should_not contain_service('memcached')
+            elsif param_hash[:package_ensure] == 'absent'
+              should contain_service("memcached").with(
+                'ensure'     => 'stopped',
+                'enable'     => false
+              )
+            else
+              should contain_service("memcached").with(
+                'ensure'     => 'running',
+                'enable'     => true,
+                'hasrestart' => true,
+                'hasstatus'  => false
+              )
+            end
+          }
+
+          it 'should compile the template based on the class parameters' do
+            content = param_value(
+              subject,
+              'file',
+              '/etc/memcached.conf',
+              'content'
+            )
+            expected_lines = [
+              "logfile #{param_hash[:logfile]}",
+              "-p #{param_hash[:tcp_port]}",
+              "-U #{param_hash[:udp_port]}",
+              "-u #{param_hash[:user]}",
+              "-c #{param_hash[:max_connections]}",
+              "-t #{param_hash[:processorcount]}"
+            ]
+            if(param_hash[:max_memory])
+              if(param_hash[:max_memory].end_with?('%'))
+                expected_lines.push("-m 200")
+              else
+                expected_lines.push("-m #{param_hash[:max_memory]}")
+              end
+            else
+              expected_lines.push("-m 950")
+            end
+            if(param_hash[:listen_ip] != '')
+              expected_lines.push("-l #{param_hash[:listen_ip]}")
+            end
+            if(param_hash[:lock_memory])
+              expected_lines.push("-k")
+            end
+            if(param_hash[:pidfile])
+              expected_lines.push("-P #{param_hash[:pidfile]}")
+            end
+            if(param_hash[:verbosity])
+              expected_lines.push("-vvv")
+            end
+            if(param_hash[:use_sasl])
+              expected_lines.push("-S")
+            end
+            if(param_hash[:large_mem_pages])
+              expected_lines.push("-L")
+            end
+            (content.split("\n") & expected_lines).should =~ expected_lines
+          end
+        end
+      end
+      ['Redhat'].each do |osfamily|
+        describe 'on supported platform' do
+          it 'should fail' do
+
+          end
+        end
+      end
+    end
+  end
+end
+
+# vim: expandtab shiftwidth=2 softtabstop=2