IOWA 1.0.0

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 (502) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTORS +14 -0
  3. data/README.md +23 -0
  4. data/RELEASE_NOTES +77 -0
  5. data/ToDo +21 -0
  6. data/components/CRUDList/CRUDList.html +13 -0
  7. data/components/CRUDList/CRUDList.iwa +136 -0
  8. data/components/Content/Content.html +0 -0
  9. data/components/Content/Content.iwa +143 -0
  10. data/components/Content/example/README +9 -0
  11. data/components/Content/example/cgi/iowa.cgi +10 -0
  12. data/components/Content/example/demo.rb +30 -0
  13. data/components/Content/example/doc/index.html +7 -0
  14. data/components/Content/example/iowa/Content.html +1 -0
  15. data/components/Content/example/iowa/Content.iwa +1 -0
  16. data/components/Content/example/iowa/Main.html +6 -0
  17. data/components/Content/example/iowa/Main.iwa +3 -0
  18. data/components/Content/example/iowa/_content/body +7 -0
  19. data/components/Content/example/iowa/_content/body2 +3 -0
  20. data/components/Content/example/iowa/_content/title +2 -0
  21. data/components/Content/example/iowa/app.cnf +8 -0
  22. data/components/Content/example/iowa/app.rb +8 -0
  23. data/components/Content/example/webrick.rb +38 -0
  24. data/components/Include/Include.html +1 -0
  25. data/components/Include/Include.iwa +30 -0
  26. data/components/Include/readme +5 -0
  27. data/components/JumpTo/JumpTo.html +8 -0
  28. data/components/JumpTo/JumpTo.iwa +8 -0
  29. data/components/JumpTo/readme +6 -0
  30. data/doc/Architecture.txt +6 -0
  31. data/doc/History.txt +33 -0
  32. data/doc/StandardDispatcher.txt +19 -0
  33. data/examples/blog/README +1 -0
  34. data/examples/hello_world/README +17 -0
  35. data/examples/hello_world/htdocs/hello_world_html.html +24 -0
  36. data/examples/hello_world/htdocs/hello_world_ruby.html +41 -0
  37. data/examples/hello_world/iowa/HelloWorld.html +14 -0
  38. data/examples/hello_world/iowa/HelloWorld.iwa +31 -0
  39. data/examples/hello_world/iowa/Index.html +16 -0
  40. data/examples/hello_world/iowa/Index.iwa +5 -0
  41. data/examples/hello_world/iowa/iowa_hello_world.cnf +19 -0
  42. data/examples/hello_world/iowa/iowa_hello_world.rb +5 -0
  43. data/examples/hello_world/iowa/mapfile.cnf +6 -0
  44. data/examples/hw1/iowa/Main.html +1 -0
  45. data/examples/hw1/iowa/README +9 -0
  46. data/examples/hw1/iowa/hw.rb +4 -0
  47. data/examples/hw2/iowa/Main.html +10 -0
  48. data/examples/hw2/iowa/Main.iwa +7 -0
  49. data/examples/hw2/iowa/README +16 -0
  50. data/examples/hw2/iowa/hw.rb +4 -0
  51. data/examples/hw3/iowa/Main.html +11 -0
  52. data/examples/hw3/iowa/Main.iwa +7 -0
  53. data/examples/hw3/iowa/README +22 -0
  54. data/examples/hw3/iowa/hw.rb +4 -0
  55. data/examples/hw4/iowa/Greetings.html +10 -0
  56. data/examples/hw4/iowa/Greetings.iwa +9 -0
  57. data/examples/hw4/iowa/Main.html +12 -0
  58. data/examples/hw4/iowa/Main.iwa +10 -0
  59. data/examples/hw4/iowa/README +28 -0
  60. data/examples/hw4/iowa/hw.rb +4 -0
  61. data/examples/hw5/iowa/Footer.html +2 -0
  62. data/examples/hw5/iowa/Greetings.html +4 -0
  63. data/examples/hw5/iowa/Greetings.iwa +12 -0
  64. data/examples/hw5/iowa/Header.html +6 -0
  65. data/examples/hw5/iowa/Main.html +12 -0
  66. data/examples/hw5/iowa/Main.iwa +13 -0
  67. data/examples/hw5/iowa/README +16 -0
  68. data/examples/hw5/iowa/hw.rb +4 -0
  69. data/examples/template_server/iowa/Content.iwa +121 -0
  70. data/examples/template_server/iowa/Content.view +0 -0
  71. data/examples/template_server/iowa/DBContentDispatcher.rb +112 -0
  72. data/examples/template_server/iowa/DBContentPage.html +3 -0
  73. data/examples/template_server/iowa/DBContentPage.iwa +85 -0
  74. data/examples/template_server/iowa/app.cnf +13 -0
  75. data/examples/template_server/iowa/app.rb +5 -0
  76. data/ext/Classifier/classifier.c +256 -0
  77. data/ext/Classifier/ext_help.h +14 -0
  78. data/ext/Classifier/extconf.rb +5 -0
  79. data/ext/Classifier/tst.h +40 -0
  80. data/ext/Classifier/tst_cleanup.c +24 -0
  81. data/ext/Classifier/tst_delete.c +146 -0
  82. data/ext/Classifier/tst_grow_node_free_list.c +38 -0
  83. data/ext/Classifier/tst_init.c +41 -0
  84. data/ext/Classifier/tst_insert.c +192 -0
  85. data/ext/Classifier/tst_search.c +68 -0
  86. data/ext/http11/README +11 -0
  87. data/ext/http11/ext_help.h +15 -0
  88. data/ext/http11/extconf.rb +5 -0
  89. data/ext/http11/http11.c +534 -0
  90. data/ext/http11/http11.c.dif +422 -0
  91. data/ext/http11/http11_parser.c +1243 -0
  92. data/ext/http11/http11_parser.c.dif +193 -0
  93. data/ext/http11/http11_parser.h +49 -0
  94. data/ext/http11/http11_parser.h.dif +20 -0
  95. data/ext/http11/http11_parser.rl +192 -0
  96. data/ext/httpmachine/Makefile +149 -0
  97. data/ext/httpmachine/extconf.rb +33 -0
  98. data/ext/httpmachine/http.cpp +430 -0
  99. data/ext/httpmachine/http.h +156 -0
  100. data/ext/httpmachine/rubyhttp.cpp +165 -0
  101. data/external/mime-types/LICENCE +18 -0
  102. data/external/mime-types/README +46 -0
  103. data/external/mime-types/doc/classes/MIME.html +120 -0
  104. data/external/mime-types/doc/classes/MIME/InvalidContentType.html +119 -0
  105. data/external/mime-types/doc/classes/MIME/Type.html +866 -0
  106. data/external/mime-types/doc/classes/MIME/Type.src/M000010.html +22 -0
  107. data/external/mime-types/doc/classes/MIME/Type.src/M000011.html +18 -0
  108. data/external/mime-types/doc/classes/MIME/Type.src/M000012.html +19 -0
  109. data/external/mime-types/doc/classes/MIME/Type.src/M000013.html +18 -0
  110. data/external/mime-types/doc/classes/MIME/Type.src/M000014.html +26 -0
  111. data/external/mime-types/doc/classes/MIME/Type.src/M000015.html +33 -0
  112. data/external/mime-types/doc/classes/MIME/Type.src/M000016.html +27 -0
  113. data/external/mime-types/doc/classes/MIME/Type.src/M000017.html +35 -0
  114. data/external/mime-types/doc/classes/MIME/Type.src/M000018.html +34 -0
  115. data/external/mime-types/doc/classes/MIME/Type.src/M000019.html +24 -0
  116. data/external/mime-types/doc/classes/MIME/Type.src/M000020.html +38 -0
  117. data/external/mime-types/doc/classes/MIME/Type.src/M000021.html +22 -0
  118. data/external/mime-types/doc/classes/MIME/Type.src/M000022.html +18 -0
  119. data/external/mime-types/doc/classes/MIME/Type.src/M000023.html +18 -0
  120. data/external/mime-types/doc/classes/MIME/Type.src/M000024.html +18 -0
  121. data/external/mime-types/doc/classes/MIME/Type.src/M000025.html +18 -0
  122. data/external/mime-types/doc/classes/MIME/Type.src/M000026.html +18 -0
  123. data/external/mime-types/doc/classes/MIME/Type.src/M000027.html +18 -0
  124. data/external/mime-types/doc/classes/MIME/Type.src/M000028.html +18 -0
  125. data/external/mime-types/doc/classes/MIME/Type.src/M000029.html +18 -0
  126. data/external/mime-types/doc/classes/MIME/Type.src/M000030.html +19 -0
  127. data/external/mime-types/doc/classes/MIME/Type.src/M000031.html +26 -0
  128. data/external/mime-types/doc/classes/MIME/Types.html +459 -0
  129. data/external/mime-types/doc/classes/MIME/Types.src/M000001.html +19 -0
  130. data/external/mime-types/doc/classes/MIME/Types.src/M000002.html +32 -0
  131. data/external/mime-types/doc/classes/MIME/Types.src/M000003.html +21 -0
  132. data/external/mime-types/doc/classes/MIME/Types.src/M000004.html +18 -0
  133. data/external/mime-types/doc/classes/MIME/Types.src/M000005.html +26 -0
  134. data/external/mime-types/doc/classes/MIME/Types.src/M000006.html +18 -0
  135. data/external/mime-types/doc/classes/MIME/Types.src/M000007.html +18 -0
  136. data/external/mime-types/doc/classes/MIME/Types.src/M000008.html +18 -0
  137. data/external/mime-types/doc/classes/MIME/Types.src/M000009.html +18 -0
  138. data/external/mime-types/doc/created.rid +1 -0
  139. data/external/mime-types/doc/files/ChangeLog.html +320 -0
  140. data/external/mime-types/doc/files/README.html +145 -0
  141. data/external/mime-types/doc/files/lib/mime/types_rb.html +101 -0
  142. data/external/mime-types/doc/fr_class_index.html +30 -0
  143. data/external/mime-types/doc/fr_file_index.html +29 -0
  144. data/external/mime-types/doc/fr_method_index.html +57 -0
  145. data/external/mime-types/doc/index.html +24 -0
  146. data/external/mime-types/doc/rdoc-style.css +208 -0
  147. data/external/mime-types/lib/mime/types.rb +1558 -0
  148. data/external/package.rb +672 -0
  149. data/external/test_support.rb +95 -0
  150. data/external/tmail/README +7 -0
  151. data/external/tmail/tmail.rb +4 -0
  152. data/external/tmail/tmail/address.rb +222 -0
  153. data/external/tmail/tmail/base64.rb +52 -0
  154. data/external/tmail/tmail/compat.rb +39 -0
  155. data/external/tmail/tmail/config.rb +50 -0
  156. data/external/tmail/tmail/encode.rb +447 -0
  157. data/external/tmail/tmail/header.rb +895 -0
  158. data/external/tmail/tmail/info.rb +14 -0
  159. data/external/tmail/tmail/loader.rb +1 -0
  160. data/external/tmail/tmail/mail.rb +869 -0
  161. data/external/tmail/tmail/mailbox.rb +386 -0
  162. data/external/tmail/tmail/mbox.rb +1 -0
  163. data/external/tmail/tmail/net.rb +260 -0
  164. data/external/tmail/tmail/obsolete.rb +123 -0
  165. data/external/tmail/tmail/parser.rb +1475 -0
  166. data/external/tmail/tmail/parser.y +372 -0
  167. data/external/tmail/tmail/port.rb +356 -0
  168. data/external/tmail/tmail/scanner.rb +17 -0
  169. data/external/tmail/tmail/scanner_r.rb +243 -0
  170. data/external/tmail/tmail/stringio.rb +256 -0
  171. data/external/tmail/tmail/textutils.rb +197 -0
  172. data/external/tmail/tmail/tmail.rb +1 -0
  173. data/external/tmail/tmail/utils.rb +23 -0
  174. data/external/win32-process/README +133 -0
  175. data/external/win32-process/lib/win32/process.rb +561 -0
  176. data/external/windows-pr/README +145 -0
  177. data/external/windows-pr/doc/conversion_guide.txt +25 -0
  178. data/external/windows-pr/lib/windows/clipboard.rb +72 -0
  179. data/external/windows-pr/lib/windows/console.rb +323 -0
  180. data/external/windows-pr/lib/windows/device_io.rb +88 -0
  181. data/external/windows-pr/lib/windows/directory.rb +80 -0
  182. data/external/windows-pr/lib/windows/error.rb +313 -0
  183. data/external/windows-pr/lib/windows/eventlog.rb +120 -0
  184. data/external/windows-pr/lib/windows/file.rb +349 -0
  185. data/external/windows-pr/lib/windows/filesystem.rb +16 -0
  186. data/external/windows-pr/lib/windows/handle.rb +31 -0
  187. data/external/windows-pr/lib/windows/library.rb +76 -0
  188. data/external/windows-pr/lib/windows/limits.rb +13 -0
  189. data/external/windows-pr/lib/windows/memory.rb +117 -0
  190. data/external/windows-pr/lib/windows/msvcrt/buffer.rb +48 -0
  191. data/external/windows-pr/lib/windows/msvcrt/file.rb +18 -0
  192. data/external/windows-pr/lib/windows/msvcrt/string.rb +46 -0
  193. data/external/windows-pr/lib/windows/national.rb +557 -0
  194. data/external/windows-pr/lib/windows/path.rb +296 -0
  195. data/external/windows-pr/lib/windows/pipe.rb +77 -0
  196. data/external/windows-pr/lib/windows/process.rb +171 -0
  197. data/external/windows-pr/lib/windows/registry.rb +238 -0
  198. data/external/windows-pr/lib/windows/security.rb +89 -0
  199. data/external/windows-pr/lib/windows/service.rb +183 -0
  200. data/external/windows-pr/lib/windows/shell.rb +88 -0
  201. data/external/windows-pr/lib/windows/sound.rb +52 -0
  202. data/external/windows-pr/lib/windows/synchronize.rb +161 -0
  203. data/external/windows-pr/lib/windows/system_info.rb +70 -0
  204. data/external/windows-pr/lib/windows/unicode.rb +138 -0
  205. data/external/windows-pr/lib/windows/window.rb +22 -0
  206. data/iowa.gemspec +45 -0
  207. data/microprojects/DiskCache/LICENSE +28 -0
  208. data/microprojects/DiskCache/README +17 -0
  209. data/microprojects/DiskCache/external/package.rb +608 -0
  210. data/microprojects/DiskCache/external/test_support.rb +8 -0
  211. data/microprojects/DiskCache/setup.rb +22 -0
  212. data/microprojects/DiskCache/src/iowa/Association.rb +67 -0
  213. data/microprojects/DiskCache/src/iowa/Constants.rb +159 -0
  214. data/microprojects/DiskCache/src/iowa/DiskStore.rb +377 -0
  215. data/microprojects/DiskCache/src/iowa/Hash.rb +63 -0
  216. data/microprojects/DiskCache/src/iowa/Lockfile.rb +575 -0
  217. data/microprojects/DiskCache/src/iowa/Mutex.rb +142 -0
  218. data/microprojects/DiskCache/src/iowa/caches/DiskCache.rb +605 -0
  219. data/microprojects/DiskCache/src/iowa/caches/LRUCache.rb +287 -0
  220. data/microprojects/DiskCache/test/TC_DiskCache.rb +218 -0
  221. data/microprojects/LRUCache/LICENSE +28 -0
  222. data/microprojects/LRUCache/README +13 -0
  223. data/microprojects/LRUCache/external/package.rb +608 -0
  224. data/microprojects/LRUCache/external/test_support.rb +8 -0
  225. data/microprojects/LRUCache/setup.rb +22 -0
  226. data/microprojects/LRUCache/src/iowa/Association.rb +57 -0
  227. data/microprojects/LRUCache/src/iowa/Constants.rb +159 -0
  228. data/microprojects/LRUCache/src/iowa/Hash.rb +63 -0
  229. data/microprojects/LRUCache/src/iowa/Mutex.rb +129 -0
  230. data/microprojects/LRUCache/src/iowa/caches/LRUCache.rb +287 -0
  231. data/microprojects/LRUCache/test/TC_LRUCache.rb +65 -0
  232. data/microprojects/LinkedList/LICENSE +28 -0
  233. data/microprojects/LinkedList/README +13 -0
  234. data/microprojects/LinkedList/external/package.rb +608 -0
  235. data/microprojects/LinkedList/external/test_support.rb +8 -0
  236. data/microprojects/LinkedList/setup.rb +22 -0
  237. data/microprojects/LinkedList/src/iowa/LinkedList.rb +165 -0
  238. data/microprojects/LinkedList/test/TC_LinkedList.rb +42 -0
  239. data/microprojects/README +8 -0
  240. data/setup.rb +116 -0
  241. data/share/iowa/app_skeleton/Main.html +8 -0
  242. data/share/iowa/app_skeleton/Main.iwa +15 -0
  243. data/share/iowa/app_skeleton/app.cnf +48 -0
  244. data/share/iowa/app_skeleton/app.rb +58 -0
  245. data/share/iowa/app_skeleton/models/model.rb +49 -0
  246. data/src/ihc.rb +223 -0
  247. data/src/iowa.cgi +29 -0
  248. data/src/iowa.rb +637 -0
  249. data/src/iowa/AbstractCache.rb +96 -0
  250. data/src/iowa/AcceptLanguage.rb +76 -0
  251. data/src/iowa/Application.rb +928 -0
  252. data/src/iowa/ApplicationStats.rb +72 -0
  253. data/src/iowa/Association.rb +67 -0
  254. data/src/iowa/BindingsParser.rb +62 -0
  255. data/src/iowa/Breakpoint.rb +273 -0
  256. data/src/iowa/CSS.rb +564 -0
  257. data/src/iowa/Client.rb +192 -0
  258. data/src/iowa/Component.rb +405 -0
  259. data/src/iowa/ComponentProxy.rb +26 -0
  260. data/src/iowa/Config.rb +21 -0
  261. data/src/iowa/Constants.rb +226 -0
  262. data/src/iowa/Context.rb +218 -0
  263. data/src/iowa/ContextLogger.rb +16 -0
  264. data/src/iowa/DbPool.rb +222 -0
  265. data/src/iowa/DetachedComponent.rb +18 -0
  266. data/src/iowa/Dispatcher.rb +27 -0
  267. data/src/iowa/DynamicElements.rb +471 -0
  268. data/src/iowa/Element.rb +100 -0
  269. data/src/iowa/Email.rb +287 -0
  270. data/src/iowa/Extensions/AllExtensions.rb +4 -0
  271. data/src/iowa/Extensions/Class.rb +94 -0
  272. data/src/iowa/Extensions/Date.rb +88 -0
  273. data/src/iowa/Extensions/DateTime.rb +88 -0
  274. data/src/iowa/Extensions/Hash.rb +22 -0
  275. data/src/iowa/Extensions/Kernel.rb +6 -0
  276. data/src/iowa/Extensions/Numeric.rb +47 -0
  277. data/src/iowa/Extensions/Object.rb +11 -0
  278. data/src/iowa/Extensions/String.rb +60 -0
  279. data/src/iowa/Extensions/Time.rb +89 -0
  280. data/src/iowa/Extensions/TimeExtensions.rb +6 -0
  281. data/src/iowa/Form.rb +368 -0
  282. data/src/iowa/Hash.rb +85 -0
  283. data/src/iowa/ISAAC.rb +175 -0
  284. data/src/iowa/ImageSize.rb +279 -0
  285. data/src/iowa/IowaComponentMixins.rb +7 -0
  286. data/src/iowa/JSON-lexer.rb +296 -0
  287. data/src/iowa/JSON-objects.rb +201 -0
  288. data/src/iowa/KeyValueCoding.rb +91 -0
  289. data/src/iowa/LinkedList.rb +175 -0
  290. data/src/iowa/Loader.rb +22 -0
  291. data/src/iowa/Lockfile.rb +575 -0
  292. data/src/iowa/Logger.rb +74 -0
  293. data/src/iowa/Monkey.rb +20 -0
  294. data/src/iowa/Mutex.rb +142 -0
  295. data/src/iowa/Policy.rb +70 -0
  296. data/src/iowa/Pool.rb +243 -0
  297. data/src/iowa/PrettyException.rb +1091 -0
  298. data/src/iowa/Request.rb +244 -0
  299. data/src/iowa/Response.rb +133 -0
  300. data/src/iowa/Session.rb +354 -0
  301. data/src/iowa/SessionStats.rb +78 -0
  302. data/src/iowa/String.rb +65 -0
  303. data/src/iowa/Tag.rb +101 -0
  304. data/src/iowa/TemplateParser.rb +236 -0
  305. data/src/iowa/Util.rb +314 -0
  306. data/src/iowa/Webcache.rb +122 -0
  307. data/src/iowa/caches/BiLevelCache.rb +65 -0
  308. data/src/iowa/caches/ClassLimitedCache.rb +67 -0
  309. data/src/iowa/caches/DiskCache.rb +609 -0
  310. data/src/iowa/caches/DiskStore.rb +380 -0
  311. data/src/iowa/caches/LRUCache-alternative.rb +155 -0
  312. data/src/iowa/caches/LRUCache.rb +290 -0
  313. data/src/iowa/caches/SimpleLRUCache.rb +112 -0
  314. data/src/iowa/dispatchers/StandardDispatcher.rb +396 -0
  315. data/src/iowa/dispatchers/StandardDispatcherWithClassifier.rb +93 -0
  316. data/src/iowa/js/iowa_jsonrpc.js +381 -0
  317. data/src/iowa/js/jsonrpc.js +187 -0
  318. data/src/iowa/js/jsonrpc_async.js +261 -0
  319. data/src/iowa/loaders/DiskLoader.rb +50 -0
  320. data/src/iowa/loggers/Analogger.rb +54 -0
  321. data/src/iowa/loggers/AsyncLogger.rb +54 -0
  322. data/src/iowa/loggers/BitBucket.rb +38 -0
  323. data/src/iowa/loggers/Log4R.rb +13 -0
  324. data/src/iowa/loggers/Log4rLogger.rb +48 -0
  325. data/src/iowa/loggers/Logger.rb +29 -0
  326. data/src/iowa/loggers/RubyLogger.rb +9 -0
  327. data/src/iowa/pools/DBConnectionPool.rb +53 -0
  328. data/src/iowa/request/Apache.rb +90 -0
  329. data/src/iowa/request/EMHybrid.rb +59 -0
  330. data/src/iowa/request/ENV.rb +80 -0
  331. data/src/iowa/request/FCGI.rb +68 -0
  332. data/src/iowa/request/HTTPMachine.rb +75 -0
  333. data/src/iowa/request/Mongrel.rb +68 -0
  334. data/src/iowa/request/WEBrick.rb +48 -0
  335. data/src/iowa/version.rb +3 -0
  336. data/src/iowa/webrick/HTTPServer.rb +43 -0
  337. data/src/iowa/webrick/WEBrickServlet.rb +28 -0
  338. data/src/iowa_fcgi_handler.rb +101 -0
  339. data/src/iowa_httpmachine.rb +141 -0
  340. data/src/iowa_hybrid.rb +193 -0
  341. data/src/iowa_hybrid_cluster.rb +231 -0
  342. data/src/iowa_mongrel.rb +136 -0
  343. data/src/iowa_webrick.rb +194 -0
  344. data/src/iowa_webrick_legacy.rb +104 -0
  345. data/src/mod_iowa.rb +104 -0
  346. data/tcss.rb +61 -0
  347. data/test/README.windows +12 -0
  348. data/test/TC_AcceptLanguage.rb +61 -0
  349. data/test/TC_AppConfig.rb +43 -0
  350. data/test/TC_AppConfig/cgi/iowa.cgi +7 -0
  351. data/test/TC_AppConfig/doc/index.html +1 -0
  352. data/test/TC_AppConfig/iowa/Main.html +4 -0
  353. data/test/TC_AppConfig/iowa/Main.iwa +17 -0
  354. data/test/TC_AppConfig/iowa/README +1 -0
  355. data/test/TC_AppConfig/iowa/app.cnf +19 -0
  356. data/test/TC_AppConfig/iowa/app.rb +8 -0
  357. data/test/TC_AppConfig/webrick.rb +38 -0
  358. data/test/TC_Association.rb +29 -0
  359. data/test/TC_BiLevelCache.rb +71 -0
  360. data/test/TC_CGI_Adaptor.rb +55 -0
  361. data/test/TC_CGI_Adaptor/cgi/iowa.cgi +7 -0
  362. data/test/TC_CGI_Adaptor/doc/index.html +1 -0
  363. data/test/TC_CGI_Adaptor/iowa/Main.html +8 -0
  364. data/test/TC_CGI_Adaptor/iowa/Main.iwa +14 -0
  365. data/test/TC_CGI_Adaptor/iowa/README +1 -0
  366. data/test/TC_CGI_Adaptor/iowa/app.cnf +8 -0
  367. data/test/TC_CGI_Adaptor/iowa/app.rb +8 -0
  368. data/test/TC_CGI_Adaptor/webrick.rb +38 -0
  369. data/test/TC_CSS.rb +660 -0
  370. data/test/TC_ClassLimitedCache.rb +89 -0
  371. data/test/TC_Classifier.rb +80 -0
  372. data/test/TC_DbPool.rb +127 -0
  373. data/test/TC_DiskCache.rb +218 -0
  374. data/test/TC_Hybrid.rb +58 -0
  375. data/test/TC_Hybrid/doc/thing.txt +1 -0
  376. data/test/TC_Hybrid/iowa/Main.html +3 -0
  377. data/test/TC_Hybrid/iowa/Main.iwa +7 -0
  378. data/test/TC_Hybrid/iowa/NewPage.html +1 -0
  379. data/test/TC_Hybrid/iowa/NewPage.iwa +5 -0
  380. data/test/TC_Hybrid/iowa/app.cnf +10 -0
  381. data/test/TC_Hybrid/iowa/app.rb +5 -0
  382. data/test/TC_IOWAFunctions/doc/Ajax1.html +1 -0
  383. data/test/TC_IOWAFunctions/doc/Ajax1.iwa +1 -0
  384. data/test/TC_IOWAFunctions/doc/index.html +1 -0
  385. data/test/TC_IOWAFunctions/doc/js/dojo.js +9686 -0
  386. data/test/TC_IOWAFunctions/iowa/Ajax1.html +40 -0
  387. data/test/TC_IOWAFunctions/iowa/Ajax1.iwa +23 -0
  388. data/test/TC_IOWAFunctions/iowa/AjaxWidget.iwa +19 -0
  389. data/test/TC_IOWAFunctions/iowa/AjaxWidget.view +22 -0
  390. data/test/TC_IOWAFunctions/iowa/DanielTest.html +9 -0
  391. data/test/TC_IOWAFunctions/iowa/DanielTest.iwa +10 -0
  392. data/test/TC_IOWAFunctions/iowa/IntervalWidget.html +1 -0
  393. data/test/TC_IOWAFunctions/iowa/IntervalWidget.iwa +14 -0
  394. data/test/TC_IOWAFunctions/iowa/Main.html +1 -0
  395. data/test/TC_IOWAFunctions/iowa/NestedRepeat1.html +12 -0
  396. data/test/TC_IOWAFunctions/iowa/NestedRepeat1.iwa +24 -0
  397. data/test/TC_IOWAFunctions/iowa/RPCResponse.iwa +7 -0
  398. data/test/TC_IOWAFunctions/iowa/RPCResponse.view +1 -0
  399. data/test/TC_IOWAFunctions/iowa/Repeat1.iwa +31 -0
  400. data/test/TC_IOWAFunctions/iowa/Repeat1.view +9 -0
  401. data/test/TC_IOWAFunctions/iowa/Repeat2.iwa +32 -0
  402. data/test/TC_IOWAFunctions/iowa/Repeat2.view +11 -0
  403. data/test/TC_IOWAFunctions/iowa/Repeat3.iwa +44 -0
  404. data/test/TC_IOWAFunctions/iowa/Repeat3.view +18 -0
  405. data/test/TC_IOWAFunctions/iowa/TesCon.html +1 -0
  406. data/test/TC_IOWAFunctions/iowa/TesCon.iwa +5 -0
  407. data/test/TC_IOWAFunctions/iowa/app.cnf +19 -0
  408. data/test/TC_IOWAFunctions/iowa/app.rb +9 -0
  409. data/test/TC_IOWAFunctions/iowa/mapfile.cnf +8 -0
  410. data/test/TC_ISAAC.rb +52 -0
  411. data/test/TC_ImageSize.rb +84 -0
  412. data/test/TC_ImageSize/img.bmp +0 -0
  413. data/test/TC_ImageSize/img.gif +0 -0
  414. data/test/TC_ImageSize/img.jpg +0 -0
  415. data/test/TC_ImageSize/img.pcx +0 -0
  416. data/test/TC_ImageSize/img.pgm +7144 -0
  417. data/test/TC_ImageSize/img.png +0 -0
  418. data/test/TC_ImageSize/img.ppm +0 -0
  419. data/test/TC_ImageSize/img.psd +0 -0
  420. data/test/TC_ImageSize/img.tiff +0 -0
  421. data/test/TC_ImageSize/img.xbm +22 -0
  422. data/test/TC_KeyValueCoding.rb +35 -0
  423. data/test/TC_LRUCache.rb +296 -0
  424. data/test/TC_LinkedList.rb +46 -0
  425. data/test/TC_Lockfile.rb +106 -0
  426. data/test/TC_Minimal.rb +45 -0
  427. data/test/TC_Minimal/app.cnf +8 -0
  428. data/test/TC_Minimal/cgi-bin/iowa.cgi +11 -0
  429. data/test/TC_Minimal/doc/index.html +1 -0
  430. data/test/TC_Minimal/iowa/Main.html +1 -0
  431. data/test/TC_Minimal/iowa/README +1 -0
  432. data/test/TC_Minimal/iowa/app.rb +3 -0
  433. data/test/TC_Minimal/webrick.rb +38 -0
  434. data/test/TC_Mongrel.rb +58 -0
  435. data/test/TC_Mongrel/doc/thing.txt +1 -0
  436. data/test/TC_Mongrel/iowa/Main.html +3 -0
  437. data/test/TC_Mongrel/iowa/Main.iwa +7 -0
  438. data/test/TC_Mongrel/iowa/NewPage.html +1 -0
  439. data/test/TC_Mongrel/iowa/NewPage.iwa +5 -0
  440. data/test/TC_Mongrel/iowa/app.cnf +10 -0
  441. data/test/TC_Mongrel/iowa/app.rb +5 -0
  442. data/test/TC_NoSubclass.rb +56 -0
  443. data/test/TC_NoSubclass/cgi/iowa.cgi +7 -0
  444. data/test/TC_NoSubclass/doc/index.html +1 -0
  445. data/test/TC_NoSubclass/iowa/Main.html +8 -0
  446. data/test/TC_NoSubclass/iowa/Main.iwa +14 -0
  447. data/test/TC_NoSubclass/iowa/README +1 -0
  448. data/test/TC_NoSubclass/iowa/app.cnf +8 -0
  449. data/test/TC_NoSubclass/iowa/app.rb +5 -0
  450. data/test/TC_NoSubclass/webrick.rb +38 -0
  451. data/test/TC_Pool.rb +139 -0
  452. data/test/TC_RenderedCache/doc/thing.txt +1 -0
  453. data/test/TC_RenderedCache/iowa/BigPage.html +1 -0
  454. data/test/TC_RenderedCache/iowa/BigPage.iwa +12 -0
  455. data/test/TC_RenderedCache/iowa/Main.html +3 -0
  456. data/test/TC_RenderedCache/iowa/Main.iwa +7 -0
  457. data/test/TC_RenderedCache/iowa/NewPage.html +1 -0
  458. data/test/TC_RenderedCache/iowa/NewPage.iwa +11 -0
  459. data/test/TC_RenderedCache/iowa/app.cnf +13 -0
  460. data/test/TC_RenderedCache/iowa/app.rb +5 -0
  461. data/test/TC_RenderedCache/iowa/mapfile.map +4 -0
  462. data/test/TC_ResourceURL.rb +73 -0
  463. data/test/TC_ResourceURL/iowa/Main.html +2 -0
  464. data/test/TC_ResourceURL/iowa/Main.iwa +10 -0
  465. data/test/TC_ResourceURL/iowa/app.cnf +10 -0
  466. data/test/TC_ResourceURL/iowa/app.rb +5 -0
  467. data/test/TC_SimpleDetached.rb +41 -0
  468. data/test/TC_StandardDispatcher.rb +362 -0
  469. data/test/TC_StandardDispatcherWithClassifier.rb +358 -0
  470. data/test/TC_String.rb +24 -0
  471. data/test/TC_Tag.rb +41 -0
  472. data/test/TC_Webrick.rb +56 -0
  473. data/test/TC_Webrick/doc/thing.txt +1 -0
  474. data/test/TC_Webrick/iowa/Main.html +3 -0
  475. data/test/TC_Webrick/iowa/Main.iwa +7 -0
  476. data/test/TC_Webrick/iowa/NewPage.html +1 -0
  477. data/test/TC_Webrick/iowa/NewPage.iwa +5 -0
  478. data/test/TC_Webrick/iowa/app.cnf +10 -0
  479. data/test/TC_Webrick/iowa/app.rb +5 -0
  480. data/test/tc_template.rb +15 -0
  481. data/test/tests.conf +19 -0
  482. data/utils/CVS/Entries +3 -0
  483. data/utils/CVS/Repository +1 -0
  484. data/utils/CVS/Root +1 -0
  485. data/utils/QuickCert-1.0.2.tar.gz +0 -0
  486. data/utils/QuickCert-1.0.2/InstalledFiles +7 -0
  487. data/utils/QuickCert-1.0.2/MANIFEST +10 -0
  488. data/utils/QuickCert-1.0.2/Makefile +15 -0
  489. data/utils/QuickCert-1.0.2/README +56 -0
  490. data/utils/QuickCert-1.0.2/bin/QuickCert +355 -0
  491. data/utils/QuickCert-1.0.2/config.save +12 -0
  492. data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/README +60 -0
  493. data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/drbssl_c.rb +26 -0
  494. data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/drbssl_s.rb +35 -0
  495. data/utils/QuickCert-1.0.2/data/examples/ruby/QuickCert/qc_config +21 -0
  496. data/utils/QuickCert-1.0.2/lib/QuickCert/defaults.rb +28 -0
  497. data/utils/QuickCert-1.0.2/setup.rb +1312 -0
  498. data/utils/iowa_apps +422 -0
  499. data/utils/smtp_sink.rb +9 -0
  500. data/utils/startup_template.cnf +27 -0
  501. data/utils/startup_template.rb +73 -0
  502. metadata +551 -0
