diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2017-12-19 15:17:06 -0800 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2017-12-19 15:17:06 -0800 |
commit | a909fe71842b874305a3ca5aa2767a4986bcd4c1 (patch) | |
tree | f90a6ad162890f0687499778061c8e7c80750593 /spec | |
parent | 550132f4a37297d9b2b99dcf41ea9298506366ed (diff) | |
download | chef-a909fe71842b874305a3ca5aa2767a4986bcd4c1.tar.gz |
allow injecting tempfiles into Chef::HTTPlcg/chef-http-inject-tempfile
use this to inject the tempfile from
Chef::FileContentManagement::Tempfile
closes #2401
Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
Diffstat (limited to 'spec')
-rw-r--r-- | spec/unit/http_spec.rb | 9 | ||||
-rw-r--r-- | spec/unit/provider/remote_file/http_spec.rb | 42 |
2 files changed, 32 insertions, 19 deletions
diff --git a/spec/unit/http_spec.rb b/spec/unit/http_spec.rb index d58f07c417..bf873b8535 100644 --- a/spec/unit/http_spec.rb +++ b/spec/unit/http_spec.rb @@ -93,6 +93,15 @@ describe Chef::HTTP do expect { http.send(:stream_to_tempfile, uri, resp) }.to raise_error("TestError") end + it "accepts a tempfile" do + resp = Net::HTTPOK.new("1.1", 200, "OK") + http = Chef::HTTP.new(uri) + tempfile = Tempfile.open("tempy-mctempfile") + expect(Tempfile).not_to receive(:open) + expect(resp).to receive(:read_body).and_yield("conty-mccontent") + http.send(:stream_to_tempfile, uri, resp, tempfile) + expect(IO.read(tempfile.path)).to eql("conty-mccontent") + end end describe "head" do diff --git a/spec/unit/provider/remote_file/http_spec.rb b/spec/unit/provider/remote_file/http_spec.rb index f58a3d3c14..ec9c0cf2e3 100644 --- a/spec/unit/provider/remote_file/http_spec.rb +++ b/spec/unit/provider/remote_file/http_spec.rb @@ -157,9 +157,9 @@ describe Chef::Provider::RemoteFile::HTTP do let(:expected_http_opts) { {} } let(:expected_http_args) { [uri, expected_http_opts] } - let(:tempfile_path) { "/tmp/chef-mock-tempfile-abc123" } + let(:tempfile_path) { tempfile.path } - let(:tempfile) { double(Tempfile, :path => tempfile_path, :close => nil) } + let(:tempfile) { Tempfile.open("muhtempfile") } let(:last_response) { {} } @@ -171,7 +171,7 @@ describe Chef::Provider::RemoteFile::HTTP do let(:rest) do rest = double(Chef::HTTP::Simple) - allow(rest).to receive(:streaming_request).and_return(tempfile) + allow_any_instance_of(Chef::FileContentManagement::Tempfile).to receive(:tempfile).and_return(tempfile) allow(rest).to receive(:last_response).and_return(last_response) rest end @@ -189,17 +189,35 @@ describe Chef::Provider::RemoteFile::HTTP do it "should return a nil tempfile for a 304 HTTPNotModifed" do # Streaming request returns nil for 304 errors - allow(rest).to receive(:streaming_request).and_return(nil) + expect(rest).to receive(:streaming_request).with(uri, {}, tempfile).and_return(nil) expect(fetcher.fetch).to be_nil end end - describe "and the request returns new content" do + context "with progress reports" do + let(:fetched_content_checksum) { "e2a8938cc31754f6c067b35aab1d0d4864272e9bf8504536ef3e79ebf8432305" } + + before do + expect(cache_control_data).to receive(:save) + expect(Chef::Digester).to receive(:checksum_for_file).with(tempfile_path).and_return(fetched_content_checksum) + Chef::Config[:show_download_progress] = true + end + + it "should yield its progress" do + expect(rest).to receive(:streaming_request_with_progress).with(uri, {}, tempfile).and_yield(50, 100).and_yield(70, 100).and_return(tempfile) + expect(event_dispatcher).to receive(:formatter?).and_return(true) + expect(event_dispatcher).to receive(:resource_update_progress).with(new_resource, 50, 100, 10).ordered + expect(event_dispatcher).to receive(:resource_update_progress).with(new_resource, 70, 100, 10).ordered + fetcher.fetch + end + end + describe "and the request returns new content" do let(:fetched_content_checksum) { "e2a8938cc31754f6c067b35aab1d0d4864272e9bf8504536ef3e79ebf8432305" } before do + expect(rest).to receive(:streaming_request).with(uri, {}, tempfile).and_return(tempfile) expect(cache_control_data).to receive(:save) expect(Chef::Digester).to receive(:checksum_for_file).with(tempfile_path).and_return(fetched_content_checksum) end @@ -212,20 +230,6 @@ describe Chef::Provider::RemoteFile::HTTP do expect(cache_control_data.checksum).to eq(fetched_content_checksum) end - context "with progress reports" do - before do - Chef::Config[:show_download_progress] = true - end - - it "should yield its progress" do - allow(rest).to receive(:streaming_request_with_progress).and_yield(50, 100).and_yield(70, 100).and_return(tempfile) - expect(event_dispatcher).to receive(:formatter?).and_return(true) - expect(event_dispatcher).to receive(:resource_update_progress).with(new_resource, 50, 100, 10).ordered - expect(event_dispatcher).to receive(:resource_update_progress).with(new_resource, 70, 100, 10).ordered - fetcher.fetch - end - end - context "and the response does not contain an etag" do let(:last_response) { { "etag" => nil } } it "does not include an etag in the result" do |