mongrel 0.3.12.4 → 0.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. data/Rakefile +44 -33
  2. data/bin/mongrel_rails +67 -34
  3. data/doc/rdoc/classes/IO.html +10 -10
  4. data/doc/rdoc/classes/IO.src/{M000005.html → M000001.html} +5 -5
  5. data/doc/rdoc/classes/IO.src/{M000006.html → M000002.html} +5 -5
  6. data/doc/rdoc/classes/Kernel.html +10 -10
  7. data/doc/rdoc/classes/Kernel.src/{M000025.html → M000020.html} +5 -5
  8. data/doc/rdoc/classes/Kernel.src/M000021.html +23 -0
  9. data/doc/rdoc/classes/Mongrel.html +25 -4
  10. data/doc/rdoc/classes/Mongrel/CGIWrapper.html +383 -0
  11. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000096.html +11 -5
  12. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000097.html +34 -5
  13. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000098.html +21 -6
  14. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/{M000093.html → M000099.html} +13 -13
  15. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/{M000094.html → M000100.html} +11 -11
  16. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/{M000095.html → M000101.html} +4 -4
  17. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000102.html +18 -0
  18. data/doc/rdoc/classes/Mongrel/{URIClassifier.src/M000084.html → CGIWrapper.src/M000103.html} +5 -5
  19. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000104.html +19 -0
  20. data/doc/rdoc/classes/Mongrel/Camping.html +5 -5
  21. data/doc/rdoc/classes/Mongrel/Camping.src/M000046.html +22 -0
  22. data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.html +10 -10
  23. data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.src/{M000049.html → M000047.html} +4 -4
  24. data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.src/M000048.html +51 -0
  25. data/doc/rdoc/classes/Mongrel/Command.html +13 -0
  26. data/doc/rdoc/classes/Mongrel/Command/Base.html +95 -50
  27. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000024.html +24 -0
  28. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000025.html +42 -0
  29. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000026.html +18 -0
  30. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000027.html +18 -0
  31. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000028.html +18 -0
  32. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000029.html +5 -11
  33. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000030.html +9 -28
  34. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000031.html +5 -5
  35. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000032.html +5 -5
  36. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000033.html +5 -5
  37. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000034.html +11 -9
  38. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000035.html +11 -5
  39. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000036.html +5 -5
  40. data/doc/rdoc/classes/Mongrel/Command/Registry.html +15 -15
  41. data/doc/rdoc/classes/Mongrel/Command/Registry.src/M000037.html +20 -0
  42. data/doc/rdoc/classes/Mongrel/Command/Registry.src/{M000040.html → M000038.html} +11 -11
  43. data/doc/rdoc/classes/Mongrel/Command/Registry.src/M000039.html +37 -7
  44. data/doc/rdoc/classes/Mongrel/Configurator.html +651 -0
  45. data/doc/rdoc/classes/Mongrel/Configurator.src/M000105.html +16 -20
  46. data/doc/rdoc/classes/Mongrel/Configurator.src/M000106.html +18 -5
  47. data/doc/rdoc/classes/Mongrel/Configurator.src/M000107.html +7 -11
  48. data/doc/rdoc/classes/Mongrel/Configurator.src/M000108.html +7 -6
  49. data/doc/rdoc/classes/Mongrel/Configurator.src/M000109.html +10 -9
  50. data/doc/rdoc/classes/Mongrel/Configurator.src/M000110.html +5 -8
  51. data/doc/rdoc/classes/Mongrel/Configurator.src/M000111.html +21 -5
  52. data/doc/rdoc/classes/Mongrel/Configurator.src/M000112.html +6 -15
  53. data/doc/rdoc/classes/Mongrel/Configurator.src/M000113.html +17 -5
  54. data/doc/rdoc/classes/Mongrel/Configurator.src/M000114.html +20 -33
  55. data/doc/rdoc/classes/Mongrel/Configurator.src/M000115.html +5 -5
  56. data/doc/rdoc/classes/Mongrel/Configurator.src/M000116.html +24 -0
  57. data/doc/rdoc/classes/Mongrel/Configurator.src/M000117.html +19 -0
  58. data/doc/rdoc/classes/Mongrel/Configurator.src/M000118.html +22 -0
  59. data/doc/rdoc/classes/Mongrel/Configurator.src/M000119.html +25 -0
  60. data/doc/rdoc/classes/Mongrel/Configurator.src/M000120.html +18 -0
  61. data/doc/rdoc/classes/Mongrel/Configurator.src/M000121.html +35 -0
  62. data/doc/rdoc/classes/Mongrel/Configurator.src/M000122.html +18 -0
  63. data/doc/rdoc/classes/Mongrel/Configurator.src/M000123.html +33 -0
  64. data/doc/rdoc/classes/Mongrel/Configurator.src/M000124.html +18 -0
  65. data/doc/rdoc/classes/Mongrel/Const.html +39 -7
  66. data/doc/rdoc/classes/Mongrel/DeflateFilter.html +181 -0
  67. data/doc/rdoc/classes/Mongrel/DeflateFilter.src/M000094.html +19 -0
  68. data/doc/rdoc/classes/Mongrel/DeflateFilter.src/M000095.html +28 -0
  69. data/doc/rdoc/classes/Mongrel/DirHandler.html +48 -33
  70. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000056.html +21 -0
  71. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000057.html +43 -0
  72. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000058.html +29 -7
  73. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000059.html +50 -29
  74. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000060.html +26 -27
  75. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000061.html +5 -38
  76. data/doc/rdoc/classes/Mongrel/Error404Handler.html +171 -0
  77. data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000116.html → M000125.html} +4 -4
  78. data/doc/rdoc/classes/Mongrel/Error404Handler.src/{M000117.html → M000126.html} +4 -4
  79. data/doc/rdoc/classes/Mongrel/HeaderOut.html +185 -0
  80. data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000072.html → M000069.html} +4 -4
  81. data/doc/rdoc/classes/Mongrel/HeaderOut.src/{M000073.html → M000070.html} +4 -4
  82. data/doc/rdoc/classes/Mongrel/HttpHandler.html +170 -0
  83. data/doc/rdoc/classes/Mongrel/HttpHandler.src/{M000074.html → M000075.html} +3 -3
  84. data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.html +20 -10
  85. data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.src/{M000027.html → M000022.html} +5 -4
  86. data/doc/rdoc/classes/Mongrel/HttpHandlerPlugin.src/{M000028.html → M000023.html} +3 -3
  87. data/doc/rdoc/classes/Mongrel/HttpParser.html +41 -36
  88. data/doc/rdoc/classes/Mongrel/HttpParser.src/{M000056.html → M000049.html} +6 -5
  89. data/doc/rdoc/classes/Mongrel/HttpParser.src/{M000057.html → M000050.html} +7 -6
  90. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000051.html +7 -6
  91. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000052.html +37 -7
  92. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000053.html +5 -7
  93. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000054.html +6 -22
  94. data/doc/rdoc/classes/Mongrel/HttpParser.src/M000055.html +6 -5
  95. data/doc/rdoc/classes/Mongrel/HttpRequest.html +239 -0
  96. data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000130.html +52 -0
  97. data/doc/rdoc/classes/Mongrel/HttpRequest.src/{M000119.html → M000131.html} +6 -6
  98. data/doc/rdoc/classes/Mongrel/HttpRequest.src/{M000120.html → M000132.html} +6 -6
  99. data/doc/rdoc/classes/Mongrel/HttpRequest.src/{M000121.html → M000133.html} +18 -18
  100. data/doc/rdoc/classes/Mongrel/HttpResponse.html +439 -0
  101. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000076.html +12 -7
  102. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000077.html +7 -12
  103. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000078.html +12 -9
  104. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000079.html +9 -9
  105. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000080.html +9 -10
  106. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000081.html +9 -5
  107. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000082.html +18 -7
  108. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000083.html +8 -5
  109. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000084.html +20 -0
  110. data/doc/rdoc/classes/Mongrel/{HttpServer.src/M000069.html → HttpResponse.src/M000085.html} +7 -5
  111. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000086.html +20 -0
  112. data/doc/rdoc/classes/Mongrel/{Configurator.src/M000101.html → HttpResponse.src/M000087.html} +5 -5
  113. data/doc/rdoc/classes/Mongrel/HttpServer.html +68 -59
  114. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000062.html +25 -0
  115. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000063.html +83 -0
  116. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000064.html +13 -11
  117. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000065.html +50 -53
  118. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000066.html +21 -11
  119. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000067.html +5 -47
  120. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000068.html +9 -15
  121. data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.html +16 -16
  122. data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/M000040.html +39 -0
  123. data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/{M000043.html → M000041.html} +11 -11
  124. data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/M000042.html +13 -22
  125. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.html +17 -17
  126. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000043.html +22 -0
  127. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000044.html +51 -0
  128. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000045.html +10 -9
  129. data/doc/rdoc/classes/Mongrel/StatisticsFilter.html +211 -0
  130. data/doc/rdoc/classes/Mongrel/StatisticsFilter.src/M000127.html +24 -0
  131. data/doc/rdoc/classes/Mongrel/StatisticsFilter.src/M000128.html +24 -0
  132. data/doc/rdoc/classes/Mongrel/StatisticsFilter.src/M000129.html +18 -0
  133. data/doc/rdoc/classes/{Class.html → Mongrel/StatusHandler.html} +42 -45
  134. data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000071.html +18 -0
  135. data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000072.html +24 -0
  136. data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000073.html +42 -0
  137. data/doc/rdoc/classes/Mongrel/StatusHandler.src/M000074.html +20 -0
  138. data/doc/rdoc/classes/Mongrel/StopServer.html +117 -0
  139. data/doc/rdoc/classes/Mongrel/URIClassifier.html +314 -0
  140. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000088.html +5 -23
  141. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000089.html +5 -70
  142. data/doc/rdoc/classes/Mongrel/URIClassifier.src/{M000086.html → M000090.html} +0 -0
  143. data/doc/rdoc/classes/Mongrel/URIClassifier.src/{M000087.html → M000091.html} +0 -0
  144. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000092.html +36 -0
  145. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000093.html +83 -0
  146. data/doc/rdoc/classes/MongrelDbg.html +25 -25
  147. data/doc/rdoc/classes/MongrelDbg.src/{M000020.html → M000015.html} +5 -5
  148. data/doc/rdoc/classes/MongrelDbg.src/{M000021.html → M000016.html} +6 -6
  149. data/doc/rdoc/classes/MongrelDbg.src/{M000022.html → M000017.html} +8 -8
  150. data/doc/rdoc/classes/MongrelDbg.src/{M000023.html → M000018.html} +7 -7
  151. data/doc/rdoc/classes/MongrelDbg.src/{M000024.html → M000019.html} +4 -4
  152. data/doc/rdoc/classes/ObjectTracker.html +10 -40
  153. data/doc/rdoc/classes/ObjectTracker.src/M000013.html +27 -0
  154. data/doc/rdoc/classes/ObjectTracker.src/M000014.html +44 -0
  155. data/doc/rdoc/classes/RequestLog.html +115 -0
  156. data/doc/rdoc/classes/RequestLog/Access.html +151 -0
  157. data/doc/rdoc/classes/RequestLog/Access.src/{M000122.html → M000134.html} +5 -5
  158. data/doc/rdoc/classes/RequestLog/Files.html +144 -0
  159. data/doc/rdoc/classes/RequestLog/Files.src/{M000123.html → M000135.html} +5 -5
  160. data/doc/rdoc/classes/RequestLog/Objects.html +144 -0
  161. data/doc/rdoc/classes/RequestLog/Objects.src/{M000124.html → M000137.html} +5 -5
  162. data/doc/rdoc/classes/RequestLog/Params.html +144 -0
  163. data/doc/rdoc/classes/RequestLog/Params.src/{M000125.html → M000138.html} +5 -5
  164. data/doc/rdoc/classes/RequestLog/Threads.html +144 -0
  165. data/doc/rdoc/classes/RequestLog/Threads.src/M000136.html +34 -0
  166. data/doc/rdoc/classes/Stats.html +54 -36
  167. data/doc/rdoc/classes/Stats.src/{M000013.html → M000005.html} +6 -5
  168. data/doc/rdoc/classes/Stats.src/M000006.html +23 -0
  169. data/doc/rdoc/classes/Stats.src/M000007.html +26 -0
  170. data/doc/rdoc/classes/Stats.src/M000008.html +18 -0
  171. data/doc/rdoc/classes/Stats.src/M000009.html +5 -6
  172. data/doc/rdoc/classes/Stats.src/M000010.html +5 -10
  173. data/doc/rdoc/classes/Stats.src/M000011.html +10 -13
  174. data/doc/rdoc/classes/Stats.src/M000012.html +7 -5
  175. data/doc/rdoc/classes/TCPServer.html +9 -9
  176. data/doc/rdoc/classes/TCPServer.src/M000003.html +19 -0
  177. data/doc/rdoc/created.rid +1 -1
  178. data/doc/rdoc/files/COPYING.html +1 -1
  179. data/doc/rdoc/files/LICENSE.html +1 -1
  180. data/doc/rdoc/files/README.html +1 -1
  181. data/doc/rdoc/files/ext/http11/http11_c.html +1 -1
  182. data/doc/rdoc/files/lib/mongrel/camping_rb.html +28 -1
  183. data/doc/rdoc/files/lib/mongrel/cgi_rb.html +28 -1
  184. data/doc/rdoc/files/lib/mongrel/command_rb.html +28 -1
  185. data/doc/rdoc/files/lib/mongrel/debug_rb.html +28 -1
  186. data/doc/rdoc/files/lib/mongrel/handlers_rb.html +3 -3
  187. data/doc/rdoc/files/lib/mongrel/init_rb.html +28 -1
  188. data/doc/rdoc/files/lib/mongrel/rails_rb.html +28 -1
  189. data/doc/rdoc/files/lib/mongrel/stats_rb.html +21 -10
  190. data/doc/rdoc/files/lib/mongrel/tcphack_rb.html +23 -4
  191. data/doc/rdoc/files/lib/mongrel_rb.html +33 -1
  192. data/doc/rdoc/fr_class_index.html +65 -0
  193. data/doc/rdoc/fr_file_index.html +40 -0
  194. data/doc/rdoc/fr_method_index.html +164 -0
  195. data/doc/rdoc/index.html +24 -0
  196. data/examples/camping/blog.rb +1 -1
  197. data/examples/camping/tepee.rb +4 -3
  198. data/examples/simpletest.rb +15 -14
  199. data/ext/http11/http11.c +52 -18
  200. data/ext/http11/http11_parser.c +194 -177
  201. data/ext/http11/http11_parser.h +23 -5
  202. data/lib/mongrel.rb +295 -134
  203. data/lib/mongrel/camping.rb +48 -6
  204. data/lib/mongrel/cgi.rb +20 -2
  205. data/lib/mongrel/command.rb +76 -27
  206. data/lib/mongrel/debug.rb +42 -13
  207. data/lib/mongrel/handlers.rb +218 -59
  208. data/lib/mongrel/init.rb +18 -0
  209. data/lib/mongrel/rails.rb +61 -44
  210. data/lib/mongrel/stats.rb +30 -2
  211. data/lib/mongrel/tcphack.rb +18 -0
  212. data/setup.rb +799 -574
  213. data/test/mime.yaml +3 -0
  214. data/test/mongrel.conf +1 -0
  215. data/test/test_command.rb +101 -0
  216. data/test/test_conditional.rb +124 -0
  217. data/test/test_configurator.rb +56 -22
  218. data/test/test_debug.rb +18 -2
  219. data/test/test_handlers.rb +105 -0
  220. data/test/test_http11.rb +27 -9
  221. data/test/test_response.rb +38 -0
  222. data/test/test_stats.rb +21 -2
  223. data/test/test_uriclassifier.rb +18 -0
  224. data/test/test_ws.rb +105 -19
  225. data/test/testhelp.rb +36 -0
  226. data/tools/rakehelp.rb +52 -46
  227. data/tools/trickletest.rb +37 -0
  228. metadata +127 -76
  229. data/doc/rdoc/classes/Class.src/M000001.html +0 -24
  230. data/doc/rdoc/classes/Class.src/M000002.html +0 -62
  231. data/doc/rdoc/classes/Class.src/M000003.html +0 -21
  232. data/doc/rdoc/classes/Class.src/M000004.html +0 -20
  233. data/doc/rdoc/classes/Kernel.src/M000026.html +0 -25
  234. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000090.html +0 -24
  235. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000091.html +0 -47
  236. data/doc/rdoc/classes/Mongrel/CGIWrapper.src/M000092.html +0 -34
  237. data/doc/rdoc/classes/Mongrel/Camping.src/M000048.html +0 -22
  238. data/doc/rdoc/classes/Mongrel/Camping/CampingHandler.src/M000050.html +0 -27
  239. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000037.html +0 -18
  240. data/doc/rdoc/classes/Mongrel/Command/Base.src/M000038.html +0 -18
  241. data/doc/rdoc/classes/Mongrel/Command/Registry.src/M000041.html +0 -46
  242. data/doc/rdoc/classes/Mongrel/Configurator.src/M000099.html +0 -24
  243. data/doc/rdoc/classes/Mongrel/Configurator.src/M000100.html +0 -23
  244. data/doc/rdoc/classes/Mongrel/Configurator.src/M000102.html +0 -32
  245. data/doc/rdoc/classes/Mongrel/Configurator.src/M000103.html +0 -19
  246. data/doc/rdoc/classes/Mongrel/Configurator.src/M000104.html +0 -31
  247. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000062.html +0 -40
  248. data/doc/rdoc/classes/Mongrel/DirHandler.src/M000063.html +0 -18
  249. data/doc/rdoc/classes/Mongrel/HttpRequest.src/M000118.html +0 -28
  250. data/doc/rdoc/classes/Mongrel/HttpResponse.src/M000075.html +0 -26
  251. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000070.html +0 -22
  252. data/doc/rdoc/classes/Mongrel/HttpServer.src/M000071.html +0 -18
  253. data/doc/rdoc/classes/Mongrel/Rails/RailsConfigurator.src/M000044.html +0 -32
  254. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000046.html +0 -48
  255. data/doc/rdoc/classes/Mongrel/Rails/RailsHandler.src/M000047.html +0 -23
  256. data/doc/rdoc/classes/Mongrel/URIClassifier.src/M000085.html +0 -18
  257. data/doc/rdoc/classes/ObjectTracker.src/M000016.html +0 -22
  258. data/doc/rdoc/classes/ObjectTracker.src/M000017.html +0 -18
  259. data/doc/rdoc/classes/ObjectTracker.src/M000018.html +0 -18
  260. data/doc/rdoc/classes/ObjectTracker.src/M000019.html +0 -44
  261. data/doc/rdoc/classes/Stats.src/M000014.html +0 -19
  262. data/doc/rdoc/classes/Stats.src/M000015.html +0 -20
  263. data/doc/rdoc/classes/TCPServer.src/M000007.html +0 -19
  264. data/lib/mongrel/#rails.rb# +0 -178
