diff options
author | danielsdeleo <dan@chef.io> | 2016-10-18 15:39:15 -0700 |
---|---|---|
committer | danielsdeleo <dan@chef.io> | 2016-10-18 16:13:14 -0700 |
commit | 466bfbf2db3c02c0f5263f0e93e12baf1de69832 (patch) | |
tree | fe21e3d81554bcfb30b50033ab9d5921f69c5355 /chef-config/spec | |
parent | 488dc6137ec3ce77e35ffd865fb1758c8403ad09 (diff) | |
download | chef-466bfbf2db3c02c0f5263f0e93e12baf1de69832.tar.gz |
Implement `--config-option` CLI opt for knifedan/config-option-in-knife
The `--config-option` CLI option allows setting any `Chef::Config`
setting on the command line, which allows applications to be used
without a configuration file even if a desired config option does not
have a corresponding CLI option. This CLI option was present in the help
output for knife but was not actually implemented. Moving the behavior
into chef-config allows us to use it for both `chef-client` and `knife`.
Signed-off-by: Daniel DeLeo <dan@chef.io>
Diffstat (limited to 'chef-config/spec')
-rw-r--r-- | chef-config/spec/unit/config_spec.rb | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/chef-config/spec/unit/config_spec.rb b/chef-config/spec/unit/config_spec.rb index 0ddb56cf0d..2cdf9af78f 100644 --- a/chef-config/spec/unit/config_spec.rb +++ b/chef-config/spec/unit/config_spec.rb @@ -68,6 +68,91 @@ RSpec.describe ChefConfig::Config do end end + describe "parsing arbitrary config from the CLI" do + + def apply_config + described_class.apply_extra_config_options(extra_config_options) + end + + context "when no arbitrary config is given" do + + let(:extra_config_options) { nil } + + it "succeeds" do + expect { apply_config }.to_not raise_error + end + + end + + context "when given a simple string option" do + + let(:extra_config_options) { [ "node_name=bobotclown" ] } + + it "applies the string option" do + apply_config + expect(described_class[:node_name]).to eq("bobotclown") + end + + end + + context "when given a blank value" do + + let(:extra_config_options) { [ "http_retries=" ] } + + it "sets the value to nil" do + # ensure the value is actually changed in the test + described_class[:http_retries] = 55 + apply_config + expect(described_class[:http_retries]).to eq(nil) + end + end + + context "when given spaces between `key = value`" do + + let(:extra_config_options) { [ "node_name = bobo" ] } + + it "handles the extra spaces and applies the config option" do + apply_config + expect(described_class[:node_name]).to eq("bobo") + end + + end + + context "when given an integer value" do + + let(:extra_config_options) { [ "http_retries=9000" ] } + + it "converts to a numeric type and applies the config option" do + apply_config + expect(described_class[:http_retries]).to eq(9000) + end + + end + + context "when given a boolean" do + + let(:extra_config_options) { [ "boolean_thing=true" ] } + + it "converts to a boolean type and applies the config option" do + apply_config + expect(described_class[:boolean_thing]).to eq(true) + end + + end + + context "when given input that is not in key=value form" do + + let(:extra_config_options) { [ "http_retries:9000" ] } + + it "raises UnparsableConfigOption" do + message = 'Unparsable config option "http_retries:9000"' + expect { apply_config }.to raise_error(ChefConfig::UnparsableConfigOption, message) + end + + end + + end + describe "when configuring formatters" do # if TTY and not(force-logger) # formatter = configured formatter or default formatter |