include RspecPuppetFacts
# Customize filters to ignore 3rd-party code
-# If the coverage report shows not-our-code results, add it here
+# If the rspec coverage report shows not-our-code results, add it here
custom_filters = [
- 'Anchor[java::end]',
- 'Stage[setup]',
- 'Anchor[java::begin:]',
- 'Archive::Download[opendaylight.tar.gz]',
- 'Archive::Download[opendaylight-systemd.tar.gz]',
- 'Archive::Extract[opendaylight]',
- 'Archive::Extract[opendaylight-systemd]',
- 'Class[Java::Config]',
- 'Class[Java::Params]',
- 'Class[Stdlib::Stages]',
- 'Class[Stdlib]',
- 'Exec[Configure ODL OVSDB Clustering]',
- 'Exec[download archive opendaylight.tar.gz and check sum]',
- 'Exec[download archive opendaylight-systemd.tar.gz and check sum]',
- 'Exec[opendaylight unpack]',
- 'Exec[opendaylight-systemd unpack]',
- 'Exec[rm-on-error-opendaylight.tar.gz]',
- 'Exec[rm-on-error-opendaylight-systemd.tar.gz]',
- 'Exec[reload_systemd_units]',
- 'Exec[update-java-alternatives]',
- 'Package[curl]',
- 'Stage[deploy]',
- 'Stage[deploy_app]',
- 'Stage[deploy_infra]',
- 'Stage[runtime]',
- 'Stage[setup_app]',
- 'Stage[setup_infra]',
]
RSpec::Puppet::Coverage.filters.push(*custom_filters)
}
end
+# Shared tests that specialize in testing log file size and rollover
+def log_file_settings(options = {})
+ # Extraxt params. The dafault value should be same as in opendaylight::params
+ log_max_size = options.fetch(:log_max_size, '10GB')
+ log_max_rollover = options.fetch(:log_max_rollover, 2)
+
+ it {
+ should contain_file_line('logmaxsize').with(
+ 'path' => '/opt/opendaylight/etc/org.ops4j.pax.logging.cfg',
+ 'line' => "log4j.appender.out.maxFileSize=#{log_max_size}",
+ 'match' => '^log4j.appender.out.maxFileSize.*$',
+ )
+ }
+ it {
+ should contain_file_line('logmaxrollover').with(
+ 'path' => '/opt/opendaylight/etc/org.ops4j.pax.logging.cfg',
+ 'line' => "log4j.appender.out.maxBackupIndex=#{log_max_rollover}",
+ 'match' => '^log4j.appender.out.maxBackupIndex.*$',
+ )
+ }
+end
+
# Shared tests that specialize in testing Karaf feature installs
def karaf_feature_tests(options = {})
# Extract params
# NB: These hashes don't work with Ruby 1.8.7, but we
# don't support 1.8.7 so that's okay. See issue #36.
it {
- should contain_file('jetty.xml').with(
- 'ensure' => 'file',
- 'path' => '/opt/opendaylight/etc/jetty.xml',
- 'owner' => 'odl',
- 'group' => 'odl',
- 'content' => /Property name="jetty.port" default="#{odl_rest_port}"/
- )
+ should contain_augeas('jetty.xml')
}
end
if log_levels.empty?
# Should contain log level config file
it {
- should contain_file('org.ops4j.pax.logging.cfg').with(
- 'ensure' => 'file',
- 'path' => '/opt/opendaylight/etc/org.ops4j.pax.logging.cfg',
- 'owner' => 'odl',
- 'group' => 'odl',
- )
- }
- # Should not contain custom log level config
- it {
- should_not contain_file('org.ops4j.pax.logging.cfg').with(
- 'ensure' => 'file',
- 'path' => '/opt/opendaylight/etc/org.ops4j.pax.logging.cfg',
- 'owner' => 'odl',
- 'group' => 'odl',
- 'content' => /# Log level config added by puppet-opendaylight/
- )
+ should_not contain_file_line('logger-org.opendaylight.ovsdb')
}
else
- # Should contain log level config file
- it {
- should contain_file('org.ops4j.pax.logging.cfg').with(
- 'ensure' => 'file',
- 'path' => '/opt/opendaylight/etc/org.ops4j.pax.logging.cfg',
- 'owner' => 'odl',
- 'group' => 'odl',
- )
- }
- # Should contain custom log level config
- it {
- should contain_file('org.ops4j.pax.logging.cfg').with(
- 'ensure' => 'file',
- 'path' => '/opt/opendaylight/etc/org.ops4j.pax.logging.cfg',
- 'owner' => 'odl',
- 'group' => 'odl',
- 'content' => /# Log level config added by puppet-opendaylight/
- )
- }
# Verify each custom log level config entry
log_levels.each_pair do |logger, level|
it {
- should contain_file('org.ops4j.pax.logging.cfg').with(
- 'ensure' => 'file',
- 'path' => '/opt/opendaylight/etc/org.ops4j.pax.logging.cfg',
- 'owner' => 'odl',
- 'group' => 'odl',
- 'content' => /^log4j.logger.#{logger} = #{level}/
+ should contain_file_line("logger-#{logger}").with(
+ 'ensure' => 'present',
+ 'path' => '/opt/opendaylight/etc/org.ops4j.pax.logging.cfg',
+ 'line' => "log4j.logger.#{logger}=#{level}",
)
}
end
def enable_ha_tests(options = {})
# Extract params
enable_ha = options.fetch(:enable_ha, false)
+ odl_bind_ip = options.fetch(:odl_bind_ip, '0.0.0.0')
ha_node_ips = options.fetch(:ha_node_ips, [])
- ha_node_index = options.fetch(:ha_node_index, 0)
+ ha_db_modules = options.fetch(:ha_db_modules, { 'default' => false })
# HA_NODE_IPS size
ha_node_count = ha_node_ips.size
# Check for HA_NODE_COUNT < 2
fail("Number of HA nodes less than 2: #{ha_node_count} and HA Enabled")
end
+
+ if enable_ha
+ ha_node_index = ha_node_ips.index(odl_bind_ip)
+ it {
+ should contain_file('akka.conf').with(
+ 'path' => '/opt/opendaylight/configuration/initial/akka.conf',
+ 'ensure' => 'file',
+ 'owner' => 'odl',
+ 'group' => 'odl',
+ 'content' => /roles\s*=\s*\["member-#{ha_node_index}"\]/
+ )
+ }
+
+ ha_db_modules.each do |mod, urn|
+ it { should contain_file('module-shards.conf').with(
+ 'path' => '/opt/opendaylight/configuration/initial/module-shards.conf',
+ 'ensure' => 'file',
+ 'owner' => 'odl',
+ 'group' => 'odl',
+ 'content' => /name = "#{mod}"/
+ )}
+ if mod == 'default'
+ it { should contain_file('modules.conf').with(
+ 'path' => '/opt/opendaylight/configuration/initial/modules.conf',
+ 'ensure' => 'file',
+ 'owner' => 'odl',
+ 'group' => 'odl'
+ )}
+ else
+ it { should contain_file('modules.conf').with(
+ 'path' => '/opt/opendaylight/configuration/initial/modules.conf',
+ 'ensure' => 'file',
+ 'owner' => 'odl',
+ 'group' => 'odl',
+ 'content' => /name = "#{mod}"/,
+ )}
+ end
+ end
+ else
+ it {
+ should_not contain_file('akka.conf')
+ should_not contain_file('module-shards.conf')
+ should_not contain_file('modules.conf')
+ }
+ end
end
def rpm_install_tests(options = {})
end
end
+# Shared tests that specialize in testing SNAT mechanism
+def snat_mechanism_tests(snat_mechanism='controller')
+ it { should contain_file('/opt/opendaylight/etc/opendaylight') }
+ it { should contain_file('/opt/opendaylight/etc/opendaylight/datastore')}
+ it { should contain_file('/opt/opendaylight/etc/opendaylight/datastore/initial')}
+ it { should contain_file('/opt/opendaylight/etc/opendaylight/datastore/initial/config')}
+
+ # Confirm snat_mechanism
+ it {
+ should contain_file('netvirt-natservice-config.xml').with(
+ 'ensure' => 'file',
+ 'path' => '/opt/opendaylight/etc/opendaylight/datastore/initial/config/netvirt-natservice-config.xml',
+ 'owner' => 'odl',
+ 'group' => 'odl',
+ 'content' => /<nat-mode>#{snat_mechanism}<\/nat-mode>/
+ )
+ }
+end
+
+# Shared tests that specialize in testing SFC Config
+def sfc_tests()
+ it { should contain_file('/opt/opendaylight/etc/opendaylight') }
+ it { should contain_file('/opt/opendaylight/etc/opendaylight/datastore')}
+ it { should contain_file('/opt/opendaylight/etc/opendaylight/datastore/initial')}
+ it { should contain_file('/opt/opendaylight/etc/opendaylight/datastore/initial/config')}
+
+ it {
+ should contain_file('netvirt-elanmanager-config.xml').with(
+ 'ensure' => 'file',
+ 'path' => '/opt/opendaylight/etc/opendaylight/datastore/initial/config/netvirt-elanmanager-config.xml',
+ 'owner' => 'odl',
+ 'group' => 'odl',
+ 'source' => 'puppet:///modules/opendaylight/netvirt-elanmanager-config.xml'
+ )
+ should contain_file('genius-itm-config.xml').with(
+ 'ensure' => 'file',
+ 'path' => '/opt/opendaylight/etc/opendaylight/datastore/initial/config/genius-itm-config.xml',
+ 'owner' => 'odl',
+ 'group' => 'odl',
+ 'source' => 'puppet:///modules/opendaylight/genius-itm-config.xml'
+ )
+ }
+end
+
# Shared tests that specialize in testing VPP routing node config
def vpp_routing_node_tests(options = {})
# Extract params