Skip to content
This repository was archived by the owner on Nov 28, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
source 'https://rubygems.org'

gem 'jeweler', '1.8.8', :group => :development
gem 'webrick-webdav', '~> 1.0', :group => :development
gem "rspec", '2.12.0', :group => :development
17 changes: 8 additions & 9 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,18 @@ rescue LoadError
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
end

require 'spec/rake/spectask'
Spec::Rake::SpecTask.new(:spec) do |spec|
spec.libs << 'lib' << 'spec'
spec.spec_files = FileList['spec/**/*_spec.rb']
require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new(:spec) do |spec|
spec.pattern = 'spec/**/*_spec.rb'
spec.rspec_opts = %w(-fs --color)
end

Spec::Rake::SpecTask.new(:rcov) do |spec|
spec.libs << 'lib' << 'spec'
RSpec::Core::RakeTask.new(:rcov) do |spec|
spec.pattern = 'spec/**/*_spec.rb'
spec.rcov = true
end

task :spec => :check_dependencies

task :default => :spec

desc "release with no version change"
Expand All @@ -58,7 +56,8 @@ task :clean do
puts "cleaned"
end

require 'rake/rdoctask'
require 'rdoc/task'

Rake::RDocTask.new do |rdoc|
version = File.exist?('VERSION') ? File.read('VERSION') : ""

Expand Down
8 changes: 5 additions & 3 deletions lib/net/dav.rb
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -335,14 +335,16 @@ def request_returning_body(verb, path, headers)

def cert_file(cert_file)
# expects a cert file
super
@curl.cert = cert_file
end

def cert_key(cert_file, cert_file_password)
super
if cert_file_password then
@curl.certpassword = cert_file_password
end
@curl.key = cert_key
@curl.cert_key = cert_file
end

def ca_file(ca_file)
Expand Down Expand Up @@ -444,9 +446,9 @@ def credentials(user, pass)
end

# Set credentials for ssl certificate authentication
def ssl_certificate(cert_file, *cert_file_password)
def ssl_certificate(cert_file, cert_key, cert_file_password)
@handler.cert_file(cert_file)
@handler.cert_key(cert_file, cert_file_password)
@handler.cert_key(cert_key, cert_file_password)

# Return something explicitly since this command might be run in a
# console where the last statement would be printed.
Expand Down
8 changes: 3 additions & 5 deletions net_dav.gemspec
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,8 @@ Gem::Specification.new do |s|
"net_dav.gemspec",
"net_dav.gif",
"script/multi-test",
"spec/fixtures/file.html",
"spec/integration/net_dav_spec.rb",
"spec/integration/webdav_server.rb",
"spec/spec.opts",
"spec/spec_helper.rb",
"tmp/.gitignore"
]
Expand All @@ -54,16 +52,16 @@ Gem::Specification.new do |s|
s.specification_version = 3

if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<nokogiri>, [">= 1.3.0"])
s.add_runtime_dependency(%q<nokogiri>, [">= 1.3.0"], ["<= 1.6.1"])
s.add_development_dependency(%q<rspec>, [">= 1.2.0"])
s.add_development_dependency(%q<webrick-webdav>, [">= 1.0"])
else
s.add_dependency(%q<nokogiri>, [">= 1.3.0"])
s.add_dependency(%q<nokogiri>, [">= 1.3.0"], ["<= 1.6.1"])
s.add_dependency(%q<rspec>, [">= 1.2.0"])
s.add_dependency(%q<webrick-webdav>, [">= 1.0"])
end
else
s.add_dependency(%q<nokogiri>, [">= 1.3.0"])
s.add_dependency(%q<nokogiri>, [">= 1.3.0"], ["<= 1.6.1"])
s.add_dependency(%q<rspec>, [">= 1.2.0"])
s.add_dependency(%q<webrick-webdav>, [">= 1.0"])
end
Expand Down
1 change: 0 additions & 1 deletion spec/fixtures/file.html

This file was deleted.

70 changes: 34 additions & 36 deletions spec/integration/net_dav_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,21 @@
before(:all) do
@server_uri = "http://localhost:10080/"
@new_file_uri = "/new_file.html"
@file_uri = "/file.html"
@copied_file_uri = "/copied_file.html"
@moved_file_uri = "/moved_file.html"

# Start webdav server in subprocess
@pid = fork do
webdav_server(:port => 10080, :authentication => false)
end

# Wait for webdavserver to start
wait_for_server(@server_uri)
end

before(:each) do
@dav = Net::DAV.new(@server_uri)

# Delete any files that are created by the specs
[@new_file_uri, @copied_file_uri, @moved_file_uri].each do |uri|
if (find_props_or_error(@dav, uri) =~ /200/)
@dav.delete(uri)
end
end
remove_all_files
end

it "should create a Net::Dav object" do
Expand All @@ -37,10 +32,9 @@
end

it "should store the HTTP status in @status" do
dav = Net::DAV.new("http://localhost:10080/")
@props = dav.propfind("/").to_s
@props = @dav.propfind("/").to_s

dav.last_status.should == 207
@dav.last_status.should == 207
end

it "should raise if finding non-existent path" do
Expand All @@ -62,7 +56,7 @@
@props.should match(/404.*Not found/i)

@dav.put_string(@new_file_uri,"File contents")
dav.last_status.should == 200
@dav.last_status.should == 200

