summaryrefslogtreecommitdiff
path: root/spec/unit/config_fetcher_spec.rb
diff options
context:
space:
mode:
authordanielsdeleo <dan@opscode.com>2013-10-14 12:14:47 -0700
committerdanielsdeleo <dan@opscode.com>2013-10-16 13:53:37 -0700
commita142843fe5637faed05669e098dc296642b30331 (patch)
treea218da2b2576308d8c9bea23c8a48ceab2956e81 /spec/unit/config_fetcher_spec.rb
parent939e4fe1f8d27dba77ef8208ad792860d9766b9e (diff)
downloadchef-a142843fe5637faed05669e098dc296642b30331.tar.gz
Move config fetching tests to their own file.
Diffstat (limited to 'spec/unit/config_fetcher_spec.rb')
-rw-r--r--spec/unit/config_fetcher_spec.rb96
1 files changed, 96 insertions, 0 deletions
diff --git a/spec/unit/config_fetcher_spec.rb b/spec/unit/config_fetcher_spec.rb
new file mode 100644
index 0000000000..f6d5436a11
--- /dev/null
+++ b/spec/unit/config_fetcher_spec.rb
@@ -0,0 +1,96 @@
+require 'spec_helper'
+require 'chef/config_fetcher'
+describe Chef::ConfigFetcher do
+ let(:valid_json) { {:a=>"b"}.to_json }
+ let(:invalid_json) { %q[{"syntax-error": "missing quote}] }
+ let(:http) { double("Chef::HTTP::Simple") }
+
+ let(:config_location_regex) { Regexp.escape(config_location) }
+ let(:invalid_json_error_regex) { %r[Could not parse the provided JSON file \(#{config_location_regex}\)] }
+
+ let(:fetcher) { Chef::ConfigFetcher.new(config_location) }
+
+ context "when loading a local file" do
+ let(:config_location) { "/etc/chef/client.rb" }
+ let(:config_content) { "# The client.rb content" }
+
+ it "reads the file from disk" do
+ ::File.should_receive(:read).
+ with(config_location).
+ and_return(config_content)
+ fetcher.read_config.should == config_content
+ end
+
+ context "and consuming JSON" do
+
+ let(:config_location) { "/etc/chef/first-boot.json" }
+
+
+ it "returns the parsed JSON" do
+ ::File.should_receive(:read).
+ with(config_location).
+ and_return(valid_json)
+
+ fetcher.fetch_json.should == {"a" => "b"}
+ end
+
+ context "and the JSON is invalid" do
+
+ it "reports the JSON error" do
+
+
+ ::File.should_receive(:read).
+ with(config_location).
+ and_return(invalid_json)
+
+ Chef::Application.should_receive(:fatal!).
+ with(invalid_json_error_regex, 2)
+ fetcher.fetch_json
+ end
+ end
+ end
+
+ end
+
+ context "when loading a file over HTTP" do
+
+ let(:config_location) { "https://example.com/client.rb" }
+ let(:config_content) { "# The client.rb content" }
+
+ before do
+ Chef::HTTP::Simple.should_receive(:new).
+ with(config_location).
+ and_return(http)
+ end
+
+ it "reads the file over HTTP" do
+ http.should_receive(:get).
+ with("").and_return(config_content)
+ fetcher.read_config.should == config_content
+ end
+
+ context "and consuming JSON" do
+ let(:config_location) { "https://example.com/foo.json" }
+
+ it "fetches the file and parses it" do
+ http.should_receive(:get).
+ with("").and_return(valid_json)
+ fetcher.fetch_json.should == {"a" => "b"}
+ end
+
+ context "and the JSON is invalid" do
+ it "reports the JSON error" do
+ http.should_receive(:get).
+ with("").and_return(invalid_json)
+
+ Chef::Application.should_receive(:fatal!).
+ with(invalid_json_error_regex, 2)
+ fetcher.fetch_json
+ end
+ end
+ end
+
+ end
+
+
+end