From 7f9cf9d96ac56765f631737978878e9f506f5de4 Mon Sep 17 00:00:00 2001 From: DenMat Date: Fri, 15 Jun 2018 13:02:47 +1000 Subject: [PATCH 1/2] Update Config.rb to raise error on badly formatted yaml --- lib/stack_master/config.rb | 4 ++++ spec/stack_master/config_spec.rb | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/stack_master/config.rb b/lib/stack_master/config.rb index 492b70ac..1174de91 100644 --- a/lib/stack_master/config.rb +++ b/lib/stack_master/config.rb @@ -3,11 +3,15 @@ module StackMaster class Config + ConfigParseError = Class.new(StandardError) + def self.load!(config_file = 'stack_master.yml') resolved_config_file = search_up_and_chdir(config_file) config = YAML.load(File.read(resolved_config_file)) base_dir = File.dirname(File.expand_path(resolved_config_file)) new(config, base_dir) + rescue Psych::SyntaxError => error + raise ConfigParseError, "Unable to parse stack_master.yml: #{error}" end attr_accessor :stacks, diff --git a/spec/stack_master/config_spec.rb b/spec/stack_master/config_spec.rb index 80c1bda6..0e1e8c40 100644 --- a/spec/stack_master/config_spec.rb +++ b/spec/stack_master/config_spec.rb @@ -17,12 +17,24 @@ additional_parameter_lookup_dirs: ['production'] ) } + let(:bad_yaml) { "a: b\n- c" } describe ".load!" do it "fails to load the config if no stack_master.yml in parent directories" do expect { StackMaster::Config.load!('stack_master.yml') }.to raise_error Errno::ENOENT end + it "raises exception on invalid yaml" do + begin + orig_dir = Dir.pwd + Dir.chdir './spec/fixtures/' + allow(File).to receive(:read).and_return(bad_yaml) + expect { StackMaster::Config.load!('stack_master.yml') }.to raise_error StackMaster::Config::ConfigParseError + ensure + Dir.chdir orig_dir + end + end + it "searches up the tree for stack master yaml" do begin orig_dir = Dir.pwd From d62f9ba0c230a874b87963edba4d3f265534fc23 Mon Sep 17 00:00:00 2001 From: DenMat Date: Fri, 15 Jun 2018 14:27:19 +1000 Subject: [PATCH 2/2] Return resovled config file in error message --- lib/stack_master/config.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/stack_master/config.rb b/lib/stack_master/config.rb index 1174de91..5e46eda2 100644 --- a/lib/stack_master/config.rb +++ b/lib/stack_master/config.rb @@ -11,7 +11,7 @@ def self.load!(config_file = 'stack_master.yml') base_dir = File.dirname(File.expand_path(resolved_config_file)) new(config, base_dir) rescue Psych::SyntaxError => error - raise ConfigParseError, "Unable to parse stack_master.yml: #{error}" + raise ConfigParseError, "Unable to parse #{resolved_config_file}: #{error}" end attr_accessor :stacks,