r10k 3.14.1 → 5.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 +4 -4
- data/.github/dependabot.yml +17 -0
- data/.github/workflows/docker.yml +9 -4
- data/.github/workflows/release.yml +3 -2
- data/.github/workflows/rspec_tests.yml +8 -10
- data/CHANGELOG.mkd +100 -0
- data/CODEOWNERS +1 -2
- data/Gemfile +2 -2
- data/README.mkd +18 -19
- data/doc/common-patterns.mkd +1 -2
- data/doc/dynamic-environments/configuration.mkd +91 -12
- data/doc/dynamic-environments/usage.mkd +4 -0
- data/doc/dynamic-environments/workflow-guide.mkd +3 -3
- data/doc/faq.mkd +1 -1
- data/doc/puppetfile.mkd +9 -3
- data/integration/Gemfile +3 -4
- data/integration/Rakefile +58 -23
- data/integration/files/pre-suite/git_config.pp.erb +1 -1
- data/integration/pre-suite/00_pe_install.rb +3 -0
- data/integration/pre-suite/10_git_config.rb +1 -3
- data/integration/tests/Puppetfile/HTTP_PROXY_affects_git_source.rb +5 -4
- data/integration/tests/basic_functionality/negative/negative_bad_proxy.rb +1 -1
- data/integration/tests/basic_functionality/proxy_specified_in_configuration.rb +2 -2
- data/integration/tests/basic_functionality/proxy_with_puppetfile.rb +2 -2
- data/integration/tests/basic_functionality/rugged_git_provider_with_ssh.rb +3 -3
- data/integration/tests/basic_functionality/rugged_git_provider_without_ssh.rb +3 -3
- data/integration/tests/command_line/deploy_env_without_mod_update.rb +0 -3
- data/integration/tests/command_line/negative/neg_deploy_env_with_module_update.rb +0 -3
- data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +5 -10
- data/integration/tests/git_source/git_source_git.rb +1 -4
- data/integration/tests/git_source/git_source_repeated_remote.rb +2 -5
- data/integration/tests/git_source/git_source_submodule.rb +1 -1
- data/integration/tests/git_source/negative/neg_git_unauthorized_ssh.rb +1 -1
- data/integration/tests/purging/content_not_purged_at_root.rb +2 -5
- data/integration/tests/purging/default_purging.rb +0 -3
- data/integration/tests/purging/{does_not_purge_files_on_white_list.rb → does_not_purge_files_on_allowlist.rb} +2 -5
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +1 -4
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +1 -4
- data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -4
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_forge_module.rb +0 -3
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/negative/neg_bad_git_module_ref.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/negative/neg_disk_full.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/negative/neg_duplicate_module_names.rb +0 -3
- data/integration/tests/user_scenario/basic_workflow/negative/neg_inaccessible_forge.rb +3 -2
- data/integration/tests/user_scenario/basic_workflow/negative/neg_specify_deleted_forge_module.rb +1 -5
- data/integration/tests/user_scenario/basic_workflow/single_env_10000_files.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_git_module.rb +1 -4
- data/integration/tests/user_scenario/basic_workflow/single_env_custom_forge_module.rb +0 -3
- data/integration/tests/user_scenario/basic_workflow/single_env_large_files.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/single_env_module_already_installed.rb +0 -3
- data/integration/tests/user_scenario/basic_workflow/single_env_purge_unmanaged_modules.rb +0 -3
- data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +1 -4
- data/integration/tests/user_scenario/basic_workflow/single_env_upgrade_forge_mod_revert_change.rb +0 -3
- data/integration/tests/user_scenario/complex_workflow/multi_env_add_change_remove.rb +0 -3
- data/lib/r10k/action/deploy/environment.rb +2 -19
- data/lib/r10k/action/deploy/module.rb +1 -0
- data/lib/r10k/action/puppetfile/check.rb +7 -0
- data/lib/r10k/action/puppetfile/install.rb +3 -1
- data/lib/r10k/cli/deploy.rb +15 -1
- data/lib/r10k/cli/puppetfile.rb +1 -0
- data/lib/r10k/content_synchronizer.rb +7 -2
- data/lib/r10k/environment/with_modules.rb +24 -1
- data/lib/r10k/environment.rb +0 -1
- data/lib/r10k/git/rugged/bare_repository.rb +5 -4
- data/lib/r10k/git/rugged/thin_repository.rb +7 -0
- data/lib/r10k/git/rugged/working_repository.rb +13 -7
- data/lib/r10k/git/shellgit/thin_repository.rb +5 -1
- data/lib/r10k/git/shellgit/working_repository.rb +5 -4
- data/lib/r10k/git/stateful_repository.rb +4 -4
- data/lib/r10k/module/base.rb +3 -3
- data/lib/r10k/module/git.rb +19 -5
- data/lib/r10k/module_loader/puppetfile/dsl.rb +4 -0
- data/lib/r10k/module_loader/puppetfile.rb +22 -14
- data/lib/r10k/puppetfile.rb +1 -1
- data/lib/r10k/settings/container.rb +1 -0
- data/lib/r10k/settings.rb +6 -7
- data/lib/r10k/tarball.rb +1 -1
- data/lib/r10k/version.rb +1 -1
- data/locales/r10k.pot +34 -82
- data/r10k.gemspec +8 -18
- metadata +40 -213
- data/.github/workflows/stale.yml +0 -21
- data/.travis.yml +0 -42
- data/docker/.gitignore +0 -1
- data/docker/.rspec +0 -4
- data/docker/Gemfile +0 -11
- data/docker/Makefile +0 -92
- data/docker/README.md +0 -28
- data/docker/docker-compose.yml +0 -18
- data/docker/r10k/Dockerfile +0 -68
- data/docker/r10k/adduser.sh +0 -13
- data/docker/r10k/docker-entrypoint.d/10-analytics.sh +0 -30
- data/docker/r10k/docker-entrypoint.sh +0 -10
- data/docker/r10k/release.Dockerfile +0 -55
- data/docker/spec/dockerfile_spec.rb +0 -37
- data/docker/spec/fixtures/Puppetfile +0 -2
- data/integration/tests/basic_functionality/install_pe_only_module_with_puppetfile.rb +0 -83
- data/integration/tests/basic_functionality/proxy_with_pe_only_module.rb +0 -128
- data/integration/tests/purging/invalid_whitelist_types.rb +0 -63
- data/integration/tests/user_scenario/basic_workflow/negative/neg_module_specified_at_deleted_release.rb +0 -49
- data/integration/tests/user_scenario/basic_workflow/single_env_module_last_release_deleted.rb +0 -68
- data/lib/r10k/environment/bare.rb +0 -13
- data/spec/fixtures/empty/.empty +0 -0
- data/spec/fixtures/integration/git/puppet-boolean-bare.tar +0 -0
- data/spec/fixtures/module/forge/bad_module/metadata.json +0 -1
- data/spec/fixtures/module/forge/eight_hundred/Modulefile +0 -8
- data/spec/fixtures/module/forge/eight_hundred/metadata.json +0 -19
- data/spec/fixtures/tarball/tarball.tar.gz +0 -0
- data/spec/fixtures/unit/action/r10k.yaml +0 -5
- data/spec/fixtures/unit/action/r10k_cachedir.yaml +0 -2
- data/spec/fixtures/unit/action/r10k_creds.yaml +0 -9
- data/spec/fixtures/unit/action/r10k_forge_auth.yaml +0 -4
- data/spec/fixtures/unit/action/r10k_forge_auth_no_url.yaml +0 -3
- data/spec/fixtures/unit/action/r10k_generate_types.yaml +0 -3
- data/spec/fixtures/unit/action/r10k_logging.yaml +0 -12
- data/spec/fixtures/unit/action/r10k_puppet_path.yaml +0 -3
- data/spec/fixtures/unit/puppetfile/argument-error/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/default-branch-override/Puppetfile +0 -5
- data/spec/fixtures/unit/puppetfile/duplicate-module-error/Puppetfile +0 -10
- data/spec/fixtures/unit/puppetfile/forge-override/Puppetfile +0 -8
- data/spec/fixtures/unit/puppetfile/invalid-syntax/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/load-error/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/name-error/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/valid-forge-with-version/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/valid-forge-without-version/Puppetfile +0 -1
- data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile +0 -10
- data/spec/fixtures/unit/puppetfile/various-modules/Puppetfile.new +0 -10
- data/spec/fixtures/unit/util/purgeable/managed_one/expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/managed_symlink_file +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_allowlisted_2/ignored_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_expected_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/subdir_unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_subdir_1/unmanaged_symlink_dir +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_one/managed_symlink_dir +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_1 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_one/unmanaged_symlink_file +0 -1
- data/spec/fixtures/unit/util/purgeable/managed_two/.hidden/unmanaged_3 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/expected_2 +0 -0
- data/spec/fixtures/unit/util/purgeable/managed_two/unmanaged_2 +0 -0
- data/spec/fixtures/unit/util/subprocess/runner/no-execute.sh +0 -3
- data/spec/integration/git/rugged/bare_repository_spec.rb +0 -13
- data/spec/integration/git/rugged/cache_spec.rb +0 -33
- data/spec/integration/git/rugged/thin_repository_spec.rb +0 -14
- data/spec/integration/git/rugged/working_repository_spec.rb +0 -48
- data/spec/integration/git/shellgit/bare_repository_spec.rb +0 -13
- data/spec/integration/git/shellgit/thin_repository_spec.rb +0 -14
- data/spec/integration/git/shellgit/working_repository_spec.rb +0 -13
- data/spec/integration/git/stateful_repository_spec.rb +0 -159
- data/spec/integration/util/purageable_spec.rb +0 -41
- data/spec/matchers/exit_with.rb +0 -28
- data/spec/matchers/match_realpath.rb +0 -18
- data/spec/r10k-mocks/mock_config.rb +0 -33
- data/spec/r10k-mocks/mock_env.rb +0 -18
- data/spec/r10k-mocks/mock_source.rb +0 -17
- data/spec/r10k-mocks.rb +0 -3
- data/spec/shared-contexts/git-fixtures.rb +0 -55
- data/spec/shared-contexts/tarball.rb +0 -32
- data/spec/shared-examples/deploy-actions.rb +0 -69
- data/spec/shared-examples/git/bare_repository.rb +0 -132
- data/spec/shared-examples/git/thin_repository.rb +0 -26
- data/spec/shared-examples/git/working_repository.rb +0 -207
- data/spec/shared-examples/git-repository.rb +0 -38
- data/spec/shared-examples/puppetfile-action.rb +0 -39
- data/spec/shared-examples/settings/ancestry.rb +0 -44
- data/spec/shared-examples/subprocess-runner.rb +0 -89
- data/spec/spec_helper.rb +0 -41
- data/spec/unit/action/cri_runner_spec.rb +0 -72
- data/spec/unit/action/deploy/deploy_helpers_spec.rb +0 -38
- data/spec/unit/action/deploy/display_spec.rb +0 -61
- data/spec/unit/action/deploy/environment_spec.rb +0 -640
- data/spec/unit/action/deploy/module_spec.rb +0 -476
- data/spec/unit/action/puppetfile/check_spec.rb +0 -53
- data/spec/unit/action/puppetfile/cri_runner_spec.rb +0 -47
- data/spec/unit/action/puppetfile/install_spec.rb +0 -112
- data/spec/unit/action/puppetfile/purge_spec.rb +0 -60
- data/spec/unit/action/runner_spec.rb +0 -407
- data/spec/unit/action/visitor_spec.rb +0 -39
- data/spec/unit/cli_spec.rb +0 -9
- data/spec/unit/deployment/config_spec.rb +0 -33
- data/spec/unit/deployment_spec.rb +0 -162
- data/spec/unit/environment/bare_spec.rb +0 -13
- data/spec/unit/environment/base_spec.rb +0 -122
- data/spec/unit/environment/git_spec.rb +0 -114
- data/spec/unit/environment/name_spec.rb +0 -181
- data/spec/unit/environment/plain_spec.rb +0 -8
- data/spec/unit/environment/svn_spec.rb +0 -146
- data/spec/unit/environment/tarball_spec.rb +0 -45
- data/spec/unit/environment/with_modules_spec.rb +0 -75
- data/spec/unit/errors/formatting_spec.rb +0 -84
- data/spec/unit/feature_spec.rb +0 -50
- data/spec/unit/forge/module_release_spec.rb +0 -213
- data/spec/unit/git/alternates_spec.rb +0 -116
- data/spec/unit/git/cache_spec.rb +0 -66
- data/spec/unit/git/rugged/cache_spec.rb +0 -48
- data/spec/unit/git/rugged/credentials_spec.rb +0 -215
- data/spec/unit/git/shellgit/cache_spec.rb +0 -27
- data/spec/unit/git/stateful_repository_spec.rb +0 -45
- data/spec/unit/git_spec.rb +0 -102
- data/spec/unit/initializers_spec.rb +0 -68
- data/spec/unit/instance_cache_spec.rb +0 -78
- data/spec/unit/keyed_factory_spec.rb +0 -51
- data/spec/unit/logging/terminaloutputter_spec.rb +0 -53
- data/spec/unit/logging_spec.rb +0 -68
- data/spec/unit/module/base_spec.rb +0 -118
- data/spec/unit/module/forge_spec.rb +0 -271
- data/spec/unit/module/git_spec.rb +0 -387
- data/spec/unit/module/metadata_file_spec.rb +0 -68
- data/spec/unit/module/svn_spec.rb +0 -208
- data/spec/unit/module/tarball_spec.rb +0 -70
- data/spec/unit/module_loader/puppetfile_spec.rb +0 -421
- data/spec/unit/module_spec.rb +0 -114
- data/spec/unit/puppetfile_spec.rb +0 -304
- data/spec/unit/settings/collection_spec.rb +0 -123
- data/spec/unit/settings/container_spec.rb +0 -92
- data/spec/unit/settings/definition_spec.rb +0 -79
- data/spec/unit/settings/enum_definition_spec.rb +0 -20
- data/spec/unit/settings/inheritance_spec.rb +0 -38
- data/spec/unit/settings/list_spec.rb +0 -88
- data/spec/unit/settings/loader_spec.rb +0 -110
- data/spec/unit/settings/uri_definition_spec.rb +0 -23
- data/spec/unit/settings_spec.rb +0 -303
- data/spec/unit/source/base_spec.rb +0 -31
- data/spec/unit/source/exec_spec.rb +0 -81
- data/spec/unit/source/git_spec.rb +0 -233
- data/spec/unit/source/hash_spec.rb +0 -54
- data/spec/unit/source/svn_spec.rb +0 -196
- data/spec/unit/source/yaml_spec.rb +0 -42
- data/spec/unit/source_spec.rb +0 -10
- data/spec/unit/svn/remote_spec.rb +0 -21
- data/spec/unit/svn/working_dir_spec.rb +0 -56
- data/spec/unit/tarball_spec.rb +0 -57
- data/spec/unit/util/attempt_spec.rb +0 -82
- data/spec/unit/util/cacheable_spec.rb +0 -23
- data/spec/unit/util/commands_spec.rb +0 -61
- data/spec/unit/util/downloader_spec.rb +0 -98
- data/spec/unit/util/exec_env_spec.rb +0 -56
- data/spec/unit/util/purgeable_spec.rb +0 -267
- data/spec/unit/util/setopts_spec.rb +0 -83
- data/spec/unit/util/subprocess/result_spec.rb +0 -36
- data/spec/unit/util/subprocess/runner/posix_spec.rb +0 -7
- data/spec/unit/util/subprocess/runner/pump_spec.rb +0 -79
- data/spec/unit/util/subprocess/runner/windows_spec.rb +0 -7
- data/spec/unit/util/subprocess/subprocess_error_spec.rb +0 -26
- data/spec/unit/util/subprocess_spec.rb +0 -65
- data/spec/unit/util/symbolize_keys_spec.rb +0 -67
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/util/subprocess'
|
3
|
-
|
4
|
-
describe R10K::Util::Subprocess::Result do
|
5
|
-
describe "formatting" do
|
6
|
-
it "includes the exit code" do
|
7
|
-
result = described_class.new(%w[/usr/bin/gti --zoom], '', '', 42)
|
8
|
-
expect(result.format).to match(%r[Exit code: 42])
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "stdout" do
|
12
|
-
it "is omitted when empty" do
|
13
|
-
result = described_class.new(%w[/usr/bin/gti --zoom], '', '', 42)
|
14
|
-
expect(result.format).to_not match(%r[Stdout])
|
15
|
-
end
|
16
|
-
it "is included when non-empty" do
|
17
|
-
result = described_class.new(%w[/usr/bin/gti --zoom], 'stuff here', '', 42)
|
18
|
-
expect(result.format).to match(%r[Stdout:])
|
19
|
-
expect(result.format).to match(%r[stuff here])
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "stderr" do
|
24
|
-
it "is omitted when empty" do
|
25
|
-
result = described_class.new(%w[/usr/bin/gti --zoom], '', '', 42)
|
26
|
-
expect(result.format).to_not match(%r[Stderr])
|
27
|
-
end
|
28
|
-
|
29
|
-
it "is included when non-empty" do
|
30
|
-
result = described_class.new(%w[/usr/bin/gti --zoom], '', 'other stuff', 42)
|
31
|
-
expect(result.format).to match(%r[Stderr:])
|
32
|
-
expect(result.format).to match(%r[other stuff])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,7 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/util/subprocess/runner'
|
3
|
-
|
4
|
-
describe R10K::Util::Subprocess::Runner::POSIX, :if => R10K::Util::Platform.posix? do
|
5
|
-
fixture_root = File.expand_path('spec/fixtures/unit/util/subprocess/runner', PROJECT_ROOT)
|
6
|
-
it_behaves_like 'a subprocess runner', fixture_root
|
7
|
-
end
|
@@ -1,79 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/util/subprocess/runner/pump'
|
3
|
-
|
4
|
-
describe R10K::Util::Subprocess::Runner::Pump do
|
5
|
-
|
6
|
-
let(:pair) { IO.pipe }
|
7
|
-
let(:r) { pair.first }
|
8
|
-
let(:w) { pair.last }
|
9
|
-
|
10
|
-
after do
|
11
|
-
pair.each { |io| io.close unless io.closed? }
|
12
|
-
end
|
13
|
-
|
14
|
-
subject { described_class.new(r) }
|
15
|
-
|
16
|
-
it "returns an empty string if nothing has been read" do
|
17
|
-
expect(subject.string).to eq('')
|
18
|
-
end
|
19
|
-
|
20
|
-
describe "reading all data in the stream" do
|
21
|
-
it "reads data until the stream reaches EOF" do
|
22
|
-
subject.start
|
23
|
-
w << "hello"
|
24
|
-
w << " "
|
25
|
-
w << "world!"
|
26
|
-
w.close
|
27
|
-
subject.wait
|
28
|
-
expect(subject.string).to eq("hello world!")
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe "halting" do
|
33
|
-
it "does not read any more information read off the pipe" do
|
34
|
-
subject.min_delay = 0.01
|
35
|
-
subject.start
|
36
|
-
w << "hello"
|
37
|
-
|
38
|
-
# This should ensure that we yield to the pumping thread. If this test
|
39
|
-
# sporadically fails then we may need to increase the timeout.
|
40
|
-
sleep 0.1
|
41
|
-
subject.halt!
|
42
|
-
w << " world!"
|
43
|
-
|
44
|
-
expect(subject.string).to eq("hello")
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "backing off" do
|
49
|
-
it "does not back off more than the max delay time" do
|
50
|
-
max_delay = subject.min_delay * 2
|
51
|
-
subject.max_delay = max_delay
|
52
|
-
subject.start
|
53
|
-
sleep max_delay * 2
|
54
|
-
|
55
|
-
Timeout.timeout(max_delay * 1.5) do
|
56
|
-
subject.halt!
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# Linux 2.6.11+ has a maximum pipe capacity of 64 KiB, and writing to the
|
63
|
-
# pipe when the pipe is at capacity will block. To make sure the pump is
|
64
|
-
# actively removing contents from the pipe we need to attempt to fill up
|
65
|
-
# the entire pipe.
|
66
|
-
#
|
67
|
-
# See man pipe(7)
|
68
|
-
it "does not block if more than 64 kilobytes are fed into the pipe" do
|
69
|
-
# The maximum pipe buffer size is 2 ** 16 bytes, so that's the minimum
|
70
|
-
# amount of data needed to cause further writes to block. We then double
|
71
|
-
# this value to make sure that we are continuously emptying the pipe.
|
72
|
-
pipe_buffer_size = 2 ** 17
|
73
|
-
blob = "buffalo!" * pipe_buffer_size
|
74
|
-
subject.start
|
75
|
-
Timeout.timeout(60) { w << blob }
|
76
|
-
w.close
|
77
|
-
subject.wait
|
78
|
-
end
|
79
|
-
end
|
@@ -1,7 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/util/subprocess/runner'
|
3
|
-
|
4
|
-
describe R10K::Util::Subprocess::Runner::Windows, :if => R10K::Util::Platform.windows? do
|
5
|
-
fixture_root = File.expand_path('spec/fixtures/unit/util/subprocess/runner', PROJECT_ROOT)
|
6
|
-
it_behaves_like 'a subprocess runner', fixture_root
|
7
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/util/subprocess'
|
3
|
-
|
4
|
-
describe R10K::Util::Subprocess::SubprocessError do
|
5
|
-
let(:result) do
|
6
|
-
R10K::Util::Subprocess::Result.new(%w[/usr/bin/gti --zoom], "zooming on stdout", "zooming on stderr", 42)
|
7
|
-
end
|
8
|
-
|
9
|
-
describe "formatting the message" do
|
10
|
-
subject(:message) { described_class.new("Execution failed", :result => result).message }
|
11
|
-
|
12
|
-
it "includes the exception message and formatted result" do
|
13
|
-
expect(message).to eq(
|
14
|
-
[
|
15
|
-
"Execution failed:",
|
16
|
-
"Command: /usr/bin/gti --zoom",
|
17
|
-
"Stdout:",
|
18
|
-
"zooming on stdout",
|
19
|
-
"Stderr:",
|
20
|
-
"zooming on stderr",
|
21
|
-
"Exit code: 42",
|
22
|
-
].join("\n")
|
23
|
-
)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/util/subprocess'
|
3
|
-
|
4
|
-
describe R10K::Util::Subprocess do
|
5
|
-
|
6
|
-
describe "selecting the runner implementation" do
|
7
|
-
it "uses the windows implementation on Windows platforms" do
|
8
|
-
expect(R10K::Util::Platform).to receive(:windows?).and_return true
|
9
|
-
expect(described_class.runner).to eq R10K::Util::Subprocess::Runner::Windows
|
10
|
-
end
|
11
|
-
|
12
|
-
it "uses the posix implementation when not on windows" do
|
13
|
-
expect(R10K::Util::Platform).to receive(:windows?).and_return true
|
14
|
-
expect(described_class.runner).to eq R10K::Util::Subprocess::Runner::Windows
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "running commands" do
|
19
|
-
subject { described_class.new(['/bin/echo', 'hello', 'world']) }
|
20
|
-
|
21
|
-
let(:runner) do
|
22
|
-
double('R10K::Util::Subprocess::Runner').tap do |i|
|
23
|
-
allow(i).to receive(:run).and_return(result)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
let(:result) { double('R10K::Util::Subprocess::Result').as_null_object }
|
28
|
-
|
29
|
-
before do
|
30
|
-
allow(described_class).to receive(:runner).and_return(double(:new => runner))
|
31
|
-
end
|
32
|
-
|
33
|
-
it "copies the cwd to the runner if a cwd is given" do
|
34
|
-
expect(runner).to receive(:cwd=).with('/tmp')
|
35
|
-
subject.cwd = '/tmp'
|
36
|
-
subject.execute
|
37
|
-
end
|
38
|
-
|
39
|
-
it "returns the result from the execution" do
|
40
|
-
expect(subject.execute).to eq result
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "when the command returned with a non-zero exit status" do
|
44
|
-
before do
|
45
|
-
allow(runner).to receive(:crashed?).and_return true
|
46
|
-
end
|
47
|
-
|
48
|
-
it "raises an exception if raise_on_fail is true" do
|
49
|
-
subject.raise_on_fail = true
|
50
|
-
|
51
|
-
allow(result).to receive(:exit_code).and_return(255)
|
52
|
-
allow(result).to receive(:stderr).and_return('Command not found')
|
53
|
-
|
54
|
-
expect {
|
55
|
-
subject.execute
|
56
|
-
}.to raise_error(R10K::Util::Subprocess::SubprocessError, /Command exited with non-zero exit code/)
|
57
|
-
end
|
58
|
-
|
59
|
-
it "doesn't raise an exception if raise_on_fail is false" do
|
60
|
-
subject.raise_on_fail = false
|
61
|
-
expect { subject.execute }.to_not raise_error
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/util/symbolize_keys'
|
3
|
-
|
4
|
-
describe R10K::Util::SymbolizeKeys do
|
5
|
-
it "deletes all keys that are strings" do
|
6
|
-
hash = {'foo' => 'bar', :baz => 'quux'}
|
7
|
-
described_class.symbolize_keys!(hash)
|
8
|
-
expect(hash).to_not have_key('foo')
|
9
|
-
end
|
10
|
-
|
11
|
-
it "replaces the deleted keys with interned strings" do
|
12
|
-
hash = {'foo' => 'bar', :baz => 'quux'}
|
13
|
-
|
14
|
-
described_class.symbolize_keys!(hash)
|
15
|
-
expect(hash[:foo]).to eq 'bar'
|
16
|
-
end
|
17
|
-
|
18
|
-
it "raises an error if there is an existing symbol for a given string key" do
|
19
|
-
hash = {'foo' => 'bar', :foo => 'quux'}
|
20
|
-
|
21
|
-
expect {
|
22
|
-
described_class.symbolize_keys!(hash)
|
23
|
-
}.to raise_error(TypeError, /An existing interned key/)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "does not modify existing symbol entries" do
|
27
|
-
hash = {'foo' => 'bar', :baz => 'quux'}
|
28
|
-
|
29
|
-
described_class.symbolize_keys!(hash)
|
30
|
-
expect(hash[:baz]).to eq 'quux'
|
31
|
-
end
|
32
|
-
|
33
|
-
it "does not modify keys that are not strings or symbols" do
|
34
|
-
key = %w[foo]
|
35
|
-
hash = {key => 'bar', :baz => 'quux'}
|
36
|
-
described_class.symbolize_keys!(hash)
|
37
|
-
expect(hash[key]).to eq 'bar'
|
38
|
-
end
|
39
|
-
|
40
|
-
context "when symbolizing recursively" do
|
41
|
-
it "can recursively symbolize keys in nested hash values" do
|
42
|
-
hash = {'foo' => {'bar' => 'baz'}}
|
43
|
-
described_class.symbolize_keys!(hash, true)
|
44
|
-
expect(hash).to eq({:foo => {:bar => 'baz'}})
|
45
|
-
end
|
46
|
-
|
47
|
-
it "recurses into hash values that had symbol keys" do
|
48
|
-
hash = {:foo => {'bar' => {'baz' => 'quux'}}}
|
49
|
-
described_class.symbolize_keys!(hash, true)
|
50
|
-
expect(hash).to eq({:foo => {:bar => {:baz => 'quux'}}})
|
51
|
-
end
|
52
|
-
|
53
|
-
it "recurses into array values whose items are hashes" do
|
54
|
-
hash = {'foo' => [ {'item1_key' => 'val'}, {'item2_key' => 'val'} ]}
|
55
|
-
|
56
|
-
described_class.symbolize_keys!(hash, true)
|
57
|
-
expect(hash).to eq({:foo => [ {:item1_key => 'val'}, {:item2_key => 'val'} ]})
|
58
|
-
end
|
59
|
-
|
60
|
-
it "ignores nested array items that are not hashes" do
|
61
|
-
hash = {'foo' => [ {'item1_key' => 'val'}, 'banana' ]}
|
62
|
-
|
63
|
-
described_class.symbolize_keys!(hash, true)
|
64
|
-
expect(hash).to eq({:foo => [ {:item1_key => 'val'}, 'banana' ]})
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|