--- /dev/null
+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