r10k 3.14.1 → 3.15.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/docker.yml +5 -0
- data/.github/workflows/rspec_tests.yml +1 -0
- data/CHANGELOG.mkd +19 -0
- data/CODEOWNERS +2 -2
- data/README.mkd +2 -2
- data/doc/dynamic-environments/configuration.mkd +78 -11
- data/doc/dynamic-environments/usage.mkd +4 -0
- data/doc/dynamic-environments/workflow-guide.mkd +3 -3
- data/doc/faq.mkd +1 -1
- data/docker/Makefile +17 -10
- data/integration/tests/git_source/HTTP_proxy_and_git_source.rb +1 -1
- data/integration/tests/git_source/git_source_repeated_remote.rb +2 -2
- data/integration/tests/purging/content_not_purged_at_root.rb +2 -2
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/multi_env_custom_forge_git_module_static.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/multi_source_custom_forge_git_module.rb +1 -1
- 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/single_env_custom_forge_git_module.rb +1 -1
- data/integration/tests/user_scenario/basic_workflow/single_env_switch_forge_git_module.rb +1 -1
- data/lib/r10k/environment/with_modules.rb +24 -1
- data/lib/r10k/git/rugged/thin_repository.rb +7 -0
- data/lib/r10k/git/rugged/working_repository.rb +7 -3
- data/lib/r10k/git/shellgit/thin_repository.rb +4 -0
- data/lib/r10k/git/shellgit/working_repository.rb +3 -2
- data/lib/r10k/git/stateful_repository.rb +4 -4
- data/lib/r10k/module/git.rb +1 -1
- data/lib/r10k/module_loader/puppetfile.rb +8 -5
- data/lib/r10k/settings/container.rb +1 -0
- data/lib/r10k/version.rb +1 -1
- data/r10k.gemspec +5 -7
- metadata +16 -154
- data/.travis.yml +0 -42
- 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,68 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/initializers'
|
3
|
-
|
4
|
-
describe R10K::Initializers::GitInitializer do
|
5
|
-
it "configures the Git provider" do
|
6
|
-
subject = described_class.new({:provider => :rugged})
|
7
|
-
expect(R10K::Git).to receive(:provider=).with(:rugged)
|
8
|
-
subject.call
|
9
|
-
end
|
10
|
-
|
11
|
-
it "configures the Git username" do
|
12
|
-
subject = described_class.new({:username => 'git'})
|
13
|
-
expect(R10K::Git.settings).to receive(:[]=).with(:username, 'git')
|
14
|
-
subject.call
|
15
|
-
end
|
16
|
-
|
17
|
-
it "configures the Git private key" do
|
18
|
-
subject = described_class.new({:private_key => '/etc/puppetlabs/r10k/id_rsa'})
|
19
|
-
expect(R10K::Git.settings).to receive(:[]=).with(:private_key, '/etc/puppetlabs/r10k/id_rsa')
|
20
|
-
subject.call
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe R10K::Initializers::ForgeInitializer do
|
25
|
-
it "sets the PuppetForge host" do
|
26
|
-
subject = described_class.new({:baseurl => 'https://my.site.forge'})
|
27
|
-
expect(PuppetForge).to receive(:host=).with('https://my.site.forge')
|
28
|
-
subject.call
|
29
|
-
end
|
30
|
-
|
31
|
-
it "configures PuppetForge connection proxy" do
|
32
|
-
subject = described_class.new({:proxy => 'http://my.site.proxy:3128'})
|
33
|
-
expect(PuppetForge::Connection).to receive(:proxy=).with('http://my.site.proxy:3128')
|
34
|
-
subject.call
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe R10K::Initializers::GlobalInitializer do
|
39
|
-
it "logs a warning if purgedirs was set" do
|
40
|
-
subject = described_class.new({:purgedirs => 'This setting has been deprecated for over two years :('})
|
41
|
-
expect(subject.logger).to receive(:warn).with('the purgedirs key in r10k.yaml is deprecated. it is currently ignored.')
|
42
|
-
subject.call
|
43
|
-
end
|
44
|
-
|
45
|
-
it "sets the Git cache_root" do
|
46
|
-
subject = described_class.new({:cachedir => '/var/cache/r10k'})
|
47
|
-
expect(R10K::Git::Cache.settings).to receive(:[]=).with(:cache_root, '/var/cache/r10k')
|
48
|
-
subject.call
|
49
|
-
end
|
50
|
-
|
51
|
-
it "delegates git settings to the Git initializer" do
|
52
|
-
git = instance_double('R10K::Initializers::GitInitializer')
|
53
|
-
expect(git).to receive(:call)
|
54
|
-
expect(R10K::Initializers::GitInitializer).to receive(:new).and_return(git)
|
55
|
-
|
56
|
-
subject = described_class.new({:git => {}})
|
57
|
-
subject.call
|
58
|
-
end
|
59
|
-
|
60
|
-
it "delegates forge settings to the Forge initializer" do
|
61
|
-
forge = instance_double('R10K::Initializers::ForgeInitializer')
|
62
|
-
expect(forge).to receive(:call)
|
63
|
-
expect(R10K::Initializers::ForgeInitializer).to receive(:new).and_return(forge)
|
64
|
-
|
65
|
-
subject = described_class.new({:forge => {}})
|
66
|
-
subject.call
|
67
|
-
end
|
68
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
require 'r10k/instance_cache'
|
4
|
-
|
5
|
-
describe R10K::InstanceCache do
|
6
|
-
|
7
|
-
describe "setting up a new instance cache" do
|
8
|
-
let(:klass) do
|
9
|
-
dubs = double('test class')
|
10
|
-
allow(dubs).to receive(:new) { |*args| args }
|
11
|
-
dubs
|
12
|
-
end
|
13
|
-
|
14
|
-
it "can create new objects" do
|
15
|
-
registry = described_class.new(klass)
|
16
|
-
expect(registry.generate).to eq []
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "defining object arity" do
|
20
|
-
|
21
|
-
it "handles unary objects" do
|
22
|
-
expect(klass).to receive(:new).with(:foo)
|
23
|
-
|
24
|
-
registry = described_class.new(klass)
|
25
|
-
expect(registry.generate(:foo)).to eq [:foo]
|
26
|
-
end
|
27
|
-
|
28
|
-
it "handles ternary objects" do
|
29
|
-
expect(klass).to receive(:new).with(:foo, :bar, :baz)
|
30
|
-
|
31
|
-
registry = described_class.new(klass)
|
32
|
-
expect(registry.generate(:foo, :bar, :baz)).to eq [:foo, :bar, :baz]
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'handles n-ary objects' do
|
36
|
-
args = %w[a bunch of arbitrary objects]
|
37
|
-
expect(klass).to receive(:new).with(*args)
|
38
|
-
|
39
|
-
registry = described_class.new(klass)
|
40
|
-
expect(registry.generate(*args)).to eq args
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'fails when the required arguments are not matched' do
|
44
|
-
expect(klass).to receive(:new).and_raise ArgumentError, "not enough args"
|
45
|
-
|
46
|
-
registry = described_class.new(klass)
|
47
|
-
expect { registry.generate('arity is hard') }.to raise_error ArgumentError, "not enough args"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
it "can specify the constructor method" do
|
52
|
-
expect(klass).to receive(:from_json).and_return "this is json, right?"
|
53
|
-
|
54
|
-
registry = described_class.new(klass, :from_json)
|
55
|
-
expect(registry.generate).to eq "this is json, right?"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
|
60
|
-
it "returns a memoized object if it's been created before" do
|
61
|
-
registry = described_class.new(String)
|
62
|
-
first = registry.generate "bam!"
|
63
|
-
second = registry.generate "bam!"
|
64
|
-
|
65
|
-
expect(first.object_id).to eq second.object_id
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'can clear registered objects' do
|
69
|
-
registry = described_class.new(String)
|
70
|
-
|
71
|
-
first = registry.generate "bam!"
|
72
|
-
registry.clear!
|
73
|
-
second = registry.generate "bam!"
|
74
|
-
|
75
|
-
expect(first.object_id).to_not eq second.object_id
|
76
|
-
|
77
|
-
end
|
78
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/keyed_factory'
|
3
|
-
|
4
|
-
describe R10K::KeyedFactory do
|
5
|
-
|
6
|
-
let(:registered) { Class.new }
|
7
|
-
|
8
|
-
describe "registering implementations" do
|
9
|
-
it "can register new implementations" do
|
10
|
-
subject.register(:klass, registered)
|
11
|
-
expect(subject.retrieve(:klass)).to eq registered
|
12
|
-
end
|
13
|
-
|
14
|
-
it "raises an error when a duplicate implementation is registered" do
|
15
|
-
subject.register(:klass, registered)
|
16
|
-
|
17
|
-
expect {
|
18
|
-
subject.register(:klass, registered)
|
19
|
-
}.to raise_error(R10K::KeyedFactory::DuplicateImplementationError)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "can register classes with nil as a key" do
|
23
|
-
subject.register(nil, registered)
|
24
|
-
expect(subject.retrieve(nil)).to eq registered
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "generating instances" do
|
29
|
-
before do
|
30
|
-
subject.register(:klass, registered)
|
31
|
-
end
|
32
|
-
|
33
|
-
it "generates an instance with the associated class" do
|
34
|
-
instance = subject.generate(:klass)
|
35
|
-
expect(instance).to be_a_kind_of registered
|
36
|
-
end
|
37
|
-
|
38
|
-
it "can generate a class with nil as a key" do
|
39
|
-
other = Class.new
|
40
|
-
subject.register(nil, other)
|
41
|
-
instance = subject.generate(nil)
|
42
|
-
expect(instance).to be_a_kind_of other
|
43
|
-
end
|
44
|
-
|
45
|
-
it "raises an error if no implementation was registered with the given key" do
|
46
|
-
expect {
|
47
|
-
subject.generate(:foo)
|
48
|
-
}.to raise_error(R10K::KeyedFactory::UnknownImplementationError)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'stringio'
|
3
|
-
require 'r10k/logging/terminaloutputter'
|
4
|
-
|
5
|
-
describe R10K::Logging::TerminalOutputter do
|
6
|
-
|
7
|
-
let(:stream) { StringIO.new }
|
8
|
-
|
9
|
-
let(:formatter) do
|
10
|
-
Class.new(Log4r::Formatter) do
|
11
|
-
def format(logevent)
|
12
|
-
logevent.data
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
subject do
|
18
|
-
described_class.new('test', stream, :level => 0, :formatter => formatter).tap do |o|
|
19
|
-
o.use_color = true
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
tests = [
|
24
|
-
[:debug2, :cyan],
|
25
|
-
[:debug1, :cyan],
|
26
|
-
[:debug, :green],
|
27
|
-
[:info, nil],
|
28
|
-
[:notice, nil],
|
29
|
-
[:warn, :yellow],
|
30
|
-
[:error, :red],
|
31
|
-
[:fatal, :red],
|
32
|
-
]
|
33
|
-
|
34
|
-
tests.each_with_index do |(level, color), index|
|
35
|
-
# Note for the unwary - using a loop in this manner shows strange
|
36
|
-
# behavior with variable closure. The describe block is needed to retain
|
37
|
-
# the loop variables for each test; without this the let helpers are
|
38
|
-
# overwritten and the last set of helpers are used for all tests.
|
39
|
-
describe "at level #{level}" do
|
40
|
-
let(:message) { "level #{level}: #{color}" }
|
41
|
-
|
42
|
-
let(:event) do
|
43
|
-
Log4r::LogEvent.new(index + 1, Log4r::Logger.new('test::logger'), nil, message)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "logs messages as #{color ? color : "uncolored"}" do
|
47
|
-
output = color.nil? ? message : message.send(color)
|
48
|
-
subject.send(level, event)
|
49
|
-
expect(stream.string).to eq output
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
data/spec/unit/logging_spec.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/logging'
|
3
|
-
|
4
|
-
describe R10K::Logging do
|
5
|
-
|
6
|
-
describe "parsing a log level" do
|
7
|
-
it "parses 'true:TrueClass' as INFO" do
|
8
|
-
expect(described_class.parse_level(true)).to eq Log4r::INFO
|
9
|
-
end
|
10
|
-
|
11
|
-
it "parses 'true:String' as nil" do
|
12
|
-
expect(described_class.parse_level("true")).to be_nil
|
13
|
-
end
|
14
|
-
|
15
|
-
it "parses a numeric string as an integer" do
|
16
|
-
expect(described_class.parse_level('2')).to eq 2
|
17
|
-
end
|
18
|
-
|
19
|
-
it "parses a log level string as a log level" do
|
20
|
-
expect(described_class.parse_level('debug')).to eq Log4r::DEBUG
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns nil when given an invalid log level" do
|
24
|
-
expect(described_class.parse_level('deblag')).to be_nil
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "setting the log level" do
|
29
|
-
after(:all) { R10K::Logging.level = 'warn' }
|
30
|
-
|
31
|
-
it "sets the outputter log level" do
|
32
|
-
expect(described_class.outputter).to receive(:level=).with(Log4r::DEBUG)
|
33
|
-
described_class.level = 'debug'
|
34
|
-
end
|
35
|
-
|
36
|
-
it "stores the new log level" do
|
37
|
-
allow(described_class.outputter).to receive(:level=)
|
38
|
-
described_class.level = 'debug'
|
39
|
-
expect(described_class.level).to eq(Log4r::DEBUG)
|
40
|
-
end
|
41
|
-
|
42
|
-
it "raises an exception when given an invalid log level" do
|
43
|
-
expect {
|
44
|
-
described_class.level = 'deblag'
|
45
|
-
}.to raise_error(ArgumentError, /Invalid log level/)
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "switching the formatter" do
|
49
|
-
before do
|
50
|
-
allow(described_class.outputter).to receive(:level=)
|
51
|
-
end
|
52
|
-
|
53
|
-
it "switches to the debug formatter if the new log level is debug or greater" do
|
54
|
-
debug_formatter = double('debug formatter')
|
55
|
-
expect(described_class).to receive(:debug_formatter).and_return(debug_formatter)
|
56
|
-
expect(described_class.outputter).to receive(:formatter=).with(debug_formatter)
|
57
|
-
described_class.level = 'debug'
|
58
|
-
end
|
59
|
-
|
60
|
-
it "switches to the default formatter if the new log level is info or less" do
|
61
|
-
default_formatter = double('default formatter')
|
62
|
-
expect(described_class).to receive(:default_formatter).and_return(default_formatter)
|
63
|
-
expect(described_class.outputter).to receive(:formatter=).with(default_formatter)
|
64
|
-
described_class.level = 'info'
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,118 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'r10k/module/base'
|
3
|
-
|
4
|
-
describe R10K::Module::Base do
|
5
|
-
describe "parsing the title" do
|
6
|
-
it "parses titles with no owner" do
|
7
|
-
m = described_class.new('eight_hundred', '/moduledir', {})
|
8
|
-
expect(m.name).to eq 'eight_hundred'
|
9
|
-
expect(m.owner).to be_nil
|
10
|
-
end
|
11
|
-
|
12
|
-
it "parses forward slash separated titles" do
|
13
|
-
m = described_class.new('branan/eight_hundred', '/moduledir', {})
|
14
|
-
expect(m.name).to eq 'eight_hundred'
|
15
|
-
expect(m.owner).to eq 'branan'
|
16
|
-
end
|
17
|
-
|
18
|
-
it "parses hyphen separated titles" do
|
19
|
-
m = described_class.new('branan-eight_hundred', '/moduledir', {})
|
20
|
-
expect(m.name).to eq 'eight_hundred'
|
21
|
-
expect(m.owner).to eq 'branan'
|
22
|
-
end
|
23
|
-
|
24
|
-
it "raises an error when the title is not correctly formatted" do
|
25
|
-
expect {
|
26
|
-
described_class.new('branan!eight_hundred', '/moduledir', {})
|
27
|
-
}.to raise_error(ArgumentError, "Module name (branan!eight_hundred) must match either 'modulename' or 'owner/modulename'")
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe 'deleting the spec dir' do
|
32
|
-
let(:module_org) { "coolorg" }
|
33
|
-
let(:module_name) { "coolmod" }
|
34
|
-
let(:title) { "#{module_org}-#{module_name}" }
|
35
|
-
let(:dirname) { Pathname.new(Dir.mktmpdir) }
|
36
|
-
let(:spec_path) { dirname + module_name + 'spec' }
|
37
|
-
|
38
|
-
before(:each) do
|
39
|
-
logger = double("logger")
|
40
|
-
allow_any_instance_of(described_class).to receive(:logger).and_return(logger)
|
41
|
-
allow(logger).to receive(:debug2).with(any_args)
|
42
|
-
allow(logger).to receive(:info).with(any_args)
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'does not remove the spec directory by default' do
|
46
|
-
FileUtils.mkdir_p(spec_path)
|
47
|
-
m = described_class.new(title, dirname, {})
|
48
|
-
m.maybe_delete_spec_dir
|
49
|
-
expect(Dir.exist?(spec_path)).to eq true
|
50
|
-
end
|
51
|
-
|
52
|
-
it 'detects a symlink and deletes the target' do
|
53
|
-
Dir.mkdir(dirname + module_name)
|
54
|
-
target_dir = Dir.mktmpdir
|
55
|
-
FileUtils.ln_s(target_dir, spec_path)
|
56
|
-
m = described_class.new(title, dirname, {exclude_spec: true})
|
57
|
-
m.maybe_delete_spec_dir
|
58
|
-
expect(Dir.exist?(target_dir)).to eq false
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'removes the spec directory if exclude_spec is set' do
|
62
|
-
FileUtils.mkdir_p(spec_path)
|
63
|
-
m = described_class.new(title, dirname, {exclude_spec: true})
|
64
|
-
m.maybe_delete_spec_dir
|
65
|
-
expect(Dir.exist?(spec_path)).to eq false
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'does not remove the spec directory if spec_deletable is false' do
|
69
|
-
FileUtils.mkdir_p(spec_path)
|
70
|
-
m = described_class.new(title, dirname, {})
|
71
|
-
m.spec_deletable = false
|
72
|
-
m.maybe_delete_spec_dir
|
73
|
-
expect(Dir.exist?(spec_path)).to eq true
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
describe "path variables" do
|
78
|
-
it "uses the module name as the name" do
|
79
|
-
m = described_class.new('eight_hundred', '/moduledir', {})
|
80
|
-
expect(m.dirname).to eq '/moduledir'
|
81
|
-
expect(m.path).to eq(Pathname.new('/moduledir/eight_hundred'))
|
82
|
-
end
|
83
|
-
|
84
|
-
it "does not include the owner in the path" do
|
85
|
-
m = described_class.new('branan/eight_hundred', '/moduledir', {})
|
86
|
-
expect(m.dirname).to eq '/moduledir'
|
87
|
-
expect(m.path).to eq(Pathname.new('/moduledir/eight_hundred'))
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe "with alternate variable names" do
|
92
|
-
subject do
|
93
|
-
described_class.new('branan/eight_hundred', '/moduledir', {})
|
94
|
-
end
|
95
|
-
|
96
|
-
it "aliases full_name to title" do
|
97
|
-
expect(subject.full_name).to eq 'branan-eight_hundred'
|
98
|
-
end
|
99
|
-
|
100
|
-
it "aliases author to owner" do
|
101
|
-
expect(subject.author).to eq 'branan'
|
102
|
-
end
|
103
|
-
|
104
|
-
it "aliases basedir to dirname" do
|
105
|
-
expect(subject.basedir).to eq '/moduledir'
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
describe "accepting a visitor" do
|
110
|
-
subject { described_class.new('branan-eight_hundred', '/moduledir', {}) }
|
111
|
-
|
112
|
-
it "passes itself to the visitor" do
|
113
|
-
visitor = spy('visitor')
|
114
|
-
expect(visitor).to receive(:visit).with(:module, subject)
|
115
|
-
subject.accept(visitor)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|