summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorJohn Kerry <jk185160@ncr.com>2016-03-24 11:35:19 -0400
committerJohn Kerry <jk185160@ncr.com>2016-03-24 11:35:19 -0400
commitc0d0e1cddcb4ead133428fe6ee30a84a51fd1db1 (patch)
tree52e5447340b0c93ffe0c40c9e8b381d921cc9792 /spec
parent360d506c9cdf0e94071f0a656eafbc7d2f302d9a (diff)
downloadchef-c0d0e1cddcb4ead133428fe6ee30a84a51fd1db1.tar.gz
Finishing off the sftp unit tests. Added some checks to the sftp provider to maintain the precedent set by the ftp provider
Diffstat (limited to 'spec')
-rw-r--r--spec/unit/provider/remote_file/sftp_spec.rb111
1 files changed, 107 insertions, 4 deletions
diff --git a/spec/unit/provider/remote_file/sftp_spec.rb b/spec/unit/provider/remote_file/sftp_spec.rb
index 2cc473ae6b..c030ff83c1 100644
--- a/spec/unit/provider/remote_file/sftp_spec.rb
+++ b/spec/unit/provider/remote_file/sftp_spec.rb
@@ -28,23 +28,126 @@ describe Chef::Provider::RemoteFile::SFTP do
}
let(:new_resource) do
- r = Chef::Resource::RemoteFile.new("remote file ftp backend test (new resource)")
+ r = Chef::Resource::RemoteFile.new("remote file sftp backend test (new resource)")
r.path(resource_path)
r
end
let(:current_resource) do
- Chef::Resource::RemoteFile.new("remote file ftp backend test (current resource)'")
+ Chef::Resource::RemoteFile.new("remote file sftp backend test (current resource)'")
end
- let(:uri) { URI.parse("sftp://opscode.com/seattle.txt") }
- describe "on initialization" do
+
+ let(:uri) { URI.parse("sftp://conan:cthu1hu@opscode.com/seattle.txt") }
+
+ let(:sftp) do
+ sftp = double(Net::SFTP, {})
+ allow(sftp).to receive(:download!)
+ sftp
+ end
+
+ let(:tempfile_path) { "/tmp/somedir/remote-file-sftp-backend-spec-test" }
+
+ let(:tempfile) do
+ t = StringIO.new
+ allow(t).to receive(:path).and_return(tempfile_path)
+ t
+ end
+
+ before(:each) do
+ allow(Net::SFTP).to receive(:start).with(any_args).and_return(sftp)
+ allow(Tempfile).to receive(:new).and_return(tempfile)
+ end
+ describe "on initialization without user and password provided in the URI" do
+ it "throws an argument exception with no userinfo is given" do
+ uri.userinfo = nil
+ uri.password = nil
+ uri.user = nil
+ expect { Chef::Provider::RemoteFile::SFTP.new(uri, new_resource, current_resource) }.to raise_error(ArgumentError)
+ end
+
+ it "throws an argument exception with no user name is given" do
+ uri.userinfo = ":cthu1hu"
+ uri.password = "cthu1hu"
+ uri.user = nil
+ expect { Chef::Provider::RemoteFile::SFTP.new(uri, new_resource, current_resource) }.to raise_error(ArgumentError)
+ end
+
+ it "throws an argument exception with no password is given" do
+ uri.userinfo = "conan:"
+ uri.password = nil
+ uri.user = "conan"
+ expect { Chef::Provider::RemoteFile::SFTP.new(uri, new_resource, current_resource) }.to raise_error(ArgumentError)
+ end
+
+ end
+
+ describe "on initialization with user and password provided in the URI" do
it "throws an argument exception when no path is given" do
uri.path = ""
expect { Chef::Provider::RemoteFile::SFTP.new(uri, new_resource, current_resource) }.to raise_error(ArgumentError)
end
+ it "throws an argument exception when only a / is given" do
+ uri.path = "/"
+ expect { Chef::Provider::RemoteFile::SFTP.new(uri, new_resource, current_resource) }.to raise_error(ArgumentError)
+ end
+
+ it "throws an argument exception when no filename is given" do
+ uri.path = "/the/whole/path/"
+ expect { Chef::Provider::RemoteFile::SFTP.new(uri, new_resource, current_resource) }.to raise_error(ArgumentError)
+ end
+
+
+ end
+
+ describe "when fetching the object" do
+
+ let(:cache_control_data) { Chef::Provider::RemoteFile::CacheControlData.new(uri) }
+ let(:current_resource_checksum) { "e2a8938cc31754f6c067b35aab1d0d4864272e9bf8504536ef3e79ebf8432305" }
+
+ subject(:fetcher) { Chef::Provider::RemoteFile::SFTP.new(uri, new_resource, current_resource) }
+
+ before do
+ current_resource.checksum(current_resource_checksum)
+ end
+
+ it "should attempt to download a file from the provided url and path" do
+ expect(sftp).to receive(:download!).with("/seattle.txt", "/tmp/somedir/remote-file-sftp-backend-spec-test")
+ fetcher.fetch
+ end
+
+ context "and the URI specifies an alternate port" do
+ let(:uri) { URI.parse("ftp://conan:cthu1hu@opscode.com:8021/seattle.txt") }
+
+ it "should connect on an alternate port when one is provided" do
+ expect(Net::SFTP).to receive(:start).with("opscode.com:8021", "conan", :password => "cthu1hu")
+ fetcher.fetch
+ end
+
+ end
+
+ context "and the uri specifies a nested path" do
+ let(:uri) { URI.parse("ftp://conan:cthu1hu@opscode.com/the/whole/path/seattle.txt") }
+
+ it "should fetch the file from the correct path" do
+ expect(sftp).to receive(:download!).with("the/whole/path/seattle.txt", "/tmp/somedir/remote-file-sftp-backend-spec-test")
+ fetcher.fetch
+ end
+ end
+
+ context "when not using last modified based conditional fetching" do
+ before do
+ new_resource.use_last_modified(false)
+ end
+
+ it "should return a tempfile in the result" do
+ result = fetcher.fetch
+ expect(result).to equal(tempfile)
+ end
+
+ end
end
end