pdqtest 1.4.1 → 1.9.9beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +9 -3
  3. data/doc/acceptance_tests.md +100 -22
  4. data/doc/caching.md +5 -1
  5. data/doc/development.md +16 -5
  6. data/doc/emoji.md +20 -9
  7. data/doc/enabling_testing.md +15 -3
  8. data/doc/examples.md +25 -6
  9. data/doc/hiera.md +30 -11
  10. data/doc/installation.md +59 -8
  11. data/doc/pdk.md +334 -0
  12. data/doc/puppet_facts.md +45 -3
  13. data/doc/puppet_module_dependencies.md +34 -16
  14. data/doc/running_tests.md +35 -15
  15. data/doc/test_generation.md +11 -19
  16. data/doc/tips_and_tricks.md +17 -8
  17. data/doc/troubleshooting.md +19 -8
  18. data/doc/upgrading.md +125 -6
  19. data/doc/windows.md +51 -0
  20. data/docker_images/centos/Dockerfile +4 -3
  21. data/docker_images/centos/Makefile +1 -1
  22. data/docker_images/ubuntu/Dockerfile +3 -3
  23. data/docker_images/windows/Dockerfile +26 -0
  24. data/docker_images/windows/make.ps1 +2 -0
  25. data/exe/pdqtest +73 -28
  26. data/lib/pdqtest/core.rb +1 -1
  27. data/lib/pdqtest/docker.rb +143 -51
  28. data/lib/pdqtest/emoji.rb +33 -7
  29. data/lib/pdqtest/fastcheck.rb +19 -0
  30. data/lib/pdqtest/instance.rb +16 -15
  31. data/lib/pdqtest/logger.rb +35 -0
  32. data/lib/pdqtest/pdk.rb +98 -0
  33. data/lib/pdqtest/pdqtest1x.rb +115 -0
  34. data/lib/pdqtest/puppet.rb +277 -134
  35. data/lib/pdqtest/skeleton.rb +119 -39
  36. data/lib/pdqtest/upgrade.rb +42 -42
  37. data/lib/pdqtest/util.rb +82 -2
  38. data/lib/pdqtest/version.rb +1 -2
  39. data/pdqtest.gemspec +8 -13
  40. data/res/{skeleton → acceptance}/init.bats +0 -0
  41. data/res/{skeleton → acceptance}/init__before.bats +0 -0
  42. data/res/{skeleton → acceptance}/init__setup.sh +0 -0
  43. data/res/skeleton/.puppet-lint.rc +5 -0
  44. data/res/skeleton/{dot_travis.yml → .travis.yml} +0 -0
  45. data/res/skeleton/Makefile +20 -5
  46. data/res/skeleton/make.ps1 +66 -0
  47. data/res/skeleton/spec/fixtures/hiera.yaml +13 -0
  48. data/res/skeleton/spec/fixtures/hieradata/test.yaml +11 -0
  49. data/res/templates/examples_init.pp.erb +1 -1
  50. metadata +47 -115
  51. data/lib/pdqtest/lint.rb +0 -31
  52. data/lib/pdqtest/rspec.rb +0 -69
  53. data/lib/pdqtest/syntax.rb +0 -20
  54. data/res/skeleton/Gemfile +0 -7
  55. data/res/skeleton/Rakefile +0 -3
  56. data/res/skeleton/dot_gitignore +0 -9
  57. data/res/skeleton/dot_rspec +0 -2
  58. data/res/skeleton/hiera.yaml +0 -7
  59. data/res/skeleton/spec_helper.rb +0 -4
  60. data/res/skeleton/test.yaml +0 -3
@@ -4,19 +4,41 @@ require 'pdqtest/puppet'
4
4
  require 'pdqtest/version'
5
5
  require 'pdqtest/util'
6
6
  require 'pdqtest/upgrade'
7
+ require 'pdqtest/pdqtest1x'
8
+ require 'pdqtest/pdk'
9
+ require 'erb'
7
10
 
8
11
  module PDQTest
9
12
  module Skeleton
