logstash-lib 1.3.2

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 (419) hide show
  1. data/.gitignore +24 -0
  2. data/.tailor +8 -0
  3. data/.travis.yml +12 -0
  4. data/CHANGELOG +1185 -0
  5. data/CONTRIBUTING.md +61 -0
  6. data/CONTRIBUTORS +79 -0
  7. data/LICENSE +14 -0
  8. data/Makefile +460 -0
  9. data/README.md +120 -0
  10. data/STYLE.md +96 -0
  11. data/bin/logstash +37 -0
  12. data/bin/logstash-test +4 -0
  13. data/bin/logstash-web +4 -0
  14. data/bin/logstash.lib.sh +78 -0
  15. data/bot/check_pull_changelog.rb +89 -0
  16. data/docs/configuration.md +260 -0
  17. data/docs/docgen.rb +242 -0
  18. data/docs/extending/example-add-a-new-filter.md +121 -0
  19. data/docs/extending/index.md +91 -0
  20. data/docs/flags.md +43 -0
  21. data/docs/generate_index.rb +28 -0
  22. data/docs/index.html.erb +56 -0
  23. data/docs/learn.md +46 -0
  24. data/docs/life-of-an-event.md +109 -0
  25. data/docs/logging-tool-comparisons.md +60 -0
  26. data/docs/plugin-doc.html.erb +91 -0
  27. data/docs/plugin-milestones.md +41 -0
  28. data/docs/plugin-synopsis.html.erb +24 -0
  29. data/docs/release-engineering.md +46 -0
  30. data/docs/release-test-results.md +14 -0
  31. data/docs/repositories.md +35 -0
  32. data/docs/tutorials/10-minute-walkthrough/apache-elasticsearch.conf +35 -0
  33. data/docs/tutorials/10-minute-walkthrough/apache-parse.conf +33 -0
  34. data/docs/tutorials/10-minute-walkthrough/apache_log.1 +1 -0
  35. data/docs/tutorials/10-minute-walkthrough/apache_log.2.bz2 +0 -0
  36. data/docs/tutorials/10-minute-walkthrough/hello-search.conf +25 -0
  37. data/docs/tutorials/10-minute-walkthrough/hello.conf +16 -0
  38. data/docs/tutorials/10-minute-walkthrough/index.md +124 -0
  39. data/docs/tutorials/10-minute-walkthrough/step-5-output.txt +17 -0
  40. data/docs/tutorials/getting-started-centralized-overview-diagram.png +0 -0
  41. data/docs/tutorials/getting-started-centralized-overview-diagram.xml +1 -0
  42. data/docs/tutorials/getting-started-centralized.md +217 -0
  43. data/docs/tutorials/getting-started-simple.md +200 -0
  44. data/docs/tutorials/just-enough-rabbitmq-for-logstash.md +201 -0
  45. data/docs/tutorials/media/frontend-response-codes.png +0 -0
  46. data/docs/tutorials/metrics-from-logs.md +84 -0
  47. data/docs/tutorials/zeromq.md +118 -0
  48. data/extract_services.rb +29 -0
  49. data/gembag.rb +64 -0
  50. data/lib/logstash-event.rb +2 -0
  51. data/lib/logstash.rb +4 -0
  52. data/lib/logstash/JRUBY-6970-openssl.rb +22 -0
  53. data/lib/logstash/JRUBY-6970.rb +102 -0
  54. data/lib/logstash/agent.rb +305 -0
  55. data/lib/logstash/certs/cacert.pem +3895 -0
  56. data/lib/logstash/codecs/base.rb +49 -0
  57. data/lib/logstash/codecs/compress_spooler.rb +50 -0
  58. data/lib/logstash/codecs/dots.rb +18 -0
  59. data/lib/logstash/codecs/edn.rb +28 -0
  60. data/lib/logstash/codecs/edn_lines.rb +36 -0
  61. data/lib/logstash/codecs/fluent.rb +55 -0
  62. data/lib/logstash/codecs/graphite.rb +114 -0
  63. data/lib/logstash/codecs/json.rb +41 -0
  64. data/lib/logstash/codecs/json_lines.rb +52 -0
  65. data/lib/logstash/codecs/json_spooler.rb +22 -0
  66. data/lib/logstash/codecs/line.rb +58 -0
  67. data/lib/logstash/codecs/msgpack.rb +43 -0
  68. data/lib/logstash/codecs/multiline.rb +189 -0
  69. data/lib/logstash/codecs/netflow.rb +342 -0
  70. data/lib/logstash/codecs/netflow/util.rb +212 -0
  71. data/lib/logstash/codecs/noop.rb +19 -0
  72. data/lib/logstash/codecs/oldlogstashjson.rb +56 -0
  73. data/lib/logstash/codecs/plain.rb +48 -0
  74. data/lib/logstash/codecs/rubydebug.rb +22 -0
  75. data/lib/logstash/codecs/spool.rb +38 -0
  76. data/lib/logstash/config/Makefile +4 -0
  77. data/lib/logstash/config/config_ast.rb +380 -0
  78. data/lib/logstash/config/file.rb +39 -0
  79. data/lib/logstash/config/grammar.rb +3504 -0
  80. data/lib/logstash/config/grammar.treetop +241 -0
  81. data/lib/logstash/config/mixin.rb +464 -0
  82. data/lib/logstash/config/registry.rb +13 -0
  83. data/lib/logstash/config/test.conf +18 -0
  84. data/lib/logstash/errors.rb +10 -0
  85. data/lib/logstash/event.rb +262 -0
  86. data/lib/logstash/filters/advisor.rb +178 -0
  87. data/lib/logstash/filters/alter.rb +173 -0
  88. data/lib/logstash/filters/anonymize.rb +93 -0
  89. data/lib/logstash/filters/base.rb +190 -0
  90. data/lib/logstash/filters/checksum.rb +50 -0
  91. data/lib/logstash/filters/cidr.rb +76 -0
  92. data/lib/logstash/filters/cipher.rb +145 -0
  93. data/lib/logstash/filters/clone.rb +35 -0
  94. data/lib/logstash/filters/collate.rb +114 -0
  95. data/lib/logstash/filters/csv.rb +94 -0
  96. data/lib/logstash/filters/date.rb +244 -0
  97. data/lib/logstash/filters/dns.rb +201 -0
  98. data/lib/logstash/filters/drop.rb +32 -0
  99. data/lib/logstash/filters/elapsed.rb +256 -0
  100. data/lib/logstash/filters/elasticsearch.rb +73 -0
  101. data/lib/logstash/filters/environment.rb +27 -0
  102. data/lib/logstash/filters/extractnumbers.rb +84 -0
  103. data/lib/logstash/filters/gelfify.rb +52 -0
  104. data/lib/logstash/filters/geoip.rb +145 -0
  105. data/lib/logstash/filters/grep.rb +153 -0
  106. data/lib/logstash/filters/grok.rb +425 -0
  107. data/lib/logstash/filters/grokdiscovery.rb +75 -0
  108. data/lib/logstash/filters/i18n.rb +51 -0
  109. data/lib/logstash/filters/json.rb +90 -0
  110. data/lib/logstash/filters/json_encode.rb +52 -0
  111. data/lib/logstash/filters/kv.rb +232 -0
  112. data/lib/logstash/filters/metaevent.rb +68 -0
  113. data/lib/logstash/filters/metrics.rb +237 -0
  114. data/lib/logstash/filters/multiline.rb +241 -0
  115. data/lib/logstash/filters/mutate.rb +399 -0
  116. data/lib/logstash/filters/noop.rb +21 -0
  117. data/lib/logstash/filters/prune.rb +149 -0
  118. data/lib/logstash/filters/punct.rb +32 -0
  119. data/lib/logstash/filters/railsparallelrequest.rb +86 -0
  120. data/lib/logstash/filters/range.rb +142 -0
  121. data/lib/logstash/filters/ruby.rb +42 -0
  122. data/lib/logstash/filters/sleep.rb +111 -0
  123. data/lib/logstash/filters/split.rb +64 -0
  124. data/lib/logstash/filters/sumnumbers.rb +73 -0
  125. data/lib/logstash/filters/syslog_pri.rb +107 -0
  126. data/lib/logstash/filters/translate.rb +121 -0
  127. data/lib/logstash/filters/unique.rb +29 -0
  128. data/lib/logstash/filters/urldecode.rb +57 -0
  129. data/lib/logstash/filters/useragent.rb +112 -0
  130. data/lib/logstash/filters/uuid.rb +58 -0
  131. data/lib/logstash/filters/xml.rb +139 -0
  132. data/lib/logstash/filters/zeromq.rb +123 -0
  133. data/lib/logstash/filterworker.rb +122 -0
  134. data/lib/logstash/inputs/base.rb +125 -0
  135. data/lib/logstash/inputs/collectd.rb +306 -0
  136. data/lib/logstash/inputs/drupal_dblog.rb +323 -0
  137. data/lib/logstash/inputs/drupal_dblog/jdbcconnection.rb +66 -0
  138. data/lib/logstash/inputs/elasticsearch.rb +140 -0
  139. data/lib/logstash/inputs/eventlog.rb +129 -0
  140. data/lib/logstash/inputs/eventlog/racob_fix.rb +44 -0
  141. data/lib/logstash/inputs/exec.rb +69 -0
  142. data/lib/logstash/inputs/file.rb +146 -0
  143. data/lib/logstash/inputs/ganglia.rb +127 -0
  144. data/lib/logstash/inputs/ganglia/gmondpacket.rb +146 -0
  145. data/lib/logstash/inputs/ganglia/xdr.rb +327 -0
  146. data/lib/logstash/inputs/gelf.rb +138 -0
  147. data/lib/logstash/inputs/gemfire.rb +222 -0
  148. data/lib/logstash/inputs/generator.rb +97 -0
  149. data/lib/logstash/inputs/graphite.rb +41 -0
  150. data/lib/logstash/inputs/heroku.rb +51 -0
  151. data/lib/logstash/inputs/imap.rb +136 -0
  152. data/lib/logstash/inputs/irc.rb +84 -0
  153. data/lib/logstash/inputs/log4j.rb +136 -0
  154. data/lib/logstash/inputs/lumberjack.rb +53 -0
  155. data/lib/logstash/inputs/pipe.rb +57 -0
  156. data/lib/logstash/inputs/rabbitmq.rb +126 -0
  157. data/lib/logstash/inputs/rabbitmq/bunny.rb +118 -0
  158. data/lib/logstash/inputs/rabbitmq/hot_bunnies.rb +1 -0
  159. data/lib/logstash/inputs/rabbitmq/march_hare.rb +129 -0
  160. data/lib/logstash/inputs/redis.rb +263 -0
  161. data/lib/logstash/inputs/relp.rb +106 -0
  162. data/lib/logstash/inputs/s3.rb +279 -0
  163. data/lib/logstash/inputs/snmptrap.rb +87 -0
  164. data/lib/logstash/inputs/sqlite.rb +185 -0
  165. data/lib/logstash/inputs/sqs.rb +172 -0
  166. data/lib/logstash/inputs/stdin.rb +46 -0
  167. data/lib/logstash/inputs/stomp.rb +84 -0
  168. data/lib/logstash/inputs/syslog.rb +237 -0
  169. data/lib/logstash/inputs/tcp.rb +231 -0
  170. data/lib/logstash/inputs/threadable.rb +18 -0
  171. data/lib/logstash/inputs/twitter.rb +82 -0
  172. data/lib/logstash/inputs/udp.rb +81 -0
  173. data/lib/logstash/inputs/unix.rb +163 -0
  174. data/lib/logstash/inputs/varnishlog.rb +48 -0
  175. data/lib/logstash/inputs/websocket.rb +50 -0
  176. data/lib/logstash/inputs/wmi.rb +72 -0
  177. data/lib/logstash/inputs/xmpp.rb +81 -0
  178. data/lib/logstash/inputs/zenoss.rb +143 -0
  179. data/lib/logstash/inputs/zeromq.rb +165 -0
  180. data/lib/logstash/kibana.rb +113 -0
  181. data/lib/logstash/loadlibs.rb +9 -0
  182. data/lib/logstash/logging.rb +89 -0
  183. data/lib/logstash/monkeypatches-for-bugs.rb +2 -0
  184. data/lib/logstash/monkeypatches-for-debugging.rb +47 -0
  185. data/lib/logstash/monkeypatches-for-performance.rb +66 -0
  186. data/lib/logstash/multiqueue.rb +53 -0
  187. data/lib/logstash/namespace.rb +16 -0
  188. data/lib/logstash/outputs/base.rb +120 -0
  189. data/lib/logstash/outputs/boundary.rb +116 -0
  190. data/lib/logstash/outputs/circonus.rb +78 -0
  191. data/lib/logstash/outputs/cloudwatch.rb +351 -0
  192. data/lib/logstash/outputs/csv.rb +55 -0
  193. data/lib/logstash/outputs/datadog.rb +93 -0
  194. data/lib/logstash/outputs/datadog_metrics.rb +123 -0
  195. data/lib/logstash/outputs/elasticsearch.rb +332 -0
  196. data/lib/logstash/outputs/elasticsearch/elasticsearch-template.json +44 -0
  197. data/lib/logstash/outputs/elasticsearch_http.rb +256 -0
  198. data/lib/logstash/outputs/elasticsearch_river.rb +214 -0
  199. data/lib/logstash/outputs/email.rb +299 -0
  200. data/lib/logstash/outputs/exec.rb +40 -0
  201. data/lib/logstash/outputs/file.rb +180 -0
  202. data/lib/logstash/outputs/ganglia.rb +75 -0
  203. data/lib/logstash/outputs/gelf.rb +208 -0
  204. data/lib/logstash/outputs/gemfire.rb +103 -0
  205. data/lib/logstash/outputs/google_bigquery.rb +570 -0
  206. data/lib/logstash/outputs/google_cloud_storage.rb +431 -0
  207. data/lib/logstash/outputs/graphite.rb +143 -0
  208. data/lib/logstash/outputs/graphtastic.rb +185 -0
  209. data/lib/logstash/outputs/hipchat.rb +80 -0
  210. data/lib/logstash/outputs/http.rb +142 -0
  211. data/lib/logstash/outputs/irc.rb +80 -0
  212. data/lib/logstash/outputs/jira.rb +109 -0
  213. data/lib/logstash/outputs/juggernaut.rb +105 -0
  214. data/lib/logstash/outputs/librato.rb +146 -0
  215. data/lib/logstash/outputs/loggly.rb +93 -0
  216. data/lib/logstash/outputs/lumberjack.rb +51 -0
  217. data/lib/logstash/outputs/metriccatcher.rb +103 -0
  218. data/lib/logstash/outputs/mongodb.rb +81 -0
  219. data/lib/logstash/outputs/nagios.rb +119 -0
  220. data/lib/logstash/outputs/nagios_nsca.rb +123 -0
  221. data/lib/logstash/outputs/null.rb +18 -0
  222. data/lib/logstash/outputs/opentsdb.rb +101 -0
  223. data/lib/logstash/outputs/pagerduty.rb +79 -0
  224. data/lib/logstash/outputs/pipe.rb +132 -0
  225. data/lib/logstash/outputs/rabbitmq.rb +96 -0
  226. data/lib/logstash/outputs/rabbitmq/bunny.rb +135 -0
  227. data/lib/logstash/outputs/rabbitmq/hot_bunnies.rb +1 -0
  228. data/lib/logstash/outputs/rabbitmq/march_hare.rb +143 -0
  229. data/lib/logstash/outputs/redis.rb +245 -0
  230. data/lib/logstash/outputs/riak.rb +152 -0
  231. data/lib/logstash/outputs/riemann.rb +109 -0
  232. data/lib/logstash/outputs/s3.rb +356 -0
  233. data/lib/logstash/outputs/sns.rb +124 -0
  234. data/lib/logstash/outputs/solr_http.rb +78 -0
  235. data/lib/logstash/outputs/sqs.rb +141 -0
  236. data/lib/logstash/outputs/statsd.rb +116 -0
  237. data/lib/logstash/outputs/stdout.rb +53 -0
  238. data/lib/logstash/outputs/stomp.rb +67 -0
  239. data/lib/logstash/outputs/syslog.rb +145 -0
  240. data/lib/logstash/outputs/tcp.rb +145 -0
  241. data/lib/logstash/outputs/udp.rb +38 -0
  242. data/lib/logstash/outputs/websocket.rb +46 -0
  243. data/lib/logstash/outputs/websocket/app.rb +29 -0
  244. data/lib/logstash/outputs/websocket/pubsub.rb +45 -0
  245. data/lib/logstash/outputs/xmpp.rb +78 -0
  246. data/lib/logstash/outputs/zabbix.rb +108 -0
  247. data/lib/logstash/outputs/zeromq.rb +125 -0
  248. data/lib/logstash/pipeline.rb +286 -0
  249. data/lib/logstash/plugin.rb +150 -0
  250. data/lib/logstash/plugin_mixins/aws_config.rb +93 -0
  251. data/lib/logstash/program.rb +15 -0
  252. data/lib/logstash/runner.rb +238 -0
  253. data/lib/logstash/sized_queue.rb +8 -0
  254. data/lib/logstash/test.rb +183 -0
  255. data/lib/logstash/threadwatchdog.rb +37 -0
  256. data/lib/logstash/time_addon.rb +33 -0
  257. data/lib/logstash/util.rb +106 -0
  258. data/lib/logstash/util/buftok.rb +139 -0
  259. data/lib/logstash/util/charset.rb +39 -0
  260. data/lib/logstash/util/fieldreference.rb +50 -0
  261. data/lib/logstash/util/password.rb +25 -0
  262. data/lib/logstash/util/prctl.rb +11 -0
  263. data/lib/logstash/util/relp.rb +326 -0
  264. data/lib/logstash/util/require-helper.rb +18 -0
  265. data/lib/logstash/util/socket_peer.rb +7 -0
  266. data/lib/logstash/util/zenoss.rb +566 -0
  267. data/lib/logstash/util/zeromq.rb +47 -0
  268. data/lib/logstash/version.rb +6 -0
  269. data/locales/en.yml +170 -0
  270. data/logstash-event.gemspec +29 -0
  271. data/logstash.gemspec +128 -0
  272. data/patterns/firewalls +60 -0
  273. data/patterns/grok-patterns +91 -0
  274. data/patterns/haproxy +37 -0
  275. data/patterns/java +3 -0
  276. data/patterns/linux-syslog +14 -0
  277. data/patterns/mcollective +1 -0
  278. data/patterns/mcollective-patterns +4 -0
  279. data/patterns/nagios +108 -0
  280. data/patterns/postgresql +3 -0
  281. data/patterns/redis +3 -0
  282. data/patterns/ruby +2 -0
  283. data/pkg/build.sh +135 -0
  284. data/pkg/centos/after-install.sh +1 -0
  285. data/pkg/centos/before-install.sh +10 -0
  286. data/pkg/centos/before-remove.sh +11 -0
  287. data/pkg/centos/sysconfig +15 -0
  288. data/pkg/debian/after-install.sh +5 -0
  289. data/pkg/debian/before-install.sh +13 -0
  290. data/pkg/debian/before-remove.sh +13 -0
  291. data/pkg/debian/build.sh +34 -0
  292. data/pkg/debian/debian/README +6 -0
  293. data/pkg/debian/debian/changelog +17 -0
  294. data/pkg/debian/debian/compat +1 -0
  295. data/pkg/debian/debian/control +16 -0
  296. data/pkg/debian/debian/copyright +27 -0
  297. data/pkg/debian/debian/dirs +19 -0
  298. data/pkg/debian/debian/docs +0 -0
  299. data/pkg/debian/debian/logstash.default +39 -0
  300. data/pkg/debian/debian/logstash.init +201 -0
  301. data/pkg/debian/debian/logstash.install +1 -0
  302. data/pkg/debian/debian/logstash.logrotate +9 -0
  303. data/pkg/debian/debian/logstash.postinst +68 -0
  304. data/pkg/debian/debian/logstash.postrm +23 -0
  305. data/pkg/debian/debian/manpage.1.ex +59 -0
  306. data/pkg/debian/debian/preinst.ex +37 -0
  307. data/pkg/debian/debian/prerm.ex +40 -0
  308. data/pkg/debian/debian/release.conf +5 -0
  309. data/pkg/debian/debian/rules +80 -0
  310. data/pkg/debian/debian/watch.ex +22 -0
  311. data/pkg/logrotate.conf +8 -0
  312. data/pkg/logstash-web.default +41 -0
  313. data/pkg/logstash-web.sysv.debian +201 -0
  314. data/pkg/logstash-web.upstart.ubuntu +18 -0
  315. data/pkg/logstash.default +45 -0
  316. data/pkg/logstash.sysv.debian +202 -0
  317. data/pkg/logstash.sysv.redhat +158 -0
  318. data/pkg/logstash.upstart.ubuntu +20 -0
  319. data/pkg/rpm/SOURCES/logstash.conf +26 -0
  320. data/pkg/rpm/SOURCES/logstash.init +80 -0
  321. data/pkg/rpm/SOURCES/logstash.logrotate +8 -0
  322. data/pkg/rpm/SOURCES/logstash.sysconfig +3 -0
  323. data/pkg/rpm/SOURCES/logstash.wrapper +105 -0
  324. data/pkg/rpm/SPECS/logstash.spec +180 -0
  325. data/pkg/rpm/readme.md +4 -0
  326. data/pkg/ubuntu/after-install.sh +7 -0
  327. data/pkg/ubuntu/before-install.sh +12 -0
  328. data/pkg/ubuntu/before-remove.sh +13 -0
  329. data/pull_release_note.rb +25 -0
  330. data/require-analyze.rb +22 -0
  331. data/spec/README.md +14 -0
  332. data/spec/codecs/edn.rb +40 -0
  333. data/spec/codecs/edn_lines.rb +53 -0
  334. data/spec/codecs/graphite.rb +96 -0
  335. data/spec/codecs/json.rb +57 -0
  336. data/spec/codecs/json_lines.rb +51 -0
  337. data/spec/codecs/json_spooler.rb +43 -0
  338. data/spec/codecs/msgpack.rb +39 -0
  339. data/spec/codecs/multiline.rb +60 -0
  340. data/spec/codecs/oldlogstashjson.rb +55 -0
  341. data/spec/codecs/plain.rb +35 -0
  342. data/spec/codecs/spool.rb +35 -0
  343. data/spec/conditionals/test.rb +323 -0
  344. data/spec/config.rb +31 -0
  345. data/spec/event.rb +165 -0
  346. data/spec/examples/fail2ban.rb +28 -0
  347. data/spec/examples/graphite-input.rb +41 -0
  348. data/spec/examples/mysql-slow-query.rb +70 -0
  349. data/spec/examples/parse-apache-logs.rb +66 -0
  350. data/spec/examples/parse-haproxy-logs.rb +115 -0
  351. data/spec/examples/syslog.rb +48 -0
  352. data/spec/filters/alter.rb +96 -0
  353. data/spec/filters/anonymize.rb +189 -0
  354. data/spec/filters/checksum.rb +41 -0
  355. data/spec/filters/clone.rb +67 -0
  356. data/spec/filters/collate.rb +122 -0
  357. data/spec/filters/csv.rb +174 -0
  358. data/spec/filters/date.rb +285 -0
  359. data/spec/filters/date_performance.rb +31 -0
  360. data/spec/filters/dns.rb +159 -0
  361. data/spec/filters/drop.rb +19 -0
  362. data/spec/filters/elapsed.rb +294 -0
  363. data/spec/filters/environment.rb +43 -0
  364. data/spec/filters/geoip.rb +62 -0
  365. data/spec/filters/grep.rb +342 -0
  366. data/spec/filters/grok.rb +473 -0
  367. data/spec/filters/grok/timeout2.rb +56 -0
  368. data/spec/filters/grok/timeouts.rb +39 -0
  369. data/spec/filters/i18n.rb +25 -0
  370. data/spec/filters/json.rb +72 -0
  371. data/spec/filters/json_encode.rb +37 -0
  372. data/spec/filters/kv.rb +403 -0
  373. data/spec/filters/metrics.rb +212 -0
  374. data/spec/filters/multiline.rb +119 -0
  375. data/spec/filters/mutate.rb +180 -0
  376. data/spec/filters/noop.rb +221 -0
  377. data/spec/filters/prune.rb +441 -0
  378. data/spec/filters/punct.rb +18 -0
  379. data/spec/filters/railsparallelrequest.rb +112 -0
  380. data/spec/filters/range.rb +169 -0
  381. data/spec/filters/split.rb +58 -0
  382. data/spec/filters/translate.rb +70 -0
  383. data/spec/filters/unique.rb +25 -0
  384. data/spec/filters/useragent.rb +42 -0
  385. data/spec/filters/xml.rb +157 -0
  386. data/spec/inputs/file.rb +107 -0
  387. data/spec/inputs/gelf.rb +52 -0
  388. data/spec/inputs/generator.rb +30 -0
  389. data/spec/inputs/imap.rb +60 -0
  390. data/spec/inputs/redis.rb +63 -0
  391. data/spec/inputs/relp.rb +70 -0
  392. data/spec/inputs/tcp.rb +101 -0
  393. data/spec/jar.rb +21 -0
  394. data/spec/outputs/csv.rb +266 -0
  395. data/spec/outputs/elasticsearch.rb +161 -0
  396. data/spec/outputs/elasticsearch_http.rb +240 -0
  397. data/spec/outputs/email.rb +173 -0
  398. data/spec/outputs/file.rb +82 -0
  399. data/spec/outputs/graphite.rb +236 -0
  400. data/spec/outputs/redis.rb +127 -0
  401. data/spec/speed.rb +20 -0
  402. data/spec/sqlite-test.rb +81 -0
  403. data/spec/support/LOGSTASH-733.rb +21 -0
  404. data/spec/support/LOGSTASH-820.rb +25 -0
  405. data/spec/support/akamai-grok.rb +26 -0
  406. data/spec/support/date-http.rb +17 -0
  407. data/spec/support/postwait1.rb +26 -0
  408. data/spec/support/pull375.rb +21 -0
  409. data/spec/test_utils.rb +125 -0
  410. data/spec/util/fieldeval_spec.rb +44 -0
  411. data/test/jenkins/config.xml.erb +74 -0
  412. data/test/jenkins/create-jobs.rb +23 -0
  413. data/test/jenkins/generatorjob.config.xml +66 -0
  414. data/tools/Gemfile +14 -0
  415. data/tools/Gemfile.jruby-1.9.lock +322 -0
  416. data/tools/Gemfile.rbx-2.1.lock +516 -0
  417. data/tools/Gemfile.ruby-1.9.1.lock +310 -0
  418. data/tools/Gemfile.ruby-2.0.0.lock +310 -0
  419. metadata +629 -0