@@ -0,0 +1,89 @@
1
+ require 'test/unit'
2
+ require 'external/test_support'
3
+ IWATestSupport.set_src_dir
4
+ require 'iowa/caches/ClassLimitedCache'
5
+
6
+ class FooClass
7
+ def self.max_cache_entries; 2; end
8
+ end
9
+
10
+ class BarClass
11
+ def self.max_cache_entries; 1; end
12
+ end
13
+
14
+ class TC_ClassLimitedCache < Test::Unit::TestCase
15
+ @cache
16
+
17
+ @@testdir = IWATestSupport.test_dir(__FILE__)
18
+
19
+ def setup
20
+ IWATestSupport.announce(:classlimitedcache,"Iowa::Caches::ClassLimitedCache")
21
+ Dir.chdir(@@testdir)
22
+ end
23
+
24
+ def test_creation
25
+ assert_nothing_raised("Failed while creating an Iowa::Caches::ClassLimitedCache object") do
26
+ @cache = Iowa::Caches::ClassLimitedCache.new({:maxsize => 12})
27
+ end
28
+ end
29
+
30
+ def test_cache_size
31
+ @cache = Iowa::Caches::ClassLimitedCache.new({:maxsize => 12})
32
+ (1..14).each {|n| @cache[n] = n}
33
+ s = @cache.size
34
+ assert_equal(12,s,"The expected size (12) did not match the returned size (#{s}).")
35
+ end
36
+
37
+ def test_cache_size2
38
+ @cache = Iowa::Caches::ClassLimitedCache.new({:maxsize => 12})
39
+ (1..14).each {|n| @cache[n] = n}
40
+ @cache.size=3
41
+ s = @cache.size
42
+ assert_equal(3,s,"The cache size does not appear to to have change as expected; want size of 3, have size of #{s}.")
43
+ end
44
+
45
+ def test_values
46
+ @cache = Iowa::Caches::ClassLimitedCache.new({:maxsize => 3})
47
+ @cache['a'] = 1
48
+ @cache['b'] = 2
49
+ @cache['c'] = 3
50
+ s = @cache['b']
51
+ assert_equal(2,s,"The value retrieved from the cache (#{s}) did not match what was expected (2).")
52
+ end
53
+
54
+ def test_expire1
55
+ @cache = Iowa::Caches::ClassLimitedCache.new({:maxsize => 3})
56
+ @cache['a'] = 1
57
+ @cache['b'] = 2
58
+ @cache['c'] = 3
59
+ s = @cache['b']
60
+ @cache['d'] = 4
61
+ s = true
62
+ s = false if @cache.include? 'a'
63
+ assert_equal(true,s,"Key 'a' should have fallen out of the cache. It did not.")
64
+ end
65
+
66
+ def test_expire2
67
+ @cache = Iowa::Caches::ClassLimitedCache.new({:maxsize => 3})
68
+ @cache['a'] = 1
69
+ @cache['b'] = 2
70
+ @cache['c'] = 3
71
+ s = @cache['b']
72
+ @cache['d'] = 4
73
+ s = false
74
+ s = true if @cache.include? 'b'
75
+ assert_equal(true,s,"Key 'b' appears to have fallen out of the cache. It should not have.")
76
+ end
77
+
78
+ def test_class_limits
79
+ @cache = Iowa::Caches::ClassLimitedCache.new({:maxsize => 10})
80
+ @cache[:a] = FooClass.new
81
+ @cache[:b] = FooClass.new
82
+ @cache[:c] = FooClass.new
83
+ @cache[:d] = BarClass.new
84
+ @cache[:e] = BarClass.new
85
+ assert_equal([:e, :c, :b],@cache.queue,"Queue for the cache appears to be incorrect.")
86
+ assert_equal([:c, :b],@cache.queue_for_class(FooClass),"Queue for class FooClass appears to be incorrect.")
87
+ assert_equal([:e],@cache.queue_for_class(BarClass),"Queue for class BarClass appears to be incorrect.")
88
+ end
89
+ end
@@ -0,0 +1,80 @@
1
+ require 'test/unit'
2
+ require 'external/test_support'
3
+ IWATestSupport.set_src_dir
4
+ require 'iowa/classifier'
5
+ require 'benchmark'
6
+
7
+ class TC_Classifier < Test::Unit::TestCase
8
+ @@testdir = IWATestSupport.test_dir(__FILE__)
9
+
10
+ A = 'A'
11
+ B = 'B'
12
+ C = 'C'
13
+ D = 'D'
14
+
15
+ def setup
16
+ IWATestSupport.announce(:classifier,"Iowa::Dispatchers::Classifier")
17
+ assert_nothing_raised("setup failed") do
18
+ @classifier = Iowa::Classifier.new
19
+ @classifier['/'] = D
20
+ @classifier['/index.htm'] = A
21
+ @classifier['/images'] = B
22
+ @classifier['/images/specific_image.'] = A
23
+ @classifier['/images/specific_image.png'] = C
24
+ @classifier['/funds'] = C
25
+ @classifier['/funds/'] = D
26
+ @classifier['/funds/index.html'] = C
27
+ @classifier['/funds/abcdef/index.html'] = A
28
+ @classifier['/funds/abcdef/data.html'] = B
29
+ @plain_hash = {}
30
+ @plain_hash['/'] = D
31
+ @plain_hash['/index.htm'] = A
32
+ @plain_hash['/images'] = B
33
+ @plain_hash['/images/specific_image.'] = A
34
+ @plain_hash['/images/specific_image.png'] = C
35
+ @plain_hash['/funds'] = C
36
+ @plain_hash['/funds/'] = D
37
+ @plain_hash['/funds/index.html'] = C
38
+ @plain_hash['/funds/abcdef/index.html'] = A
39
+ @plain_hash['/funds/abcdef/data.html'] = B
40
+ end
41
+ end
42
+
43
+ def test_classifier
44
+ assert_equal('A',@classifier['/index.htm'],"Match(/index.htm) failed")
45
+ assert_equal('A',@classifier['/index.html'],"Match(/index.html) failed")
46
+ assert_equal('C',@classifier['/images/specific_image.png'],"Match(/images/specific_image.png) failed")
47
+ assert_equal('A',@classifier['/images/specific_image.gif'],"Match(/images/specific_image.gif) failed")
48
+ assert_equal('B',@classifier['/images/other_image.jpg'],"Match(/images/other_image.jpg) failed")
49
+ assert_equal('B',@classifier['/images'],"Match(/images) failed")
50
+ assert_equal('A',@classifier['/funds/abcdef/index.html'],"Match(/funds/abcdef/index.html) failed")
51
+ assert_equal('B',@classifier['/funds/abcdef/data.html?abc=123'],"Match(/funds/abcdef/data.html?abc=123) failed")
52
+ assert_equal('C',@classifier['/funds/index.html'],"Match(/funds/index.html) failed")
53
+ assert_equal('D',@classifier['/funds/portfolio2.html'],"Match(/funds/portfolio2.html) failed")
54
+ assert_equal('D',@classifier['/funds/portfolio.html'],"Match(/funds/portfolio.html) failed")
55
+ assert_equal('C',@classifier['/funds.html'],"Match(/funds.html) failed")
56
+ assert_equal('D',@classifier['/misc.html'],"Match(/misc.html) failed")
57
+ $stderr.puts "\nHammering classifier lookups (1.3 million)..."
58
+ Benchmark.bm do |bm|
59
+ bm.report do
60
+ 100000.times do
61
+ @classifier['/index.htm']
62
+ @classifier['/index.html']
63
+ @classifier['/images/specific_image.png']
64
+ @classifier['/images/specific_image.gif']
65
+ @classifier['/images/other_image.jpg']
66
+ @classifier['/images']
67
+ @classifier['/funds/abcdef/index.html']
68
+ @classifier['/funds/abcdef/data.html?abc=123']
69
+ @classifier['/funds/index.html']
70
+ @classifier['/funds/portfolio2.html']
71
+ @classifier['/funds/portfolio.html']
72
+ @classifier['/funds.html']
73
+ @classifier['/misc.html']
74
+ end
75
+ end
76
+ end
77
+
78
+ end
79
+
80
+ end
@@ -0,0 +1,127 @@
1
+ require 'test/unit'
2
+ require 'external/test_support'
3
+ IWATestSupport.set_src_dir
4
+ require 'iowa/DbPool'
5
+
6
+ class TC_DbPool < Test::Unit::TestCase
7
+ @dbpool
8
+
9
+ @@testdir = IWATestSupport.test_dir(__FILE__)
10
+ def setup
11
+ Dir.chdir(@@testdir)
12
+ IWATestSupport.announce(:deprecated_dbpool,"Iowa::DbPool -- this is deprecated; don't use this. Use Iowa::Pools::DbConnectionPool.")
13
+
14
+ @params = Hash.new
15
+ begin
16
+ IO.foreach('tests.conf') do |line|
17
+ next unless (line =~ /^\s*(\w+)\s*=\s*(.*)$/)
18
+ @params[$1.downcase] = $2
19
+ end
20
+ rescue Exception
21
+ raise "There was an error opening tests.conf. Please verify that it exists and is readable, and then run the tests again."
22
+ end
23
+
24
+ unless @params['vendor']
25
+ raise "Database vendor not found; please specify the database vendor in tests.conf."
26
+ end
27
+
28
+ unless @params['host']
29
+ raise "Database host not found; please specify the database host in tests.conf."
30
+ end
31
+
32
+ unless @params['name']
33
+ raise "Database name not found; please specify the database name in tests.conf."
34
+ end
35
+
36
+ end
37
+
38
+ def testPool
39
+ assert_nothing_raised("Failed to create an Iowa::DbPool object.") do
40
+ @dbpool = Iowa::DbPool.new(@params['vendor'],@params['host'],@params['name'],@params['user'],@params['password'])
41
+ end
42
+
43
+ assert_kind_of(Iowa::DbPool,@dbpool,"The created object is not an Iowa::DbPool or subclass thereof.")
44
+
45
+ assert_raises(Iowa::ReInitException,"Did not raise an exception when an attempt to reinitialize the DbPool was made.") do
46
+ @dbpool2 = Iowa::DbPool.new(@params['vendor'],@params['host'],@params['name'],@params['user'],@params['password'])
47
+ end
48
+
49
+ assert_nothing_raised("Failed to get a single DB connection.") do
50
+ @connection = @dbpool.getConnection
51
+ assert_kind_of(DBI::DatabaseHandle,@connection,"The connection returned is not an instance of DBI::DatabaseHandle; it is a #{@connection.type.to_s}.")
52
+ end
53
+
54
+ assert_nothing_raised("Failed to free a single DB connection.") do
55
+ assert_equal("IDLE",status = @dbpool.freeConnection(@connection).to_s,"Freeing the connection failed to return a status of IDLE; instead got #{status}.")
56
+ end
57
+
58
+ dbh = []
59
+ assert_nothing_raised("Failed while trying to acquire all connections in the connection pool.") do
60
+ 1.upto(5) do |idx|
61
+ dbh[idx] = @dbpool.getConnection
62
+ end
63
+ end
64
+
65
+ assert_nothing_raised("Failed while performing simple query on each handle in the DbPool.") do
66
+ 1.upto(5) do |idx|
67
+ sth = dbh[idx].prepare("select now()")
68
+ sth.execute()
69
+ end
70
+ end
71
+
72
+ assert_nothing_raised("Failed while trying to create table for testing.") do
73
+ begin
74
+ dbh[1].do("drop table TC_DbPool")
75
+ rescue Exception
76
+ # NOOP -- don't do anything
77
+ end
78
+ dbh[1].do("create table TC_DbPool (idx varchar(200),val varchar(200))")
79
+ end
80
+
81
+ assert_nothing_raised("Failed while freeing all connections in the connection pool.") do
82
+ 1.upto(5) do |idx|
83
+ @dbpool.freeConnection dbh[idx]
84
+ end
85
+ end
86
+
87
+ trucks = [nil,'Unimog','Ram 3500','Sierra 1500 HD','Mercedes 1113','Ford F-250']
88
+ assert_nothing_raised("Failure while hammering the pool in a stress test.") do
89
+ mutex = Mutex.new
90
+ threads = []
91
+ 1.upto(5) do |idx|
92
+ threads << Thread.new(idx) do |myIdx|
93
+ 1.upto(1000) do |ni|
94
+ begin
95
+ pv_dbh = nil
96
+ mutex.synchronize do
97
+ pv_dbh = @dbpool.getConnection
98
+ end
99
+ pv_dbh.prepare('insert into TC_DbPool (idx,val) values (?,?)').execute(idx,trucks[idx])
100
+ pv_dbh.prepare('delete from TC_DbPool where idx = ?').execute(idx)
101
+ mutex.synchronize do
102
+ @dbpool.freeConnection pv_dbh
103
+ end
104
+ rescue Exception
105
+ puts "Dying in #{idx} with #{$!}; pv_dbh was #{pv_dbh}\n"
106
+ raise
107
+ end
108
+ end
109
+ end
110
+ end
111
+ count = 0
112
+ while (count < threads.length) do
113
+ count = 0
114
+ threads.each do |aThread|
115
+ count += 1 unless aThread.alive?
116
+ end
117
+ sleep 1
118
+ end
119
+ end
120
+
121
+ assert_nothing_raised("Failed while trying to drop testing table.") do
122
+ dbh = @dbpool.getConnection
123
+ dbh.do("drop table TC_DbPool")
124
+ end
125
+ end
126
+
127
+ end
@@ -0,0 +1,218 @@
1
+ require 'test/unit'
2
+ require 'external/test_support'
3
+ IWATestSupport.set_src_dir
4
+ require 'iowa/caches/DiskCache'
5
+ require 'iowa/caches/DiskStore'
6
+ require 'tmpdir'
7
+ require 'fileutils'
8
+ require 'benchmark'
9
+ require 'pstore'
10
+
11
+ TMPDIR = Dir::tmpdir
12
+
13
+ class TC_DiskCache < Test::Unit::TestCase
14
+ def make_tmpdir_path; FileUtils.mkdir("#{TMPDIR}/tc_diskcache.#{Time.now.to_i}#{rand}").first; end
15
+ def make_shm_tmpdir_path; FileUtils.mkdir("/dev/shm/tc_diskcache.#{Time.now.to_i}#{rand}").first; end
16
+ @@testdir = IWATestSupport.test_dir(__FILE__)
17
+
18
+ def setup
19
+ Dir.chdir(@@testdir)
20
+ IWATestSupport.announce(:diskcache,"Iowa::Caches::DiskCache / Iowa::Caches::DiskStore")
21
+ end
22
+
23
+ def test_creation
24
+ tmpdir = make_tmpdir_path
25
+ assert_nothing_raised("Failed while creating an Iowa::Caches::DiskCache object") do
26
+ @cache = Iowa::Caches::DiskCache.new({:directory => tmpdir, :maxsize => 12})
27
+ end
28
+ FileUtils.rm_rf(tmpdir)
29
+ end
30
+
31
+ def test_cache_size
32
+ tmpdir = make_tmpdir_path
33
+ @cache = Iowa::Caches::DiskCache.new({:directory => tmpdir, :maxsize => 12})
34
+ (1..14).each {|n| @cache[n] = n}
35
+ s = @cache.size
36
+ assert_equal(12,s,"The expected size (12) did not match the returned size (#{s}).")
37
+ FileUtils.rm_rf(tmpdir)
38
+ end
39
+
40
+ def test_cache_size2
41
+ tmpdir = make_tmpdir_path
42
+ @cache = Iowa::Caches::DiskCache.new({:directory => tmpdir, :maxsize => 12})
43
+ (1..14).each {|n| @cache[n] = n}
44
+ @cache.size=3
45
+ s = @cache.size
46
+ assert_equal(3,s,"The cache size does not appear to to have change as expected; want size of 3, have size of #{s}.")
47
+ FileUtils.rm_rf(tmpdir)
48
+ end
49
+
50
+ def test_values
51
+ tmpdir = make_tmpdir_path
52
+ @cache = Iowa::Caches::DiskCache.new({:directory => tmpdir, :maxsize => 3})
53
+ @cache['a'] = 1
54
+ @cache['b'] = 2
55
+ @cache['c'] = 3
56
+ s = @cache['b']
57
+ assert_equal(2,s,"The value retrieved from the cache (#{s}) did not match what was expected (2).")
58
+ FileUtils.rm_rf(tmpdir)
59
+ end
60
+
61
+ def test_expire1
62
+ tmpdir = make_tmpdir_path
63
+ @cache = Iowa::Caches::DiskCache.new({:directory => tmpdir, :maxsize => 3})
64
+ @cache['a'] = 1
65
+ @cache['b'] = 2
66
+ @cache['c'] = 3
67
+ s = @cache['b']
68
+ @cache['d'] = 4
69
+ s = true
70
+ s = false if @cache.include? 'a'
71
+ assert_equal(true,s,"Key 'a' should have fallen out of the cache. It did not.")
72
+ FileUtils.rm_rf(tmpdir)
73
+ end
74
+
75
+ def test_expire2
76
+ tmpdir = make_tmpdir_path
77
+ @cache = Iowa::Caches::DiskCache.new({:directory => tmpdir, :maxsize => 3})
78
+ @cache['a'] = 1
79
+ @cache['b'] = 2
80
+ @cache['c'] = 3
81
+ s = @cache['b']
82
+ @cache['d'] = 4
83
+ s = false
84
+ s = true if @cache.include? 'b'
85
+ assert_equal(true,s,"Key 'b' appears to have fallen out of the cache. It should not have.")
86
+ FileUtils.rm_rf(tmpdir)
87
+ end
88
+
89
+ def test_transactions
90
+ tmpdir = make_tmpdir_path
91
+ @cache = Iowa::Caches::DiskCache.new({:directory => tmpdir, :maxsize => 20})
92
+ assert_nothing_raised("Something blew up when trying to test transactions.") do
93
+ @cache[:a] = 1
94
+ @cache[:b] = 2
95
+ @cache.transaction do
96
+ @cache[:c] = 3
97
+ end
98
+ assert_equal(3,@cache[:c],"Transaction failed.")
99
+ @cache.transaction do
100
+ @cache[:d] = 4
101
+ @cache.commit
102
+ @cache[:e] = 5
103
+ end
104
+ assert_equal(4,@cache[:d],"Transaction failed.")
105
+ assert_equal(5,@cache[:e],"Transaction failed.")
106
+ @cache.transaction do
107
+ @cache[:f] = 6
108
+ @cache.rollback
109
+ end
110
+ assert(!@cache.include?(:f),"Transaction rollback failed.")
111
+ @cache.transaction do
112
+ @cache[:f] = 6
113
+ @cache.rollback
114
+ @cache[:g] = 6
115
+ end
116
+ assert(!@cache.include?(:f),"Transaction rollback failed.")
117
+ assert_equal(6,@cache[:g],"Transaction failed.")
118
+ @cache.transaction do
119
+ @cache[:h] = 7
120
+ @cache.transaction do
121
+ @cache[:i] = 8
122
+ @cache.transaction do
123
+ @cache[:j] = 9
124
+ @cache.rollback
125
+ end
126
+ @cache.transaction do
127
+ @cache[:k] = 9
128
+ end
129
+ @cache.rollback
130
+ end
131
+ end
132
+ assert(!@cache.include?(:j),"Nested transaction rollback(:j) failed.")
133
+ assert(!@cache.include?(:i),"Nexted transaction rollback(:i) failed.")
134
+ assert_equal(7,@cache[:h],"Transaction failed.")
135
+ assert_equal(9,@cache[:k],"Transaction failed.")
136
+ end
137
+ end
138
+
139
+ def test_speed
140
+ n = 2000
141
+ test_dirs = []
142
+ test_dirs << ["In-Memory (/dev/shm) Test", make_shm_tmpdir_path] if FileTest.exist?('/dev/shm') and FileTest.writable?('/dev/shm')
143
+ test_dirs << ["On Disk Test (performance directly related to disk i/o performance)", make_tmpdir_path]
144
+ assert_nothing_raised("Something blew up during the DiskCache stress test.") do
145
+ test_dirs.each do |td|
146
+ puts "\n#{td[0]}"
147
+ cache = Iowa::Caches::DiskCache.new({:directory => td[1], :maxsize => 4294967296})
148
+ Benchmark.benchmark do |bm|
149
+ flush_disk
150
+ puts "Writing #{n} records to disk cache:"
151
+ bm.report('dc write') do
152
+ n.times {|x| cache[x] = x}
153
+ end
154
+ flush_disk
155
+ puts "Updating #{n} records in disk cache:"
156
+ bm.report('dc update') do
157
+ n.times {|x| cache[x] = x * 2}
158
+ end
159
+ flush_disk
160
+ puts "Reading #{n} records from disk cache:"
161
+ bm.report('dc read') do
162
+ (n).times {|x| cache[x]}
163
+ end
164
+ flush_disk
165
+ puts "Deleting #{n} records from disk cache:"
166
+ bm.report('dc delete') do
167
+ n.times {|x| cache.delete(x)}
168
+ end
169
+ flush_disk
170
+ end
171
+ FileUtils.rm_rf(td[1])
172
+ end
173
+ end
174
+
175
+ flush_disk
176
+ puts "\n\nNow Running speed comparison of DiskStore"
177
+ test_dirs = []
178
+ test_dirs << ["In-Memory (/dev/shm) Test", make_shm_tmpdir_path] if FileTest.exist?('/dev/shm') and FileTest.writable?('/dev/shm')
179
+ test_dirs << ["On Disk Test (performance directly related to disk i/o performance)", make_tmpdir_path]
180
+ assert_nothing_raised("Something blew up during the DiskCache stress test.") do
181
+ test_dirs.each do |td|
182
+ puts "\n#{td[0]}"
183
+ cache = Iowa::Caches::DiskStore.new({:directory => td[1]})
184
+ Benchmark.benchmark do |bm|
185
+ flush_disk
186
+ puts "Writing #{n} records to disk cache:"
187
+ bm.report('dc write') do
188
+ n.times {|x| cache[x] = x}
189
+ end
190
+ flush_disk
191
+ puts "Updating #{n} records in disk cache:"
192
+ bm.report('dc update') do
193
+ n.times {|x| cache[x] = x * 2}
194
+ end
195
+ flush_disk
196
+ puts "Reading #{n} records from disk cache:"
197
+ bm.report('dc read') do
198
+ (n).times {|x| cache[x]}
199
+ end
200
+ flush_disk
201
+ puts "Deleting #{n} records from disk cache:"
202
+ bm.report('dc delete') do
203
+ n.times {|x| cache.delete(x)}
204
+ end
205
+ flush_disk
206
+ end
207
+ FileUtils.rm_rf(td[1])
208
+ end
209
+ end
210
+ end
211
+
212
+ def flush_disk
213
+ if FileTest.exist?('/bin/sync')
214
+ system('/bin/sync')
215
+ end
216
+ end
217
+
218
+ end