@@ -0,0 +1,3 @@
1
+ ---
2
+ .jpeg: image/jpeg
3
+ .png: image/test
@@ -0,0 +1 @@
1
+ uri "/fromconf", :handler => Mongrel::Error404Handler.new("test")
@@ -0,0 +1,101 @@
1
+ # Mongrel Web Server - A Mostly Ruby Webserver and Library
2
+ #
3
+ # Copyright (C) 2005 Zed A. Shaw zedshaw AT zedshaw dot com
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+
19
+ require 'test/unit'
20
+ require 'mongrel'
21
+ require File.dirname(__FILE__) + '/testhelp.rb'
22
+
23
+
24
+ class TestCommand < GemPlugin::Plugin "/commands"
25
+ include Mongrel::Command::Base
26
+
27
+ def configure
28
+ options [
29
+ ["-e", "--environment ENV", "Rails environment to run as", :@environment, ENV['RAILS_ENV'] || "development"],
30
+ ['', '--user USER', "User to run as", :@user, nil],
31
+ ["-d", "--daemonize", "Whether to run in the background or not", :@daemon, false],
32
+ ["-x", "--test", "Used to let the test run failures", :@test, false],
33
+ ]
34
+ end
35
+
36
+ def validate
37
+ valid_dir? ".", "Can't validate current directory."
38
+ valid_exists? "Rakefile", "Rakefile not there, test is invalid."
39
+ if @test
40
+ valid_exist? "BADFILE", "Yeah, badfile"
41
+ valid_file? "BADFILE", "Not even a file"
42
+ valid_dir? "BADDIR", "No dir here"
43
+ valid? false, "Total failure"
44
+ end
45
+
46
+ return @valid
47
+ end
48
+
49
+
50
+ def run
51
+ $test_command_ran = true
52
+ end
53
+ end
54
+
55
+ class CommandTest < Test::Unit::TestCase
56
+
57
+ def setup
58
+ $test_command_ran = false
59
+ end
60
+
61
+ def teardown
62
+ end
63
+
64
+ def run_cmd(args)
65
+ Mongrel::Command::Registry.instance.run args
66
+ end
67
+
68
+ def test_run_command
69
+ redirect_test_io do
70
+ run_cmd ["testcommand"]
71
+ assert $test_command_ran, "command didn't run"
72
+ end
73
+ end
74
+
75
+ def test_command_error
76
+ redirect_test_io do
77
+ run_cmd ["crapcommand"]
78
+ end
79
+ end
80
+
81
+ def test_command_listing
82
+ redirect_test_io do
83
+ run_cmd ["help"]
84
+ end
85
+ end
86
+
87
+ def test_options
88
+ redirect_test_io do
89
+ run_cmd ["testcommand","-h"]
90
+ run_cmd ["testcommand","--help"]
91
+ run_cmd ["testcommand","-e","test","-d","--user"]
92
+ end
93
+ end
94
+
95
+ def test_version
96
+ redirect_test_io do
97
+ run_cmd ["testcommand", "--version"]
98
+ end
99
+ end
100
+
101
+ end
@@ -0,0 +1,124 @@
1
+ # Mongrel Web Server - A Mostly Ruby Webserver and Library
2
+ #
3
+ # Copyright (C) 2005 Zed A. Shaw zedshaw AT zedshaw dot com
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+
19
+ require 'test/unit'
20
+ require 'net/http'
21
+ require 'mongrel'
22
+
23
+ include Mongrel
24
+
25
+ class HttpParserTest < Test::Unit::TestCase
26
+ def setup
27
+ @h = HttpServer.new('127.0.0.1', 3501)
28
+ @h.register('/', Mongrel::DirHandler.new('.'))
29
+ @h.run
30
+
31
+ @http = Net::HTTP.new(@h.host, @h.port)
32
+
33
+ # get the ETag and Last-Modified headers
34
+ @path = '/README'
35
+ res = @http.start { |http| http.get(@path) }
36
+ assert_not_nil @etag = res['ETag']
37
+ assert_not_nil @last_modified = res['Last-Modified']
38
+ end
39
+
40
+ def teardown
41
+ orig_stderr = STDERR.dup
42
+
43
+ # temporarily disable the puts method in STDERR to silence warnings from stop
44
+ class << STDERR
45
+ define_method(:puts) {}
46
+ end
47
+
48
+ @h.stop
49
+ ensure
50
+ # restore STDERR
51
+ STDERR.reopen(orig_stderr)
52
+ end
53
+
54
+ # status should be 304 Not Modified when If-None-Match is the matching ETag
55
+ def test_not_modified_via_if_none_match
56
+ assert_status_for_get_and_head Net::HTTPNotModified, 'If-None-Match' => @etag
57
+ end
58
+
59
+ # status should be 304 Not Modified when If-Unmodified-Since is the matching Last-Modified date
60
+ def test_not_modified_via_if_unmodified_since
61
+ assert_status_for_get_and_head Net::HTTPNotModified, 'If-Unmodified-Since' => @last_modified
62
+ end
63
+
64
+ # status should be 304 Not Modified when If-None-Match is the matching ETag
65
+ # and If-Unmodified-Since is the matching Last-Modified date
66
+ def test_not_modified_via_if_none_match_and_if_unmodified_since
67
+ assert_status_for_get_and_head Net::HTTPNotModified, 'If-None-Match' => @etag, 'If-Unmodified-Since' => @last_modified
68
+ end
69
+
70
+ # status should be 200 OK when If-None-Match is invalid
71
+ def test_invalid_if_none_match
72
+ assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => 'invalid'
73
+ assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => 'invalid', 'If-Unmodified-Since' => @last_modified
74
+ end
75
+
76
+ # status should be 200 OK when If-Unmodified-Since is invalid
77
+ def test_invalid_if_unmodified_since
78
+ assert_status_for_get_and_head Net::HTTPOK, 'If-Unmodified-Since' => 'invalid'
79
+ assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => @etag, 'If-Unmodified-Since' => 'invalid'
80
+ end
81
+
82
+ # status should be 304 Not Modified when If-Unmodified-Since is greater than the Last-Modified header, but less than the system time
83
+ def test_if_unmodified_since_greater_than_last_modified
84
+ sleep 2
85
+ last_modified_plus_1 = (Time.httpdate(@last_modified) + 1).httpdate
86
+ assert_status_for_get_and_head Net::HTTPNotModified, 'If-Unmodified-Since' => last_modified_plus_1
87
+ assert_status_for_get_and_head Net::HTTPNotModified, 'If-None-Match' => @etag, 'If-Unmodified-Since' => last_modified_plus_1
88
+ end
89
+
90
+ # status should be 200 OK when If-Unmodified-Since is less than the Last-Modified header
91
+ def test_if_unmodified_since_less_than_last_modified
92
+ last_modified_minus_1 = (Time.httpdate(@last_modified) - 1).httpdate
93
+ assert_status_for_get_and_head Net::HTTPOK, 'If-Unmodified-Since' => last_modified_minus_1
94
+ assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => @etag, 'If-Unmodified-Since' => last_modified_minus_1
95
+ end
96
+
97
+ # status should be 200 OK when If-Unmodified-Since is a date in the future
98
+ def test_future_if_unmodified_since
99
+ the_future = Time.at(2**31-1).httpdate
100
+ assert_status_for_get_and_head Net::HTTPOK, 'If-Unmodified-Since' => the_future
101
+ assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => @etag, 'If-Unmodified-Since' => the_future
102
+ end
103
+
104
+ # status should be 200 OK when If-None-Match is a wildcard
105
+ def test_wildcard_match
106
+ assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => '*'
107
+ assert_status_for_get_and_head Net::HTTPOK, 'If-None-Match' => '*', 'If-Unmodified-Since' => @last_modified
108
+ end
109
+
110
+ private
111
+
112
+ # assert the response status is correct for GET and HEAD
113
+ def assert_status_for_get_and_head(status_class, headers = {})
114
+ %w{ get head }.each do |method|
115
+ res = @http.send(method, @path, headers)
116
+ assert_kind_of status_class, res
117
+ assert_equal @etag, res['ETag']
118
+ case status_class
119
+ when Net::HTTPNotModified : assert_nil res['Last-Modified']
120
+ when Net::HTTPOK : assert_equal @last_modified, res['Last-Modified']
121
+ end
122
+ end
123
+ end
124
+ end
@@ -1,5 +1,25 @@
1
+ # Mongrel Web Server - A Mostly Ruby Webserver and Library
2
+ #
3
+ # Copyright (C) 2005 Zed A. Shaw zedshaw AT zedshaw dot com
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+
1
19
  require 'test/unit'