@@ -0,0 +1,31 @@
1
+ # config syntax tests
2
+ #
3
+
4
+ require "logstash/config/grammar"
5
+ require "logstash/config/config_ast"
6
+
7
+ describe LogStashConfigParser do
8
+ it "should permit single-quoted attribute names" do
9
+ parser = LogStashConfigParser.new
10
+ config = parser.parse(%q(
11
+ input {
12
+ example {
13
+ 'foo' => 'bar'
14
+ test => { 'bar' => 'baz' }
15
+ }
16
+ }
17
+ ))
18
+
19
+ reject { config }.nil?
20
+ end
21
+
22
+ it "should permit empty plugin sections" do
23
+ parser = LogStashConfigParser.new
24
+ config = parser.parse(%q(
25
+ filter {
26
+ }
27
+ ))
28
+
29
+ reject { config }.nil?
30
+ end
31
+ end
@@ -0,0 +1,165 @@
1
+ require "logstash/event"
2
+ require "insist"
3
+
4
+ describe LogStash::Event do
5
+ subject do
6
+ LogStash::Event.new(
7
+ "@timestamp" => Time.iso8601("2013-01-01T00:00:00.000Z"),
8
+ "type" => "sprintf",
9
+ "message" => "hello world",
10
+ "tags" => [ "tag1" ],
11
+ "source" => "/home/foo",
12
+ "a" => "b",
13
+ "c" => {
14
+ "d" => "f",
15
+ "e" => {"f" => "g"}
16
+ },
17
+ "f" => { "g" => { "h" => "i" } },
18
+ "j" => {
19
+ "k1" => "v",
20
+ "k2" => [ "w", "x" ],
21
+ "k3" => {"4" => "m"},
22
+ 5 => 6,
23
+ "5" => 7
24
+ }
25
+ )
26
+ end
27
+
28
+ context "[]=" do
29
+ it "should raise an exception if you attempt to set @timestamp to a value type other than a Time object" do
30
+ insist { subject["@timestamp"] = "crash!" }.raises(TypeError)
31
+ end
32
+ end
33
+
34
+ context "#sprintf" do
35
+ it "should report a unix timestamp for %{+%s}" do
36
+ insist { subject.sprintf("%{+%s}") } == "1356998400"
37
+ end
38
+
39
+ it "should report a time with %{+format} syntax", :if => RUBY_ENGINE == "jruby" do
40
+ insist { subject.sprintf("%{+YYYY}") } == "2013"
41
+ insist { subject.sprintf("%{+MM}") } == "01"
42
+ insist { subject.sprintf("%{+HH}") } == "00"
43
+ end
44
+
45
+ it "should report fields with %{field} syntax" do
46
+ insist { subject.sprintf("%{type}") } == "sprintf"
47
+ insist { subject.sprintf("%{message}") } == subject["message"]
48
+ end
49
+
50
+ it "should print deep fields" do
51
+ insist { subject.sprintf("%{[j][k1]}") } == "v"
52
+ insist { subject.sprintf("%{[j][k2][0]}") } == "w"
53
+ end
54
+
55
+ it "should be able to take a non-string for the format" do
56
+ insist { subject.sprintf(2) } == "2"
57
+ end
58
+ end
59
+
60
+ context "#[]" do
61
+ it "should fetch data" do
62
+ insist { subject["type"] } == "sprintf"
63
+ end
64
+ it "should fetch fields" do
65
+ insist { subject["a"] } == "b"
66
+ insist { subject['c']['d'] } == "f"
67
+ end
68
+ it "should fetch deep fields" do
69
+ insist { subject["[j][k1]"] } == "v"
70
+ insist { subject["[c][d]"] } == "f"
71
+ insist { subject['[f][g][h]'] } == "i"
72
+ insist { subject['[j][k3][4]'] } == "m"
73
+ insist { subject['[j][5]'] } == 7
74
+
75
+ end
76
+
77
+ it "should be fast?", :if => ENV["SPEEDTEST"] do
78
+ 2.times do
79
+ start = Time.now
80
+ 100000.times { subject["[j][k1]"] }
81
+ puts "Duration: #{Time.now - start}"
82
+ end
83
+ end
84
+ end
85
+
86
+ context "#append" do
87
+ it "should append strings to an array" do
88
+ subject.append(LogStash::Event.new("message" => "another thing"))
89
+ insist { subject["message"] } == [ "hello world", "another thing" ]
90
+ end
91
+
92
+ it "should concatenate tags" do
93
+ subject.append(LogStash::Event.new("tags" => [ "tag2" ]))
94
+ insist { subject["tags"] } == [ "tag1", "tag2" ]
95
+ end
96
+
97
+ context "when event field is nil" do
98
+ it "should add single value as string" do
99
+ subject.append(LogStash::Event.new({"field1" => "append1"}))
100
+ insist { subject[ "field1" ] } == "append1"
101
+ end
102
+ it "should add multi values as array" do
103
+ subject.append(LogStash::Event.new({"field1" => [ "append1","append2" ]}))
104
+ insist { subject[ "field1" ] } == [ "append1","append2" ]
105
+ end
106
+ end
107
+
108
+ context "when event field is a string" do
109
+ before { subject[ "field1" ] = "original1" }
110
+
111
+ it "should append string to values, if different from current" do
112
+ subject.append(LogStash::Event.new({"field1" => "append1"}))
113
+ insist { subject[ "field1" ] } == [ "original1", "append1" ]
114
+ end
115
+ it "should not change value, if appended value is equal current" do
116
+ subject.append(LogStash::Event.new({"field1" => "original1"}))
117
+ insist { subject[ "field1" ] } == "original1"
118
+ end
119
+ it "should concatenate values in an array" do
120
+ subject.append(LogStash::Event.new({"field1" => [ "append1" ]}))
121
+ insist { subject[ "field1" ] } == [ "original1", "append1" ]
122
+ end
123
+ it "should join array, removing duplicates" do
124
+ subject.append(LogStash::Event.new({"field1" => [ "append1","original1" ]}))
125
+ insist { subject[ "field1" ] } == [ "original1", "append1" ]
126
+ end
127
+ end
128
+ context "when event field is an array" do
129
+ before { subject[ "field1" ] = [ "original1", "original2" ] }
130
+
131
+ it "should append string values to array, if not present in array" do
132
+ subject.append(LogStash::Event.new({"field1" => "append1"}))
133
+ insist { subject[ "field1" ] } == [ "original1", "original2", "append1" ]
134
+ end
135
+ it "should not append string values, if the array already contains it" do
136
+ subject.append(LogStash::Event.new({"field1" => "original1"}))
137
+ insist { subject[ "field1" ] } == [ "original1", "original2" ]
138
+ end
139
+ it "should join array, removing duplicates" do
140
+ subject.append(LogStash::Event.new({"field1" => [ "append1","original1" ]}))
141
+ insist { subject[ "field1" ] } == [ "original1", "original2", "append1" ]
142
+ end
143
+ end
144
+ end
145
+
146
+ it "timestamp parsing speed", :if => ENV["SPEEDTEST"] do
147
+ warmup = 10000
148
+ count = 1000000
149
+
150
+ data = { "@timestamp" => "2013-12-21T07:25:06.605Z" }
151
+ event = LogStash::Event.new(data)
152
+ insist { event["@timestamp"] }.is_a?(Time)
153
+
154
+ duration = 0
155
+ [warmup, count].each do |i|
156
+ start = Time.now
157
+ i.times do
158
+ data = { "@timestamp" => "2013-12-21T07:25:06.605Z" }
159
+ LogStash::Event.new(data.clone)
160
+ end
161
+ duration = Time.now - start
162
+ end
163
+ puts "event @timestamp parse rate: #{count / duration}/sec"
164
+ end
165
+ end
@@ -0,0 +1,28 @@
1
+ require "test_utils"
2
+
3
+ describe "fail2ban logs", :if => RUBY_ENGINE == "jruby" do
4
+ extend LogStash::RSpec
5
+
6
+ # The logstash config goes here.
7
+ # At this time, only filters are supported.
8
+ config <<-CONFIG
9
+ filter {
10
+ grok {
11
+ pattern => "^%{TIMESTAMP_ISO8601:timestamp} fail2ban\.actions: %{WORD:level} \\[%{WORD:program}\\] %{WORD:action} %{IP:ip}"
12
+ singles => true
13
+ }
14
+ date {
15
+ match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
16
+ }
17
+ mutate {
18
+ remove => timestamp
19
+ }
20
+ }
21
+ CONFIG
22
+
23
+ sample "2013-06-28 15:10:59,891 fail2ban.actions: WARNING [ssh] Ban 95.78.163.5" do
24
+ insist { subject["program"] } == "ssh"
25
+ insist { subject["action"] } == "Ban"
26
+ insist { subject["ip"] } == "95.78.163.5"
27
+ end
28
+ end
@@ -0,0 +1,41 @@
1
+ require "test_utils"
2
+
3
+ describe "receive graphite input", :if => RUBY_ENGINE == "jruby" do
4
+ extend LogStash::RSpec
5
+
6
+ # The logstash config goes here.
7
+ # At this time, only filters are supported.
8
+ config <<-CONFIG
9
+ # input {
10
+ # tcp {
11
+ # port => 1234
12
+ # mode => server
13
+ # type => graphite
14
+ # }
15
+ # }
16
+ filter {
17
+ grok {
18
+ pattern => "%{DATA:name} %{NUMBER:value:float} %{POSINT:ts}"
19
+ singles => true
20
+ }
21
+ date {
22
+ match => ["ts", UNIX]
23
+ }
24
+ mutate {
25
+ remove => ts
26
+ }
27
+ }
28
+ CONFIG
29
+
30
+ type "graphite"
31
+
32
+ sample "foo.bar.baz 4025.34 1364606522" do
33
+ insist { subject }.include?("name")
34
+ insist { subject }.include?("value")
35
+
36
+ insist { subject["name"] } == "foo.bar.baz"
37
+ insist { subject["value"] } == 4025.34
38
+ insist { subject["@timestamp"] } == Time.iso8601("2013-03-30T01:22:02.000Z")
39
+
40
+ end
41
+ end
@@ -0,0 +1,70 @@
1
+ require "test_utils"
2
+
3
+ # Skip until we convert this to use multiline codec
4
+ describe "parse mysql slow query log", :if => false do
5
+ extend LogStash::RSpec
6
+
7
+ config <<-'CONFIG'
8
+ filter {
9
+ grep {
10
+ # Drop the '# Time:' lines since they only appear when the 'time'
11
+ # changes and are omitted otherwise. Further, there's always (from what
12
+ # I have seen) a 'SET timestamp=123456789' line in each query event, so
13
+ # I use that as the timestamp instead.
14
+ #
15
+ # mysql logs are messed up, so this is pretty much best effort.
16
+ match => [ "@message", "^# Time: " ]
17
+ negate => true
18
+ }
19
+
20
+ grok {
21
+ singles => true
22
+ pattern => [
23
+ "^# User@Host: %{USER:user}\[[^\]]+\] @ %{HOST:host} \[%{IP:ip}?]",
24
+ "^# Query_time: %{NUMBER:duration:float} \s*Lock_time: %{NUMBER:lock_wait:float} \s*Rows_sent: %{NUMBER:results:int} \s*Rows_examined: %{NUMBER:scanned:int}",
25
+ "^SET timestamp=%{NUMBER:timestamp};"
26
+ ]
27
+ }
28
+
29
+ multiline {
30
+ pattern => "^# User@Host: "
31
+ negate => true
32
+ what => previous
33
+ }
34
+
35
+ date {
36
+ match => ["timestamp", UNIX]
37
+ }
38
+
39
+ mutate {
40
+ remove => "timestamp"
41
+ }
42
+ }
43
+ CONFIG
44
+
45
+ lines = <<-'MYSQL_SLOW_LOGS'
46
+ # Time: 121004 6:00:27
47
+ # User@Host: someuser[someuser] @ db.example.com [1.2.3.4]
48
+ # Query_time: 0.018143 Lock_time: 0.000042 Rows_sent: 237 Rows_examined: 286
49
+ use somedb;
50
+ SET timestamp=1349355627;
51
+ SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';
52
+ MYSQL_SLOW_LOGS
53
+
54
+ sample lines.split("\n") do
55
+ reject { subject }.is_a? Array # 1 event expected
56
+ insist { subject.message.split("\n").size } == 5 # 5 lines
57
+
58
+ lines.split("\n")[1..5].each_with_index do |line, i|
59
+ insist { subject.message.split("\n")[i] } == line
60
+ end
61
+
62
+ insist { subject["user"] } == "someuser"
63
+ insist { subject["host"] } == "db.example.com"
64
+ insist { subject["ip"] } == "1.2.3.4"
65
+ insist { subject["duration"] } == 0.018143
66
+ insist { subject["lock_wait"] } == 0.000042
67
+ insist { subject["results"] } == 237
68
+ insist { subject["scanned"] } == 286
69
+ end
70
+ end
@@ -0,0 +1,66 @@
1
+ require "test_utils"
2
+
3
+ describe "apache common log format", :if => RUBY_ENGINE == "jruby" do
4
+ extend LogStash::RSpec
5
+
6
+ # The logstash config goes here.
7
+ # At this time, only filters are supported.
8
+ config <<-CONFIG
9
+ filter {
10
+ grok {
11
+ pattern => "%{COMBINEDAPACHELOG}"
12
+ singles => true
13
+ }
14
+ date {
15
+ match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
16
+ }
17
+ }
18
+ CONFIG
19
+
20
+ # Here we provide a sample log event for the testing suite.
21
+ #
22
+ # Any filters you define above will be applied the same way the logstash
23
+ # agent performs. Inside the 'sample ... ' block the 'subject' will be
24
+ # a LogStash::Event object for you to inspect and verify for correctness.
25
+ sample '198.151.8.4 - - [29/Aug/2012:20:17:38 -0400] "GET /favicon.ico HTTP/1.1" 200 3638 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1"' do
26
+
27
+ # These 'insist' and 'reject' calls use my 'insist' rubygem.
28
+ # See http://rubydoc.info/gems/insist for more info.
29
+
30
+ # Require that grok does not fail to parse this event.
31
+ insist { subject["tags"] }.nil?
32
+
33
+ # Ensure that grok captures certain expected fields.
34
+ insist { subject }.include?("agent")
35
+ insist { subject }.include?("bytes")
36
+ insist { subject }.include?("clientip")
37
+ insist { subject }.include?("httpversion")
38
+ insist { subject }.include?("timestamp")
39
+ insist { subject }.include?("verb")
40
+ insist { subject }.include?("response")
41
+ insist { subject }.include?("request")
42
+
43
+ # Ensure that those fields match expected values from the event.
44
+ insist { subject["clientip"] } == "198.151.8.4"
45
+ insist { subject["timestamp"] } == "29/Aug/2012:20:17:38 -0400"
46
+ insist { subject["verb"] } == "GET"
47
+ insist { subject["request"] } == "/favicon.ico"
48
+ insist { subject["httpversion"] } == "1.1"
49
+ insist { subject["response"] } == "200"
50
+ insist { subject["bytes"] } == "3638"
51
+ insist { subject["referrer"] } == '"-"'
52
+ insist { subject["agent"] } == "\"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1\""
53
+
54
+ # Verify date parsing
55
+ insist { subject.timestamp } == Time.iso8601("2012-08-30T00:17:38.000Z")
56
+ end
57
+
58
+ sample '61.135.248.195 - - [26/Sep/2012:11:49:20 -0400] "GET /projects/keynav/ HTTP/1.1" 200 18985 "" "Mozilla/5.0 (compatible; YodaoBot/1.0; http://www.yodao.com/help/webmaster/spider/; )"' do
59
+ insist { subject["tags"] }.nil?
60
+ insist { subject["clientip"] } == "61.135.248.195"
61
+ end
62
+
63
+ sample '72.14.164.185 - - [25/Sep/2012:12:05:02 -0400] "GET /robots.txt HTTP/1.1" 200 - "www.brandimensions.com" "BDFetch"' do
64
+ insist { subject["tags"] }.nil?
65
+ end
66
+ end
@@ -0,0 +1,115 @@
1
+ require "test_utils"
2
+
3
+ describe "haproxy httplog format" do
4
+ extend LogStash::RSpec
5
+
6
+ # The logstash config goes here.
7
+ # At this time, only filters are supported.
8
+ config <<-CONFIG
9
+ filter {
10
+ grok {
11
+ pattern => "%{HAPROXYHTTP}"
12
+ }
13
+ }
14
+ CONFIG
15
+ # Here we provide a sample log event for the testing suite.
16
+ #
17
+ # Any filters you define above will be applied the same way the logstash
18
+ # agent performs. Inside the 'sample ... ' block the 'subject' will be
19
+ # a LogStash::Event object for you to inspect and verify for correctness.
20
+ # HAPROXYHTTP %{SYSLOGTIMESTAMP:syslog_timestamp} %{IPORHOST:syslog_server} %{SYSLOGPROG}: %{IP:client_ip}:%{INT:client_port} \[%{HAPROXYDATE:accept_date}\] %{NOTSPACE:frontend_name} %{NOTSPACE:backend_name}/%{NOTSPACE:server_name} %{INT:time_request}/%{INT:time_queue}/%{INT:time_backend_connect}/%{INT:time_backend_response}/%{NOTSPACE:time_duration} %{INT:http_status_code} %{NOTSPACE:bytes_read} %{DATA:captured_request_cookie} %{DATA:captured_response_cookie} %{NOTSPACE:termination_state} %{INT:actconn}/%{INT:feconn}/%{INT:beconn}/%{INT:srvconn}/%{NOTSPACE:retries} %{INT:srv_queue}/%{INT:backend_queue} (\{%{HAPROXYCAPTUREDREQUESTHEADERS}\})?( )?(\{%{HAPROXYCAPTUREDRESPONSEHEADERS}\})?( )?"(<BADREQ>|(%{WORD:http_verb} (%{URIPROTO:http_proto}://)?(?:%{USER:http_user}(?::[^@]*)?@)?(?:%{URIHOST:http_host})?(?:%{URIPATHPARAM:http_request})?( HTTP/%{NUMBER:http_version})?))?"
21
+
22
+ sample 'Feb 6 12:14:14 localhost haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in static/srv1 10/0/30/69/109 200 2750 - - ---- 1/1/1/1/0 0/0 {1wt.eu} {} "GET /index.html HTTP/1.1"' do
23
+
24
+ # These 'insist' and 'reject' calls use my 'insist' rubygem.
25
+ # See http://rubydoc.info/gems/insist for more info.
26
+
27
+ # Require that grok does not fail to parse this event.
28
+ insist { subject["tags"] }.nil?
29
+
30
+
31
+ # Ensure that grok captures certain expected fields.
32
+ insist { subject }.include?("syslog_timestamp")
33
+ insist { subject }.include?("syslog_server")
34
+ insist { subject }.include?("program")
35
+ insist { subject }.include?("pid")
36
+ insist { subject }.include?("client_ip")
37
+ insist { subject }.include?("client_port")
38
+ insist { subject }.include?("accept_date")
39
+ insist { subject }.include?("haproxy_monthday")
40
+ insist { subject }.include?("haproxy_month")
41
+ insist { subject }.include?("haproxy_year")
42
+ insist { subject }.include?("haproxy_time")
43
+ insist { subject }.include?("haproxy_hour")
44
+ insist { subject }.include?("haproxy_minute")
45
+ insist { subject }.include?("haproxy_second")
46
+ insist { subject }.include?("haproxy_milliseconds")
47
+ insist { subject }.include?("frontend_name")
48
+ insist { subject }.include?("backend_name")
49
+ insist { subject }.include?("server_name")
50
+ insist { subject }.include?("time_request")
51
+ insist { subject }.include?("time_queue")
52
+ insist { subject }.include?("time_backend_connect")
53
+ insist { subject }.include?("time_backend_response")
54
+ insist { subject }.include?("time_duration")
55
+ insist { subject }.include?("http_status_code")
56
+ insist { subject }.include?("bytes_read")
57
+ insist { subject }.include?("captured_request_cookie")
58
+ insist { subject }.include?("captured_response_cookie")
59
+ insist { subject }.include?("termination_state")
60
+ insist { subject }.include?("actconn")
61
+ insist { subject }.include?("feconn")
62
+ insist { subject }.include?("beconn")
63
+ insist { subject }.include?("srvconn")
64
+ insist { subject }.include?("retries")
65
+ insist { subject }.include?("srv_queue")
66
+ insist { subject }.include?("backend_queue")
67
+ insist { subject }.include?("captured_request_headers")
68
+ insist { subject }.include?("http_verb")
69
+ insist { subject }.include?("http_request")
70
+ insist { subject }.include?("http_version")
71
+
72
+ # # Ensure that those fields match expected values from the event.
73
+
74
+ insist{ subject["syslog_timestamp"] } == "Feb 6 12:14:14"
75
+ insist{ subject["syslog_server"] } == "localhost"
76
+ insist{ subject["program"] } == "haproxy"
77
+ insist{ subject["pid"] } == "14389"
78
+ insist{ subject["client_ip"] } == "10.0.1.2"
79
+ insist{ subject["client_port"] } == "33317"
80
+ insist{ subject["accept_date"] } == "06/Feb/2009:12:14:14.655"
81
+ insist{ subject["haproxy_monthday"] } == "06"
82
+ insist{ subject["haproxy_month"] } == "Feb"
83
+ insist{ subject["haproxy_year"] } == "2009"
84
+ insist{ subject["haproxy_time"] } == "12:14:14"
85
+ insist{ subject["haproxy_hour"] } == "12"
86
+ insist{ subject["haproxy_minute"] } == "14"
87
+ insist{ subject["haproxy_second"] } == "14"
88
+ insist{ subject["haproxy_milliseconds"] } == "655"
89
+ insist{ subject["frontend_name"] } == "http-in"
90
+ insist{ subject["backend_name"] } == "static"
91
+ insist{ subject["server_name"] } == "srv1"
92
+ insist{ subject["time_request"] } == "10"
93
+ insist{ subject["time_queue"] } == "0"
94
+ insist{ subject["time_backend_connect"] } == "30"
95
+ insist{ subject["time_backend_response"] } == "69"
96
+ insist{ subject["time_duration"] } == "109"
97
+ insist{ subject["http_status_code"] } == "200"
98
+ insist{ subject["bytes_read"] } == "2750"
99
+ insist{ subject["captured_request_cookie"] } == "-"
100
+ insist{ subject["captured_response_cookie"] } == "-"
101
+ insist{ subject["termination_state"] } == "----"
102
+ insist{ subject["actconn"] } == "1"
103
+ insist{ subject["feconn"] } == "1"
104
+ insist{ subject["beconn"] } == "1"
105
+ insist{ subject["srvconn"] } == "1"
106
+ insist{ subject["retries"] } == "0"
107
+ insist{ subject["srv_queue"] } == "0"
108
+ insist{ subject["backend_queue"] } == "0"
109
+ insist{ subject["captured_request_headers"] } == "1wt.eu"
110
+ insist{ subject["http_verb"] } == "GET"
111
+ insist{ subject["http_request"] } == "/index.html"
112
+ insist{ subject["http_version"] } == "1.1"
113
+ end
114
+
115
+ end