fluentd-ui 0.1.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.

Potentially problematic release.


This version of fluentd-ui might be problematic. Click here for more details.

Files changed (320) hide show
  1. checksums.yaml +7 -0
  2. data/.bowerrc +3 -0
  3. data/.gitignore +31 -0
  4. data/.rspec +1 -0
  5. data/ChangeLog +3 -0
  6. data/Gemfile +21 -0
  7. data/Gemfile.lock +247 -0
  8. data/Gemfile.production +3 -0
  9. data/README.md +53 -0
  10. data/Rakefile +8 -0
  11. data/app/assets/images/.keep +0 -0
  12. data/app/assets/javascripts/alert.js +51 -0
  13. data/app/assets/javascripts/application.js +22 -0
  14. data/app/assets/javascripts/nested_setting.js +41 -0
  15. data/app/assets/javascripts/setting_format.js +15 -0
  16. data/app/assets/javascripts/tutorial.js +58 -0
  17. data/app/assets/javascripts/vue/fluent_log.js +64 -0
  18. data/app/assets/javascripts/vue/in_tail_format.js +153 -0
  19. data/app/assets/javascripts/vue/treeview.js +97 -0
  20. data/app/assets/javascripts/vue_common.js +4 -0
  21. data/app/assets/stylesheets/application.css +18 -0
  22. data/app/assets/stylesheets/common.css.scss +152 -0
  23. data/app/controllers/api_controller.rb +37 -0
  24. data/app/controllers/application_controller.rb +110 -0
  25. data/app/controllers/concerns/.keep +0 -0
  26. data/app/controllers/fluentd/agents_controller.rb +35 -0
  27. data/app/controllers/fluentd/settings/in_syslog_controller.rb +34 -0
  28. data/app/controllers/fluentd/settings/in_tail_controller.rb +57 -0
  29. data/app/controllers/fluentd/settings/out_forward_controller.rb +42 -0
  30. data/app/controllers/fluentd/settings/out_mongo_controller.rb +36 -0
  31. data/app/controllers/fluentd/settings/out_s3_controller.rb +36 -0
  32. data/app/controllers/fluentd/settings/out_td_controller.rb +36 -0
  33. data/app/controllers/fluentd/settings_controller.rb +18 -0
  34. data/app/controllers/fluentd_controller.rb +62 -0
  35. data/app/controllers/misc_controller.rb +69 -0
  36. data/app/controllers/plugins_controller.rb +44 -0
  37. data/app/controllers/polling_controller.rb +20 -0
  38. data/app/controllers/sessions_controller.rb +45 -0
  39. data/app/controllers/tutorials_controller.rb +40 -0
  40. data/app/controllers/users_controller.rb +28 -0
  41. data/app/controllers/welcome_controller.rb +5 -0
  42. data/app/helpers/application_helper.rb +55 -0
  43. data/app/helpers/fluentd/settings_helper.rb +2 -0
  44. data/app/helpers/miscs_helper.rb +2 -0
  45. data/app/helpers/settings_helper.rb +43 -0
  46. data/app/mailers/.keep +0 -0
  47. data/app/models/.keep +0 -0
  48. data/app/models/concerns/.keep +0 -0
  49. data/app/models/fluentd.rb +178 -0
  50. data/app/models/fluentd/agent.rb +28 -0
  51. data/app/models/fluentd/agent/common.rb +76 -0
  52. data/app/models/fluentd/agent/configuration.rb +35 -0
  53. data/app/models/fluentd/agent/fluentd_gem.rb +104 -0
  54. data/app/models/fluentd/agent/local_common.rb +101 -0
  55. data/app/models/fluentd/agent/remote.rb +7 -0
  56. data/app/models/fluentd/agent/td_agent.rb +44 -0
  57. data/app/models/fluentd/api.rb +6 -0
  58. data/app/models/fluentd/api/http.rb +26 -0
  59. data/app/models/fluentd/setting.rb +4 -0
  60. data/app/models/fluentd/setting/common.rb +185 -0
  61. data/app/models/fluentd/setting/in_syslog.rb +16 -0
  62. data/app/models/fluentd/setting/in_tail.rb +107 -0
  63. data/app/models/fluentd/setting/out_forward.rb +70 -0
  64. data/app/models/fluentd/setting/out_mongo.rb +35 -0
  65. data/app/models/fluentd/setting/out_s3.rb +29 -0
  66. data/app/models/fluentd/setting/out_td.rb +26 -0
  67. data/app/models/plugin.rb +193 -0
  68. data/app/models/settings.rb +4 -0
  69. data/app/models/user.rb +52 -0
  70. data/app/views/fluentd/_form.html.haml +31 -0
  71. data/app/views/fluentd/edit.html.haml +3 -0
  72. data/app/views/fluentd/errors.html.haml +19 -0
  73. data/app/views/fluentd/log.html.haml +9 -0
  74. data/app/views/fluentd/new.html.haml +3 -0
  75. data/app/views/fluentd/settings/_form.html.haml +43 -0
  76. data/app/views/fluentd/settings/edit.html.haml +7 -0
  77. data/app/views/fluentd/settings/in_syslog/_form.html.haml +9 -0
  78. data/app/views/fluentd/settings/in_syslog/show.html.haml +6 -0
  79. data/app/views/fluentd/settings/in_tail/_form.html.haml +42 -0
  80. data/app/views/fluentd/settings/in_tail/after_file_choose.html.haml +19 -0
  81. data/app/views/fluentd/settings/in_tail/after_format.html.haml +10 -0
  82. data/app/views/fluentd/settings/in_tail/confirm.html.haml +13 -0
  83. data/app/views/fluentd/settings/in_tail/show.html.haml +5 -0
  84. data/app/views/fluentd/settings/out_forward/_form.html.haml +22 -0
  85. data/app/views/fluentd/settings/out_forward/show.html.haml +6 -0
  86. data/app/views/fluentd/settings/out_mongo/_form.html.haml +30 -0
  87. data/app/views/fluentd/settings/out_mongo/finish.html.haml +4 -0
  88. data/app/views/fluentd/settings/out_mongo/show.html.haml +6 -0
  89. data/app/views/fluentd/settings/out_s3/_form.html.haml +39 -0
  90. data/app/views/fluentd/settings/out_s3/show.html.haml +6 -0
  91. data/app/views/fluentd/settings/out_td/_form.html.haml +18 -0
  92. data/app/views/fluentd/settings/out_td/show.html.haml +6 -0
  93. data/app/views/fluentd/settings/show.html.haml +10 -0
  94. data/app/views/fluentd/settings/source_and_output.html.haml +45 -0
  95. data/app/views/fluentd/show.html.haml +60 -0
  96. data/app/views/layouts/application.html.erb +102 -0
  97. data/app/views/layouts/sign_in.html.erb +28 -0
  98. data/app/views/misc/information.html.haml +75 -0
  99. data/app/views/misc/update_fluentd_ui.html.haml +45 -0
  100. data/app/views/plugins/installed.html.haml +67 -0
  101. data/app/views/plugins/recommended.html.haml +59 -0
  102. data/app/views/plugins/updated.html.haml +29 -0
  103. data/app/views/sessions/new.html.haml +13 -0
  104. data/app/views/shared/_error.html.haml +3 -0
  105. data/app/views/shared/_flash.html.haml +10 -0
  106. data/app/views/shared/_fluentd_nav.html.haml +12 -0
  107. data/app/views/shared/_global_nav.html.erb +80 -0
  108. data/app/views/shared/_initial_setup.html.haml +13 -0
  109. data/app/views/shared/_modal.html.erb +25 -0
  110. data/app/views/shared/_setting_errors.html.haml +5 -0
  111. data/app/views/shared/vue/_fluent_log.html.erb +25 -0
  112. data/app/views/shared/vue/_in_tail_format.html.erb +53 -0
  113. data/app/views/shared/vue/_treeview.html.erb +30 -0
  114. data/app/views/tutorials/chapter1.html.erb +31 -0
  115. data/app/views/tutorials/chapter2.html.haml +12 -0
  116. data/app/views/tutorials/chapter3.html.haml +12 -0
  117. data/app/views/tutorials/chapter4.html.haml +12 -0
  118. data/app/views/tutorials/chapter5.html.haml +10 -0
  119. data/app/views/tutorials/index.html.haml +26 -0
  120. data/app/views/users/show.html.haml +22 -0
  121. data/app/workers/all_plugin_check_update.rb +14 -0
  122. data/app/workers/fluentd_ui_restart.rb +41 -0
  123. data/app/workers/fluentd_ui_update_check.rb +15 -0
  124. data/app/workers/gem_installer.rb +17 -0
  125. data/app/workers/gem_uninstaller.rb +15 -0
  126. data/app/workers/gem_update_check.rb +10 -0
  127. data/bin/bundle +3 -0
  128. data/bin/fluentd-ui +13 -0
  129. data/bin/fluentd-ui-restart +12 -0
  130. data/bin/rails +8 -0
  131. data/bin/rake +8 -0
  132. data/bin/spring +18 -0
  133. data/bower.json +10 -0
  134. data/circle.yml +8 -0
  135. data/config.ru +4 -0
  136. data/config/application.rb +48 -0
  137. data/config/application.yml +211 -0
  138. data/config/boot.rb +4 -0
  139. data/config/environment.rb +5 -0
  140. data/config/environments/development.rb +36 -0
  141. data/config/environments/production.rb +69 -0
  142. data/config/environments/test.rb +40 -0
  143. data/config/initializers/backtrace_silencers.rb +7 -0
  144. data/config/initializers/cookies_serializer.rb +3 -0
  145. data/config/initializers/filter_parameter_logging.rb +4 -0
  146. data/config/initializers/inflections.rb +16 -0
  147. data/config/initializers/mime_types.rb +4 -0
  148. data/config/initializers/prefetch_gem_updates.rb +1 -0
  149. data/config/initializers/session_store.rb +3 -0
  150. data/config/initializers/wrap_parameters.rb +14 -0
  151. data/config/locales/en.yml +204 -0
  152. data/config/locales/ja.yml +194 -0
  153. data/config/locales/translation_en.yml +255 -0
  154. data/config/locales/translation_ja.yml +255 -0
  155. data/config/locales/tutorial_en.yml +117 -0
  156. data/config/locales/tutorial_ja.yml +120 -0
  157. data/config/routes.rb +93 -0
  158. data/config/secrets.yml +22 -0
  159. data/db/schema.rb +0 -0
  160. data/db/seeds.rb +11 -0
  161. data/fluentd-ui-ss01.png +0 -0
  162. data/fluentd-ui-ss02.png +0 -0
  163. data/fluentd-ui-ss03.png +0 -0
  164. data/fluentd-ui-ss04.png +0 -0
  165. data/fluentd-ui-ss05.png +0 -0
  166. data/fluentd-ui.gemspec +46 -0
  167. data/lib/assets/.keep +0 -0
  168. data/lib/file_reverse_reader.rb +56 -0
  169. data/lib/fluentd-ui.rb +22 -0
  170. data/lib/fluentd-ui/command.rb +52 -0
  171. data/lib/fluentd-ui/version.rb +3 -0
  172. data/lib/grok_converter.rb +39 -0
  173. data/lib/regexp_preview.rb +48 -0
  174. data/lib/tasks/.keep +0 -0
  175. data/lib/treeview.rb +45 -0
  176. data/log/.keep +0 -0
  177. data/public/404.html +67 -0
  178. data/public/422.html +67 -0
  179. data/public/500.html +66 -0
  180. data/public/favicon.ico +0 -0
  181. data/public/fluentd-logo-right-text.png +0 -0
  182. data/public/fluentd-logo.png +0 -0
  183. data/public/fluentd.png +0 -0
  184. data/public/robots.txt +5 -0
  185. data/spec/controllers/plugins_controller_spec.rb +5 -0
  186. data/spec/controllers/polling_controller_spec.rb +5 -0
  187. data/spec/controllers/sessions_controller_spec.rb +5 -0
  188. data/spec/controllers/tutorials_controller_spec.rb +5 -0
  189. data/spec/factories/fluentd.rb +11 -0
  190. data/spec/factories/plugins.rb +8 -0
  191. data/spec/factories/user.rb +6 -0
  192. data/spec/features/fluentd/setting/out_forward_spec.rb +45 -0
  193. data/spec/features/fluentd/setting/out_td_spec.rb +35 -0
  194. data/spec/features/sessions_spec.rb +55 -0
  195. data/spec/features/shared_examples/login_required.rb +4 -0
  196. data/spec/features/users_spec.rb +9 -0
  197. data/spec/grok_converter_spec.rb +50 -0
  198. data/spec/lib/file_reverse_reader_spec.rb +73 -0
  199. data/spec/lib/fluentd-ui_spec.rb +35 -0
  200. data/spec/models/fluentd/agent_spec.rb +91 -0
  201. data/spec/models/fluentd/setting/common_spec.rb +178 -0
  202. data/spec/models/fluentd/setting/in_syslog_spec.rb +35 -0
  203. data/spec/models/fluentd/setting/out_mongo_spec.rb +40 -0
  204. data/spec/models/fluentd/setting/out_td_spec.rb +38 -0
  205. data/spec/models/fluentd_spec.rb +166 -0
  206. data/spec/models/plugin_spec.rb +191 -0
  207. data/spec/models/user_spec.rb +15 -0
  208. data/spec/spec_helper.rb +58 -0
  209. data/spec/support/fixtures/error0.log +12 -0
  210. data/spec/support/fixtures/error2.log +130 -0
  211. data/spec/support/fluentd_agent_common_behavior.rb +114 -0
  212. data/spec/support/fluentd_agent_restart_strategy.rb +94 -0
  213. data/tmp/.gitkeep +0 -0
  214. data/vendor/assets/javascripts/.keep +0 -0
  215. data/vendor/assets/javascripts/bower/es6-promise/.bower.json +15 -0
  216. data/vendor/assets/javascripts/bower/es6-promise/bower.json +5 -0
  217. data/vendor/assets/javascripts/bower/es6-promise/promise.js +684 -0
  218. data/vendor/assets/javascripts/bower/es6-promise/promise.min.js +1 -0
  219. data/vendor/assets/javascripts/bower/lodash/.bower.json +33 -0
  220. data/vendor/assets/javascripts/bower/lodash/LICENSE.txt +22 -0
  221. data/vendor/assets/javascripts/bower/lodash/bower.json +23 -0
  222. data/vendor/assets/javascripts/bower/lodash/dist/lodash.compat.js +7157 -0
  223. data/vendor/assets/javascripts/bower/lodash/dist/lodash.compat.min.js +61 -0
  224. data/vendor/assets/javascripts/bower/lodash/dist/lodash.js +6785 -0
  225. data/vendor/assets/javascripts/bower/lodash/dist/lodash.min.js +56 -0
  226. data/vendor/assets/javascripts/bower/lodash/dist/lodash.underscore.js +4979 -0
  227. data/vendor/assets/javascripts/bower/lodash/dist/lodash.underscore.min.js +39 -0
  228. data/vendor/assets/javascripts/bower/vue/.bower.json +29 -0
  229. data/vendor/assets/javascripts/bower/vue/LICENSE +21 -0
  230. data/vendor/assets/javascripts/bower/vue/dist/vue.js +4713 -0
  231. data/vendor/assets/javascripts/bower/vue/dist/vue.min.js +7 -0
  232. data/vendor/assets/javascripts/bower/vue/src/batcher.js +45 -0
  233. data/vendor/assets/javascripts/bower/vue/src/binding.js +103 -0
  234. data/vendor/assets/javascripts/bower/vue/src/compiler.js +1037 -0
  235. data/vendor/assets/javascripts/bower/vue/src/config.js +19 -0
  236. data/vendor/assets/javascripts/bower/vue/src/deps-parser.js +65 -0
  237. data/vendor/assets/javascripts/bower/vue/src/directive.js +258 -0
  238. data/vendor/assets/javascripts/bower/vue/src/directives/html.js +41 -0
  239. data/vendor/assets/javascripts/bower/vue/src/directives/if.js +56 -0
  240. data/vendor/assets/javascripts/bower/vue/src/directives/index.js +129 -0
  241. data/vendor/assets/javascripts/bower/vue/src/directives/model.js +174 -0
  242. data/vendor/assets/javascripts/bower/vue/src/directives/on.js +56 -0
  243. data/vendor/assets/javascripts/bower/vue/src/directives/partial.js +50 -0
  244. data/vendor/assets/javascripts/bower/vue/src/directives/repeat.js +246 -0
  245. data/vendor/assets/javascripts/bower/vue/src/directives/style.js +40 -0
  246. data/vendor/assets/javascripts/bower/vue/src/directives/view.js +56 -0
  247. data/vendor/assets/javascripts/bower/vue/src/directives/with.js +50 -0
  248. data/vendor/assets/javascripts/bower/vue/src/emitter.js +97 -0
  249. data/vendor/assets/javascripts/bower/vue/src/exp-parser.js +190 -0
  250. data/vendor/assets/javascripts/bower/vue/src/filters.js +190 -0
  251. data/vendor/assets/javascripts/bower/vue/src/fragment.js +84 -0
  252. data/vendor/assets/javascripts/bower/vue/src/main.js +186 -0
  253. data/vendor/assets/javascripts/bower/vue/src/observer.js +446 -0
  254. data/vendor/assets/javascripts/bower/vue/src/text-parser.js +96 -0
  255. data/vendor/assets/javascripts/bower/vue/src/transition.js +228 -0
  256. data/vendor/assets/javascripts/bower/vue/src/utils.js +321 -0
  257. data/vendor/assets/javascripts/bower/vue/src/viewmodel.js +180 -0
  258. data/vendor/assets/javascripts/sb-admin-v2/bootstrap.js +1951 -0
  259. data/vendor/assets/javascripts/sb-admin-v2/bootstrap.min.js +6 -0
  260. data/vendor/assets/javascripts/sb-admin-v2/demo/dashboard-demo.js +117 -0
  261. data/vendor/assets/javascripts/sb-admin-v2/demo/flot-demo.js +1242 -0
  262. data/vendor/assets/javascripts/sb-admin-v2/demo/morris-demo.js +155 -0
  263. data/vendor/assets/javascripts/sb-admin-v2/jquery-1.10.2.js +6 -0
  264. data/vendor/assets/javascripts/sb-admin-v2/plugins/dataTables/dataTables.bootstrap.js +245 -0
  265. data/vendor/assets/javascripts/sb-admin-v2/plugins/dataTables/jquery.dataTables.js +14013 -0
  266. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/excanvas.min.js +1 -0
  267. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.js +2599 -0
  268. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.pie.js +750 -0
  269. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.resize.js +60 -0
  270. data/vendor/assets/javascripts/sb-admin-v2/plugins/flot/jquery.flot.tooltip.min.js +12 -0
  271. data/vendor/assets/javascripts/sb-admin-v2/plugins/metisMenu/jquery.metisMenu.js +45 -0
  272. data/vendor/assets/javascripts/sb-admin-v2/plugins/morris/morris.js +1888 -0
  273. data/vendor/assets/javascripts/sb-admin-v2/plugins/morris/raphael-2.1.0.min.js +10 -0
  274. data/vendor/assets/javascripts/sb-admin-v2/sb-admin.js +18 -0
  275. data/vendor/assets/stylesheets/.keep +0 -0
  276. data/vendor/assets/stylesheets/sb-admin-v2/bootstrap.css +5830 -0
  277. data/vendor/assets/stylesheets/sb-admin-v2/bootstrap.min.css +7 -0
  278. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/css/font-awesome.css +1338 -0
  279. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/css/font-awesome.min.css +4 -0
  280. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/FontAwesome.otf +0 -0
  281. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.eot +0 -0
  282. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.svg +414 -0
  283. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
  284. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/fonts/fontawesome-webfont.woff +0 -0
  285. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_bordered-pulled.scss +16 -0
  286. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_core.scss +12 -0
  287. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_fixed-width.scss +6 -0
  288. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_icons.scss +412 -0
  289. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_larger.scss +13 -0
  290. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_list.scss +19 -0
  291. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_mixins.scss +20 -0
  292. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_path.scss +14 -0
  293. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_rotated-flipped.scss +9 -0
  294. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_spinning.scss +30 -0
  295. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_stacked.scss +20 -0
  296. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/_variables.scss +381 -0
  297. data/vendor/assets/stylesheets/sb-admin-v2/font-awesome/scss/font-awesome.scss +17 -0
  298. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.eot +0 -0
  299. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.svg +229 -0
  300. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.ttf +0 -0
  301. data/vendor/assets/stylesheets/sb-admin-v2/fonts/glyphicons-halflings-regular.woff +0 -0
  302. data/vendor/assets/stylesheets/sb-admin-v2/plugins/dataTables/dataTables.bootstrap.css +233 -0
  303. data/vendor/assets/stylesheets/sb-admin-v2/plugins/morris/morris-0.4.3.min.css +2 -0
  304. data/vendor/assets/stylesheets/sb-admin-v2/plugins/social-buttons/social-buttons.css +68 -0
  305. data/vendor/assets/stylesheets/sb-admin-v2/plugins/timeline/timeline.css +144 -0
  306. data/vendor/assets/stylesheets/sb-admin-v2/sb-admin.css +329 -0
  307. data/vendor/patterns/firewalls +60 -0
  308. data/vendor/patterns/grok-patterns +94 -0
  309. data/vendor/patterns/haproxy +37 -0
  310. data/vendor/patterns/java +3 -0
  311. data/vendor/patterns/junos +9 -0
  312. data/vendor/patterns/linux-syslog +16 -0
  313. data/vendor/patterns/mcollective +1 -0
  314. data/vendor/patterns/mcollective-patterns +4 -0
  315. data/vendor/patterns/mongodb +4 -0
  316. data/vendor/patterns/nagios +108 -0
  317. data/vendor/patterns/postgresql +3 -0
  318. data/vendor/patterns/redis +3 -0
  319. data/vendor/patterns/ruby +2 -0
  320. metadata +659 -0