10
- FIXTURES = '.fixtures.yml'
11
- SPEC_DIR = 'spec'
12
- ACCEPTANCE_DIR = File.join(SPEC_DIR, 'acceptance')
13
- CLASSES_DIR = File.join(SPEC_DIR, 'classes')
14
- SKELETON_DIR = 'skeleton'
15
- EXAMPLES_DIR = 'examples'
16
- GEMFILE = 'Gemfile'
17
- HIERA_DIR = File.join(SPEC_DIR, 'fixtures', 'hieradata')
18
- HIERA_YAML = 'hiera.yaml'
19
- HIERA_TEST = 'test.yaml'
13
+
14
+ TEMP_PDK_MODULE = "x"
15
+ FIXTURES = '.fixtures.yml'
16
+ SPEC_DIR = 'spec'
17
+ ACCEPTANCE_DIR = File.join(SPEC_DIR, 'acceptance')
18
+ SKELETON_DIR = 'skeleton'
19
+ EXAMPLES_DIR = 'examples'
20
+ HIERA_DIR = File.join(SPEC_DIR, 'fixtures', 'hieradata')
21
+ HIERA_YAML = 'hiera.yaml'
22
+ HIERA_TEST = 'test.yaml'
23
+ PDK_FILES = [
24
+ "spec/spec_helper.rb",
25
+ "spec/default_facts.yml",
26
+ ".pdkignore",
27
+ "Gemfile",
28
+ "Rakefile",
29
+ ".gitignore",
30
+ ]
31
+
32
+ # PDK adds custom metadata fields which we can ONLY get by creating a new
33
+ # module. We already do this so stash the details here when we have them
34
+ @@pdk_metadata = {}
35
+
36
+ # Every time we `pdqtest upgrade`, update .sync.yml (merges)
37
+ SYNC_YML_CONTENT = {
38
+ ".travis.yml" => {
39
+ "unmanaged": true
40
+ }
41
+ }
20
42
 
21
43
 
22
44
  def self.should_replace_file(target, skeleton)
@@ -26,11 +48,16 @@ module PDQTest
26
48
  target_hash != skeleton_hash
27
49
  end
28
50
 
51
+ def self.install_skeletons
52
+ FileUtils.cp_r(Util.resource_path(File.join(SKELETON_DIR) + "/."), ".")
53
+ end
54
+
55
+
29
56
  def self.install_skeleton(target_file, skeleton, replace=true)
30
- skeleton_file = Util::resource_path(File.join(SKELETON_DIR, skeleton))
57
+ skeleton_file = Util.resource_path(File.join(SKELETON_DIR, skeleton))
31
58
  install = false
32
59
  if File.exists?(target_file)
33
- if replace and should_replace_file(target_file, skeleton_file)
60
+ if replace && should_replace_file(target_file, skeleton_file)
34
61
  install = true
35
62
  end
36
63
  else
@@ -51,55 +78,51 @@ module PDQTest
51
78
  end
52
79
  end
53
80
 
54
- def self.install_gemfile
81
+ def self.install_gemfile_project
55
82
  install_skeleton(GEMFILE, GEMFILE)
56
83
 
57
84
  # upgrade the gemfile to *this* version of pdqtest + puppet-strings
58
85
  Upgrade.upgrade()
59
86
  end
60
87
 
61
- def self.init
62
-
63
- # move .fixtures.yml out of the way
64
- if File.exists?(FIXTURES)
65
- File.delete(FIXTURES)
66
- end
67
-
68
- # make directory structure for testcases
88
+ def self.directory_structure
69
89
  FileUtils.mkdir_p(ACCEPTANCE_DIR)
70
- FileUtils.mkdir_p(CLASSES_DIR)
71
90
  FileUtils.mkdir_p(EXAMPLES_DIR)
72
91
  FileUtils.mkdir_p(HIERA_DIR)
92
+ end
73
93
 
94
+ def self.init
95
+ directory_structure
74
96
 
75
- # skeleton files if required
76
- install_skeleton('Rakefile', 'Rakefile')
77
- install_skeleton(File.join('spec', 'spec_helper.rb'), 'spec_helper.rb')
78
- install_skeleton('.gitignore', 'dot_gitignore')
79
- install_skeleton('.rspec', 'dot_rspec')
80
- install_skeleton(File.join(SPEC_DIR, 'fixtures', HIERA_YAML), HIERA_YAML)
81
- install_skeleton(File.join(HIERA_DIR, HIERA_TEST), HIERA_TEST)
82
-
83
- install_acceptance()
84
- install_gemfile()
85
- install_integrations()
97
+ install_pdk_skeletons
98
+ install_skeletons
99
+ install_acceptance
100
+ Upgrade.upgrade()
86
101
 
