control_spec_helper 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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