2
20
  require 'mongrel'
21
+ require 'net/http'
22
+ require File.dirname(__FILE__) + "/testhelp.rb"
3
23
 
4
24
  $test_plugin_fired = 0
5
25
 
@@ -24,43 +44,57 @@ end
24
44
  class ConfiguratorTest < Test::Unit::TestCase
25
45
 
26
46
  def test_base_handler_config
27
- config = Mongrel::Configurator.new :host => "localhost" do
28
- listener :port => 3111 do
29
- # 2 in front should run, but the sentinel shouldn't since dirhandler processes the request
30
- uri "/", :handler => plugin("/handlers/testplugin")
31
- uri "/", :handler => plugin("/handlers/testplugin")
32
- uri "/", :handler => Mongrel::DirHandler.new(".")
33
- uri "/", :handler => plugin("/handlers/testplugin")
34
-
35
- uri "/test", :handler => plugin("/handlers/testplugin")
36
- uri "/test", :handler => plugin("/handlers/testplugin")
37
- uri "/test", :handler => Mongrel::DirHandler.new(".")
38
- uri "/test", :handler => plugin("/handlers/testplugin")
39
- run
47
+ config = nil
48
+
49
+ redirect_test_io do
50
+ config = Mongrel::Configurator.new :host => "localhost" do
51
+ listener :port => 4501 do
52
+ # 2 in front should run, but the sentinel shouldn't since dirhandler processes the request
53
+ uri "/", :handler => plugin("/handlers/testplugin")
54
+ uri "/", :handler => plugin("/handlers/testplugin")
55
+ uri "/", :handler => Mongrel::DirHandler.new(".")
56
+ uri "/", :handler => plugin("/handlers/testplugin")
57
+
58
+ uri "/test", :handler => plugin("/handlers/testplugin")
59
+ uri "/test", :handler => plugin("/handlers/testplugin")
60
+ uri "/test", :handler => Mongrel::DirHandler.new(".")
61
+ uri "/test", :handler => plugin("/handlers/testplugin")
62
+
63
+ debug "/"
64
+ setup_signals
65
+
66
+ run_config(File.dirname(__FILE__) + "/../test/mongrel.conf")
67
+ load_mime_map(File.dirname(__FILE__) + "/../test/mime.yaml")
68
+
69
+ run
70
+ end
40
71
  end
