[前][次][番号順一覧][スレッド一覧]

ruby-changes:14509

From: nobu <ko1@a...>
Date: Mon, 18 Jan 2010 17:16:31 +0900 (JST)
Subject: [ruby-changes:14509] Ruby:r26346 (trunk, ruby_1_8): * lib/webrick/httpservlet/filehandler.rb (make_partial_content):

nobu	2010-01-18 17:16:07 +0900 (Mon, 18 Jan 2010)

  New Revision: 26346

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26346

  Log:
    * lib/webrick/httpservlet/filehandler.rb (make_partial_content):
      add bytes-unit.  [ruby-dev:40030]

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/lib/webrick/httpservlet/filehandler.rb
    branches/ruby_1_8/test/webrick/test_filehandler.rb
    trunk/ChangeLog
    trunk/lib/webrick/httpservlet/filehandler.rb
    trunk/test/webrick/test_filehandler.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 26345)
+++ ChangeLog	(revision 26346)
@@ -1,3 +1,8 @@
+Mon Jan 18 17:16:03 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* lib/webrick/httpservlet/filehandler.rb (make_partial_content):
+	  add bytes-unit.  [ruby-dev:40030]
+
 Mon Jan 18 15:49:42 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* lib/net/http.rb (Net::HTTPHeader#{content_range,range_length}):
Index: lib/webrick/httpservlet/filehandler.rb
===================================================================
--- lib/webrick/httpservlet/filehandler.rb	(revision 26345)
+++ lib/webrick/httpservlet/filehandler.rb	(revision 26346)
@@ -87,7 +87,7 @@
               content = io.read(last-first+1)
               body << "--" << boundary << CRLF
               body << "Content-Type: #{mtype}" << CRLF
-              body << "Content-Range: #{first}-#{last}/#{filesize}" << CRLF
+              body << "Content-Range: bytes #{first}-#{last}/#{filesize}" << CRLF
               body << CRLF
               body << content
               body << CRLF
@@ -107,7 +107,7 @@
               content = io.read(last-first+1)
             end
             res['content-type'] = mtype
-            res['content-range'] = "#{first}-#{last}/#{filesize}"
+            res['content-range'] = "bytes #{first}-#{last}/#{filesize}"
             res['content-length'] = last - first + 1
             res.body = content
           else
Index: test/webrick/test_filehandler.rb
===================================================================
--- test/webrick/test_filehandler.rb	(revision 26345)
+++ test/webrick/test_filehandler.rb	(revision 26346)
@@ -75,6 +75,11 @@
   def test_filehandler
     config = { :DocumentRoot => File.dirname(__FILE__), }
     this_file = File.basename(__FILE__)
+    filesize = File.size(__FILE__)
+    this_data = File.open(__FILE__, "rb") {|f| f.read}
+    range = nil
+    bug2593 = '[ruby-dev:40030]'
+
     TestWEBrick.start_httpserver(config) do |server, addr, port, log|
       http = Net::HTTP.new(addr, port)
       req = Net::HTTP::Get.new("/")
@@ -89,6 +94,67 @@
         assert_equal("text/plain", res.content_type, log.call)
         assert_equal(File.read(__FILE__), res.body, log.call)
       }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=#{filesize-100}-")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal((filesize-100)..(filesize-1), range, log.call)
+        assert_equal(this_data[-100..-1], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=-100")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal((filesize-100)..(filesize-1), range, log.call)
+        assert_equal(this_data[-100..-1], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=0-99")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal(0..99, range, log.call)
+        assert_equal(this_data[0..99], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=100-199")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal(100..199, range, log.call)
+        assert_equal(this_data[100..199], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=0-0")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal(0..0, range, log.call)
+        assert_equal(this_data[0..0], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=-1")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal((filesize-1)..(filesize-1), range, log.call)
+        assert_equal(this_data[-1, 1], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=0-0, -2")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("multipart/byteranges", res.content_type, log.call)
+      }
+
     end
   end
 
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 26345)
+++ ruby_1_8/ChangeLog	(revision 26346)
@@ -1,3 +1,8 @@
+Mon Jan 18 17:16:03 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* lib/webrick/httpservlet/filehandler.rb (make_partial_content):
+	  add bytes-unit.  [ruby-dev:40030]
+
 Mon Jan 18 15:49:42 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* lib/net/http.rb (Net::HTTPHeader#{content_range,range_length}):
Index: ruby_1_8/lib/webrick/httpservlet/filehandler.rb
===================================================================
--- ruby_1_8/lib/webrick/httpservlet/filehandler.rb	(revision 26345)
+++ ruby_1_8/lib/webrick/httpservlet/filehandler.rb	(revision 26346)
@@ -87,7 +87,7 @@
               content = io.read(last-first+1)
               body << "--" << boundary << CRLF
               body << "Content-Type: #{mtype}" << CRLF
-              body << "Content-Range: #{first}-#{last}/#{filesize}" << CRLF
+              body << "Content-Range: bytes #{first}-#{last}/#{filesize}" << CRLF
               body << CRLF
               body << content
               body << CRLF
@@ -107,7 +107,7 @@
               content = io.read(last-first+1)
             end
             res['content-type'] = mtype
-            res['content-range'] = "#{first}-#{last}/#{filesize}"
+            res['content-range'] = "bytes #{first}-#{last}/#{filesize}"
             res['content-length'] = last - first + 1
             res.body = content
           else
Index: ruby_1_8/test/webrick/test_filehandler.rb
===================================================================
--- ruby_1_8/test/webrick/test_filehandler.rb	(revision 26345)
+++ ruby_1_8/test/webrick/test_filehandler.rb	(revision 26346)
@@ -71,6 +71,11 @@
   def test_filehandler
     config = { :DocumentRoot => File.dirname(__FILE__), }
     this_file = File.basename(__FILE__)
+    filesize = File.size(__FILE__)
+    this_data = File.open(__FILE__, "rb") {|f| f.read}
+    range = nil
+    bug2593 = '[ruby-dev:40030]'
+
     TestWEBrick.start_httpserver(config) do |server, addr, port|
       http = Net::HTTP.new(addr, port)
       req = Net::HTTP::Get.new("/")
@@ -85,6 +90,67 @@
         assert_equal("text/plain", res.content_type)
         assert_equal(File.read(__FILE__), res.body)
       }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=#{filesize-100}-")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal((filesize-100)..(filesize-1), range, log.call)
+        assert_equal(this_data[-100..-1], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=-100")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal((filesize-100)..(filesize-1), range, log.call)
+        assert_equal(this_data[-100..-1], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=0-99")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal(0..99, range, log.call)
+        assert_equal(this_data[0..99], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=100-199")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal(100..199, range, log.call)
+        assert_equal(this_data[100..199], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=0-0")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal(0..0, range, log.call)
+        assert_equal(this_data[0..0], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=-1")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("text/plain", res.content_type, log.call)
+        assert_nothing_raised(bug2593) {range = res.content_range}
+        assert_equal((filesize-1)..(filesize-1), range, log.call)
+        assert_equal(this_data[-1, 1], res.body, log.call)
+      }
+
+      req = Net::HTTP::Get.new("/#{this_file}", "range"=>"bytes=0-0, -2")
+      http.request(req){|res|
+        assert_equal("206", res.code, log.call)
+        assert_equal("multipart/byteranges", res.content_type, log.call)
+      }
+
     end
   end
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]