Implement first unit tests
* Add the required files for unit testing. * Add a basic test to validate packaging version. * Fix stdlib syntax to be Puppet compliant. * Fix lint Change-Id: I36fd23534e0c724da8d6683fbf2a1e67aa616ebf
This commit is contained in:
parent
44e4ab06d4
commit
8266fb6dd5
5
.fixtures.yml
Normal file
5
.fixtures.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
fixtures:
|
||||||
|
repositories:
|
||||||
|
'stdlib': 'git://github.com/puppetlabs/puppetlabs-stdlib.git'
|
||||||
|
symlinks:
|
||||||
|
"n1k_vsm": "#{source_dir}"
|
30
Gemfile
30
Gemfile
@ -1,8 +1,30 @@
|
|||||||
source 'https://rubygems.org'
|
source ENV['GEM_SOURCE'] || "https://rubygems.org"
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
gem 'puppetlabs_spec_helper', :require => false
|
gem 'puppetlabs_spec_helper', :require => 'false'
|
||||||
gem 'puppet-lint', '~> 0.3.2'
|
gem 'rspec-puppet', '~> 2.2.0', :require => 'false'
|
||||||
|
gem 'metadata-json-lint', :require => 'false'
|
||||||
|
gem 'puppet-lint-param-docs', :require => 'false'
|
||||||
|
gem 'puppet-lint-absolute_classname-check', :require => 'false'
|
||||||
|
gem 'puppet-lint-absolute_template_path', :require => 'false'
|
||||||
|
gem 'puppet-lint-trailing_newline-check', :require => 'false'
|
||||||
|
gem 'puppet-lint-unquoted_string-check', :require => 'false'
|
||||||
|
gem 'puppet-lint-leading_zero-check', :require => 'false'
|
||||||
|
gem 'puppet-lint-variable_contains_upcase', :require => 'false'
|
||||||
|
gem 'puppet-lint-numericvariable', :require => 'false'
|
||||||
|
gem 'json', :require => 'false'
|
||||||
|
gem 'webmock', :require => 'false'
|
||||||
|
end
|
||||||
|
|
||||||
|
group :system_tests do
|
||||||
|
gem 'beaker-rspec', :require => 'false'
|
||||||
|
gem 'beaker-puppet_install_helper', :require => 'false'
|
||||||
|
end
|
||||||
|
|
||||||
|
if facterversion = ENV['FACTER_GEM_VERSION']
|
||||||
|
gem 'facter', facterversion, :require => false
|
||||||
|
else
|
||||||
|
gem 'facter', :require => false
|
||||||
end
|
end
|
||||||
|
|
||||||
if puppetversion = ENV['PUPPET_GEM_VERSION']
|
if puppetversion = ENV['PUPPET_GEM_VERSION']
|
||||||
@ -10,3 +32,5 @@ if puppetversion = ENV['PUPPET_GEM_VERSION']
|
|||||||
else
|
else
|
||||||
gem 'puppet', :require => false
|
gem 'puppet', :require => false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# vim:ft=ruby
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
#
|
#
|
||||||
class n1k_vsm::deploy
|
class n1k_vsm::deploy
|
||||||
{
|
{
|
||||||
require n1k_vsm
|
require ::n1k_vsm
|
||||||
include n1k_vsm
|
include ::n1k_vsm
|
||||||
|
|
||||||
#ensure tap interfaces and deploy the vsm
|
#ensure tap interfaces and deploy the vsm
|
||||||
$ctrltap = 'vsm-ctrl0'
|
$ctrltap = 'vsm-ctrl0'
|
||||||
@ -16,7 +16,7 @@ class n1k_vsm::deploy
|
|||||||
# Validate and get the array of digits for the vsm_mac_base (or use default)
|
# Validate and get the array of digits for the vsm_mac_base (or use default)
|
||||||
# Using _vmb as the name for the final string to increase readability
|
# Using _vmb as the name for the final string to increase readability
|
||||||
$tmp_mac_base = regsubst($n1k_vsm::vsm_mac_base, '[^0-9a-fA-F]+', '')
|
$tmp_mac_base = regsubst($n1k_vsm::vsm_mac_base, '[^0-9a-fA-F]+', '')
|
||||||
if (inline_template('<%= @tmp_mac_base.length %>') < 7) {
|
if size($tmp_mac_base) < 7 {
|
||||||
$vmb = split('005dc79', '')
|
$vmb = split('005dc79', '')
|
||||||
} else {
|
} else {
|
||||||
$vmb = split($tmp_mac_base, '')
|
$vmb = split($tmp_mac_base, '')
|
||||||
|
@ -109,7 +109,7 @@ class n1k_vsm(
|
|||||||
$phy_ip_addr = inline_template("<%= scope.lookupvar('::ipaddress_${_phy_if_bridge}') %>")
|
$phy_ip_addr = inline_template("<%= scope.lookupvar('::ipaddress_${_phy_if_bridge}') %>")
|
||||||
$phy_ip_mask = inline_template("<%= scope.lookupvar('::netmask_${_phy_if_bridge}') %>")
|
$phy_ip_mask = inline_template("<%= scope.lookupvar('::netmask_${_phy_if_bridge}') %>")
|
||||||
$gw_intf = $n1k_vsm::phy_gateway
|
$gw_intf = $n1k_vsm::phy_gateway
|
||||||
include n1k_vsm::pkgprep_ovscfg
|
include ::n1k_vsm::pkgprep_ovscfg
|
||||||
}
|
}
|
||||||
|
|
||||||
notify {"Arg: intf ${phy_if_bridge} vsm_role ${vsm_role} domainid ${vsm_domain_id}" : withpath => true}
|
notify {"Arg: intf ${phy_if_bridge} vsm_role ${vsm_role} domainid ${vsm_domain_id}" : withpath => true}
|
||||||
@ -117,7 +117,7 @@ class n1k_vsm(
|
|||||||
notify {"gw_dv ${gw_intf} ovs ${ovsbridge} vsmname ${n1k_vsm::vsmname}" : withpath => true}
|
notify {"gw_dv ${gw_intf} ovs ${ovsbridge} vsmname ${n1k_vsm::vsmname}" : withpath => true}
|
||||||
notify {"mgmtip ${n1k_vsm::mgmtip} vsm_mask ${n1k_vsm::mgmtnetmask} vsm_gw ${n1k_vsm::mgmtgateway}": withpath => false}
|
notify {"mgmtip ${n1k_vsm::mgmtip} vsm_mask ${n1k_vsm::mgmtnetmask} vsm_gw ${n1k_vsm::mgmtgateway}": withpath => false}
|
||||||
|
|
||||||
include n1k_vsm::vsmprep
|
include ::n1k_vsm::vsmprep
|
||||||
include n1k_vsm::deploy
|
include ::n1k_vsm::deploy
|
||||||
Class['n1k_vsm::vsmprep'] -> Class['n1k_vsm::deploy']
|
Class['n1k_vsm::vsmprep'] -> Class['n1k_vsm::deploy']
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
#
|
#
|
||||||
class n1k_vsm::pkgprep_ovscfg
|
class n1k_vsm::pkgprep_ovscfg
|
||||||
{
|
{
|
||||||
require n1k_vsm
|
require ::n1k_vsm
|
||||||
include n1k_vsm
|
include ::n1k_vsm
|
||||||
|
|
||||||
case $::osfamily {
|
case $::osfamily {
|
||||||
'RedHat': {
|
'RedHat': {
|
||||||
|
@ -5,9 +5,9 @@
|
|||||||
#
|
#
|
||||||
class n1k_vsm::vsmprep
|
class n1k_vsm::vsmprep
|
||||||
{
|
{
|
||||||
include 'stdlib'
|
include ::stdlib
|
||||||
require n1k_vsm
|
require ::n1k_vsm
|
||||||
include n1k_vsm
|
include ::n1k_vsm
|
||||||
|
|
||||||
# prepare vsm folders
|
# prepare vsm folders
|
||||||
ensure_resource('file', '/var/spool/cisco/', {
|
ensure_resource('file', '/var/spool/cisco/', {
|
||||||
|
11
spec/acceptance/nodesets/centos-70-x64.yml
Normal file
11
spec/acceptance/nodesets/centos-70-x64.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
HOSTS:
|
||||||
|
centos-server-70-x64:
|
||||||
|
roles:
|
||||||
|
- master
|
||||||
|
platform: el-7-x86_64
|
||||||
|
box: puppetlabs/centos-7.0-64-nocm
|
||||||
|
box_url: https://vagrantcloud.com/puppetlabs/centos-7.0-64-nocm
|
||||||
|
hypervisor: vagrant
|
||||||
|
CONFIG:
|
||||||
|
log_level: debug
|
||||||
|
type: foss
|
11
spec/acceptance/nodesets/default.yml
Normal file
11
spec/acceptance/nodesets/default.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
HOSTS:
|
||||||
|
ubuntu-server-1404-x64:
|
||||||
|
roles:
|
||||||
|
- master
|
||||||
|
platform: ubuntu-14.04-amd64
|
||||||
|
box: puppetlabs/ubuntu-14.04-64-nocm
|
||||||
|
box_url: https://vagrantcloud.com/puppetlabs/ubuntu-14.04-64-nocm
|
||||||
|
hypervisor: vagrant
|
||||||
|
CONFIG:
|
||||||
|
log_level: debug
|
||||||
|
type: git
|
10
spec/acceptance/nodesets/nodepool-centos7.yml
Normal file
10
spec/acceptance/nodesets/nodepool-centos7.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
HOSTS:
|
||||||
|
centos-70-x64:
|
||||||
|
roles:
|
||||||
|
- master
|
||||||
|
platform: el-7-x86_64
|
||||||
|
hypervisor: none
|
||||||
|
ip: 127.0.0.1
|
||||||
|
CONFIG:
|
||||||
|
type: foss
|
||||||
|
set_env: false
|
10
spec/acceptance/nodesets/nodepool-trusty.yml
Normal file
10
spec/acceptance/nodesets/nodepool-trusty.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
HOSTS:
|
||||||
|
ubuntu-1404-x64:
|
||||||
|
roles:
|
||||||
|
- master
|
||||||
|
platform: ubuntu-14.04-amd64
|
||||||
|
hypervisor: none
|
||||||
|
ip: 127.0.0.1
|
||||||
|
CONFIG:
|
||||||
|
type: foss
|
||||||
|
set_env: false
|
11
spec/acceptance/nodesets/ubuntu-server-1404-x64.yml
Normal file
11
spec/acceptance/nodesets/ubuntu-server-1404-x64.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
HOSTS:
|
||||||
|
ubuntu-server-1404-x64:
|
||||||
|
roles:
|
||||||
|
- master
|
||||||
|
platform: ubuntu-14.04-amd64
|
||||||
|
box: puppetlabs/ubuntu-14.04-64-nocm
|
||||||
|
box_url: https://vagrantcloud.com/puppetlabs/ubuntu-14.04-64-nocm
|
||||||
|
hypervisor: vagrant
|
||||||
|
CONFIG:
|
||||||
|
log_level: debug
|
||||||
|
type: git
|
21
spec/classes/n1kv_vsm_spec.rb
Normal file
21
spec/classes/n1kv_vsm_spec.rb
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2015 eNovance SAS <licensing@enovance.com>
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'n1k_vsm' do
|
||||||
|
|
||||||
|
end
|
78
spec/classes/n1kv_vsm_vsmprep_spec.rb
Normal file
78
spec/classes/n1kv_vsm_vsmprep_spec.rb
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
#
|
||||||
|
# Copyright (C) 2015 eNovance SAS <licensing@enovance.com>
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe 'n1k_vsm::vsmprep' do
|
||||||
|
|
||||||
|
let :params do
|
||||||
|
{ }
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for 'n1k vsm prep' do
|
||||||
|
|
||||||
|
context 'with default values' do
|
||||||
|
let :pre_condition do
|
||||||
|
"class { 'n1k_vsm':
|
||||||
|
phy_gateway => '1.1.1.3',
|
||||||
|
vsm_domain_id => '1',
|
||||||
|
vsm_admin_passwd => 'secrete',
|
||||||
|
vsm_mgmt_ip => '1.1.1.1',
|
||||||
|
vsm_mgmt_netmask => '255.255.255.0',
|
||||||
|
vsm_mgmt_gateway => '1.1.1.2',
|
||||||
|
}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Currently we always just check if VSM is present
|
||||||
|
it 'installs latest n1kv sofware' do
|
||||||
|
is_expected.to contain_package('nexus-1000v-iso').with(
|
||||||
|
:ensure => 'present',
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with custom values' do
|
||||||
|
let :pre_condition do
|
||||||
|
"class { 'n1k_vsm':
|
||||||
|
phy_gateway => '1.1.1.3',
|
||||||
|
vsm_domain_id => '1',
|
||||||
|
vsm_admin_passwd => 'secrete',
|
||||||
|
vsm_mgmt_ip => '1.1.1.1',
|
||||||
|
vsm_mgmt_netmask => '255.255.255.0',
|
||||||
|
vsm_mgmt_gateway => '1.1.1.2',
|
||||||
|
n1kv_version => '5.2.1.SK3.2.2a-1',
|
||||||
|
}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Currently we always just check if VSM is present
|
||||||
|
it 'installs latest n1kv sofware' do
|
||||||
|
is_expected.to contain_package('nexus-1000v-iso').with(
|
||||||
|
:ensure => 'present',
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'on RedHat platforms' do
|
||||||
|
let :facts do
|
||||||
|
{ :osfamily => 'RedHat' }
|
||||||
|
end
|
||||||
|
|
||||||
|
it_configures 'n1k vsm prep'
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
5
spec/shared_examples.rb
Normal file
5
spec/shared_examples.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
shared_examples_for "a Puppet::Error" do |description|
|
||||||
|
it "with message matching #{description.inspect}" do
|
||||||
|
expect { is_expected.to have_class_count(1) }.to raise_error(Puppet::Error, description)
|
||||||
|
end
|
||||||
|
end
|
19
spec/spec_helper.rb
Normal file
19
spec/spec_helper.rb
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
require 'puppetlabs_spec_helper/module_spec_helper'
|
||||||
|
require 'shared_examples'
|
||||||
|
require 'webmock/rspec'
|
||||||
|
|
||||||
|
RSpec.configure do |c|
|
||||||
|
c.alias_it_should_behave_like_to :it_configures, 'configures'
|
||||||
|
c.alias_it_should_behave_like_to :it_raises, 'raises'
|
||||||
|
|
||||||
|
c.default_facts = {
|
||||||
|
:kernel => 'Linux',
|
||||||
|
:concat_basedir => '/var/lib/puppet/concat',
|
||||||
|
:memorysize => '1000 MB',
|
||||||
|
:processorcount => '1',
|
||||||
|
:puppetversion => '3.7.3',
|
||||||
|
:uniqueid => '123'
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
at_exit { RSpec::Puppet::Coverage.report! }
|
56
spec/spec_helper_acceptance.rb
Normal file
56
spec/spec_helper_acceptance.rb
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
require 'beaker-rspec'
|
||||||
|
require 'beaker/puppet_install_helper'
|
||||||
|
|
||||||
|
run_puppet_install_helper
|
||||||
|
|
||||||
|
RSpec.configure do |c|
|
||||||
|
# Project root
|
||||||
|
proj_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
||||||
|
modname = JSON.parse(open('metadata.json').read)['name'].split('-')[1]
|
||||||
|
|
||||||
|
# Readable test descriptions
|
||||||
|
c.formatter = :documentation
|
||||||
|
|
||||||
|
# Configure all nodes in nodeset
|
||||||
|
c.before :suite do
|
||||||
|
# Install module and dependencies
|
||||||
|
hosts.each do |host|
|
||||||
|
|
||||||
|
# install git
|
||||||
|
install_package host, 'git'
|
||||||
|
|
||||||
|
zuul_ref = ENV['ZUUL_REF']
|
||||||
|
zuul_branch = ENV['ZUUL_BRANCH']
|
||||||
|
zuul_url = ENV['ZUUL_URL']
|
||||||
|
|
||||||
|
repo = 'openstack/puppet-openstack-integration'
|
||||||
|
|
||||||
|
# Start out with clean moduledir, don't trust r10k to purge it
|
||||||
|
on host, "rm -rf /etc/puppet/modules/*"
|
||||||
|
# Install dependent modules via git or zuul
|
||||||
|
r = on host, "test -e /usr/zuul-env/bin/zuul-cloner", { :acceptable_exit_codes => [0,1] }
|
||||||
|
if r.exit_code == 0
|
||||||
|
zuul_clone_cmd = '/usr/zuul-env/bin/zuul-cloner '
|
||||||
|
zuul_clone_cmd += '--cache-dir /opt/git '
|
||||||
|
zuul_clone_cmd += "--zuul-ref #{zuul_ref} "
|
||||||
|
zuul_clone_cmd += "--zuul-branch #{zuul_branch} "
|
||||||
|
zuul_clone_cmd += "--zuul-url #{zuul_url} "
|
||||||
|
zuul_clone_cmd += "git://git.openstack.org #{repo}"
|
||||||
|
on host, zuul_clone_cmd
|
||||||
|
else
|
||||||
|
on host, "git clone https://git.openstack.org/#{repo} #{repo}"
|
||||||
|
end
|
||||||
|
|
||||||
|
on host, "ZUUL_REF=#{zuul_ref} ZUUL_BRANCH=#{zuul_branch} ZUUL_URL=#{zuul_url} bash #{repo}/install_modules.sh"
|
||||||
|
|
||||||
|
# Install the module being tested
|
||||||
|
on host, "rm -fr /etc/puppet/modules/#{modname}"
|
||||||
|
puppet_module_install(:source => proj_root, :module_name => modname)
|
||||||
|
|
||||||
|
on host, "rm -fr #{repo}"
|
||||||
|
|
||||||
|
# List modules installed to help with debugging
|
||||||
|
on host, puppet('module','list'), { :acceptable_exit_codes => 0 }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user