about summary refs log tree commit homepage
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/.test_ws.rb.swpbin0 -> 12288 bytes
-rw-r--r--test/test_http11.rb31
-rw-r--r--test/test_uriclassifier.rb104
-rw-r--r--test/test_ws.rb33
4 files changed, 168 insertions, 0 deletions
diff --git a/test/.test_ws.rb.swp b/test/.test_ws.rb.swp
new file mode 100644
index 0000000..84dbb1d
--- /dev/null
+++ b/test/.test_ws.rb.swp
Binary files differ
diff --git a/test/test_http11.rb b/test/test_http11.rb
new file mode 100644
index 0000000..8f07900
--- /dev/null
+++ b/test/test_http11.rb
@@ -0,0 +1,31 @@
+require 'test/unit'
+require 'http11'
+
+
+class HttpParserTest < Test::Unit::TestCase
+    
+    def test_parse_simple
+            parser = HttpParser.new
+            req = {}
+            http = "GET / HTTP/1.1\r\n\r\n"
+            nread = parser.execute(req, http);
+            assert nread == http.length, "Failed to parse the full HTTP request"
+            assert parser.finished?, "Parser didn't finish"
+            assert !parser.error?, "Parser had error"
+            assert nread == parser.nread, "Number read returned from execute does not match"
+            parser.reset
+            assert parser.nread == 0, "Number read after reset should be 0"
+    end
+    
+    
+    def test_parse_error
+        parser = HttpParser.new
+        req = {}
+        bad_http = "GET / SsUTF/1.1"
+        nread = parser.execute(req, bad_http)
+        assert nread < bad_http.length, "Number read should be less than total on error"
+        assert !parser.finished?, "Parser shouldn't be finished"
+        assert parser.error?, "Parser SHOULD have error"
+    end
+end
+
diff --git a/test/test_uriclassifier.rb b/test/test_uriclassifier.rb
new file mode 100644
index 0000000..ae5df1d
--- /dev/null
+++ b/test/test_uriclassifier.rb
@@ -0,0 +1,104 @@
+require 'test/unit'
+require 'net/http'
+require 'mongrel'
+require 'benchmark'
+
+include Mongrel
+
+class URIClassifierTest < Test::Unit::TestCase
+
+  def test_uri_finding
+    u = URIClassifier.new
+    u.register("/test", 1)
+    
+    sn,pi,val = u.resolve("/test")
+    assert val != nil, "didn't resolve"
+    assert_equal 1, val, "wrong value"
+    assert_equal "/test",sn, "wrong SCRIPT_NAME"
+  end
+
+
+  def test_uri_prefix_ops
+    test = "/pre/fix/test"
+    prefix = "/pre"
+
+    u = URIClassifier.new
+    u.register(prefix,1)
+
+    sn,pi,val = u.resolve(test)
+    assert val != nil, "didn't resolve"
+    assert_equal prefix,sn, "wrong script name"
+    assert_equal test[sn.length .. -1],pi, "wrong path info"
+  end
+
+  def test_not_finding
+    test = "/cant/find/me"
+    u = URIClassifier.new
+    u.register(test, 1)
+
+    sn,pi,val = u.resolve("/nope/not/here")
+    assert_equal nil,sn, "shouldn't be found"
+    assert_equal nil,pi, "shouldn't be found"
+    assert_equal nil,val, "shouldn't be found"
+  end
+
+  def test_exceptions
+    u = URIClassifier.new
+
+    u.register("test", 1)
+    
+    failed = false
+    begin
+      u.register("test", 1)
+    rescue => e
+      failed = true
+    end
+
+    assert failed, "it didn't fail as expected"
+
+    failed = false
+    begin
+      u.register("", 1)
+    rescue => e
+      failed = true
+    end
+
+    assert failed, "it didn't fail as expected"
+  end
+
+
+  def test_register_unregister
+    u = URIClassifier.new
+    
+    100.times do
+      u.register("stuff", 1)
+      val = u.unregister("stuff")
+      assert_equal 1,val, "didn't get the right return value"
+    end
+
+    u.register("things",1)
+    sn,pi,val = u.resolve("things")
+    assert_equal 1, val, "result doesn't match"
+
+    u.unregister("things")
+    sn,pi,val = u.resolve("things")
+    assert_equal nil, val, "result should be nil"
+
+  end
+
+
+  def test_performance
+    count = 8500
+    u = URIClassifier.new
+    u.register("stuff",1)
+
+    res = Benchmark.measure {   count.times { u.resolve("stuff") } }
+    
+    reg_unreg = Benchmark.measure { count.times { u.register("other",1); u.unregister("other"); } }
+
+    puts "\nRESOLVE(#{count}): #{res}"
+    puts "REG_UNREG(#{count}): #{reg_unreg}"
+  end
+      
+end
+
diff --git a/test/test_ws.rb b/test/test_ws.rb
new file mode 100644
index 0000000..dd7fa77
--- /dev/null
+++ b/test/test_ws.rb
@@ -0,0 +1,33 @@
+require 'test/unit'
+require 'net/http'
+require 'mongrel'
+require 'timeout'
+
+include Mongrel;
+
+class TestHandler < Mongrel::HttpHandler
+    attr_reader :ran_test
+    
+    def process(request, response)
+        @ran_test = true
+        response.socket.write("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nhello!\n")
+    end
+end
+                
+
+class WSTest < Test::Unit::TestCase
+
+    def test_simple_server
+        h = HttpServer.new("0.0.0.0", 9998)
+        tester = TestHandler.new
+        h.register("/test", tester)
+        h.run
+
+        sleep(1)
+        res = Net::HTTP.get(URI.parse('http://localhost:9998/test'))
+        assert res != nil, "Didn't get a response"
+        assert tester.ran_test, "Handler didn't really run"
+    end
+
+end
+