41
72
  end
42
73
 
43
74
 
44
75
  config.listeners.each do |host,listener|
45
- puts "Registered URIs: #{listener.classifier.uris.inspect}"
46
- assert listener.classifier.uris.length == 2, "Wrong number of registered URIs"
76
+ assert listener.classifier.uris.length == 3, "Wrong number of registered URIs"
47
77
  assert listener.classifier.uris.include?("/"), "/ not registered"
48
78
  assert listener.classifier.uris.include?("/test"), "/test not registered"
49
79
  end
50
80
 
51
- res = Net::HTTP.get(URI.parse('http://localhost:3111/test'))
81
+ res = Net::HTTP.get(URI.parse('http://localhost:4501/test'))
52
82
  assert res != nil, "Didn't get a response"
53
83
  assert $test_plugin_fired == 3, "Test filter plugin didn't run 3 times."
54
84
 
85
+ redirect_test_io do
86
+ res = Net::HTTP.get(URI.parse('http://localhost:4501/'))
55
87
 
56
- res = Net::HTTP.get(URI.parse('http://localhost:3111/'))
57
- assert res != nil, "Didn't get a response"
58
- assert $test_plugin_fired == 6, "Test filter plugin didn't run 6 times."
88
+ assert res != nil, "Didn't get a response"
89
+ assert $test_plugin_fired == 6, "Test filter plugin didn't run 6 times."
90
+ end
91
+
92
+ redirect_test_io do
93
+ config.stop
94
+ end
59
95
 