@@ -0,0 +1,191 @@
1
+ require 'spec_helper'
2
+
3
+ describe Plugin do
4
+ let(:plugin) { build(:plugin) }
5
+
6
+ describe ".installed" do
7
+ before { Plugin.stub(:"`").and_return(gem_list) }
8
+
9
+ context "fluent-plugin-foo 0.1.2" do
10
+ let(:target) { Plugin.new(gem_name: "fluent-plugin-foo", version: "0.1.2") }
11
+ let(:gem_list) { <<-GEM.strip_heredoc }
12
+ dummy (3.3.3)
13
+ fluent-plugin-foo (0.1.2)
14
+ more_dummy (0.0.1)
15
+ GEM
16
+
17
+ it "detect foo plugin" do
18
+ Plugin.installed.first.inspect.should == target.inspect
19
+ end
20
+
21
+ it "detected foo plugin is marked as installed" do
22
+ target.should be_installed
23
+ end
24
+
25
+ it "detected foo plugin version to be installed_version" do
26
+ target.installed_version.should == target.version
27
+ end
28
+ end
29
+ end
30
+
31
+ describe "#valid?" do
32
+ describe "gem_name" do
33
+ subject { plugin }
34
+ before { plugin.gem_name = gem_name }
35
+
36
+ context "nil is invalid" do
37
+ let(:gem_name) { nil }
38
+ it { should_not be_valid }
39
+ end
40
+
41
+ context "somthing filled is valid" do
42
+ let(:gem_name) { "foobar" }
43
+ it { should be_valid }
44
+ end
45
+ end
46
+
47
+ describe "version" do
48
+ subject { plugin }
49
+ before { plugin.version = version }
50
+
51
+ context "nil is invalid" do
52
+ let(:version) { nil }
53
+ it { should_not be_valid }
54
+ end
55
+
56
+ context "somthing filled is valid" do
57
+ let(:version) { "0.0.1" }
58
+ it { should be_valid }
59
+ end
60
+ end
61
+ end
62
+
63
+ describe "#install!" do
64
+ describe "invoke fluent_gem" do
65
+ after do
66
+ plugin.stub(:valid?).and_return(valid)
67
+ plugin.stub(:installed?).and_return(installed)
68
+ plugin.install!
69
+ end
70
+
71
+ context "valid" do
72
+ let(:valid) { true }
73
+
74
+ context "installed" do
75
+ let(:installed) { true }
76
+ it { plugin.should_not_receive(:fluent_gem) }
77
+ end
78
+
79
+ context "not installed" do
80
+ let(:installed) { false }
81
+ it { plugin.should_receive(:fluent_gem) }
82
+ end
83
+ end
84
+
85
+ context "invalid" do
86
+ let(:valid) { false }
87
+
88
+ context "installed" do
89
+ let(:installed) { true }
90
+ it { plugin.should_not_receive(:fluent_gem) }
91
+ end
92
+
93
+ context "not installed" do
94
+ let(:installed) { false }
95
+ it { plugin.should_not_receive(:fluent_gem) }
96
+ end
97
+ end
98
+ end
99
+
100
+ context "system command error" do
101
+ before { plugin.should_receive(:system).at_least(1).and_return(false) }
102
+ subject { expect { plugin.install! } }
103
+
104
+ it "raise GemError" do
105
+ subject.to raise_error(Plugin::GemError)
106
+ end
107
+
108
+ it "error message contains gem name" do
109
+ subject.to raise_error(/#{plugin.gem_name}/)
110
+ end
111
+ end
112
+ end
113
+
114
+ describe "#uninstall!" do
115
+ let(:installed_plugin) { build(:plugin, gem_name: "fluent-plugin-foobar") }
116
+
117
+ before do
118
+ installed_plugin.stub(:installed?).and_return(installed)
119
+ end
120
+
121
+ context "installed" do
122
+ let(:installed) { true }
123
+ before { installed_plugin.should_receive(:gem_uninstall) }
124
+ it { installed_plugin.uninstall! }
125
+ end
126
+
127
+ context "not installed" do
128
+ let(:installed) { false }
129
+ before { installed_plugin.should_not_receive(:gem_uninstall) }
130
+ it { installed_plugin.uninstall! }
131
+ end
132
+ end
133
+
134
+ describe "#upgrade!" do
135
+ let(:installed_plugin) { build(:plugin, gem_name: "fluent-plugin-foobar", version: current_version) }
136
+ let(:current_version) { "1.0.0" }
137
+ let(:target_version) { "1.2.0" }
138
+
139
+ before do
140
+ # NOTE: not `plugin.stub` because upgrade! creates new Plugin instance internally
141
+ installed_plugin.stub(:installed?).and_return(true)
142
+ Plugin.any_instance.stub(:fluent_gem).and_return(true)
143
+
144
+ installed_plugin.should_receive(:uninstall!)
145
+ Plugin.any_instance.should_receive(:install!)
146
+ end
147
+
148
+ it { installed_plugin.upgrade!(target_version) }
149
+ end
150
+
151
+ describe "#to_param" do
152
+ it { plugin.to_param.should == plugin.gem_name }
153
+ end
154
+
155
+ describe "Gem versions" do
156
+ let(:plugin) { build(:plugin, version: current_version) }
157
+ let(:current_version) { "1.0.0" }
158
+ let(:versions) { %w(1.0.1 0.99.1 1.0.0 0.99.0 0.1.0 0.0.3 0.0.2 0.0.1) }
159
+ let(:authors) { %w(foo bar) }
160
+ let(:json) do
161
+ versions.map do |ver|
162
+ {
163
+ number: ver,
164
+ summary: "summary of #{ver}",
165
+ authors: authors,
166
+ }
167
+ end.to_json
168
+ end
169
+
170
+ before do
171
+ stub_request(:get, plugin.gem_json_url).to_return(body: json)
172
+ end
173
+
174
+ it "latest version is 1.0.1" do
175
+ plugin.latest_version.should == "1.0.1"
176
+ end
177
+ it "1.0.0 is not latest" do
178
+ plugin.should_not be_latest_version
179
+ plugin.latest_version.should_not == plugin.version
180
+ end
181
+ it "released version is sorted" do
182
+ plugin.released_versions.should == versions.sort_by{|ver| Gem::Version.new(ver) }.reverse
183
+ end
184
+ it "authors" do
185
+ plugin.authors.should == authors
186
+ end
187
+ it "summary" do
188
+ plugin.summary.should == "summary of #{plugin.version}"
189
+ end
190
+ end
191
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe User do
4
+ let(:user) { build(:user) }
5
+
6
+ describe "#valid?" do
7
+ describe "password" do
8
+ it "password != password_confirmation is invalid" do
9
+ user.password = "a"
10
+ user.password_confirmation = "b"
11
+ user.should_not be_valid
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,58 @@
1
+ if ENV['RAILS_ENV'] == 'test'
2
+ require 'simplecov'
3
+ SimpleCov.start 'rails'
4
+
5
+ if ENV['CIRCLE_ARTIFACTS'] # https://circleci.com/docs/code-coverage
6
+ dir = File.join("..", "..", "..", ENV['CIRCLE_ARTIFACTS'], "coverage")
7
+ SimpleCov.coverage_dir(dir)
8
+ end
9
+ end
10
+
11
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
12
+ ENV["RAILS_ENV"] ||= 'test'
13
+ require File.expand_path("../../config/environment", __FILE__)
14
+ require 'rspec/rails'
15
+ require 'webmock/rspec'
16
+ WebMock.disable_net_connect!(allow_localhost: true)
17
+ require 'capybara/poltergeist'
18
+ Capybara.javascript_driver = :poltergeist
19
+
20
+ # Requires supporting ruby files with custom matchers and macros, etc,
21
+ # in spec/support/ and its subdirectories.
22
+ Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
23
+ Dir[Rails.root.join("spec/*/shared_examples/**/*.rb")].each { |f| require f }
24
+
25
+ RSpec.configure do |config|
26
+ # ## Mock Framework
27
+ #
28
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
29
+ #
30
+ # config.mock_with :mocha
31
+ # config.mock_with :flexmock
32
+ # config.mock_with :rr
33
+
34
+ # Syntax sugar to use the FactoryGirl methods directly instead FactoryGirl.create ete.
35
+ config.include FactoryGirl::Syntax::Methods
36
+
37
+ # If true, the base class of anonymous controllers will be inferred
38
+ # automatically. This will be the default behavior in future versions of
39
+ # rspec-rails.
40
+ config.infer_base_class_for_anonymous_controllers = false
41
+
42
+ # Run specs in random order to surface order dependencies. If you find an
43
+ # order dependency and want to debug it, you can fix the order by providing
44
+ # the seed, which is printed after each run.
45
+ # --seed 1234
46
+ config.order = "random"
47
+
48
+ # allow `should`
49
+ config.expect_with :rspec do |c|
50
+ c.syntax = [:should, :expect]
51
+ end
52
+ config.mock_with :rspec do |c|
53
+ c.syntax = [:should, :expect]
54
+ end
55
+
56
+ # rspec 2.99
57
+ config.infer_spec_type_from_file_location!
58
+ end
@@ -0,0 +1,12 @@
1
+ foo
2
+ bar
3
+ baz
4
+ 1
5
+ 2
6
+ 3
7
+ 4
8
+ 5
9
+ 6
10
+ 10
11
+ 11
12
+ 12
@@ -0,0 +1,130 @@
1
+ 2014-05-27 10:54:37 +0900 [info]: starting fluentd-0.10.48
2
+ 2014-05-27 10:54:37 +0900 [info]: reading config file path="/tmp/2.conf"
3
+ 2014-05-27 10:54:37 +0900 [info]: gem 'fluentd' version '0.10.48'
4
+ 2014-05-27 10:54:37 +0900 [info]: using configuration file: <ROOT>
5
+ <source>
6
+ type forward
7
+ port 24224
8
+ </source>
9
+ <source>
10
+ type monitor_agent
11
+ port 24220
12
+ </source>
13
+ <source>
14
+ type http
15
+ port 9880
16
+ </source>
17
+ <source>
18
+ type debug_agent
19
+ port 24230
20
+ </source>
21
+ </ROOT>
22
+ 2014-05-27 10:54:37 +0900 [info]: adding source type="forward"
23
+ 2014-05-27 10:54:37 +0900 [info]: adding source type="monitor_agent"
24
+ 2014-05-27 10:54:37 +0900 [info]: adding source type="http"
25
+ 2014-05-27 10:54:37 +0900 [info]: adding source type="debug_agent"
26
+ 2014-05-27 10:54:37 +0900 [info]: listening fluent socket on 0.0.0.0:24224
27
+ 2014-05-27 10:54:37 +0900 [error]: unexpected error error_class=Errno::EADDRINUSE error=#<Errno::EADDRINUSE: Address already in use - bind(2) for "0.0.0.0" port 24224>
28
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/cool.io-1.2.4/lib/cool.io/server.rb:57:in `initialize'
29
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/cool.io-1.2.4/lib/cool.io/server.rb:57:in `new'
30
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/cool.io-1.2.4/lib/cool.io/server.rb:57:in `initialize'
31
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/plugin/in_forward.rb:76:in `new'
32
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/plugin/in_forward.rb:76:in `listen'
33
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/plugin/in_forward.rb:47:in `start'
34
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/engine.rb:260:in `block in start'
35
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/engine.rb:259:in `each'
36
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/engine.rb:259:in `start'
37
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/engine.rb:206:in `run'
38
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:417:in `run_engine'
39
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:116:in `block in start'
40
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:229:in `call'
41
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:229:in `main_process'
42
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:204:in `block in supervise'
43
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:203:in `fork'
44
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:203:in `supervise'
45
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:109:in `start'
46
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/command/fluentd.rb:160:in `<top (required)>'
47
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/bin/fluentd:6:in `require'
48
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/bin/fluentd:6:in `<top (required)>'
49
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/bin/fluentd:23:in `load'
50
+ 2014-05-27 10:54:37 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/bin/fluentd:23:in `<main>'
51
+ 2014-05-27 10:54:37 +0900 [info]: shutting down fluentd
52
+ 2014-05-27 10:54:37 +0900 [info]: process finished code=0
53
+ 2014-05-27 10:54:37 +0900 [warn]: process died within 1 second. exit.
54
+ 2014-05-27 11:28:10 +0900 [info]: reading config file path="/tmp/2.conf"
55
+ 2014-05-27 11:28:10 +0900 [info]: gem 'fluentd' version '0.10.48'
56
+ 2014-05-27 11:28:10 +0900 [info]: using configuration file: <ROOT>
57
+ <source>
58
+ type forward
59
+ port 24224
60
+ </source>
61
+ <source>
62
+ type monitor_agent
63
+ port 24220
64
+ </source>
65
+ <source>
66
+ type http
67
+ port 9880
68
+ </source>
69
+ <source>
70
+ type debug_agent
71
+ port 24230
72
+ </source>
73
+ </ROOT>
74
+ 2014-05-27 11:28:10 +0900 [info]: adding source type="forward"
75
+ 2014-05-27 11:28:10 +0900 [info]: adding source type="monitor_agent"
76
+ 2014-05-27 11:28:10 +0900 [info]: adding source type="http"
77
+ 2014-05-27 11:28:10 +0900 [info]: adding source type="debug_agent"
78
+ 2014-05-27 11:28:12 +0900 [info]: starting fluentd-0.10.48
79
+ 2014-05-27 11:28:12 +0900 [info]: reading config file path="/tmp/2.conf"
80
+ 2014-05-27 11:28:12 +0900 [info]: gem 'fluentd' version '0.10.48'
81
+ 2014-05-27 11:28:12 +0900 [info]: using configuration file: <ROOT>
82
+ <source>
83
+ type forward
84
+ port 24224
85
+ </source>
86
+ <source>
87
+ type monitor_agent
88
+ port 24220
89
+ </source>
90
+ <source>
91
+ type http
92
+ port 9880
93
+ </source>
94
+ <source>
95
+ type debug_agent
96
+ port 24230
97
+ </source>
98
+ </ROOT>
99
+ 2014-05-27 11:28:12 +0900 [info]: adding source type="forward"
100
+ 2014-05-27 11:28:12 +0900 [info]: adding source type="monitor_agent"
101
+ 2014-05-27 11:28:12 +0900 [info]: adding source type="http"
102
+ 2014-05-27 11:28:12 +0900 [info]: adding source type="debug_agent"
103
+ 2014-05-27 11:28:12 +0900 [info]: listening fluent socket on 0.0.0.0:24224
104
+ 2014-05-27 11:28:12 +0900 [error]: unexpected error error_class=Errno::EADDRINUSE error=#<Errno::EADDRINUSE: Address already in use - bind(2) for "0.0.0.0" port 24224>
105
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/cool.io-1.2.4/lib/cool.io/server.rb:57:in `initialize'
106
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/cool.io-1.2.4/lib/cool.io/server.rb:57:in `new'
107
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/cool.io-1.2.4/lib/cool.io/server.rb:57:in `initialize'
108
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/plugin/in_forward.rb:76:in `new'
109
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/plugin/in_forward.rb:76:in `listen'
110
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/plugin/in_forward.rb:47:in `start'
111
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/engine.rb:260:in `block in start'
112
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/engine.rb:259:in `each'
113
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/engine.rb:259:in `start'
114
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/engine.rb:206:in `run'
115
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:417:in `run_engine'
116
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:116:in `block in start'
117
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:229:in `call'
118
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:229:in `main_process'
119
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:204:in `block in supervise'
120
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:203:in `fork'
121
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:203:in `supervise'
122
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/supervisor.rb:109:in `start'
123
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/lib/fluent/command/fluentd.rb:160:in `<top (required)>'
124
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/bin/fluentd:6:in `require'
125
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/fluentd-0.10.48/bin/fluentd:6:in `<top (required)>'
126
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/bin/fluentd:23:in `load'
127
+ 2014-05-27 11:28:12 +0900 [error]: /Users/uu59/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/bin/fluentd:23:in `<main>'
128
+ 2014-05-27 11:28:12 +0900 [info]: shutting down fluentd
129
+ 2014-05-27 11:28:12 +0900 [info]: process finished code=0
130
+ 2014-05-27 11:28:12 +0900 [warn]: process died within 1 second. exit.
@@ -0,0 +1,114 @@
1
+ shared_examples_for "Fluentd::Agent has common behavior" do |klass|
2
+ describe "#extra_options" do
3
+ context "blank" do
4
+ let(:options) { {} }
5
+ it { instance.pid_file.should == described_class.default_options[:pid_file] }
6
+ it { instance.log_file.should == described_class.default_options[:log_file] }
7
+ it { instance.config_file.should == described_class.default_options[:config_file] }
8
+ end
9
+
10
+ context "given" do
11
+ let(:options) do
12
+ {
13
+ :pid_file => pid_file,
14
+ :log_file => log_file,
15
+ :config_file => config_file,
16
+ }
17
+ end
18
+ let(:pid_file) { "pid" }
19
+ let(:log_file) { "log" }
20
+ let(:config_file) { "config" }
21
+
22
+ it { instance.pid_file.should == pid_file }
23
+ it { instance.log_file.should == log_file }
24
+ it { instance.config_file.should == config_file }
25
+ end
26
+ end
27
+
28
+ describe "#logged_errors" do
29
+ before { instance.stub(:log_file).and_return(logfile) }
30
+
31
+ describe "#errors_since" do
32
+ let(:logged_time) { Time.parse('2014-05-27') }
33
+ let(:now) { Time.parse('2014-05-29') }
34
+
35
+ before { Timecop.freeze(now) }
36
+ after { Timecop.return }
37
+
38
+ subject { instance.errors_since(days.days.ago) }
39
+
40
+ context "has no errors" do
41
+ let(:logfile) { File.expand_path("./spec/support/fixtures/error0.log", Rails.root) }
42
+ let(:days) { 100 }
43
+
44
+ it "empty array" do
45
+ should be_empty
46
+ end
47
+ end
48
+
49
+ context "has errors" do
50
+ let(:logfile) { File.expand_path("./spec/support/fixtures/error2.log", Rails.root) }
51
+
52
+ context "unreachable since" do
53
+ let(:days) { 0 }
54
+ it { should be_empty }
55
+ end
56
+
57
+ context "reachable since" do
58
+ let(:days) { 100 }
59
+
60
+ it "contain stack trace" do
61
+ subject[0][:subject].should include("Address already in use - bind(2)")
62
+ end
63
+
64
+ it "newer(bottom) is first" do
65
+ one = Time.parse(subject[0][:subject])
66
+ two = Time.parse(subject[1][:subject])
67
+ one.should >= two
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ describe "#recent_errors" do
74
+ context "have 0 error log" do
75
+ let(:logfile) { File.expand_path("./spec/support/fixtures/error0.log", Rails.root) }
76
+ subject { instance.recent_errors(2) }
77
+
78
+ it "empty array" do
79
+ should be_empty
80
+ end
81
+ end
82
+
83
+ context "have 2 error log" do
84
+ let(:logfile) { File.expand_path("./spec/support/fixtures/error2.log", Rails.root) }
85
+ subject { instance.recent_errors(2) }
86
+
87
+ describe "limit" do
88
+ subject { instance.recent_errors(limit).length }
89
+
90
+ context "=1" do
91
+ let(:limit) { 1 }
92
+ it { should == limit }
93
+ end
94
+
95
+ context "=2" do
96
+ let(:limit) { 2 }
97
+ it { should == limit }
98
+ end
99
+ end
100
+
101
+ it "contain stack trace" do
102
+ subject[0][:subject].should include("Address already in use - bind(2)")
103
+ end
104
+
105
+ it "newer(bottom) is first" do
106
+ one = Time.parse(subject[0][:subject])
107
+ two = Time.parse(subject[1][:subject])
108
+ one.should >= two
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+