diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..52e302f --- /dev/null +++ b/Gemfile @@ -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 diff --git a/Rakefile b/Rakefile index 901a6a4..0cd77a2 100644 --- a/Rakefile +++ b/Rakefile @@ -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" @@ -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') : "" diff --git a/lib/net/dav.rb b/lib/net/dav.rb old mode 100644 new mode 100755 index ea29d63..0995750 --- a/lib/net/dav.rb +++ b/lib/net/dav.rb @@ -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) @@ -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. diff --git a/net_dav.gemspec b/net_dav.gemspec old mode 100644 new mode 100755 index 8c2187b..eb5c8c4 --- a/net_dav.gemspec +++ b/net_dav.gemspec @@ -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" ] @@ -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, [">= 1.3.0"]) + s.add_runtime_dependency(%q, [">= 1.3.0"], ["<= 1.6.1"]) s.add_development_dependency(%q, [">= 1.2.0"]) s.add_development_dependency(%q, [">= 1.0"]) else - s.add_dependency(%q, [">= 1.3.0"]) + s.add_dependency(%q, [">= 1.3.0"], ["<= 1.6.1"]) s.add_dependency(%q, [">= 1.2.0"]) s.add_dependency(%q, [">= 1.0"]) end else - s.add_dependency(%q, [">= 1.3.0"]) + s.add_dependency(%q, [">= 1.3.0"], ["<= 1.6.1"]) s.add_dependency(%q, [">= 1.2.0"]) s.add_dependency(%q, [">= 1.0"]) end diff --git a/spec/fixtures/file.html b/spec/fixtures/file.html deleted file mode 100644 index 39c9f36..0000000 --- a/spec/fixtures/file.html +++ /dev/null @@ -1 +0,0 @@ -Content diff --git a/spec/integration/net_dav_spec.rb b/spec/integration/net_dav_spec.rb index 6c823f5..5240362 100644 --- a/spec/integration/net_dav_spec.rb +++ b/spec/integration/net_dav_spec.rb @@ -5,6 +5,7 @@ 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" @@ -12,19 +13,13 @@ @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 @@ -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 @@ -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) @@ -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) @@ -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 @@ -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", "static-file") -# @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 diff --git a/spec/integration/webdav_server.rb b/spec/integration/webdav_server.rb index 268a442..41f3acd 100644 --- a/spec/integration/webdav_server.rb +++ b/spec/integration/webdav_server.rb @@ -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" @@ -37,11 +37,9 @@ def do_OPTIONS(req, res) def do_LOCK(req, res) res.body << "" end - end class WebDAVHandlerVersion3 < WebDAVHandlerVersion2 - # Enable authentication $REALM = "WebDav share" $USER = "myuser" @@ -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 @@ -82,6 +81,5 @@ def webdav_server(*options) end if($0 == __FILE__) - webdav_server(:port => 10080,:authentication => false) end diff --git a/spec/spec.opts b/spec/spec.opts deleted file mode 100644 index 4e1e0d2..0000000 --- a/spec/spec.opts +++ /dev/null @@ -1 +0,0 @@ ---color diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index cfa3502..c535c1f 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -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 @@ -29,6 +26,7 @@ def wait_for_server(address) puts "Server not running. Retrying..." if ((count % 10) == 0) end end + dav = nil end