control_spec_helper 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 85c0b9b72a42803e64e735178baa10091aa89782
4
+ data.tar.gz: 1414e84d2bb520b8310533b2f3fe2504c18d4127
5
+ SHA512:
6
+ metadata.gz: b5ea6ca1108204d0e87dbf83bcf8bce8ffa07a9681904c67415092e2388745054191168e80397a4d28c8eb7ebaffc84e024065dcff2e923f54de806a97a8f7c4
7
+ data.tar.gz: deff607652448f633a89bb1fa03b0de77aac9ffe87482cf4aaf43ff8c96494e454d1922fc739118c8e4d79990ca8a5e0ecd9dd72ae493544b76ca12aed2b24fe
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ Gemfile.lock
2
+ pkg/
3
+ .*.sw
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,16 @@
1
+ Copyright (C) 2012 Puppet Labs Inc
2
+
3
+ Puppet Labs can be contacted at: info@puppetlabs.com
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,9 @@
1
+ Note: this is still alpha code. Use at your own risk.
2
+
3
+ Puppet Control Spec Helper is designed to complement the Puppet Labs Spec Helper, which is
4
+ not intended for use with control repositories.
5
+
6
+ Directions forthcoming - for now copy the ext/spec_helper_control.rb file into your site/role/spec directory inside your control repo
7
+ and copy the Rakefile into your base directory.
8
+
9
+ Most code by David Gwilliam <david.gwilliam@slalom.com> with assistance by Eric Shamow <eric.shamow@slalom.com>
data/Rakefile ADDED
@@ -0,0 +1,36 @@
1
+ require 'rake'
2
+ require 'rake/packagetask'
3
+ require 'rubygems/package_task'
4
+ require 'rspec/core/rake_task'
5
+
6
+ task :default do
7
+ sh %{rake -T}
8
+ end
9
+
10
+ require 'fileutils'
11
+
12
+ RSpec::Core::RakeTask.new(:spec)
13
+
14
+ def version
15
+ require 'control_spec_helper/version'
16
+ ControlSpecHelper::Version::STRING
17
+ end
18
+
19
+ namespace :package do
20
+ desc "Create the gem"
21
+ task :gem do
22
+ spec = Gem::Specification.load("control_spec_helper.gemspec")
23
+ Dir.mkdir("pkg") rescue nil
24
+ if Gem::Version.new(`gem -v`) >= Gem::Version.new("2.0.0.a")
25
+ Gem::Package.build(spec)
26
+ else
27
+ Gem::Builder.new(spec).build
28
+ end
29
+ FileUtils.move("control_spec_helper-#{version}.gem", "pkg")
30
+ end
31
+ end
32
+
33
+ desc "Cleanup pkg directory"
34
+ task :clean do
35
+ FileUtils.rm_rf("pkg")
36
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
3
+ require "control_spec_helper/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "control_spec_helper"
7
+ s.version = ControlSpecHelper::Version::STRING
8
+ s.authors = ["Slalom Consulting"]
9
+ s.email = ["eric.shamow@slalom.com"]
10
+ s.homepage = "http://github.com/eshamow/control_spec_helper"
11
+ s.summary = "Standard tasks and configuration for control repo spec tests"
12
+ s.description = "Contains rake tasks and a standard spec_helper for running spec tests on puppet control repo"
13
+ s.licenses = 'Apache-2.0'
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+
19
+ # Runtime dependencies, but also probably dependencies of requiring projects
20
+ s.add_runtime_dependency 'rake'
21
+ s.add_runtime_dependency 'rspec-puppet'
22
+ s.add_runtime_dependency 'puppet-lint'
23
+ s.add_runtime_dependency 'puppet-syntax'
24
+ s.add_runtime_dependency 'mocha'
25
+ s.add_development_dependency 'pry'
26
+ end
@@ -0,0 +1,11 @@
1
+ $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
2
+
3
+ require 'control_spec_helper/control_spec_helper'
4
+ require 'control_spec_helper/rake_tasks'
5
+ require 'puppet-lint/tasks/puppet-lint'
6
+
7
+ include ControlSpecHelper
8
+
9
+ # Uncomment one of the below to set alternate directories for basebranch or bastpath
10
+ #basebranch='master'
11
+ #basepath='spec'
@@ -0,0 +1,55 @@
1
+ if ENV['serverspec']
2
+ require 'serverspec'
3
+
4
+ Specinfra.configuration.backend = :exec
5
+ else
6
+ require 'beaker-rspec/spec_helper'
7
+ require 'beaker-rspec/helpers/serverspec'
8
+
9
+ UNSUPPORTED_PLATFORMS = %w(Suse windows AIX Solaris Debian)
10
+
11
+ RSpec.configure do |c|
12
+ # Project root
13
+ proj_root = File.expand_path(
14
+ File.join(File.dirname(__FILE__), '..', '..', '..'))
15
+
16
+ # Readable test descriptions
17
+ c.formatter = :documentation
18
+
19
+ # Configure all nodes in nodeset
20
+ c.before :suite do
21
+ # Install module and dependencies
22
+ hosts.each do |host|
23
+ role = File.join(proj_root, 'dist', 'role')
24
+ profile = File.join(proj_root, 'dist', 'profile')
25
+
26
+ copy_module_to(host, source: role, module_name: 'role')
27
+ copy_module_to(host, source: profile, module_name: 'profile')
28
+ run_script_on host, File.join(proj_root, 'scripts', 'bootstrap.sh')
29
+ shell 'mkdir -p /controlrepo'
30
+ shell 'chown vagrant /controlrepo'
31
+ install_package(host, 'zlib-devel')
32
+ install_package(host, 'openssl-devel')
33
+ %x{scp -i ~/.vagrant.d/insecure_private_key -o StrictHostKeyChecking=no -r #{proj_root} vagrant@#{host.connection.ip}:/}
34
+ #scp_to host, proj_root, '/controlrepo'
35
+ shell 'cd /controlrepo && gem install ./control_spec_helper-0.0.1.gem && bundle install && rake r10k'
36
+ shell 'mkdir -p /etc/facter/facts.d'
37
+ role = ENV['role'].sub(/^role::/, '')
38
+ shell "echo \"role=#{role}\" > /etc/facter/facts.d/role.txt"
39
+ end
40
+ end
41
+ end
42
+
43
+ shared_context 'beaker' do
44
+ describe 'running puppet code' do
45
+ it 'should apply cleanly' do
46
+ pp = <<-EOS
47
+ include "role::${::role}"
48
+ EOS
49
+
50
+ modulepath = '/controlrepo/dist:/controlrepo/modules'
51
+ apply_manifest(pp, :modulepath => modulepath, :catch_failures => true)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,136 @@
1
+ # rubocop:disable Style/DotPosition, Style/HashSyntax
2
+
3
+ module ControlSpecHelper
4
+ attr_writer :basepath, :basebranch
5
+
6
+ def basepath
7
+ @basepath ||= 'site'
8
+ end
9
+
10
+ def basebranch
11
+ @basebranch ||= 'master'
12
+ end
13
+
14
+ def debug(msg)
15
+ puts "DEBUG: #{msg}" if ENV['debug']
16
+ end
17
+
18
+ def puppet_cmd
19
+ 'puppet apply manifests/site.pp \
20
+ --modulepath $(echo `pwd`/modules:`pwd`/site) --hiera_config hiera.yaml'
21
+ end
22
+
23
+ def project_root
24
+ return @root if @root
25
+ @root = `git rev-parse --show-toplevel`.chomp
26
+ debug("project_root = #{@root}")
27
+ @root
28
+ end
29
+
30
+ def role_path
31
+ File.join(project_root, @basepath, 'role')
32
+ end
33
+
34
+ def profile_path
35
+ File.join(project_root, @basepath, 'profile')
36
+ end
37
+
38
+ def diff_from_base
39
+ `git diff #{@basebranch} --cached --diff-filter=ACMR --name-only`.split("\n")
40
+ end
41
+
42
+ def diff_roles
43
+ diff_from_base.
44
+ select { |file| file.match(%r{site/role/manifests}) }.
45
+ map { |path| class_from_path(path) }
46
+ end
47
+
48
+ def diff_profile
49
+ diff_from_base.
50
+ select { |file| file.match(%r{site/profile/manifests}) }.
51
+ map { |path| class_from_path(path) }
52
+ end
53
+
54
+ def class_from_path(path)
55
+ return nil unless path =~ /manifests.+\.pp$/
56
+
57
+ (path.sub(project_root + '/', '').
58
+ sub(/\.pp$/, '').
59
+ split('/') - %w(site manifests)).
60
+ join('::')
61
+ end
62
+
63
+ def roles_that_include(klass)
64
+ Dir.chdir(role_path) do
65
+ debug("cd to #{role_path}")
66
+ `git grep -l #{klass}`.split("\n").
67
+ map { |path| class_from_path(File.join(role_path, path)) }.
68
+ compact
69
+ end
70
+ debug "cd to #{Dir.pwd}"
71
+ end
72
+
73
+ # TODO: this could be much more accurate if we compiled catalogs for all roles
74
+ # and then parsed them for included Classes, but that is very complicated
75
+ def all_roles_with_changes
76
+ (diff_roles + diff_profile.map do |klass|
77
+ roles_that_include(klass)
78
+ end.flatten).uniq
79
+ end
80
+
81
+ def spec_from_class(klass)
82
+ test = if klass =~ /profile/
83
+ { :path => 'profile', :type => nil }
84
+ elsif klass =~ /role/
85
+ { :path => 'role', :type => 'acceptance' }
86
+ else
87
+ fail ArgumentError
88
+ end
89
+
90
+ path = [project_root, @basepath, test[:path], 'spec', test[:type]].compact
91
+ File.join(path << (klass.split('::') - [test[:path]])) + '_spec.rb'
92
+ end
93
+
94
+ def r10k
95
+ Dir.chdir(project_root) do
96
+ debug("cd to #{project_root}")
97
+ puts 'Installing modules with r10k'
98
+ `r10k puppetfile install`
99
+ end
100
+ debug "cd to #{Dir.pwd}"
101
+ end
102
+
103
+ def profile_fixtures
104
+ Dir.chdir(profile_path) do
105
+ debug("cd to #{profile_path}")
106
+ profile_ln = './spec/fixtures/modules/profile'
107
+
108
+ FileUtils.mkpath './spec/fixtures/modules/'
109
+ File.symlink(profile_path, profile_ln) unless File.exists?(profile_ln)
110
+
111
+ Dir.glob('../../modules/*').each do |folder|
112
+ next unless File.directory?(folder)
113
+ old_path = File.join(File.dirname(__FILE__), folder)
114
+ new_path = File.join("./spec/fixtures/modules/#{File.basename(folder)}")
115
+
116
+ File.symlink(old_path, new_path) unless File.symlink?(new_path)
117
+ end
118
+ end
119
+ debug "cd to #{Dir.pwd}"
120
+ end
121
+
122
+ def spec_clean
123
+ Dir.chdir(project_root) do
124
+ debug("cd to #{project_root}")
125
+ fixtures = File.join(profile_path, 'spec', 'fixtures', 'modules')
126
+ modules = File.join(project_root, 'modules')
127
+
128
+ abort if fixtures == '' || !fixtures
129
+ abort if modules == '' || !modules
130
+
131
+ `rm -rf #{fixtures}/*`
132
+ `rm -rf #{modules}/*`
133
+ end
134
+ debug "cd to #{Dir.pwd}"
135
+ end
136
+ end
@@ -0,0 +1,158 @@
1
+ # rubocop:disable Style/HashSyntax
2
+ require 'rake'
3
+ require 'rspec/core/rake_task'
4
+ require 'puppet-lint/tasks/puppet-lint'
5
+ require 'puppet-syntax/tasks/puppet-syntax'
6
+
7
+ task :default => [:help]
8
+
9
+ desc 'update repo from origin (destructive)'
10
+ task :git do
11
+ puts 'Updating puppet-control repo'
12
+ `git fetch --all`
13
+ `git checkout --track origin/cloud`
14
+ `git reset --hard origin/cloud`
15
+ end
16
+
17
+ desc 'install all modules from the Puppetfile (idempotent)'
18
+ task :r10k do
19
+ r10k
20
+ end
21
+
22
+ desc 'print the command used to run puppet'
23
+ task :puppet_cmd do
24
+ puts puppet_cmd
25
+ end
26
+
27
+ desc 'run puppet apply (enforce mode)'
28
+ task :apply => [:git, :r10k] do
29
+ puts "Running 'puppet apply'"
30
+ exec puppet_cmd
31
+ end
32
+
33
+ desc 'run puppet apply (no git)'
34
+ task :apply_dev => :r10k do
35
+ puts "Running 'puppet apply'"
36
+ exec puppet_cmd
37
+ end
38
+
39
+ desc 'run puppet apply (noop)'
40
+ task :apply_noop do
41
+ puts "Running 'puppet apply'"
42
+ exec "#{puppet_cmd} --noop"
43
+ end
44
+
45
+ desc 'run puppet apply (debug)'
46
+ task :apply_debug do
47
+ puts "Running 'puppet apply'"
48
+ exec "#{puppet_cmd} --debug --trace"
49
+ end
50
+
51
+ desc 'run puppet apply (no r10k or git)'
52
+ task :apply_standalone do
53
+ puts "Running 'puppet apply'"
54
+ exec "#{puppet_cmd} --debug --trace"
55
+ end
56
+
57
+ desc 'install or update pre-commit hook'
58
+ task :hooks do
59
+ include FileUtils
60
+ puts 'Installing pre-commit hook'
61
+ hook = File.join(project_root, 'scripts', 'pre-commit')
62
+ dest = File.join(project_root, '.git', 'hooks', 'pre-commit')
63
+ FileUtils.cp hook, dest
64
+ FileUtils.chmod 'a+x', dest
65
+ end
66
+
67
+ desc 'install Vagrant plugins'
68
+ task :vplugins do
69
+ exec 'vagrant plugin install vagrant-auto_network vagrant-hosts'
70
+ end
71
+
72
+ desc 'prep for spec tests'
73
+ task :spec_prep do
74
+ r10k
75
+ profile_fixtures
76
+ end
77
+
78
+ desc 'run unit tests'
79
+ task :spec do
80
+ Rake::Task['spec_prep'].invoke
81
+ Dir.chdir(profile_path) do
82
+ system 'bundle exec rake rspec'
83
+ end
84
+ Rake::Task['spec_clean'].invoke
85
+ end
86
+
87
+ desc 'clean up after unit tests'
88
+ task :spec_clean do
89
+ spec_clean
90
+ end
91
+
92
+ desc 'Run acceptance tests for 1 or more roles'
93
+ task :acceptance do
94
+ Rake::Task['spec_clean'].invoke
95
+
96
+ role = if ENV['role'] || ENV['roles']
97
+ (ENV['role'] || ENV['roles']).split(',')
98
+ elsif !diff_roles.empty?
99
+ diff_roles
100
+ else
101
+ puts 'no roles specified and no changes detected'
102
+ exit 0
103
+ end
104
+
105
+ puts "-- Acceptance tests for #{role.join(', ')} --"
106
+ paths = role.map do |klass|
107
+ if klass.match(/^role/)
108
+ spec_from_class(klass)
109
+ else
110
+ spec_from_class("role::#{klass}")
111
+ end
112
+ end.join(' ')
113
+ Dir.chdir(role_path) do
114
+ abort unless
115
+ system "bash -c 'bundle exec rspec --format documentation #{paths}'"
116
+ end
117
+ end
118
+
119
+ desc 'Run acceptance tests locally from SUT'
120
+ task :serverspec do
121
+ Dir.chdir(role_path) do
122
+ if ENV['role']
123
+ role_spec = ENV['role']
124
+ else
125
+ role_spec = `facter role`.chomp.split('::').join('/')
126
+ end
127
+ ENV['serverspec'] = 'true'
128
+ system "rspec spec/acceptance/#{role_spec}_spec.rb"
129
+ end
130
+ end
131
+
132
+ # Override default puppet-lint choices
133
+ # Must clear as it will not override the existing puppet-lint rake task since
134
+ # we require to import for the PuppetLint::RakeTask
135
+ Rake::Task[:lint].clear
136
+ # Relative is not able to be set within the context of PuppetLint::RakeTask
137
+ PuppetLint.configuration.relative = true
138
+ PuppetLint::RakeTask.new(:lint) do |config|
139
+ config.fail_on_warnings = true
140
+ config.disable_checks = %w(
141
+ 80chars
142
+ class_inherits_from_params_class
143
+ class_parameter_defaults
144
+ documentation
145
+ )
146
+ config.ignore_paths = %w(
147
+ tests/**/*.pp
148
+ vendor/**/*.pp
149
+ examples/**/*.pp
150
+ spec/**/*.pp
151
+ pkg/**/*.pp
152
+ )
153
+ end
154
+
155
+ desc 'Display the list of available rake tasks'
156
+ task :help do
157
+ system('rake -T')
158
+ end
@@ -0,0 +1,5 @@
1
+ module ControlSpecHelper
2
+ module Version
3
+ STRING = '0.0.1'
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require 'control_spec_helper/control_spec_helper'
@@ -0,0 +1,2 @@
1
+ require 'rspec'
2
+ require 'control_spec_helper'
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ class DummyClass
4
+ include ControlSpecHelper
5
+ end
6
+
7
+ describe 'control_spec_helper' do
8
+ before do
9
+ @dummy_class = DummyClass.new
10
+ end
11
+
12
+ it 'should have a default basepath' do
13
+ expect(@dummy_class.basepath).to eq('site')
14
+ end
15
+
16
+ it 'should allow you to set basepath' do
17
+ @dummy_class.basepath = 'dist'
18
+ expect(@dummy_class.basepath).to eq('dist')
19
+ end
20
+
21
+ it 'should print the puppet command' do
22
+ cmd = "puppet apply manifests/site.pp \\\n --modulepath $(echo `pwd`/modules:`pwd`/site) --hiera_config hiera.yaml"
23
+ expect(@dummy_class.puppet_cmd).to eq(cmd)
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: control_spec_helper
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Slalom Consulting
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-puppet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: puppet-lint
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: puppet-syntax
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mocha
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Contains rake tasks and a standard spec_helper for running spec tests
98
+ on puppet control repo
99
+ email:
100
+ - eric.shamow@slalom.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - .gitignore
106
+ - Gemfile
107
+ - LICENSE
108
+ - README.md
109
+ - Rakefile
110
+ - control_spec_helper.gemspec
111
+ - ext/Rakefile.sample
112
+ - ext/spec_helper_control.rb
113
+ - lib/control_spec_helper.rb
114
+ - lib/control_spec_helper/control_spec_helper.rb
115
+ - lib/control_spec_helper/rake_tasks.rb
116
+ - lib/control_spec_helper/version.rb
117
+ - spec/spec_helper.rb
118
+ - spec/unit/control_spec_helper_spec.rb
119
+ homepage: http://github.com/eshamow/control_spec_helper
120
+ licenses:
121
+ - Apache-2.0
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubyforge_project:
139
+ rubygems_version: 2.0.14.1
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: Standard tasks and configuration for control repo spec tests
143
+ test_files:
144
+ - spec/spec_helper.rb
145
+ - spec/unit/control_spec_helper_spec.rb