diff --git a/manifests/mirror/service.pp b/manifests/mirror/service.pp index b4132cb..015c912 100644 --- a/manifests/mirror/service.pp +++ b/manifests/mirror/service.pp @@ -1,69 +1,69 @@ # @summary # This class handles the Kafka (mirror) service. # # @api private # class kafka::mirror::service( Boolean $manage_service = $kafka::mirror::manage_service, Enum['running', 'stopped'] $service_ensure = $kafka::mirror::service_ensure, String[1] $service_name = $kafka::mirror::service_name, String[1] $user_name = $kafka::mirror::user_name, String[1] $group_name = $kafka::mirror::group_name, Stdlib::Absolutepath $config_dir = $kafka::mirror::config_dir, Stdlib::Absolutepath $log_dir = $kafka::mirror::log_dir, Stdlib::Absolutepath $bin_dir = $kafka::mirror::bin_dir, Array[String[1]] $service_requires = $kafka::mirror::service_requires, Optional[String[1]] $limit_nofile = $kafka::mirror::limit_nofile, Optional[String[1]] $limit_core = $kafka::mirror::limit_core, Hash $env = $kafka::mirror::env, Hash[String[1],String[1]] $consumer_config = $kafka::mirror::consumer_config, Hash[String[1],String[1]] $producer_config = $kafka::mirror::producer_config, Hash[String[1],String[1]] $service_config = $kafka::mirror::service_config, String[1] $heap_opts = $kafka::mirror::heap_opts, String[1] $jmx_opts = $kafka::mirror::jmx_opts, String[1] $log4j_opts = $kafka::mirror::log4j_opts, ) { assert_private() if $manage_service { $env_defaults = { 'KAFKA_HEAP_OPTS' => $heap_opts, 'KAFKA_JMX_OPTS' => $jmx_opts, 'KAFKA_LOG4J_OPTS' => $log4j_opts, } $environment = deep_merge($env_defaults, $env) - if $::service_provider == 'systemd' { + if $facts['service_provider'] == 'systemd' { include systemd file { "/etc/systemd/system/${service_name}.service": ensure => file, mode => '0644', content => template('kafka/unit.erb'), } file { "/etc/init.d/${service_name}": ensure => absent, } File["/etc/systemd/system/${service_name}.service"] ~> Exec['systemctl-daemon-reload'] -> Service[$service_name] } else { file { "/etc/init.d/${service_name}": ensure => file, mode => '0755', content => template('kafka/init.erb'), before => Service[$service_name], } } service { $service_name: ensure => $service_ensure, enable => true, hasstatus => true, hasrestart => true, } } } diff --git a/spec/classes/broker_spec.rb b/spec/classes/broker_spec.rb index ee9017f..d248678 100644 --- a/spec/classes/broker_spec.rb +++ b/spec/classes/broker_spec.rb @@ -1,173 +1,92 @@ require 'spec_helper' require 'shared_examples_param_validation' describe 'kafka::broker', type: :class do - let :facts do - { - osfamily: 'Debian', - os: { family: 'Debian' }, - operatingsystem: 'Ubuntu', - operatingsystemrelease: '14.04', - lsbdistcodename: 'trusty', - architecture: 'amd64', - service_provider: 'upstart' - } - end - let :common_params do - { - config: { - 'zookeeper.connect' => 'localhost:2181' - } - } - end - - let :params do - common_params - end - - it { is_expected.to contain_class('kafka::broker::install').that_comes_before('Class[kafka::broker::config]') } - it { is_expected.to contain_class('kafka::broker::config').that_comes_before('Class[kafka::broker::service]') } - it { is_expected.to contain_class('kafka::broker::service').that_comes_before('Class[kafka::broker]') } - it { is_expected.to contain_class('kafka::broker') } - - context 'on Debian' do - describe 'kafka::broker::install' do - context 'defaults' do - it { is_expected.to contain_class('kafka') } + on_supported_os.each do |os, os_facts| + context "on #{os}" do + let(:facts) do + os_facts end - end - - describe 'kafka::broker::config' do - context 'defaults' do - it { is_expected.to contain_file('/opt/kafka/config/server.properties') } - end - end - - describe 'kafka::broker::service' do - context 'manage_service false' do - let :params do - common_params.merge(manage_service: false) - end - it { is_expected.not_to contain_file('/etc/init.d/kafka') } - - it { is_expected.not_to contain_service('kafka') } + let :params do + { + config: { + 'zookeeper.connect' => 'localhost:2181' + } + } end - context 'defaults' do - it { is_expected.to contain_file('/etc/init.d/kafka') } - - context 'limit_nofile set' do - let :params do - { - limit_nofile: '65536' - } - end - - it { is_expected.to contain_file('/etc/init.d/kafka').with_content %r{ulimit -n 65536$} } - end - context 'limit_core set' do - let :params do - { - limit_core: 'infinity' - } - end + it { is_expected.to contain_class('kafka::broker::install').that_comes_before('Class[kafka::broker::config]') } + it { is_expected.to contain_class('kafka::broker::config').that_comes_before('Class[kafka::broker::service]') } + it { is_expected.to contain_class('kafka::broker::service').that_comes_before('Class[kafka::broker]') } + it { is_expected.to contain_class('kafka::broker') } - it { is_expected.to contain_file('/etc/init.d/kafka').with_content %r{ulimit -c infinity$} } + describe 'kafka::broker::install' do + context 'defaults' do + it { is_expected.to contain_class('kafka') } end - - it { is_expected.to contain_service('kafka') } end - end - end - context 'on Centos' do - let :facts do - { - osfamily: 'RedHat', - os: { family: 'RedHat' }, - operatingsystem: 'CentOS', - operatingsystemrelease: '7', - operatingsystemmajrelease: '7', - architecture: 'amd64', - path: '/usr/local/sbin', - service_provider: 'systemd' - } - end - - describe 'kafka::broker::install' do - context 'defaults' do - it { is_expected.to contain_class('kafka') } + describe 'kafka::broker::config' do + context 'defaults' do + it { is_expected.to contain_file('/opt/kafka/config/server.properties') } + end end - end - describe 'kafka::broker::config' do - context 'defaults' do - it { is_expected.to contain_file('/opt/kafka/config/server.properties') } - end - end + describe 'kafka::broker::service' do + context 'manage_service false' do + let(:params) { super().merge(manage_service: false) } - describe 'kafka::broker::service' do - context 'manage_service false' do - let :params do - common_params.merge(manage_service: false) + it { is_expected.not_to contain_file('/etc/init.d/kafka') } + it { is_expected.not_to contain_file('/etc/systemd/system/kafka.service') } + it { is_expected.not_to contain_service('kafka') } end - it { is_expected.not_to contain_file('/etc/systemd/system/kafka.service') } - - it { is_expected.not_to contain_service('kafka') } - end + context 'defaults' do + if os_facts[:service_provider] == 'systemd' + it { is_expected.to contain_file('/etc/init.d/kafka').with_ensure('absent') } + it { is_expected.to contain_file('/etc/systemd/system/kafka.service').that_notifies('Exec[systemctl-daemon-reload]') } + it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^After=network\.target syslog\.target$} } + it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^Wants=network\.target syslog\.target$} } + it { is_expected.not_to contain_file('/etc/systemd/system/kafka.service').with_content %r{^LimitNOFILE=} } + it { is_expected.not_to contain_file('/etc/systemd/system/kafka.service').with_content %r{^LimitCORE=} } + it { is_expected.to contain_exec('systemctl-daemon-reload').that_comes_before('Service[kafka]') } + else + it { is_expected.to contain_file('/etc/init.d/kafka') } + end - context 'defaults' do - it { is_expected.to contain_file('/etc/systemd/system/kafka.service').that_notifies('Exec[systemctl-daemon-reload]') } - it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^After=network\.target syslog\.target$} } - it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^Wants=network\.target syslog\.target$} } - it { is_expected.not_to contain_file('/etc/systemd/system/kafka.service').with_content %r{^LimitNOFILE=} } - it { is_expected.not_to contain_file('/etc/systemd/system/kafka.service').with_content %r{^LimitCORE=} } - - it do - is_expected.to contain_file('/etc/init.d/kafka').with( - ensure: 'absent' - ) + it { is_expected.to contain_service('kafka') } end - it { is_expected.to contain_exec('systemctl-daemon-reload').that_comes_before('Service[kafka]') } - - it { is_expected.to contain_service('kafka') } - end + context 'limit_nofile set' do + let(:params) { super().merge(limit_nofile: '65536') } - context 'limit_nofile set' do - let :params do - { - limit_nofile: '65536' - } + if os_facts[:service_provider] == 'systemd' + it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^LimitNOFILE=65536$} } + else + it { is_expected.to contain_file('/etc/init.d/kafka').with_content %r{ulimit -n 65536$} } + end end - it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^LimitNOFILE=65536$} } - end + context 'limit_core set' do + let(:params) { super().merge(limit_core: 'infinity') } - context 'limit_core set' do - let :params do - { - limit_core: 'infinity' - } + if os_facts[:service_provider] == 'systemd' + it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^LimitCORE=infinity$} } + else + it { is_expected.to contain_file('/etc/init.d/kafka').with_content %r{ulimit -c infinity$} } + end end - it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^LimitCORE=infinity$} } - end + context 'service_requires set', if: os_facts[:service_provider] == 'systemd' do + let(:params) { super().merge(service_requires: ['dummy.target']) } - context 'service_requires set' do - let :params do - { - service_requires: ['dummy.target'] - } + it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^After=dummy\.target$} } + it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^Wants=dummy\.target$} } end - - it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^After=dummy\.target$} } - it { is_expected.to contain_file('/etc/systemd/system/kafka.service').with_content %r{^Wants=dummy\.target$} } end + + it_validates_parameter 'mirror_url' end end - - it_validates_parameter 'mirror_url' end diff --git a/spec/classes/consumer_spec.rb b/spec/classes/consumer_spec.rb index 361a7cf..1ca6b1d 100644 --- a/spec/classes/consumer_spec.rb +++ b/spec/classes/consumer_spec.rb @@ -1,89 +1,54 @@ require 'spec_helper' require 'shared_examples_param_validation' describe 'kafka::consumer', type: :class do - let :facts do - { - osfamily: 'Debian', - os: { family: 'Debian' }, - operatingsystem: 'Ubuntu', - operatingsystemrelease: '14.04', - lsbdistcodename: 'trusty', - architecture: 'amd64', - service_provider: 'upstart' - } - end - - let :common_params do - { - service_config: { - 'topic' => 'demo', - 'zookeeper' => 'localhost:2181' - } - } - end - - let :params do - common_params - end - - it { is_expected.to contain_class('kafka::consumer::install').that_comes_before('Class[kafka::consumer::service]') } - it { is_expected.to contain_class('kafka::consumer::service').that_comes_before('Class[kafka::consumer]') } - it { is_expected.to contain_class('kafka::consumer') } - - context 'on Debian' do - describe 'kafka::consumer::install' do - context 'defaults' do - it { is_expected.to contain_class('kafka') } + on_supported_os.each do |os, os_facts| + context "on #{os}" do + let(:facts) do + os_facts end - end - describe 'kafka::consumer::service' do - context 'defaults' do - it { is_expected.to contain_file('/etc/init.d/kafka-consumer') } - - it { is_expected.to contain_service('kafka-consumer') } + let :params do + { + service_config: { + 'topic' => 'demo', + 'zookeeper' => 'localhost:2181' + } + } end - end - end - context 'on CentOS' do - let :facts do - { - osfamily: 'RedHat', - os: { family: 'RedHat' }, - operatingsystem: 'CentOS', - operatingsystemrelease: '7', - operatingsystemmajrelease: '7', - architecture: 'amd64', - path: '/usr/local/sbin', - service_provider: 'systemd' - } - end + it { is_expected.to contain_class('kafka::consumer::install').that_comes_before('Class[kafka::consumer::config]') } + it { is_expected.to contain_class('kafka::consumer::config').that_comes_before('Class[kafka::consumer::service]') } + it { is_expected.to contain_class('kafka::consumer::service').that_comes_before('Class[kafka::consumer]') } + it { is_expected.to contain_class('kafka::consumer') } - describe 'kafka::consumer::install' do - context 'defaults' do - it { is_expected.to contain_class('kafka') } + describe 'kafka::consumer::install' do + context 'defaults' do + it { is_expected.to contain_class('kafka') } + end end - end - - describe 'kafka::consumer::service' do - context 'defaults' do - it { is_expected.to contain_file('/etc/systemd/system/kafka-consumer.service').that_notifies('Exec[systemctl-daemon-reload]') } - it do - is_expected.to contain_file('/etc/init.d/kafka-consumer').with( - ensure: 'absent' - ) + describe 'kafka::consumer::config' do + context 'defaults' do + it { is_expected.to contain_file('/opt/kafka/config/consumer.properties') } end + end - it { is_expected.to contain_exec('systemctl-daemon-reload').that_comes_before('Service[kafka-consumer]') } - - it { is_expected.to contain_service('kafka-consumer') } + describe 'kafka::consumer::service' do + context 'defaults' do + if os_facts[:service_provider] == 'systemd' + it { is_expected.to contain_file('/etc/init.d/kafka-consumer').with_abent('absent') } + it { is_expected.to contain_file('/etc/systemd/system/kafka-consumer.service').that_notifies('Exec[systemctl-daemon-relad]') } + it { is_expected.to contain_exec('systemctl-daemon-reload').that_comes_before('Service[kafka-consumer]') } + else + it { is_expected.to contain_file('/etc/init.d/kafka-consumer') } + end + + it { is_expected.to contain_service('kafka-consumer') } + end end + + it_validates_parameter 'mirror_url' end end - - it { is_expected.to contain_file('/opt/kafka/config/consumer.properties') } - it_validates_parameter 'mirror_url' end diff --git a/spec/classes/init_spec.rb b/spec/classes/init_spec.rb index 75851a0..1edd6d7 100644 --- a/spec/classes/init_spec.rb +++ b/spec/classes/init_spec.rb @@ -1,62 +1,52 @@ require 'spec_helper' describe 'kafka', type: :class do - let :facts do - { - osfamily: 'Debian', - os: { family: 'Debian' }, - operatingsystem: 'Ubuntu', - operatingsystemrelease: '14.04', - lsbdistcodename: 'trusty', - architecture: 'amd64', - service_provider: 'upstart' - } - end - - it { is_expected.to contain_class('kafka::params') } + on_supported_os.each do |os, os_facts| + context "on #{os}" do + let(:facts) do + os_facts + end - context 'on Debian' do - describe 'kafka' do - context 'defaults' do - it { is_expected.to contain_group('kafka') } - it { is_expected.to contain_user('kafka') } + it { is_expected.to contain_class('kafka::params') } - it { is_expected.to contain_file('/var/tmp/kafka') } - it { is_expected.to contain_file('/opt/kafka-2.12-2.4.1') } - it { is_expected.to contain_file('/opt/kafka') } - it { is_expected.to contain_file('/opt/kafka/config') } - it { is_expected.to contain_file('/var/log/kafka') } - end - end - end + describe 'kafka' do + context 'defaults' do + it { is_expected.to contain_group('kafka') } + it { is_expected.to contain_user('kafka') } - context 'on Debian' do - describe 'kafka' do - context 'all (compatible) parameters' do - let :params do - { - kafka_version: '0.10.0.1', - scala_version: '2.13', - install_dir: '/usr/local/kafka', - user_id: 9092, - group_id: 9092, - user_name: 'mykafka', - group_name: 'mykafka', - manage_java: false, - config_dir: '/opt/kafka/custom_config', - log_dir: '/var/log/custom_kafka' - } + it { is_expected.to contain_file('/var/tmp/kafka') } + it { is_expected.to contain_file('/opt/kafka-2.12-2.4.1') } + it { is_expected.to contain_file('/opt/kafka') } + it { is_expected.to contain_file('/opt/kafka/config') } + it { is_expected.to contain_file('/var/log/kafka') } end - it { is_expected.to contain_group('mykafka').with(gid: 9092) } - it { is_expected.to contain_user('mykafka').with(uid: 9092) } + context 'all (compatible) parameters' do + let :params do + { + kafka_version: '0.10.0.1', + scala_version: '2.13', + install_dir: '/usr/local/kafka', + user_id: 9092, + group_id: 9092, + user_name: 'mykafka', + group_name: 'mykafka', + manage_java: false, + config_dir: '/opt/kafka/custom_config', + log_dir: '/var/log/custom_kafka' + } + end - it { is_expected.to contain_file('/var/tmp/kafka') } - it { is_expected.to contain_file('/opt/kafka') } - it { is_expected.to contain_file('/usr/local/kafka') } - it { is_expected.to contain_file('/opt/kafka/custom_config') } - it { is_expected.to contain_file('/var/log/custom_kafka') } + it { is_expected.to contain_group('mykafka').with(gid: 9092) } + it { is_expected.to contain_user('mykafka').with(uid: 9092) } + + it { is_expected.to contain_file('/var/tmp/kafka') } + it { is_expected.to contain_file('/opt/kafka') } + it { is_expected.to contain_file('/usr/local/kafka') } + it { is_expected.to contain_file('/opt/kafka/custom_config') } + it { is_expected.to contain_file('/var/log/custom_kafka') } + end end end end end diff --git a/spec/classes/mirror_spec.rb b/spec/classes/mirror_spec.rb index 3eda173..a4351f1 100644 --- a/spec/classes/mirror_spec.rb +++ b/spec/classes/mirror_spec.rb @@ -1,107 +1,60 @@ require 'spec_helper' require 'shared_examples_param_validation' describe 'kafka::mirror', type: :class do - let :facts do - { - osfamily: 'Debian', - os: { family: 'Debian' }, - operatingsystem: 'Ubuntu', - operatingsystemrelease: '14.04', - lsbdistcodename: 'trusty', - architecture: 'amd64', - service_provider: 'upstart' - } - end - - let :common_params do - { - consumer_config: { - 'group.id' => 'kafka-mirror', - 'zookeeper.connect' => 'localhost:2181' - }, - producer_config: { - 'bootstrap.servers' => 'localhost:9092' - } - } - end - - let :params do - common_params - end - - it { is_expected.to contain_class('kafka::mirror::install').that_comes_before('Class[kafka::mirror::config]') } - it { is_expected.to contain_class('kafka::mirror::config').that_comes_before('Class[kafka::mirror::service]') } - it { is_expected.to contain_class('kafka::mirror::service').that_comes_before('Class[kafka::mirror]') } - it { is_expected.to contain_class('kafka::mirror') } - - context 'on Debian' do - describe 'kafka::mirror::install' do - context 'defaults' do - it { is_expected.to contain_class('kafka') } + on_supported_os.each do |os, os_facts| + context "on #{os}" do + let(:facts) do + os_facts end - end - describe 'kafka::mirror::config' do - context 'defaults' do - it { is_expected.to contain_class('kafka::consumer::config') } - it { is_expected.to contain_class('kafka::producer::config') } + let :params do + { + consumer_config: { + 'group.id' => 'kafka-mirror', + 'zookeeper.connect' => 'localhost:2181' + }, + producer_config: { + 'bootstrap.servers' => 'localhost:9092' + } + } end - end - describe 'kafka::mirror::service' do - context 'defaults' do - it { is_expected.to contain_file('/etc/init.d/kafka-mirror') } - it { is_expected.to contain_file('/etc/init.d/kafka-mirror').with_content %r{/opt/kafka/config/(?=.*consumer)|(?=.*producer).properties} } - it { is_expected.to contain_service('kafka-mirror') } - end - end - end + it { is_expected.to contain_class('kafka::mirror::install').that_comes_before('Class[kafka::mirror::config]') } + it { is_expected.to contain_class('kafka::mirror::config').that_comes_before('Class[kafka::mirror::service]') } + it { is_expected.to contain_class('kafka::mirror::service').that_comes_before('Class[kafka::mirror]') } + it { is_expected.to contain_class('kafka::mirror') } - context 'on CentOS' do - let :facts do - { - osfamily: 'RedHat', - os: { family: 'RedHat' }, - operatingsystem: 'CentOS', - operatingsystemrelease: '7', - operatingsystemmajrelease: '7', - architecture: 'amd64', - path: '/usr/local/sbin', - service_provider: 'systemd' - } - end - - describe 'kafka::mirror::install' do - context 'defaults' do - it { is_expected.to contain_class('kafka') } + describe 'kafka::mirror::install' do + context 'defaults' do + it { is_expected.to contain_class('kafka') } + end end - end - describe 'kafka::mirror::config' do - context 'defaults' do - it { is_expected.to contain_class('kafka::consumer::config') } - it { is_expected.to contain_class('kafka::producer::config') } + describe 'kafka::mirror::config' do + context 'defaults' do + it { is_expected.to contain_class('kafka::consumer::config') } + it { is_expected.to contain_class('kafka::producer::config') } + end end - end - describe 'kafka::mirror::service' do - context 'defaults' do - it { is_expected.to contain_file('/etc/systemd/system/kafka-mirror.service').that_notifies('Exec[systemctl-daemon-reload]') } - it { is_expected.to contain_file('/etc/systemd/system/kafka-mirror.service').with_content %r{/opt/kafka/config/(?=.*consumer)|(?=.*producer).properties} } - - it do - is_expected.to contain_file('/etc/init.d/kafka-mirror').with( - ensure: 'absent' - ) + describe 'kafka::mirror::service' do + context 'defaults' do + if os_facts[:service_provider] == 'systemd' + it { is_expected.to contain_file('/etc/init.d/kafka-mirror').with_ensure('absent') } + it { is_expected.to contain_file('/etc/systemd/system/kafka-mirror.service').that_notifies('Exec[systemctl-daemon-reload]') } + it { is_expected.to contain_file('/etc/systemd/system/kafka-mirror.service').with_content %r{/opt/kafka/config/(?=.*consumer)|(?=.*producer).propertie} } + it { is_expected.to contain_exec('systemctl-daemon-reload').that_comes_before('Service[kafka-mirror]') } + else + it { is_expected.to contain_file('/etc/init.d/kafka-mirror') } + it { is_expected.to contain_file('/etc/init.d/kafka-mirror').with_content %r{/opt/kafka/config/(?=.*consumer)|(?=.*producer).properties} } + end + + it { is_expected.to contain_service('kafka-mirror') } end - - it { is_expected.to contain_exec('systemctl-daemon-reload').that_comes_before('Service[kafka-mirror]') } - - it { is_expected.to contain_service('kafka-mirror') } end + + it_validates_parameter 'mirror_url' end end - - it_validates_parameter 'mirror_url' end diff --git a/spec/classes/producer_spec.rb b/spec/classes/producer_spec.rb index c70b501..1a87df3 100644 --- a/spec/classes/producer_spec.rb +++ b/spec/classes/producer_spec.rb @@ -1,79 +1,52 @@ require 'spec_helper' require 'shared_examples_param_validation' describe 'kafka::producer', type: :class do - let :facts do - { - osfamily: 'Debian', - os: { family: 'Debian' }, - operatingsystem: 'Ubuntu', - operatingsystemrelease: '14.04', - lsbdistcodename: 'trusty', - architecture: 'amd64', - service_provider: 'upstart' - } - end - let :common_params do - { - service_config: { - 'broker-list' => 'localhost:9092', - 'topic' => 'demo' - }, - input: '/tmp/kafka-producer' - } - end - - let :params do - common_params - end - - it { is_expected.to contain_class('kafka::producer::install').that_comes_before('Class[kafka::producer::config]') } - it { is_expected.to contain_class('kafka::producer::config').that_comes_before('Class[kafka::producer::service]') } - it { is_expected.to contain_class('kafka::producer::service').that_comes_before('Class[kafka::producer]') } - it { is_expected.to contain_class('kafka::producer') } - - context 'on Debian' do - describe 'kafka::producer::install' do - context 'defaults' do - it { is_expected.to contain_class('kafka') } + on_supported_os.each do |os, os_facts| + context "on #{os}" do + let(:facts) do + os_facts end - end - describe 'kafka::producer::config' do - context 'defaults' do - it { is_expected.to contain_file('/opt/kafka/config/producer.properties') } + let :params do + { + service_config: { + 'broker-list' => 'localhost:9092', + 'topic' => 'demo' + }, + input: '/tmp/kafka-producer' + } end - end - describe 'kafka::producer::service' do - context 'defaults' do - it { is_expected.to contain_file('/etc/init.d/kafka-producer') } + it { is_expected.to contain_class('kafka::producer::install').that_comes_before('Class[kafka::producer::config]') } + it { is_expected.to contain_class('kafka::producer::config').that_comes_before('Class[kafka::producer::service]') } + it { is_expected.to contain_class('kafka::producer::service').that_comes_before('Class[kafka::producer]') } + it { is_expected.to contain_class('kafka::producer') } - it { is_expected.to contain_service('kafka-producer') } + describe 'kafka::producer::install' do + context 'defaults' do + it { is_expected.to contain_class('kafka') } + end end - end - end - context 'on CentOS' do - let :facts do - { - osfamily: 'RedHat', - os: { family: 'RedHat' }, - operatingsystem: 'CentOS', - operatingsystemrelease: '7', - operatingsystemmajrelease: '7', - architecture: 'amd64', - path: '/usr/local/sbin', - service_provider: 'systemd' - } - end + describe 'kafka::producer::config' do + context 'defaults' do + it { is_expected.to contain_file('/opt/kafka/config/producer.properties') } + end + end - describe 'kafka::producer::service' do - context 'defaults' do - it { is_expected.to raise_error(Puppet::Error, %r{Console Producer is not supported on systemd, because the stdin of the process cannot be redirected}) } + describe 'kafka::producer::service' do + context 'defaults' do + if os_facts[:service_provider] == 'systemd' + it { is_expected.to raise_error(Puppet::Error, %r{Console Producer is not supported on systemd, because the stdin of the process cannot be redirected}) } + else + it { is_expected.to contain_file('/etc/init.d/kafka-producer') } + it { is_expected.to contain_service('kafka-producer') } + end + end end + + it_validates_parameter 'mirror_url' end end - - it_validates_parameter 'mirror_url' end diff --git a/spec/defines/topic_spec.rb b/spec/defines/topic_spec.rb index dc78b15..f402224 100644 --- a/spec/defines/topic_spec.rb +++ b/spec/defines/topic_spec.rb @@ -1,50 +1,48 @@ require 'spec_helper' describe 'kafka::topic', type: :define do - let :facts do - { - osfamily: 'Debian', - operatingsystem: 'Ubuntu', - operatingsystemrelease: '14.04', - lsbdistcodename: 'trusty', - architecture: 'amd64' - } - end - let(:title) { 'demo' } + on_supported_os.each do |os, os_facts| + context "on #{os}" do + let(:facts) do + os_facts + end + + context 'when create topic demo' do + let(:title) { 'demo' } + let :params do + { + 'ensure' => 'present', + 'zookeeper' => 'localhost:2181', + 'replication_factor' => '1', + 'partitions' => '1' + } + end - context 'on Debian' do - context 'when create topic demo' do - let :params do - { - 'ensure' => 'present', - 'zookeeper' => 'localhost:2181', - 'replication_factor' => '1', - 'partitions' => '1' + it { + is_expected.to contain_exec('create topic demo').with( + command: 'kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic demo ' + ) } end - it { - is_expected.to contain_exec('create topic demo').with( - command: 'kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic demo ' - ) - } - end - context 'when create topic with config' do - let :params do - { - 'ensure' => 'present', - 'zookeeper' => 'localhost:2181', - 'replication_factor' => 1, - 'partitions' => 1, - 'config' => { 'cleanup.policy' => 'compact', 'retention.ms' => '2592000000' } + context 'when create topic demo with config' do + let(:title) { 'demo' } + let :params do + { + 'ensure' => 'present', + 'zookeeper' => 'localhost:2181', + 'replication_factor' => 1, + 'partitions' => 1, + 'config' => { 'cleanup.policy' => 'compact', 'retention.ms' => '2592000000' } + } + end + + it { + is_expected.to contain_exec('create topic demo').with( + command: 'kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic demo --config cleanup.policy=compact --config retention.ms=2592000000' + ) } end - - it { - is_expected.to contain_exec('create topic demo').with( - command: 'kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic demo --config cleanup.policy=compact --config retention.ms=2592000000' - ) - } end end end diff --git a/spec/shared_examples_param_validation.rb b/spec/shared_examples_param_validation.rb index 9281ee1..dd718cf 100644 --- a/spec/shared_examples_param_validation.rb +++ b/spec/shared_examples_param_validation.rb @@ -1,63 +1,61 @@ RSpec.configure do |c| c.alias_it_should_behave_like_to :it_validates_parameter, 'validates parameter:' end shared_examples 'mirror_url' do domain_names = { 'foobar.com' => true, 'foo.bar.com' => true, '999.bar.com' => true, 'foo-bar.com' => true, 'no-tld' => false, 'foo.longtld' => false } prefixes = { 'http://' => true, 'https://' => true, 'random://' => false } paths = { '' => true, '/' => true, '/package' => true, '/package/' => true, '/another/package' => true, '/yet/another/package/' => true } ports = { '' => true, ':9' => false, ':10' => true, ':99999' => true, ':100000' => false } prefixes.each do |prefix, valid_prefix| context "with prefix <#{prefix}>" do domain_names.each do |domain_name, valid_domain| context "with domain name <#{domain_name}>" do paths.each do |path, valid_path| context "with path <#{path}>" do ports.each do |port, valid_port| context "with port <#{port}>" do mirror_url = "#{prefix}#{domain_name}#{port}#{path}" context "URL => <#{mirror_url}>" do - let :params do - common_params.merge(mirror_url: mirror_url) - end + let(:params) { super().merge(mirror_url: mirror_url) } it { is_expected.to compile } if valid_domain && valid_prefix && valid_path && valid_port end end end end end end end end end end