60
- config.stop
61
-
62
96
  assert_raise Errno::EBADF, Errno::ECONNREFUSED do
63
- res = Net::HTTP.get(URI.parse("http://localhost:3111/"))
97
+ res = Net::HTTP.get(URI.parse("http://localhost:4501/"))
64
98
  end
65
99
  end
66
100
 
@@ -1,3 +1,21 @@
1
+ # Mongrel Web Server - A Mostly Ruby Webserver and Library
2
+ #
3
+ # Copyright (C) 2005 Zed A. Shaw zedshaw AT zedshaw dot com
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+
1
19
  require 'fileutils'
2
20
  FileUtils.mkdir_p "log/mongrel_debug"
3
21
 
@@ -22,8 +40,6 @@ class MongrelDbgTest < Test::Unit::TestCase
22
40
  MongrelDbg::end_trace(:rails)
23
41
 
24
42
  assert File.exist?("log/mongrel_debug"), "Didn't make logging directory"
25
- assert File.exist?("log/mongrel_debug/rails.log"), "Didn't make the rails.log file"
26
- assert File.size("log/mongrel_debug/rails.log") > 0, "Didn't write anything to the log."
27
43
  end
28
44
 
29
45
  end
@@ -0,0 +1,105 @@
1
+ # Mongrel Web Server - A Mostly Ruby Webserver and Library
2
+ #
3
+ # Copyright (C) 2005 Zed A. Shaw zedshaw AT zedshaw dot com
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
+
19
+ require 'test/unit'
20
+ require 'net/http'
21
+ require 'mongrel'
22
+ require 'timeout'
23
+ require File.dirname(__FILE__) + "/testhelp.rb"
24
+
25
+ class SimpleHandler < Mongrel::HttpHandler
26
+ def process(request, response)
27
+ response.start do |head,out|
28
+ head["Content-Type"] = "text/html"
29
+ results = "<html><body>Your request:<br /><pre>#{request.params.to_yaml}</pre><a href=\"/files\">View the files.</a></body></html>"
30
+ out << results
31
+ end
32
+ end
33
+ end
34
+
35
+ class DumbHandler < Mongrel::HttpHandler
36
+ def process(request, response)
37
+ response.start do |head,out|
38
+ head["Content-Type"] = "text/html"
39
+ out.write("test")
40
+ end
41
+ end
42
+ end
43
+
44
+ def check_status(results, expecting)
45
+ results.each do |res|
46
+ assert(res.kind_of?(expecting), "Didn't get #{expecting}, got: #{res.class}")
47
+ end
48
+ end
49
+
50
+ class HandlersTest < Test::Unit::TestCase
51
+
52
+ def setup
53
+ stats = Mongrel::StatisticsFilter.new(:sample_rate => 1)
54
+
55
+ @config = Mongrel::Configurator.new :host => '127.0.0.1', :port => 9998 do
56
+ listener do
57
+ uri "/", :handler => SimpleHandler.new
58
+ uri "/", :handler => stats
59
+ uri "/404", :handler => Mongrel::Error404Handler.new("Not found")
60
+ uri "/dumb", :handler => Mongrel::DeflateFilter.new(:always_deflate => true)
61
+ uri "/dumb", :handler => DumbHandler.new, :in_front => true
62
+ uri "/files", :handler => Mongrel::DirHandler.new("doc")
63
+ uri "/files_nodir", :handler => Mongrel::DirHandler.new("doc",listing_allowed=false, index_html="none")
64
+ uri "/status", :handler => Mongrel::StatusHandler.new(:stats_filter => stats)
65
+ end
66
+ end
67
+ @config.run
68
+ end
69
+
70
+ def teardown
71
+ @config.stop
72
+ end
73
+
74
+ def test_more_web_server
75
+ res = hit([ "http://localhost:9998/test",
76
+ "http://localhost:9998/dumb",
77
+ "http://localhost:9998/404",
78
+ "http://localhost:9998/files/rdoc/index.html",
79
+ "http://localhost:9998/files/rdoc/nothere.html",
80
+ "http://localhost:9998/files/rdoc/",
81
+ "http://localhost:9998/files_nodir/rdoc/",
82
+ "http://localhost:9998/status",
83
+ ])
84
+
85
+ check_status res, String
86
+ end
87
+
88
+ def test_deflate_access
89
+ req = Net::HTTP::Get.new("http://localhost:9998/dumb")
90
+ end
91
+
92
+ # TODO: find out why this fails on win32 but nowhere else
93
+ #
94
+ #def test_posting_fails_dirhandler
95
+ # req = Net::HTTP::Post.new("http://localhost:9998/files/rdoc/")
96
+ # req.set_form_data({'from'=>'2005-01-01', 'to'=>'2005-03-31'}, ';')
97
+ # res = hit [["http://localhost:9998/files/rdoc/",req]]
98
+ # check_status res, Net::HTTPNotFound
99
+ #end
100
+
101
+ def test_unregister
102
+ @config.listeners["127.0.0.1:9998"].unregister("/")
103
+ end
104
+ end
105
+