@props = find_props_or_error(@dav, @new_file_uri )
@props.should match(/200 OK/i)
Expand All @@ -75,19 +69,20 @@
@props.should match(/200 OK/i)

@dav.delete(@new_file_uri)
dav.last_status.should == 204
@dav.last_status.should == 204

@props = find_props_or_error(@dav, @new_file_uri)
@props.should match(/404.*Not found/i)

end

it "should copy files on webdav server" do
@props = find_props_or_error(@dav, "/file.html")
@dav.put_string(@new_file_uri,"File contents")

@props = find_props_or_error(@dav, @new_file_uri)
@props.should match(/200 OK/i)

@dav.copy("/file.html", @copied_file_uri)
dav.last_status.should == 201
@dav.copy(@new_file_uri, @copied_file_uri)
@dav.last_status.should == 201

@props = find_props_or_error(@dav, @copied_file_uri)
@props.should match(/200 OK/i)
Expand All @@ -99,20 +94,20 @@
end

it "should move files on webdav server" do
@props = find_props_or_error(@dav, "/file.html")
@props.should match(/200 OK/i)

@dav.move("/file.html", @moved_file_uri)
dav.last_status.should == 201
@dav.put_string(@new_file_uri,"File contents")
@props = find_props_or_error(@dav, @new_file_uri)
@dav.move(@new_file_uri, @moved_file_uri)
@dav.last_status.should == 201

@props = find_props_or_error(@dav, @moved_file_uri)
@props = find_props_or_error(@dav, @moved_file_uri)
@props.should match(/200 OK/i)

@props = find_props_or_error(@dav, "/file.html")
@props = find_props_or_error(@dav, @file_uri)
@props.should match(/404.*Not found/i)

@dav.move( @moved_file_uri,"/file.html")
@props = find_props_or_error(@dav, "/file.html")
@dav.move(@moved_file_uri, @file_uri)
@props = find_props_or_error(@dav, @file_uri)
@props.should match(/200 OK/i)
end

Expand All @@ -128,18 +123,21 @@
@dav.exists?('/totally_unknown_file.html').should == false
end

# proppatch seems to work, but our simple webdav server don't update properties
# it "should alter properties on resources on webdav server" do
# dav = Net::DAV.new(@server_uri)
# @props = find_props_or_error(dav, "/file.html")
# puts @props
# dav.proppatch("/file.html", "<d:resourcetype>static-file</d:resourcetype>")
# @props = find_props_or_error(dav, "/file.html")
# puts @props
# end

after(:all) do
remove_all_files

# Shut down webdav server
Process.kill('SIGKILL', @pid) rescue nil
end

def remove_all_files
@dav = Net::DAV.new(@server_uri)

# Delete any files that are created by the specs
[@new_file_uri, @copied_file_uri, @moved_file_uri, @file_uri].each do |uri|
if (find_props_or_error(@dav, uri) =~ /200/)
@dav.delete(uri)
end
end
end
end
14 changes: 6 additions & 8 deletions spec/integration/webdav_server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ def to_s(indent=nil)
# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/223386
# http://gmarrone.objectblues.net/cgi-bin/wiki/WebDAV_-_Linux_server%2c_Mac_OS_X_client
module WEBrick

module HTTPServlet
class WebDAVHandlerVersion2 < WebDAVHandler

def do_OPTIONS(req, res)
super
res["DAV"] = "1,2"
Expand All @@ -37,11 +37,9 @@ def do_OPTIONS(req, res)
def do_LOCK(req, res)
res.body << "<XXX-#{Time.now.to_s}/>"
end

end

class WebDAVHandlerVersion3 < WebDAVHandlerVersion2

# Enable authentication
$REALM = "WebDav share"
$USER = "myuser"
Expand All @@ -55,22 +53,23 @@ def service(req, res)
}
super
end

end

end

end

def webdav_server(*options)
port = 10080

if(options and options[0][:port])
port = options[0][:port]
end

log = WEBrick::Log.new
log.level = WEBrick::Log::DEBUG if $DEBUG
serv = WEBrick::HTTPServer.new({:Port => port, :Logger => log})

dir = File.expand_path(File.dirname(__FILE__)) + '/../fixtures'
dir = File.expand_path(File.dirname(__FILE__))

if(options and options[0][:authentication])
serv.mount("/", WEBrick::HTTPServlet::WebDAVHandlerVersion3, dir)
else
Expand All @@ -82,6 +81,5 @@ def webdav_server(*options)
end

if($0 == __FILE__)

webdav_server(:port => 10080,:authentication => false)
end
1 change: 0 additions & 1 deletion spec/spec.opts

This file was deleted.

10 changes: 4 additions & 6 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
$LOAD_PATH.unshift(File.dirname(__FILE__))
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))

require 'rubygems'
require 'net/dav'
require 'spec'
require 'spec/autorun'

Spec::Runner.configure do |config|

end

# Wait for webdav server to start up
def wait_for_server(address)
server_running = false
dav = Net::DAV.new(address)
count = 0

while(not(server_running))
begin
sleep(0.1)
props = dav.propfind("/").to_s

if(props.match(/200 OK/))
server_running = true
else
Expand All @@ -29,6 +26,7 @@ def wait_for_server(address)
puts "Server not running. Retrying..." if ((count % 10) == 0)
end
end

dav = nil
end

Expand Down