87
- # Make sure there is a Gemfile and we are in it
102
+ # the very _last_ thing we do is enable PDK in metadata. Once this switch
103
+ # is set, we never touch the files in PDK_FILES again
104
+ PDQTest::Pdk.enable_pdk(@@pdk_metadata)
88
105
  end
89
106
 
90
- def self.install_integrations()
107
+ # on upgrade, do a more limited skeleton copy - just our own integration
108
+ # points
109
+ def self.upgrade
91
110
  install_skeleton('Makefile', 'Makefile')
111
+ install_skeleton('make.ps1', 'make.ps1')
92
112
  install_skeleton('bitbucket-pipelines.yml', 'bitbucket-pipelines.yml')
93
- install_skeleton('.travis.yml', 'dot_travis.yml')
113
+ install_skeleton('.travis.yml', '.travis.yml')
114
+ Pdk.amend_sync_yml(SYNC_YML_CONTENT)
94
115
  end
95
116
 
96
117
  def self.install_acceptance(example_file ="init.pp")
118
+ directory_structure
119
+
97
120
  example_name = File.basename(example_file).gsub(/\.pp$/, '')
98
121
  install_template("#{EXAMPLES_DIR}/#{File.basename(example_file)}",'examples_init.pp.erb', {})
99
122
 
100
- install_skeleton(File.join('spec', 'acceptance', "#{example_name}.bats"), 'init.bats', false)
101
- install_skeleton(File.join('spec', 'acceptance', "#{example_name}__before.bats"), 'init__before.bats', false)
102
- install_skeleton(File.join('spec', 'acceptance', "#{example_name}__setup.sh"), 'init__setup.sh', false)
123
+ install_skeleton(File.join('spec', 'acceptance', "#{example_name}.bats"), '../acceptance/init.bats', false)
124
+ install_skeleton(File.join('spec', 'acceptance', "#{example_name}__before.bats"), '../acceptance/init__before.bats', false)
125
+ install_skeleton(File.join('spec', 'acceptance', "#{example_name}__setup.sh"), '../acceptance/init__setup.sh', false)
103
126
  end
104
127
 
105
128
  # Scan the examples directory and create a set of acceptance tests. If a
@@ -122,5 +145,62 @@ module PDQTest
122
145
  install_acceptance(e)
123
146
  }
124
147
  end
148
+
149
+
150
+ def self.install_pdk_skeletons
151
+
152
+ if ! PDQTest::Pdk.is_pdk_enabled
153
+ $logger.info "Doing one-time upgrade to PDK - Generating fresh set of files..."
154
+ project_dir = File.expand_path Dir.pwd
155
+ Dir.mktmpdir do |tmpdir|
156
+ Dir.chdir(tmpdir) do
157
+ status = PDQTest::Pdk.run("new module #{TEMP_PDK_MODULE} --skip-interview")
158
+
159
+ if status
160
+ # snag generated metadata now we are in the temporary module dir
161
+ Dir.chdir TEMP_PDK_MODULE do
162
+ @@pdk_metadata = PDQTest::Puppet.module_metadata
163
+ end
164
+
165
+ PDK_FILES.each do |pdk_file|
166
+ upstream_file = File.join(tmpdir, TEMP_PDK_MODULE, pdk_file)
167
+
168
+ # check if we are trying to install a file from PDQTest or have
169
+ # some random/customised file in place
170
+ Dir.chdir project_dir do
171
+ if PDQTest1x.was_pdqtest_file(pdk_file)
172
+ if ! File.exists?(pdk_file) || PDQTest1x.is_pdqtest_file(pdk_file)
173
+ # overwrite missing or PDQTest 1x files
174
+ install = true
175
+ else
176
+ raise(<<~END)
177
+ Detected an unknown/customised file at
178
+ #{pdk_file}
179
+ Please see the PDQTest 1x->2x upgrade guide at
180
+ https://github.com/declarativesystems/pdqtest/blob/master/doc/upgrading.md
181
+
182
+ If your sure you don't want this file any more, move it out
183
+ of the way and re-run the previous command
184
+ END
185
+ end
186
+ else
187
+ install = true
188
+ end
189
+
190
+ if install
191
+ $logger.info("Detected PDQTest 1.x file at #{pdk_file} (will upgrade to PDK)")
192
+ FileUtils.cp(upstream_file, pdk_file)
193
+ end
194
+ end
195
+ end
196
+ else
197
+ raise("error running PDK - unable to init")
198
+ end
199
+ end
200
+ end
201
+ else
202
+ $logger.debug "PDK already enabled, no skeletons needed"
203
+ end
204
+ end
125
205
  end
