summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Fisher <alex@linfratech.co.uk>2016-07-11 17:53:30 +0100
committerGitHub <noreply@github.com>2016-07-11 17:53:30 +0100
commit3f25181c7a1f90f87c39f9fc1bac503f66eac05c (patch)
tree10226c82c69c82c65ec37fa286556ccc9ad5d255
parentb123117dfe0ef9f8225659a24c31d0bb276b2815 (diff)
parentc9a7131191c41a5154b92dc5a18d347524d7dd36 (diff)
Merge pull request #65 from voxpupuli/modulesync
Modulesync 0.9.1
-rw-r--r--.github/CONTRIBUTING.md95
-rw-r--r--.github/ISSUE_TEMPLATE.md23
-rw-r--r--.github/PULL_REQUEST_TEMPLATE.md5
-rw-r--r--.msync.yml1
-rw-r--r--.rubocop.yml480
-rw-r--r--.travis.yml4
-rw-r--r--Gemfile2
-rw-r--r--spec/classes/unattended_upgrades_spec.rb463
-rw-r--r--spec/spec_helper.rb13
9 files changed, 841 insertions, 245 deletions
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
new file mode 100644
index 0000000..5b09ea6
--- /dev/null
+++ b/.github/CONTRIBUTING.md
@@ -0,0 +1,95 @@
+This module has grown over time based on a range of contributions from
+people using it. If you follow these contributing guidelines your patch
+will likely make it into a release a little quicker.
+
+
+## Contributing
+
+Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. [Contributor Code of Conduct](https://voxpupuli.org/coc/).
+
+1. Fork the repo.
+
+1. Create a separate branch for your change.
+
+1. Run the tests. We only take pull requests with passing tests, and
+ documentation.
+
+1. Add a test for your change. Only refactoring and documentation
+ changes require no new tests. If you are adding functionality
+ or fixing a bug, please add a test.
+
+1. Squash your commits down into logical components. Make sure to rebase
+ against the current master.
+
+1. Push the branch to your fork and submit a pull request.
+
+Please be prepared to repeat some of these steps as our contributors review
+your code.
+
+## Dependencies
+
+The testing and development tools have a bunch of dependencies,
+all managed by [bundler](http://bundler.io/) according to the
+[Puppet support matrix](http://docs.puppetlabs.com/guides/platforms.html#ruby-versions).
+
+By default the tests use a baseline version of Puppet.
+
+If you have Ruby 2.x or want a specific version of Puppet,
+you must set an environment variable such as:
+
+ export PUPPET_VERSION="~> 4.2.0"
+
+Install the dependencies like so...
+
+ bundle install
+
+## Syntax and style
+
+The test suite will run [Puppet Lint](http://puppet-lint.com/) and
+[Puppet Syntax](https://github.com/gds-operations/puppet-syntax) to
+check various syntax and style things. You can run these locally with:
+
+ bundle exec rake lint
+ bundle exec rake validate
+
+## Running the unit tests
+
+The unit test suite covers most of the code, as mentioned above please
+add tests if you're adding new functionality. If you've not used
+[rspec-puppet](http://rspec-puppet.com/) before then feel free to ask
+about how best to test your new feature.
+
+To run your all the unit tests
+
+ bundle exec rake spec SPEC_OPTS='--format documentation'
+
+To run a specific spec test set the `SPEC` variable:
+
+ bundle exec rake spec SPEC=spec/foo_spec.rb
+
+To run the linter, the syntax checker and the unit tests:
+
+ bundle exec rake test
+
+
+## Integration tests
+
+The unit tests just check the code runs, not that it does exactly what
+we want on a real machine. For that we're using
+[beaker](https://github.com/puppetlabs/beaker).
+
+This fires up a new virtual machine (using vagrant) and runs a series of
+simple tests against it after applying the module. You can run this
+with:
+
+ bundle exec rake acceptance
+
+This will run the tests on an Ubuntu 12.04 virtual machine. You can also
+run the integration tests against Centos 6.5 with.
+
+ BEAKER_set=centos-64-x64 bundle exec rake acceptances
+
+If you don't want to have to recreate the virtual machine every time you
+can use `BEAKER_DESTROY=no` and `BEAKER_PROVISION=no`. On the first run you will
+at least need `BEAKER_PROVISION` set to yes (the default). The Vagrantfile
+for the created virtual machines will be in `.vagrant/beaker_vagrant_fies`.
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000..9ac4a2b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,23 @@
+<!--
+Thank you for contributing to this project!
+- This project has a Contributor Code of Conduct: https://voxpupuli.org/coc/
+- Please check that here is no existing issue or PR that addresses your problem.
+- Please fill the following form to enable us to help you.
+-->
+
+### Affected Puppet, Ruby, OS and module versions/distributions
+
+- Puppet:
+- Ruby:
+- Distribution:
+- Module version:
+
+### How to reproduce (e.g Puppet code you use)
+
+### What are you seeing
+
+### What behaviour did you expect instead
+
+### Output log
+
+### Any additional information you'd like to impart
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..79272bf
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,5 @@
+<!--
+Thank you for contributing to this project!
+- This project has a Contributor Code of Conduct: https://voxpupuli.org/coc/
+- Please check that here is no existing issue or PR that addresses your problem.
+-->
diff --git a/.msync.yml b/.msync.yml
new file mode 100644
index 0000000..efd68b6
--- /dev/null
+++ b/.msync.yml
@@ -0,0 +1 @@
+modulesync_config_version: '0.9.1'
diff --git a/.rubocop.yml b/.rubocop.yml
index 364b022..c834cd2 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -8,22 +8,53 @@ AllCops:
- .vendor/**/*
- pkg/**/*
- spec/fixtures/**/*
+Lint/ConditionPosition:
+ Enabled: true
-# Configuration parameters: AllowURI, URISchemes.
-Metrics/LineLength:
- Max: 328
+Lint/ElseLayout:
+ Enabled: true
-# 'Complexity' is very relative
-Metrics/PerceivedComplexity:
- Enabled: false
+Lint/UnreachableCode:
+ Enabled: true
-# 'Complexity' is very relative
-Metrics/CyclomaticComplexity:
- Enabled: false
+Lint/UselessComparison:
+ Enabled: true
-# 'Complexity' is very relative
-Metrics/AbcSize:
- Enabled: false
+Lint/EnsureReturn:
+ Enabled: true
+
+Lint/HandleExceptions:
+ Enabled: true
+
+Lint/LiteralInCondition:
+ Enabled: true
+
+Lint/ShadowingOuterLocalVariable:
+ Enabled: true
+
+Lint/LiteralInInterpolation:
+ Enabled: true
+
+Style/HashSyntax:
+ Enabled: true
+
+Style/RedundantReturn:
+ Enabled: true
+
+Lint/AmbiguousOperator:
+ Enabled: true
+
+Lint/AssignmentInCondition:
+ Enabled: true
+
+Style/SpaceBeforeComment:
+ Enabled: true
+
+Style/AndOr:
+ Enabled: true
+
+Style/RedundantSelf:
+ Enabled: true
# Method length is not necessarily an indicator of code quality
Metrics/MethodLength:
@@ -33,42 +64,437 @@ Metrics/MethodLength:
Metrics/ModuleLength:
Enabled: false
+Style/WhileUntilModifier:
+ Enabled: true
+
+Lint/AmbiguousRegexpLiteral:
+ Enabled: true
+
+Lint/Eval:
+ Enabled: true
+
+Lint/BlockAlignment:
+ Enabled: true
+
+Lint/DefEndAlignment:
+ Enabled: true
+
+Lint/EndAlignment:
+ Enabled: true
+
+Lint/DeprecatedClassMethods:
+ Enabled: true
+
+Lint/Loop:
+ Enabled: true
+
+Lint/ParenthesesAsGroupedExpression:
+ Enabled: true
+
+Lint/RescueException:
+ Enabled: true
+
+Lint/StringConversionInInterpolation:
+ Enabled: true
+
+Lint/UnusedBlockArgument:
+ Enabled: true
+
+Lint/UnusedMethodArgument:
+ Enabled: true
+
+Lint/UselessAccessModifier:
+ Enabled: true
+
+Lint/UselessAssignment:
+ Enabled: true
+
+Lint/Void:
+ Enabled: true
+
+Style/AccessModifierIndentation:
+ Enabled: true
+
+Style/AccessorMethodName:
+ Enabled: true
+
+Style/Alias:
+ Enabled: true
+
+Style/AlignArray:
+ Enabled: true
+
+Style/AlignHash:
+ Enabled: true
+
+Style/AlignParameters:
+ Enabled: true
+
+Metrics/BlockNesting:
+ Enabled: true
+
+Style/AsciiComments:
+ Enabled: true
+
+Style/Attr:
+ Enabled: true
+
+Style/BracesAroundHashParameters:
+ Enabled: true
+
+Style/CaseEquality:
+ Enabled: true
+
+Style/CaseIndentation:
+ Enabled: true
+
+Style/CharacterLiteral:
+ Enabled: true
+
+Style/ClassAndModuleCamelCase:
+ Enabled: true
+
+Style/ClassAndModuleChildren:
+ Enabled: false
+
+Style/ClassCheck:
+ Enabled: true
+
# Class length is not necessarily an indicator of code quality
Metrics/ClassLength:
Enabled: false
-# dealbreaker:
-Style/TrailingCommaInArguments:
+Style/ClassMethods:
+ Enabled: true
+
+Style/ClassVars:
+ Enabled: true
+
+Style/WhenThen:
+ Enabled: true
+
+Style/WordArray:
+ Enabled: true
+
+Style/UnneededPercentQ:
+ Enabled: true
+
+Style/Tab:
+ Enabled: true
+
+Style/SpaceBeforeSemicolon:
+ Enabled: true
+
+Style/TrailingBlankLines:
+ Enabled: true
+
+Style/SpaceInsideBlockBraces:
+ Enabled: true
+
+Style/SpaceInsideBrackets:
+ Enabled: true
+
+Style/SpaceInsideHashLiteralBraces:
+ Enabled: true
+
+Style/SpaceInsideParens:
+ Enabled: true
+
+Style/LeadingCommentSpace:
+ Enabled: true
+
+Style/SpaceBeforeFirstArg:
+ Enabled: true
+
+Style/SpaceAfterColon:
+ Enabled: true
+
+Style/SpaceAfterComma:
+ Enabled: true
+
+Style/SpaceAfterMethodName:
+ Enabled: true
+
+Style/SpaceAfterNot:
+ Enabled: true
+
+Style/SpaceAfterSemicolon:
+ Enabled: true
+
+Style/SpaceAroundEqualsInParameterDefault:
+ Enabled: true
+
+Style/SpaceAroundOperators:
+ Enabled: true
+
+Style/SpaceBeforeBlockBraces:
+ Enabled: true
+
+Style/SpaceBeforeComma:
+ Enabled: true
+
+Style/CollectionMethods:
+ Enabled: true
+
+Style/CommentIndentation:
+ Enabled: true
+
+Style/ColonMethodCall:
+ Enabled: true
+
+Style/CommentAnnotation:
+ Enabled: true
+
+# 'Complexity' is very relative
+Metrics/CyclomaticComplexity:
Enabled: false
-Style/TrailingCommaInLiteral:
+
+Style/ConstantName:
+ Enabled: true
+
+Style/Documentation:
Enabled: false
-Style/ClosingParenthesisIndentation:
+
+Style/DefWithParentheses:
+ Enabled: true
+
+Style/PreferredHashMethods:
+ Enabled: true
+
+Style/DotPosition:
+ EnforcedStyle: trailing
+
+Style/DoubleNegation:
+ Enabled: true
+
+Style/EachWithObject:
+ Enabled: true
+
+Style/EmptyLineBetweenDefs:
+ Enabled: true
+
+Style/IndentArray:
+ Enabled: true
+
+Style/IndentHash:
+ Enabled: true
+
+Style/IndentationConsistency:
+ Enabled: true
+
+Style/IndentationWidth:
+ Enabled: true
+
+Style/EmptyLines:
+ Enabled: true
+
+Style/EmptyLinesAroundAccessModifier:
+ Enabled: true
+
+Style/EmptyLiteral:
+ Enabled: true
+
+# Configuration parameters: AllowURI, URISchemes.
+Metrics/LineLength:
Enabled: false
-Lint/AmbiguousRegexpLiteral:
+Style/MethodCallParentheses:
+ Enabled: true
+
+Style/MethodDefParentheses:
+ Enabled: true
+
+Style/LineEndConcatenation:
+ Enabled: true
+
+Style/TrailingWhitespace:
+ Enabled: true
+
+Style/StringLiterals:
Enabled: true
+
+Style/TrailingCommaInArguments:
+ Enabled: true
+
+Style/TrailingCommaInLiteral:
+ Enabled: true
+
+Style/GlobalVars:
+ Enabled: true
+
+Style/GuardClause:
+ Enabled: true
+
+Style/IfUnlessModifier:
+ Enabled: true
+
+Style/MultilineIfThen:
+ Enabled: true
+
+Style/NegatedIf:
+ Enabled: true
+
+Style/NegatedWhile:
+ Enabled: true
+
+Style/Next:
+ Enabled: true
+
+Style/SingleLineBlockParams:
+ Enabled: true
+
+Style/SingleLineMethods:
+ Enabled: true
+
+Style/SpecialGlobalVars:
+ Enabled: true
+
+Style/TrivialAccessors:
+ Enabled: true
+
+Style/UnlessElse:
+ Enabled: true
+
+Style/VariableInterpolation:
+ Enabled: true
+
+Style/VariableName:
+ Enabled: true
+
+Style/WhileUntilDo:
+ Enabled: true
+
+Style/EvenOdd:
+ Enabled: true
+
+Style/FileName:
+ Enabled: true
+
+Style/For:
+ Enabled: true
+
+Style/Lambda:
+ Enabled: true
+
+Style/MethodName:
+ Enabled: true
+
+Style/MultilineTernaryOperator:
+ Enabled: true
+
+Style/NestedTernaryOperator:
+ Enabled: true
+
+Style/NilComparison:
+ Enabled: true
+
+Style/FormatString:
+ Enabled: true
+
+Style/MultilineBlockChain:
+ Enabled: true
+
+Style/Semicolon:
+ Enabled: true
+
+Style/SignalException:
+ Enabled: true
+
+Style/NonNilCheck:
+ Enabled: true
+
+Style/Not:
+ Enabled: true
+
+Style/NumericLiterals:
+ Enabled: true
+
+Style/OneLineConditional:
+ Enabled: true
+
+Style/OpMethod:
+ Enabled: true
+
+Style/ParenthesesAroundCondition:
+ Enabled: true
+
+Style/PercentLiteralDelimiters:
+ Enabled: true
+
+Style/PerlBackrefs:
+ Enabled: true
+
+Style/PredicateName:
+ Enabled: true
+
+Style/RedundantException:
+ Enabled: true
+
+Style/SelfAssignment:
+ Enabled: true
+
+Style/Proc:
+ Enabled: true
+
+Style/RaiseArgs:
+ Enabled: true
+
+Style/RedundantBegin:
+ Enabled: true
+
+Style/RescueModifier:
+ Enabled: true
+
+# based on https://github.com/voxpupuli/modulesync_config/issues/168
Style/RegexpLiteral:
+ EnforcedStyle: percent_r
Enabled: true
-Style/WordArray:
+
+Lint/UnderscorePrefixedVariableName:
Enabled: true
-# this catches the cases of using `module` for parser functions, types, or
-# providers
-Style/ClassAndModuleChildren:
+Metrics/ParameterLists:
Enabled: false
-Style/Documentation:
- Description: 'Document classes and non-namespace modules.'
- Enabled: false
+Lint/RequireParentheses:
+ Enabled: true
+
+Style/SpaceBeforeFirstArg:
+ Enabled: true
+
+Style/ModuleFunction:
+ Enabled: true
+
+Lint/Debugger:
+ Enabled: true
+
+Style/IfWithSemicolon:
+ Enabled: true
+
+Style/Encoding:
+ Enabled: true
-# More comfortable block layouts
Style/BlockDelimiters:
- Enabled: False
+ Enabled: true
Style/MultilineBlockLayout:
+ Enabled: true
+
+# 'Complexity' is very relative
+Metrics/AbcSize:
+ Enabled: False
+
+# 'Complexity' is very relative
+Metrics/PerceivedComplexity:
Enabled: False
-# Rspec
+Lint/UselessAssignment:
+ Enabled: true
+
+Style/ClosingParenthesisIndentation:
+ Enabled: false
+
+# RSpec
# We don't use rspec in this way
RSpec/DescribeClass:
diff --git a/.travis.yml b/.travis.yml
index cc86b12..5eb58f0 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -26,6 +26,8 @@ matrix:
- rvm: 2.2
env: PUPPET_VERSION="~> 4.0" STRICT_VARIABLES="yes" CHECK=test
- rvm: 2.3.1
+ env: PUPPET_VERSION="~> 4.0" STRICT_VARIABLES="yes" CHECK=build
+ - rvm: 2.3.1
env: PUPPET_VERSION="~> 4.0" STRICT_VARIABLES="yes" CHECK=rubocop
- rvm: 2.3.1
env: PUPPET_VERSION="~> 4.0" STRICT_VARIABLES="yes" CHECK=test
@@ -41,4 +43,4 @@ deploy:
# all_branches is required to use tags
all_branches: true
# Only publish if our main Ruby target builds
- rvm: 2.2
+ rvm: 2.3.1
diff --git a/Gemfile b/Gemfile
index f9ac864..90188fe 100644
--- a/Gemfile
+++ b/Gemfile
@@ -15,7 +15,6 @@ group :test do
gem 'rspec-puppet', :require => false, :git => 'https://github.com/rodjek/rspec-puppet.git'
gem 'rspec-puppet-facts', :require => false
gem 'rspec-puppet-utils', :require => false
- gem 'puppet-lint', :require => false, :git => 'https://github.com/rodjek/puppet-lint.git'
gem 'puppet-lint-absolute_classname-check', :require => false
gem 'puppet-lint-leading_zero-check', :require => false
gem 'puppet-lint-trailing_comma-check', :require => false
@@ -37,7 +36,6 @@ group :development do
end
group :system_tests do
- gem 'beaker', :require => false
if beaker_version = ENV['BEAKER_VERSION']
gem 'beaker', *location_for(beaker_version)
end
diff --git a/spec/classes/unattended_upgrades_spec.rb b/spec/classes/unattended_upgrades_spec.rb
index f6e74af..c3b9673 100644
--- a/spec/classes/unattended_upgrades_spec.rb
+++ b/spec/classes/unattended_upgrades_spec.rb
@@ -1,48 +1,56 @@
require 'spec_helper'
+# rubocop:disable Style/RegexpLiteral
describe 'unattended_upgrades' do
let(:file_unattended) { '/etc/apt/apt.conf.d/50unattended-upgrades' }
let(:file_periodic) { '/etc/apt/apt.conf.d/10periodic' }
let(:file_options) { '/etc/apt/apt.conf.d/10options' }
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'Debian',
- lsbdistcodename: 'wheezy',
- lsbrelease: '7.0.3',
- } }
- let(:pre_condition) {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'Debian',
+ lsbdistcodename: 'wheezy',
+ lsbrelease: '7.0.3'
+ }
+ end
+ let(:pre_condition) do
'include ::apt'
- }
+ end
context 'with defaults on Debian' do
- it { should contain_package('unattended-upgrades') }
+ it do
+ should contain_package('unattended-upgrades')
+ should compile.with_all_deps
+ should contain_class('unattended_upgrades::params')
+ should contain_class('unattended_upgrades')
+ end
- it {
+ it do
should contain_apt__conf('unattended-upgrades').with(
require: 'Package[unattended-upgrades]',
- notify_update: false,
+ notify_update: false
)
- }
+ end
- it {
+ it do
should contain_apt__conf('periodic').with(
require: 'Package[unattended-upgrades]',
- notify_update: false,
+ notify_update: false
)
- }
+ end
- it {
+ it do
should contain_apt__conf('options').with(
require: 'Package[unattended-upgrades]',
- notify_update: false,
+ notify_update: false
)
- }
+ end
- it {
+ it do
should create_file(file_unattended).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
/Unattended-Upgrade::Origins-Pattern {/
).with_content(
@@ -66,13 +74,13 @@ describe 'unattended_upgrades' do
).without_content(
/Acquire::http::Dl-Limit/
)
- }
+ end
- it {
+ it do
should create_file(file_periodic).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
/APT::Periodic::Enable "1";/
).with_content(
@@ -98,17 +106,18 @@ describe 'unattended_upgrades' do
).with_content(
/APT::Periodic::Verbose "0";/
)
- }
+ end
- it { should contain_apt__conf('auto-upgrades').with(
- ensure: 'absent',
- )
- }
- it {
+ it do
+ should contain_apt__conf('auto-upgrades').with(
+ ensure: 'absent'
+ )
+ end
+ it do
should create_file(file_options).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
/^Dpkg::Options\s{/
).with_content(
@@ -120,21 +129,23 @@ describe 'unattended_upgrades' do
).without_content(
/\"--force-confmiss\";/
)
- }
+ end
end
context 'with defaults on Debian 6 Squeeze' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'Debian',
- lsbdistcodename: 'squeeze',
- lsbdistrelease: '6.0.10',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'Debian',
+ lsbdistcodename: 'squeeze',
+ lsbdistrelease: '6.0.10'
+ }
+ end
+ it do
should create_file(file_unattended).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
# This section varies for different releases
/\Unattended-Upgrade::Allowed-Origins\ {\n
@@ -143,21 +154,23 @@ describe 'unattended_upgrades' do
\t"\${distro_id}\ \${distro_codename}-lts";\n
};/x
)
- }
+ end
end
context 'with defaults on Debian 7 Wheezy' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'Debian',
- lsbdistcodename: 'wheezy',
- lsbdistrelease: '7.1',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'Debian',
+ lsbdistcodename: 'wheezy',
+ lsbdistrelease: '7.1'
+ }
+ end
+ it do
should create_file(file_unattended).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
# This section varies for different releases
/\Unattended-Upgrade::Origins-Pattern\ {\n
@@ -165,198 +178,216 @@ describe 'unattended_upgrades' do
\t"origin=Debian,archive=oldstable,label=Debian-Security";\n
};/x
)
- }
+ end
end
context 'with defaults on Debian 8 Jessie' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'Debian',
- lsbdistcodename: 'jessie',
- lsbdistrelease: '8.2',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'Debian',
+ lsbdistcodename: 'jessie',
+ lsbdistrelease: '8.2'
+ }
+ end
+ it do
should create_file(file_unattended).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
# This section varies for different releases
/\Unattended-Upgrade::Origins-Pattern\ {\n
\t"origin=Debian,codename=\${distro_codename},label=Debian-Security";\n
};/x
)
- }
+ end
end
context 'with defaults on Ubuntu 12.04LTS Precise Pangolin' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'Ubuntu',
- lsbdistcodename: 'precise',
- lsbrelease: '12.04',
- lsbdistrelease: '12.04',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'Ubuntu',
+ lsbdistcodename: 'precise',
+ lsbrelease: '12.04',
+ lsbdistrelease: '12.04'
+ }
+ end
+ it do
should create_file(file_unattended).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
# This is the only section that's different for Ubuntu compared to Debian
/\Unattended-Upgrade::Allowed-Origins\ {\n
\t"\${distro_id}\:\${distro_codename}-security";\n
};/x
)
- }
+ end
end
context 'with defaults on Ubuntu 14.04LTS Trusty Tahr' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'Ubuntu',
- lsbdistcodename: 'trusty',
- lsbrelease: '14.04',
- lsbdistrelease: '14.04',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'Ubuntu',
+ lsbdistcodename: 'trusty',
+ lsbrelease: '14.04',
+ lsbdistrelease: '14.04'
+ }
+ end
+ it do
should create_file(file_unattended).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
# This is the only section that's different for Ubuntu compared to Debian
/\Unattended-Upgrade::Allowed-Origins\ {\n
\t"\${distro_id}\:\${distro_codename}-security";\n
};/x
)
- }
+ end
end
context 'with defaults on Ubuntu 15.04 Vivid Vervet' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'Ubuntu',
- lsbdistcodename: 'vivid',
- lsbrelease: '15.04',
- lsbdistrelease: '15.04',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'Ubuntu',
+ lsbdistcodename: 'vivid',
+ lsbrelease: '15.04',
+ lsbdistrelease: '15.04'
+ }
+ end
+ it do
should create_file(file_unattended).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
# This is the only section that's different for Ubuntu compared to Debian
/\Unattended-Upgrade::Allowed-Origins\ {\n
\t"\${distro_id}\:\${distro_codename}-security";\n
};/x
)
- }
+ end
end
context 'with defaults on Ubuntu 15.10 Wily Werewolf' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'Ubuntu',
- lsbdistcodename: 'wily',
- lsbrelease: '15.10',
- lsbdistrelease: '15.10',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'Ubuntu',
+ lsbdistcodename: 'wily',
+ lsbrelease: '15.10',
+ lsbdistrelease: '15.10'
+ }
+ end
+ it do
should create_file(file_unattended).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
# This is the only section that's different for Ubuntu compared to Debian
/\Unattended-Upgrade::Allowed-Origins\ {\n
\t"\${distro_id}\:\${distro_codename}-security";\n
};/x
)
- }
+ end
end
context 'with defaults on Raspbian' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'Raspbian',
- lsbdistcodename: 'jessie',
- lsbrelease: '8.0',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'Raspbian',
+ lsbdistcodename: 'jessie',
+ lsbrelease: '8.0'
+ }
+ end
+ it do
should create_file(file_unattended).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
)
- }
+ end
end
context 'with defaults on Linux Mint 13 Maya' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'LinuxMint',
- lsbdistcodename: 'maya',
- lsbdistrelease: '13',
- lsbmajdistrelease: '13',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'LinuxMint',
+ lsbdistcodename: 'maya',
+ lsbdistrelease: '13',
+ lsbmajdistrelease: '13'
+ }
+ end
+ it do
should create_file(file_unattended).with(
'owner' => 'root',
'group' => 'root',
- 'mode' => '0644',
+ 'mode' => '0644'
).with_content(
# This is the only section that's different for Ubuntu compared to Debian
/\Unattended-Upgrade::Allowed-Origins\ {\n
\t"Ubuntu\:precise-security";\n
};/x
)
- }
+ end
end
context 'with defaults on Linux Mint 17.3 Rosa' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'LinuxMint',
- lsbdistcodename: 'rosa',
- lsbdistrelease: '17.3',
- lsbmajdistrelease: '17',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'LinuxMint',
+ lsbdistcodename: 'rosa',
+ lsbdistrelease: '17.3',
+ lsbmajdistrelease: '17'
+ }
+ end
+ it do
should create_file(file_unattended).with(
'owner' => 'root',
'group' => 'root',
- 'mode' => '0644',
+ 'mode' => '0644'
).with_content(
# This is the only section that's different for Ubuntu compared to Debian
/\Unattended-Upgrade::Allowed-Origins\ {\n
\t"Ubuntu\:trusty-security";\n
};/x
)
- }
+ end
end
context 'with defaults on Linux Mint 18 Sarah' do
- let(:facts) { {
- osfamily: 'Debian',
- lsbdistid: 'LinuxMint',
- lsbdistcodename: 'sarah',
- lsbdistrelease: '18',
- lsbmajdistrelease: '18',
- } }
- it {
+ let(:facts) do
+ {
+ osfamily: 'Debian',
+ lsbdistid: 'LinuxMint',
+ lsbdistcodename: 'sarah',
+ lsbdistrelease: '18',
+ lsbmajdistrelease: '18'
+ }
+ end
+ it do
should create_file(file_unattended).with(
'owner' => 'root',
'group' => 'root',
- 'mode' => '0644',
+ 'mode' => '0644'
).with_content(
# This is the only section that's different for Ubuntu compared to Debian
/\Unattended-Upgrade::Allowed-Origins\ {\n
\t"Ubuntu\:xenial-security";\n
};/x
)
- }
+ end
end
context 'set all the things' do
@@ -367,7 +398,7 @@ describe 'unattended_upgrades' do
update: 5,
upgradeable_packages: {
'download_only' => 5,
- 'debdelta' => 5,
+ 'debdelta' => 5
},
upgrade: 5,
auto: {
@@ -375,7 +406,7 @@ describe 'unattended_upgrades' do
'fix_interrupted_dpkg' => false,
'remove' => false,
'reboot' => true,
- 'reboot_time' => '03:00',
+ 'reboot_time' => '03:00'
},
verbose: 1,
legacy_origin: true,
@@ -385,7 +416,7 @@ describe 'unattended_upgrades' do
install_on_shutdown: true,
mail: {
'to' => 'root@localhost',
- 'only_on_error' => true,
+ 'only_on_error' => true
},
dl_limit: 70,
random_sleep: 300,
@@ -394,36 +425,38 @@ describe 'unattended_upgrades' do
'force_confdef' => false,
'force_confold' => false,
'force_confnew' => true,
- 'force_confmiss' => true,
+ 'force_confmiss' => true
}
}
end
it { should contain_package('unattended-upgrades') }
- it { should contain_apt__conf('unattended-upgrades').with(
- require: 'Package[unattended-upgrades]',
- notify_update: true,
+ it do
+ should contain_apt__conf('unattended-upgrades').with(
+ require: 'Package[unattended-upgrades]',
+ notify_update: true
)
- }
+ end
- it { should contain_apt__conf('periodic').with(
- require: 'Package[unattended-upgrades]',
- notify_update: true,
+ it do
+ should contain_apt__conf('periodic').with(
+ require: 'Package[unattended-upgrades]',
+ notify_update: true
)
- }
+ end
- it {
+ it do
should contain_apt__conf('options').with(
require: 'Package[unattended-upgrades]',
- notify_update: true,
+ notify_update: true
)
- }
+ end
- it {
+ it do
should create_file(file_unattended).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
/Unattended-Upgrade::Allowed-Origins {\n\t"bananas";\n};/
).with_content(
@@ -447,13 +480,13 @@ describe 'unattended_upgrades' do
).with_content(
/Acquire::http::Dl-Limit "70";/
)
- }
+ end
- it {
+ it do
should create_file(file_periodic).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
/APT::Periodic::Enable "1";/
).with_content(
@@ -481,13 +514,13 @@ describe 'unattended_upgrades' do
).with_content(
/APT::Periodic::RandomSleep "300";/
)
- }
+ end
- it {
+ it do
should create_file(file_options).with(
owner: 'root',
group: 'root',
- mode: '0644',
+ mode: '0644'
).with_content(
/^Dpkg::Options\s{/
).without_content(
@@ -499,217 +532,217 @@ describe 'unattended_upgrades' do
).with_content(
/^\s+"--force-confmiss";/
)
- }
- it {
+ end
+ it do
should contain_apt__conf('auto-upgrades').with(
- ensure: 'absent',
+ ensure: 'absent'
)
- }
+ end
end
describe 'validation tests' do
context 'bad install_on_shutdown' do
let :params do
{
- install_on_shutdown: 'foo',
+ install_on_shutdown: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a boolean/)
+ end.to raise_error(Puppet::Error, /not a boolean/)
end
end
context 'bad legacy_origin' do
let :params do
{
- legacy_origin: 'foo',
+ legacy_origin: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a boolean/)
+ end.to raise_error(Puppet::Error, /not a boolean/)
end
end
context 'bad minimal_steps' do
let :params do
{
- minimal_steps: 'foo',
+ minimal_steps: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a boolean/)
+ end.to raise_error(Puppet::Error, /not a boolean/)
end
end
context 'bad blacklist' do
let :params do
{
- blacklist: 'foo',
+ blacklist: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not an Array/)
+ end.to raise_error(Puppet::Error, /not an Array/)
end
end
context 'bad origins' do
let :params do
{
- origins: 'foo',
+ origins: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not an Array/)
+ end.to raise_error(Puppet::Error, /not an Array/)
end
end
context 'bad auto' do
let :params do
{
- auto: 'foo',
+ auto: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a Hash/)
+ end.to raise_error(Puppet::Error, /not a Hash/)
end
end
context 'bad mail' do
let :params do
{
- mail: 'foo',
+ mail: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a Hash/)
+ end.to raise_error(Puppet::Error, /not a Hash/)
end
end
context 'bad backup' do
let :params do
{
- backup: 'foo',
+ backup: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a Hash/)
+ end.to raise_error(Puppet::Error, /not a Hash/)
end
end
context 'bad age' do
let :params do
{
- age: 'foo',
+ age: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a Hash/)
+ end.to raise_error(Puppet::Error, /not a Hash/)
end
end
context 'bad size' do
let :params do
{
- size: 'foo',
+ size: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /to be an Integer/)
+ end.to raise_error(Puppet::Error, /to be an Integer/)
end
end
context 'bad upgradeable_packages' do
let :params do
{
- upgradeable_packages: 'foo',
+ upgradeable_packages: 'foo'
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a Hash/)
+ end.to raise_error(Puppet::Error, /not a Hash/)
end
end
context 'bad mail[\'only_on_error\']' do
let :params do
{
- mail: { 'only_on_error' => 'foo' },
+ mail: { 'only_on_error' => 'foo' }
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a boolean/)
+ end.to raise_error(Puppet::Error, /not a boolean/)
end
end
context 'bad options[\'force_confdef\']' do
let :params do
{
- options: { 'force_confdef' => 'foo' },
+ options: { 'force_confdef' => 'foo' }
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a boolean/)
+ end.to raise_error(Puppet::Error, /not a boolean/)
end
end
context 'bad options[\'force_confold\']' do
let :params do
{
- options: { 'force_confold' => 'foo' },
+ options: { 'force_confold' => 'foo' }
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a boolean/)
+ end.to raise_error(Puppet::Error, /not a boolean/)
end
end
context 'bad options[\'force_confnew\']' do
let :params do
{
- options: { 'force_confnew' => 'foo' },
+ options: { 'force_confnew' => 'foo' }
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a boolean/)
+ end.to raise_error(Puppet::Error, /not a boolean/)
end
end
context 'bad options[\'force_confmiss\']' do
let :params do
{
- options: { 'force_confmiss' => 'foo' },
+ options: { 'force_confmiss' => 'foo' }
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /not a boolean/)
+ end.to raise_error(Puppet::Error, /not a boolean/)
end
end
context 'bad options[\'invalid_key\']' do
let :params do
{
- options: { 'invalid_key' => true },
+ options: { 'invalid_key' => true }
}
end
it do
- expect {
+ expect do
subject.call
- }.to raise_error(Puppet::Error, /invalid_key not a valid key/)
+ end.to raise_error(Puppet::Error, /invalid_key not a valid key/)
end
end
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 0f53c4e..047b126 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,4 +1,17 @@
require 'puppetlabs_spec_helper/module_spec_helper'
require 'rspec-puppet-facts'
include RspecPuppetFacts
+
+RSpec.configure do |c|
+ c.default_facts = {
+ concat_basedir: '/tmp',
+ is_pe: false,
+ selinux_config_mode: 'disabled',
+ puppetversion: Puppet.version,
+ facterversion: Facter.version,
+ ipaddress: '172.16.254.254',
+ macaddress: 'AA:AA:AA:AA:AA:AA'
+ }
+end
+
# vim: syntax=ruby