-
Notifications
You must be signed in to change notification settings - Fork 183
/
redis_multi_instances_one_host_spec.rb
89 lines (75 loc) · 2.53 KB
/
redis_multi_instances_one_host_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# frozen_string_literal: true
require 'spec_helper_acceptance'
describe 'redis::instance example' do
# TODO: SELinux
# semanage port --add --type redis_port_t --proto tcp 6380-6382
# Label /run/redis-server-\d+(/.+)? as redis_var_run_t
instances = [6379, 6380, 6381, 6382]
config_path = case fact('os.family')
when 'Debian'
'/etc/redis'
when 'RedHat'
if fact('os.release.major').to_i >= 9
'/etc/redis'
else
'/etc'
end
else
'/etc'
end
redis_name = case fact('os.family')
when 'Debian'
'redis-server'
else
'redis'
end
include_examples 'an idempotent resource' do
let(:manifest) do
<<~PUPPET
$listening_ports = #{instances}
class { 'redis':
default_install => false,
service_enable => false,
service_ensure => 'stopped',
protected_mode => false,
bind => [],
}
$listening_ports.each |$port| {
$port_string = sprintf('%d',$port)
redis::instance { $port_string:
service_enable => true,
service_ensure => 'running',
port => $port,
bind => $facts['networking']['ip'],
dbfilename => "${port}-dump.rdb",
appendfilename => "${port}-appendonly.aof",
appendfsync => 'always',
require => Class['Redis'],
}
}
PUPPET
end
end
specify { expect(package(redis_name)).to be_installed }
specify do
expect(service(redis_name)).not_to be_enabled
expect(service(redis_name)).not_to be_running
end
instances.each do |instance|
specify do
expect(file("/etc/systemd/system/redis-server-#{instance}.service")).
to be_file.
and have_attributes(content: include("redis-server-#{instance}.conf"))
end
specify { expect(service("redis-server-#{instance}")).to be_enabled.and be_running }
specify do
expect(file("#{config_path}/redis-server-#{instance}.conf")).
to be_file.
and have_attributes(content: include("port #{instance}"))
end
specify "redis instance #{instance} should respond to ping command" do
expect(command("redis-cli -h #{fact('networking.ip')} -p #{instance} ping")).
to have_attributes(stdout: %r{PONG})
end
end
end