126
206
  end
@@ -2,7 +2,7 @@ require 'pdqtest/skeleton'
2
2
 
3
3
  module PDQTest
4
4
  module Upgrade
5
- GEMFILE = 'Gemfile'
5
+ GEMFILE = 'Gemfile.project'
6
6
  GEM_REGEXP = /gem ('|")([-\w]+)('|").*$/
7
7
  GEM_ATTRIB_REGEXP = /^\s*:\w+/
8
8
 
@@ -15,10 +15,6 @@ module PDQTest
15
15
  'line' => "gem 'puppet-strings', :git => 'https://github.com/puppetlabs/puppet-strings'",
16
16
  'added' => false,
17
17
  },
18
- 'puppet' => {
19
- 'line' => "gem 'puppet', '#{PDQTest::PUPPET_VERSION}'",
20
- 'added' => false,
21
- }
22
18
  }
23
19
 
24
20
 
@@ -27,50 +23,54 @@ module PDQTest
27
23
  t_file = File.open("#{GEMFILE}.tmp","w")
28
24
  updating_gem = false
29
25
 
30
- if File.exists?(GEMFILE)
31
- File.open(GEMFILE, 'r') do |f|
32
- f.each_line{ |line|
33
- if line =~ GEM_REGEXP
34
- # a gem stanza
35
- processing_gem = $2
36
- if GEMS.keys.include?(processing_gem)
37
- # fixup one of our monitored gems as needed, mark
38
- # this as being a gem that is being updated so
39
- # that we can kill any multi-line attributes
40
- t_file.puts GEMS[processing_gem]['line']
41
- updating_gem = true
42
- GEMS[processing_gem]['added'] = true
43
- else
44
- # a gem we don't care about - write it out as-is
45
- t_file.puts line
46
- updating_gem = false
47
- end
48
- elsif updating_gem and line =~ GEM_ATTRIB_REGEXP
49
- # do nothing - remove the multi-line attributes
26
+ # Step 1 - enable gem
27
+
28
+ if ! File.exists?(GEMFILE)
29
+ FileUtils.touch(GEMFILE)
30
+ end
31
+ File.open(GEMFILE, 'r') do |f|
32
+ f.each_line{ |line|
33
+ if line =~ GEM_REGEXP
34
+ # a gem stanza
35
+ processing_gem = $2
36
+ if GEMS.keys.include?(processing_gem)
37
+ # fixup one of our monitored gems as needed, mark
38
+ # this as being a gem that is being updated so
39
+ # that we can kill any multi-line attributes
40
+ t_file.puts GEMS[processing_gem]['line']
41
+ updating_gem = true
42
+ GEMS[processing_gem]['added'] = true
50
43
  else
51
- # anything else... (esp comments)
44
+ # a gem we don't care about - write it out as-is
52
45
  t_file.puts line
46
+ updating_gem = false
53
47
  end
54
- }
55
- end
56
-
57
- # the code above will only UPGRADE existing gem lines, but if this is our
58
- # first run, there will be nothing to upgrade, so loop through the GEMS
59
- # for any that are not already added and append them
60
- GEMS.each { |name, opts|
61
- if ! opts['added']
62
- t_file.puts opts['line']
48
+ elsif updating_gem and line =~ GEM_ATTRIB_REGEXP
49
+ # do nothing - remove the multi-line attributes
50
+ else
51
+ # anything else... (esp comments)
52
+ t_file.puts line
63
53
  end
64
54
  }
55
+ end
56
+
57
+ # the code above will only UPGRADE existing gem lines, but if this is our
58
+ # first run, there will be nothing to upgrade, so loop through the GEMS
59
+ # for any that are not already added and append them
60
+ GEMS.each { |name, opts|
61
+ if ! opts['added']
62
+ t_file.puts opts['line']
63
+ end
64
+ }
65
65
 
66
- t_file.close
67
- FileUtils.mv(t_file.path, GEMFILE)
66
+ t_file.close
68
67
 
69
- # miscellanious file updates
70
- PDQTest::Skeleton::install_integrations()
71
- else
72
- Escort::Logger.error.error "Gemfile not found in #{Dir.pwd}"
73
- end
68
+ # Must do copy->delete on windows or we get permanent file not found
69
+ # error...
70
+ FileUtils.cp(t_file.path, GEMFILE)
71
+ FileUtils.rm(t_file.path)
72
+
73
+ PDQTest::Skeleton.upgrade
74
74
  end
75
75
 
76
76
  end
data/lib/pdqtest/util.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  module PDQTest
2
2
  module Util
3
+ ENV='export TERM=xterm LC_ALL=C PATH=/usr/local/bats/bin:/opt/puppetlabs/puppet/bin:$PATH;'
3
4
 
4
5
  def self.resource_path(resource)
5
- File.join(File.dirname(File.expand_path(__FILE__)), "../../res/#{resource}")
6
+ joinp(File.dirname(File.expand_path(__FILE__)), "../../res/#{resource}")
6
7
  end
7
8
 
8
9
  def self.app_dir
@@ -10,7 +11,86 @@ module PDQTest
10
11
  end
11
12
 
12
13
  def self.app_dir_expanded
13
- File.join(Dir.home, app_dir)
14
+ joinp(Dir.home, app_dir)
15
+ end
16
+
17
+ def self.host_platform
18
+ Gem.win_platform? ? :windows : :linux
19
+ end
20
+
21
+ def self.is_windows
22
+ host_platform == :windows
23
+ end
24
+
25
+ def self.shell
26
+ # cmd.exe is basically broken under docker, use powershell
27
+ is_windows ? "powershell" : "bash"
28
+ end
29
+
30
+ # need to wrap commands with shell to gain access to
31
+ # shell functions like `cd` etc
32
+ def self.wrap_cmd(cmd)
33
+ if cmd =~ /^\s*$/ || cmd == "bash" || cmd == "powershell"
34
+ raise "Missing command to wrap!"
35
+ end
36
+
37
+ if is_windows
38
+ wrapped = [shell, "-command", "#{cmd} ; exit $LastExitCode"]
39
+ else
40
+ wrapped = [shell, "-c", "#{ENV} #{cmd}"]
41
+ end
42
+
43
+ wrapped
44
+ end
45
+
46
+ # File.join joins paths with `/` _always_ so we must create our own
47
+ # function to join paths correctly for windows since using `/` in docker
48
+ # is not gonna work
49
+ def self.joinp(*args)
50
+ File.join(args).gsub(File::SEPARATOR,
51
+ File::ALT_SEPARATOR || File::SEPARATOR)
52
+ end
53
+
54
+ # 3x" --> 1x" seems only way to escape quotes to keep cmd.exe happy. also
55
+ # need to use double quotes for all args or they get eaten
56
+ def self.rm(f)
57
+ is_windows ? "if (test-path '#{f}'){ Remove-Item '#{f}' -Recurse -Force}" : "rm -rf #{f}"
58
+ end
59
+
60
+ # @param link the symlink file
61
+ # @param target the real file
62
+ def self.mk_link(link, target)
63
+ $logger.debug "symlink: #{link} <==> #{target}"
64
+ if Util.is_windows
65
+ Emoji.emoji_message(
66
+ :shame,
67
+ "symlinks not supported by ruby/puppet on windows doing COPY instead")
68
+ # broken until ruby/puppet fixed cmd = "#{rm(link)} ; cmd /C mklink /D '#{link}' '#{target}'"
69
+
70
+ # for regular files use `copy-time`, for trees use `robocopy` - since
71
+ # files are in the container we have no idea what is a file or not so
72
+ # just guess based on presence of filename extension
73
+ if link =~ /\.[\w]+$/
74
+ cmd = "copy-item '#{target}' -destination '#{link}'"
75
+ else
76
+ cmd = "robocopy '#{target}' '#{link}' /NFL /NDL /NJH /NJS /nc /ns /np /MIR /XD .git fixtures"
77
+ end
78
+ else
79
+ cmd = "#{rm(link)} && mkdir -p #{File.dirname(link)} && ln -s #{target} #{link}"
80
+ end
81
+
82
+ cmd
83
+ end
84
+
85
+ def self.volumes2binds(volumes)
86
+ # {test_dir => {pwd => 'rw'} + VOLUMES
87
+ # ...to...
88
+ # "pwd:test_dir:rw",
89
+ volumes.map { |container_dir, host_mapping|
90
+ host_mapping.map { |dir, mode|
91
+ "#{dir}:#{container_dir}:#{mode}"
92
+ }.first
93
+ }
14
94
  end
15
95
  end
16
96
  end
@@ -1,4 +1,3 @@
1
1
  module PDQTest
2
- VERSION = "1.4.1"
3
- PUPPET_VERSION = "5.5.6"
2
+ VERSION = "1.9.9beta2"
4
3
  end
data/pdqtest.gemspec CHANGED
@@ -7,10 +7,10 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "pdqtest"
8
8
  spec.version = PDQTest::VERSION
9
9
  spec.authors = ["Geoff Williams"]
10
- spec.email = ["geoff.williams@puppetlabs.com"]
10
+ spec.email = ["geoff@declarativesystems.com"]
11
11
 
12
12
  spec.summary = %q{Quick and simple integration tests run inside of a docker container}
13
- spec.homepage = "https://github.com/GeoffWilliams/pdqtest"
13
+ spec.homepage = "https://github.com/DeclarativeSystems/pdqtest"
14
14
  spec.licenses = 'Apache-2.0'
15
15
 
16
16
  # file MUST be in git to be fucking readable!!!!!
@@ -21,22 +21,17 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "2.0.1"
24
+ spec.add_development_dependency "bundler", "~> 1.16"
25
25
  spec.add_development_dependency "coveralls", "0.8.21"
26
- spec.add_development_dependency "fakefs", "0.14.2"
27
- spec.add_development_dependency "puppet", "5.3.5"
26
+ spec.add_development_dependency "rspec", "3.7.0"
28
27
 
29
28
  spec.add_runtime_dependency "rake", "12.3.1"
30
- spec.add_runtime_dependency "rspec", "3.7.0"
31
29
  spec.add_runtime_dependency "thor", "~> 0.19"
32
30
  spec.add_runtime_dependency "minitar", "0.6.1"
33
- spec.add_runtime_dependency "hiera", "3.4.2"
34
31
  spec.add_runtime_dependency "escort", "0.4.0"
35
32
  spec.add_runtime_dependency "docker-api", "1.34.2"
36
- spec.add_runtime_dependency "puppet-lint", "2.3.5"
37
- spec.add_runtime_dependency "puppet-syntax", "2.4.1"
38
- spec.add_runtime_dependency "puppetlabs_spec_helper", "2.7.0"
39
- spec.add_runtime_dependency "r10k", "2.6.2"
40
- spec.add_runtime_dependency "git_refresh", "0.1.1"
41
- spec.add_runtime_dependency "puppet_factset", "0.5.0"
33
+ spec.add_runtime_dependency "r10k", "2.6.4"
34
+ spec.add_runtime_dependency "logging", "~> 2.2"
35
+ spec.add_runtime_dependency "deep_merge", "~> 1.2"
36
+ spec.add_runtime_dependency "json", "<= 2.0.4"
42
37
  end
File without changes
File without changes
File without changes
@@ -0,0 +1,5 @@
1
+ --fail-on-warnings
2
+ --no-double_quoted_strings-check
3
+ --no-80chars-check
4
+ --no-variable_scope-check
5
+ --no-quoted_booleans-check
File without changes
@@ -1,11 +1,26 @@
1
- all:
1
+ all: Gemfile.local
2
2
  bundle exec pdqtest all
3
- bundle exec puppet strings generate --format=markdown
4
3
 
5
- shell:
4
+ fast: Gemfile.local
5
+ bundle exec pdqtest fast
6
+
7
+ shell: Gemfile.local
6
8
  bundle exec pdqtest --keep-container acceptance
7
9
 
8
- logical:
10
+ shellnopuppet: Gemfile.local
11
+ bundle exec pdqtest shell
12
+
13
+ logical: Gemfile.local
9
14
  bundle exec pdqtest syntax
10
- bundle exec pdqtest lint
11
15
  bundle exec pdqtest rspec
16
+
17
+ bundle:
18
+ pdk bundle install
19
+
20
+ Gemfile.local:
21
+ echo "[🐌] Creating symlink and running pdk bundle..."
22
+ ln -s Gemfile.project Gemfile.local
23
+ make bundle
24
+
25
+
26
+
@@ -0,0 +1,66 @@
1
+ <#
2
+ .SYNOPSIS
3
+ Run PDQTest targets
4
+ .DESCRIPTION
5
+ See the instructions at https://github.com/declarativesystems/pdqtest/blob/master/doc/running_tests.md
6
+ .EXAMPLE
7
+ .\make.ps1 - Run the default testing target
8
+ .EXAMPLE
9
+ .\make.ps1 XXX - run the XXX target
10
+ .PARAMETER target
11
+ Test suite to run
12
+ #>
13
+ param(
14
+ $target = "all"
15
+ )
16
+
17
+ $gfl = "Gemfile.local"
18
+ $gfp = "Gemfile.project"
19
+
20
+ # Relink Gemfile.local
21
+ # https://github.com/declarativesystems/pdqtest/blob/master/doc/pdk.md#why-are-the-launch-scripts-essentialhow-does-the-pdqtest-gem-load-itself
22
+ function Install-GemfileLocal {
23
+ # on windows, symlinks dont work on vagrant fileshares, so just copy the
24
+ # file if needed
25
+ if (Test-Path $gfl) {
26
+ $gflMd5 = (Get-FileHash -Path $gfl -Algorithm MD5).Hash
27
+ $gfpMd5 = (Get-FileHash -Path $gfp -Algorithm MD5).Hash
28
+ if ($gflMd5 -eq $gfpMd5) {
29
+ # OK - ready to launch
30
+ } else {
31
+ write-error "$($gfl) different content to $($gfp)! Move it out the way or move the content to $($gfp)"
32
+ }
33
+ } else {
34
+ write-host "[(-_-)zzz] Copying $($gfp) to $($gfl) and running pdk bundle..."
35
+ copy $gfp $gfl
36
+ pdk bundle install
37
+ }
38
+ }
39
+
40
+
41
+ switch ($target) {
42
+ "all" {
43
+ Install-GemfileLocal
44
+ bundle exec pdqtest all
45
+ }
46
+ "fast" {
47
+ Install-GemfileLocal
48
+ bundle exec pdqtest fast
49
+ }
50
+ "shell" {
51
+ Install-GemfileLocal
52
+ bundle exec pdqtest --keep-container acceptance
53
+ }
54
+ "shellnopuppet" {
55
+ Install-GemfileLocal
56
+ bundle exec pdqtest shell
57
+ }
58
+ "logical" {
59
+ Install-GemfileLocal
60
+ bundle exec pdqtest syntax
61
+ bundle exec pdqtest rspec
62
+ }
63
+ default {
64
+ Write-Error "No such target: $($target)"
65
+ }
66
+ }
@@ -0,0 +1,13 @@
1
+ # Hiera 5 Global configuration file *****test configuration*****
2
+ #
3
+ # Hiera data expected from spec/fixtures/hieradata to give consistent path for
4
+ # testing both rspec and acceptance
5
+ ---
6
+
7
+ version: 5
8
+
9
+ hierarchy:
10
+ - name: 'Yaml backend'
11
+ data_hash: yaml_data
12
+ paths:
13
+ - '/spec/fixtures/hieradata/test.yaml'
@@ -0,0 +1,11 @@
1
+ # test.yaml *****for testing*****
2
+ #
3
+ # This allows you to acceptance test the _global_ hierarchy. Usually this is not
4
+ # what you want- for in-module data, just look at `/hiera.yaml` and `/data`
5
+ #
6
+ # There may be edge cases where this is useful - don't forget double check that
7
+ # * `/spec/fixtures/hiera.yaml`
8
+ # * `/spec/fixtures/hieradata/*`
9
+ # Have really made it to git. They are often excluded via `.gitignore`
10
+ ---
11
+ message: "this is a test message from pdqtest/hiera"
@@ -1,2 +1,2 @@
1
- #<%= PDQTest::Puppet::MAGIC_MARKER %>
1
+ #<%= PDQTest::Puppet::setting(:magic_marker) %>
2
2
  include <%= PDQTest::Puppet.module_name %>