arachni 1.2.1 → 1.3

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 (373) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +66 -0
  3. data/Gemfile +1 -1
  4. data/README.md +16 -5
  5. data/components/checks/active/ldap_injection/errors.txt +1 -0
  6. data/components/checks/active/source_code_disclosure.rb +1 -1
  7. data/components/checks/active/unvalidated_redirect.rb +6 -6
  8. data/components/checks/active/unvalidated_redirect_dom.rb +10 -7
  9. data/components/checks/passive/grep/captcha.rb +14 -5
  10. data/components/checks/passive/grep/form_upload.rb +7 -3
  11. data/components/checks/passive/grep/hsts.rb +3 -3
  12. data/components/checks/passive/grep/html_objects.rb +2 -3
  13. data/components/checks/passive/grep/http_only_cookies.rb +2 -3
  14. data/components/checks/passive/grep/insecure_cookies.rb +1 -1
  15. data/components/checks/passive/grep/password_autocomplete.rb +2 -2
  16. data/components/checks/passive/grep/unencrypted_password_forms.rb +7 -7
  17. data/components/checks/passive/grep/x_frame_options.rb +2 -2
  18. data/components/checks/passive/http_put.rb +2 -3
  19. data/components/path_extractors/comments.rb +3 -3
  20. data/components/path_extractors/scripts.rb +10 -1
  21. data/components/plugins/defaults/autothrottle.rb +27 -18
  22. data/components/plugins/defaults/meta/remedies/discovery.rb +30 -33
  23. data/components/plugins/defaults/meta/remedies/timing_attacks.rb +7 -11
  24. data/components/plugins/login_script.rb +9 -3
  25. data/components/plugins/proxy.rb +4 -3
  26. data/components/reporters/html.rb +11 -14
  27. data/components/reporters/html/default/issue.erb +13 -38
  28. data/components/reporters/html/default/issue/info.erb +1 -1
  29. data/components/reporters/html/default/summary/issues/by_name.erb +3 -3
  30. data/components/reporters/stdout.rb +62 -71
  31. data/components/reporters/xml.rb +26 -40
  32. data/components/reporters/xml/schema.xsd +43 -89
  33. data/lib/arachni/browser.rb +52 -3
  34. data/lib/arachni/browser/javascript.rb +3 -3
  35. data/lib/arachni/browser/javascript/scripts/taint_tracer.js +46 -25
  36. data/lib/arachni/browser_cluster.rb +61 -0
  37. data/lib/arachni/browser_cluster/job.rb +21 -1
  38. data/lib/arachni/browser_cluster/jobs/browser_provider.rb +3 -1
  39. data/lib/arachni/browser_cluster/jobs/resource_exploration.rb +2 -1
  40. data/lib/arachni/browser_cluster/jobs/resource_exploration/event_trigger.rb +2 -1
  41. data/lib/arachni/browser_cluster/jobs/taint_trace.rb +3 -2
  42. data/lib/arachni/browser_cluster/jobs/taint_trace/event_trigger.rb +1 -1
  43. data/lib/arachni/browser_cluster/worker.rb +5 -0
  44. data/lib/arachni/check/auditor.rb +22 -12
  45. data/lib/arachni/data/framework.rb +13 -1
  46. data/lib/arachni/data/issues.rb +9 -25
  47. data/lib/arachni/element/base.rb +9 -3
  48. data/lib/arachni/element/capabilities/analyzable.rb +2 -6
  49. data/lib/arachni/element/capabilities/analyzable/differential.rb +24 -7
  50. data/lib/arachni/element/capabilities/analyzable/{taint.rb → signature.rb} +23 -23
  51. data/lib/arachni/element/capabilities/auditable.rb +0 -6
  52. data/lib/arachni/element/capabilities/dom_only.rb +61 -0
  53. data/lib/arachni/element/capabilities/with_dom.rb +3 -1
  54. data/lib/arachni/element/cookie.rb +35 -5
  55. data/lib/arachni/element/cookie/dom.rb +13 -4
  56. data/lib/arachni/element/{capabilities/auditable/dom.rb → dom.rb} +20 -68
  57. data/lib/arachni/element/dom/capabilities/auditable.rb +29 -0
  58. data/lib/arachni/element/dom/capabilities/inputtable.rb +27 -0
  59. data/lib/arachni/element/dom/capabilities/mutable.rb +21 -0
  60. data/lib/arachni/element/dom/capabilities/submittable.rb +52 -0
  61. data/lib/arachni/element/form.rb +12 -1
  62. data/lib/arachni/element/form/capabilities/mutable.rb +2 -1
  63. data/lib/arachni/element/form/capabilities/with_dom.rb +0 -1
  64. data/lib/arachni/element/form/dom.rb +9 -3
  65. data/lib/arachni/element/header.rb +14 -33
  66. data/lib/arachni/element/header/capabilities/inputtable.rb +29 -0
  67. data/lib/arachni/element/header/capabilities/mutable.rb +51 -0
  68. data/lib/arachni/element/input/dom.rb +71 -0
  69. data/lib/arachni/element/json.rb +2 -0
  70. data/lib/arachni/element/link.rb +3 -0
  71. data/lib/arachni/element/link/capabilities/with_dom.rb +0 -1
  72. data/lib/arachni/element/link/dom.rb +16 -3
  73. data/lib/arachni/element/link/dom/capabilities/submittable.rb +29 -0
  74. data/lib/arachni/element/link_template.rb +3 -5
  75. data/lib/arachni/element/link_template/capabilities/inputtable.rb +5 -0
  76. data/lib/arachni/element/link_template/capabilities/with_dom.rb +0 -1
  77. data/lib/arachni/element/link_template/dom.rb +16 -3
  78. data/lib/arachni/element/link_template/dom/capabilities/submittable.rb +29 -0
  79. data/lib/arachni/element/server.rb +3 -5
  80. data/lib/arachni/element/ui_form.rb +106 -0
  81. data/lib/arachni/element/ui_form/dom.rb +107 -0
  82. data/lib/arachni/element/ui_input.rb +62 -0
  83. data/lib/arachni/element/xml.rb +2 -1
  84. data/lib/arachni/framework.rb +7 -5
  85. data/lib/arachni/framework/parts/audit.rb +0 -1
  86. data/lib/arachni/framework/parts/check.rb +1 -0
  87. data/lib/arachni/framework/parts/data.rb +4 -0
  88. data/lib/arachni/framework/parts/state.rb +0 -2
  89. data/lib/arachni/http/client.rb +17 -6
  90. data/lib/arachni/http/proxy_server.rb +52 -5
  91. data/lib/arachni/http/request.rb +1 -1
  92. data/lib/arachni/issue.rb +34 -179
  93. data/lib/arachni/issue/severity.rb +2 -0
  94. data/lib/arachni/option_groups/audit.rb +22 -2
  95. data/lib/arachni/option_groups/browser_cluster.rb +15 -0
  96. data/lib/arachni/page.rb +3 -2
  97. data/lib/arachni/parser.rb +24 -5
  98. data/lib/arachni/platform/manager.rb +1 -2
  99. data/lib/arachni/rpc/server/framework.rb +3 -4
  100. data/lib/arachni/rpc/server/framework/multi_instance.rb +2 -1
  101. data/lib/arachni/session.rb +1 -1
  102. data/lib/arachni/trainer.rb +4 -7
  103. data/lib/arachni/watir/element.rb +12 -1
  104. data/lib/version +1 -1
  105. data/spec/arachni/browser/element_locator_spec.rb +43 -43
  106. data/spec/arachni/browser/javascript/dom_monitor_spec.rb +44 -44
  107. data/spec/arachni/browser/javascript/proxy/stub_spec.rb +17 -14
  108. data/spec/arachni/browser/javascript/proxy_spec.rb +24 -24
  109. data/spec/arachni/browser/javascript/taint_tracer/frame/called_function_spec.rb +11 -11
  110. data/spec/arachni/browser/javascript/taint_tracer/frame_spec.rb +7 -7
  111. data/spec/arachni/browser/javascript/taint_tracer/sink/data_flow_spec.rb +13 -13
  112. data/spec/arachni/browser/javascript/taint_tracer/sink/execution_flow_spec.rb +7 -7
  113. data/spec/arachni/browser/javascript/taint_tracer_spec.rb +568 -558
  114. data/spec/arachni/browser/javascript_spec.rb +73 -63
  115. data/spec/arachni/browser_cluster/job/result_spec.rb +3 -3
  116. data/spec/arachni/browser_cluster/job_spec.rb +68 -48
  117. data/spec/arachni/browser_cluster/jobs/resource_exploration/event_trigger/result_spec.rb +2 -2
  118. data/spec/arachni/browser_cluster/jobs/resource_exploration/event_trigger_spec.rb +5 -4
  119. data/spec/arachni/browser_cluster/jobs/resource_exploration/result_spec.rb +2 -2
  120. data/spec/arachni/browser_cluster/jobs/resource_exploration_spec.rb +5 -5
  121. data/spec/arachni/browser_cluster/worker_spec.rb +87 -70
  122. data/spec/arachni/browser_cluster_spec.rb +64 -39
  123. data/spec/arachni/browser_spec.rb +692 -527
  124. data/spec/arachni/check/auditor_spec.rb +177 -147
  125. data/spec/arachni/check/base_spec.rb +33 -33
  126. data/spec/arachni/check/manager_spec.rb +15 -15
  127. data/spec/arachni/component/base_spec.rb +8 -8
  128. data/spec/arachni/component/manager_spec.rb +100 -99
  129. data/spec/arachni/component/options/address_spec.rb +3 -3
  130. data/spec/arachni/component/options/base_spec.rb +7 -7
  131. data/spec/arachni/component/options/bool_spec.rb +9 -9
  132. data/spec/arachni/component/options/float_spec.rb +6 -6
  133. data/spec/arachni/component/options/int_spec.rb +5 -5
  134. data/spec/arachni/component/options/multiple_choice_spec.rb +12 -12
  135. data/spec/arachni/component/options/object_spec.rb +2 -2
  136. data/spec/arachni/component/options/path_spec.rb +3 -3
  137. data/spec/arachni/component/options/port_spec.rb +5 -5
  138. data/spec/arachni/component/options/string_spec.rb +3 -3
  139. data/spec/arachni/component/options/url_spec.rb +4 -4
  140. data/spec/arachni/component/utilities_spec.rb +2 -2
  141. data/spec/arachni/data/framework/rpc_spec.rb +10 -9
  142. data/spec/arachni/data/framework_spec.rb +65 -46
  143. data/spec/arachni/data/issues_spec.rb +39 -77
  144. data/spec/arachni/data/plugins_spec.rb +11 -11
  145. data/spec/arachni/data/session_spec.rb +6 -6
  146. data/spec/arachni/data_spec.rb +8 -8
  147. data/spec/arachni/element/body_spec.rb +10 -10
  148. data/spec/arachni/element/capabilities/analyzable/differential_spec.rb +39 -21
  149. data/spec/arachni/element/capabilities/analyzable/{taint_spec.rb → signature_spec.rb} +63 -63
  150. data/spec/arachni/element/capabilities/analyzable/timeout_spec.rb +51 -51
  151. data/spec/arachni/element/capabilities/with_scope/scope_spec.rb +5 -5
  152. data/spec/arachni/element/cookie/dom_spec.rb +37 -18
  153. data/spec/arachni/element/cookie_spec.rb +206 -139
  154. data/spec/arachni/element/form/dom_spec.rb +36 -19
  155. data/spec/arachni/element/form_spec.rb +210 -187
  156. data/spec/arachni/element/generic_dom_spec.rb +14 -14
  157. data/spec/arachni/element/header_spec.rb +35 -17
  158. data/spec/arachni/element/json_spec.rb +53 -31
  159. data/spec/arachni/element/link/dom_spec.rb +46 -28
  160. data/spec/arachni/element/link_spec.rb +58 -40
  161. data/spec/arachni/element/link_template/dom_spec.rb +47 -29
  162. data/spec/arachni/element/link_template_spec.rb +79 -61
  163. data/spec/arachni/element/path_spec.rb +1 -1
  164. data/spec/arachni/element/server_spec.rb +33 -32
  165. data/spec/arachni/element/ui_form/ui_form_dom_spec.rb +164 -0
  166. data/spec/arachni/element/ui_form_spec.rb +242 -0
  167. data/spec/arachni/element/ui_input/dom_spec.rb +157 -0
  168. data/spec/arachni/element/ui_input_spec.rb +136 -0
  169. data/spec/arachni/element/xml_spec.rb +42 -24
  170. data/spec/arachni/element_filter_spec.rb +49 -48
  171. data/spec/arachni/error_spec.rb +3 -3
  172. data/spec/arachni/framework/parts/audit_spec.rb +64 -63
  173. data/spec/arachni/framework/parts/browser_spec.rb +16 -16
  174. data/spec/arachni/framework/parts/check_spec.rb +3 -3
  175. data/spec/arachni/framework/parts/data_spec.rb +48 -48
  176. data/spec/arachni/framework/parts/platform_spec.rb +3 -3
  177. data/spec/arachni/framework/parts/plugin_spec.rb +7 -6
  178. data/spec/arachni/framework/parts/report_spec.rb +7 -7
  179. data/spec/arachni/framework/parts/scope_spec.rb +16 -16
  180. data/spec/arachni/framework/parts/state_spec.rb +68 -69
  181. data/spec/arachni/framework_spec.rb +39 -31
  182. data/spec/arachni/http/client/dynamic_404_handlers_spec.rb +32 -32
  183. data/spec/arachni/http/client_spec.rb +219 -208
  184. data/spec/arachni/http/cookie_jar_spec.rb +72 -72
  185. data/spec/arachni/http/headers_spec.rb +14 -14
  186. data/spec/arachni/http/proxy_server_spec.rb +43 -42
  187. data/spec/arachni/http/request_spec.rb +105 -103
  188. data/spec/arachni/http/response/scope_spec.rb +24 -24
  189. data/spec/arachni/http/response_spec.rb +50 -49
  190. data/spec/arachni/issue/severity_spec.rb +10 -9
  191. data/spec/arachni/issue_spec.rb +71 -369
  192. data/spec/arachni/option_groups/audit_spec.rb +114 -114
  193. data/spec/arachni/option_groups/browser_cluster_spec.rb +20 -3
  194. data/spec/arachni/option_groups/datastore_spec.rb +6 -6
  195. data/spec/arachni/option_groups/dispatcher_spec.rb +19 -19
  196. data/spec/arachni/option_groups/http_spec.rb +11 -11
  197. data/spec/arachni/option_groups/input_spec.rb +31 -27
  198. data/spec/arachni/option_groups/output_spec.rb +2 -2
  199. data/spec/arachni/option_groups/paths_spec.rb +17 -17
  200. data/spec/arachni/option_groups/rpc_spec.rb +2 -2
  201. data/spec/arachni/option_groups/scope_spec.rb +40 -40
  202. data/spec/arachni/option_groups/session_spec.rb +6 -5
  203. data/spec/arachni/option_groups/snapshot_spec.rb +4 -4
  204. data/spec/arachni/options_spec.rb +46 -45
  205. data/spec/arachni/page/dom/transition_spec.rb +74 -72
  206. data/spec/arachni/page/dom_spec.rb +35 -35
  207. data/spec/arachni/page/scope_spec.rb +15 -15
  208. data/spec/arachni/page_spec.rb +217 -217
  209. data/spec/arachni/parser_spec.rb +106 -104
  210. data/spec/arachni/platform/fingerprinter_spec.rb +17 -14
  211. data/spec/arachni/platform/list_spec.rb +33 -33
  212. data/spec/arachni/platform/manager_spec.rb +67 -64
  213. data/spec/arachni/plugin/base_spec.rb +10 -10
  214. data/spec/arachni/plugin/manager_spec.rb +38 -37
  215. data/spec/arachni/report_spec.rb +43 -40
  216. data/spec/arachni/reporter/base_spec.rb +15 -15
  217. data/spec/arachni/reporter/manager_spec.rb +4 -4
  218. data/spec/arachni/reporter/options_spec.rb +6 -6
  219. data/spec/arachni/rpc/client/base_spec.rb +6 -6
  220. data/spec/arachni/rpc/client/dispatcher_spec.rb +2 -2
  221. data/spec/arachni/rpc/client/instance_spec.rb +6 -6
  222. data/spec/arachni/rpc/server/active_options_spec.rb +11 -8
  223. data/spec/arachni/rpc/server/base_spec.rb +5 -5
  224. data/spec/arachni/rpc/server/checks/manager_spec.rb +8 -8
  225. data/spec/arachni/rpc/server/dispatcher/node_spec.rb +37 -37
  226. data/spec/arachni/rpc/server/dispatcher/service_spec.rb +15 -14
  227. data/spec/arachni/rpc/server/dispatcher_spec.rb +36 -35
  228. data/spec/arachni/rpc/server/framework/distributor_spec.rb +36 -36
  229. data/spec/arachni/rpc/server/framework_multi_spec.rb +340 -336
  230. data/spec/arachni/rpc/server/framework_spec.rb +90 -85
  231. data/spec/arachni/rpc/server/instance_spec.rb +126 -107
  232. data/spec/arachni/rpc/server/output_spec.rb +1 -1
  233. data/spec/arachni/rpc/server/plugin/manager_spec.rb +6 -6
  234. data/spec/arachni/ruby/array_spec.rb +42 -42
  235. data/spec/arachni/ruby/hash_spec.rb +20 -18
  236. data/spec/arachni/ruby/io_spec.rb +2 -2
  237. data/spec/arachni/ruby/object_spec.rb +1 -1
  238. data/spec/arachni/ruby/set_spec.rb +3 -3
  239. data/spec/arachni/ruby/string_spec.rb +30 -30
  240. data/spec/arachni/ruby/webrick_spec.rb +2 -2
  241. data/spec/arachni/scope_spec.rb +1 -1
  242. data/spec/arachni/session_spec.rb +67 -64
  243. data/spec/arachni/snapshot_spec.rb +15 -15
  244. data/spec/arachni/state/audit_spec.rb +11 -11
  245. data/spec/arachni/state/element_filter_spec.rb +6 -6
  246. data/spec/arachni/state/framework/rpc_spec.rb +12 -12
  247. data/spec/arachni/state/framework_spec.rb +125 -121
  248. data/spec/arachni/state/http_spec.rb +7 -7
  249. data/spec/arachni/state/options_spec.rb +7 -7
  250. data/spec/arachni/state/plugins_spec.rb +8 -8
  251. data/spec/arachni/state_spec.rb +10 -10
  252. data/spec/arachni/support/buffer/autoflush_spec.rb +16 -16
  253. data/spec/arachni/support/buffer/base_spec.rb +39 -39
  254. data/spec/arachni/support/cache/least_cost_replacement_spec.rb +18 -18
  255. data/spec/arachni/support/cache/least_recently_pushed_spec.rb +24 -24
  256. data/spec/arachni/support/cache/least_recently_used_spec.rb +20 -20
  257. data/spec/arachni/support/cache/preference_spec.rb +4 -4
  258. data/spec/arachni/support/cache/random_replacement_spec.rb +8 -8
  259. data/spec/arachni/support/crypto/rsa_aes_cbc_spec.rb +1 -1
  260. data/spec/arachni/support/database/hash_spec.rb +44 -43
  261. data/spec/arachni/support/database/queue_spec.rb +27 -27
  262. data/spec/arachni/support/lookup/hash_set_spec.rb +8 -8
  263. data/spec/arachni/support/lookup/moolb_spec.rb +3 -3
  264. data/spec/arachni/support/mixins/observable_spec.rb +6 -6
  265. data/spec/arachni/support/signature_spec.rb +19 -19
  266. data/spec/arachni/trainer_spec.rb +39 -39
  267. data/spec/arachni/typhoeus/hydra_spec.rb +2 -2
  268. data/spec/arachni/uri/scope_spec.rb +66 -66
  269. data/spec/arachni/uri_spec.rb +107 -105
  270. data/spec/arachni/utilities_spec.rb +40 -40
  271. data/spec/components/checks/active/csrf_spec.rb +8 -8
  272. data/spec/components/checks/active/no_sql_injection_spec.rb +1 -1
  273. data/spec/components/checks/active/sql_injection_spec.rb +16 -16
  274. data/spec/components/checks/active/trainer_spec.rb +4 -4
  275. data/spec/components/checks/active/unvalidated_redirect_dom_spec.rb +4 -2
  276. data/spec/components/checks/active/xpath_injection_spec.rb +1 -1
  277. data/spec/components/checks/active/xss_dom_script_context_spec.rb +51 -21
  278. data/spec/components/checks/active/xss_dom_spec.rb +46 -24
  279. data/spec/components/checks/passive/allowed_methods_spec.rb +1 -1
  280. data/spec/components/checks/passive/grep/cookie_set_for_parent_domain_spec.rb +1 -1
  281. data/spec/components/checks/passive/grep/hsts_spec.rb +2 -2
  282. data/spec/components/checks/passive/grep/http_only_cookies_spec.rb +1 -1
  283. data/spec/components/checks/passive/grep/insecure_cookies_spec.rb +1 -1
  284. data/spec/components/checks/passive/grep/insecure_cors_policy_spec.rb +2 -2
  285. data/spec/components/checks/passive/grep/password_autocomplete_spec.rb +1 -1
  286. data/spec/components/checks/passive/grep/private_ip_spec.rb +3 -3
  287. data/spec/components/checks/passive/grep/unencrypted_password_forms_spec.rb +1 -1
  288. data/spec/components/checks/passive/grep/x_frame_options_spec.rb +2 -2
  289. data/spec/components/checks/passive/interesting_responses_spec.rb +2 -2
  290. data/spec/components/checks/passive/webdav_spec.rb +1 -1
  291. data/spec/components/checks/passive/xst_spec.rb +1 -1
  292. data/spec/components/fingerprinters/servers/apache_spec.rb +2 -2
  293. data/spec/components/path_extractors/comments_spec.rb +5 -1
  294. data/spec/components/path_extractors/scripts_spec.rb +5 -2
  295. data/spec/components/plugins/autologin_spec.rb +22 -22
  296. data/spec/components/plugins/autothrottle_spec.rb +6 -5
  297. data/spec/components/plugins/content_types_spec.rb +4 -4
  298. data/spec/components/plugins/cookie_collector_spec.rb +5 -5
  299. data/spec/components/plugins/exec_spec.rb +12 -12
  300. data/spec/components/plugins/form_dicattack_spec.rb +3 -3
  301. data/spec/components/plugins/headers_collector_spec.rb +8 -8
  302. data/spec/components/plugins/healthmap_spec.rb +3 -3
  303. data/spec/components/plugins/http_dicattack_spec.rb +3 -3
  304. data/spec/components/plugins/login_script_spec.rb +79 -22
  305. data/spec/components/plugins/meta/remedies/discovery_spec.rb +3 -2
  306. data/spec/components/plugins/meta/remedies/timing_attacks_spec.rb +3 -3
  307. data/spec/components/plugins/meta/uniformity_spec.rb +2 -2
  308. data/spec/components/plugins/restrict_to_dom_state_spec.rb +1 -1
  309. data/spec/components/plugins/script_spec.rb +1 -1
  310. data/spec/components/plugins/uncommon_headers_spec.rb +2 -2
  311. data/spec/components/plugins/vector_collector_spec.rb +2 -2
  312. data/spec/components/plugins/vector_feed_spec.rb +40 -40
  313. data/spec/components/plugins/waf_detector_spec.rb +6 -6
  314. data/spec/components/reporters/json_spec.rb +4 -4
  315. data/spec/components/reporters/marshal_spec.rb +2 -2
  316. data/spec/components/reporters/yaml_spec.rb +3 -2
  317. data/spec/external/wavsep/active/sqli_spec.rb +1 -3
  318. data/spec/spec_helper.rb +4 -0
  319. data/spec/support/factories/element/ui_form.rb +14 -0
  320. data/spec/support/factories/element/ui_input.rb +13 -0
  321. data/spec/support/factories/issue.rb +0 -13
  322. data/spec/support/fixtures/report.afr +0 -0
  323. data/spec/support/fixtures/{taint_check/taint.rb → signature_check/signature.rb} +2 -2
  324. data/spec/support/helpers/browser_cluster/jobs/taint_tracer.rb +11 -11
  325. data/spec/support/helpers/framework.rb +1 -1
  326. data/spec/support/helpers/pages.rb +2 -2
  327. data/spec/support/servers/arachni/browser.rb +139 -0
  328. data/spec/support/servers/arachni/browser/javascript/taint_tracer.rb +40 -0
  329. data/spec/support/servers/arachni/element/capabilities/analyzable/{taint.rb → signature.rb} +0 -0
  330. data/spec/support/servers/arachni/element/input/input_dom.rb +102 -0
  331. data/spec/support/servers/arachni/element/ui_form/ui_form_dom.rb +238 -0
  332. data/spec/support/servers/checks/active/trainer_check.rb +7 -7
  333. data/spec/support/servers/checks/active/unvalidated_redirect_dom.rb +22 -6
  334. data/spec/support/servers/checks/active/xss_dom.rb +50 -0
  335. data/spec/support/servers/checks/active/xss_dom_script_context.rb +53 -0
  336. data/spec/support/shared/browser/javascript/taint_tracer/sink/base.rb +6 -6
  337. data/spec/support/shared/check.rb +10 -12
  338. data/spec/support/shared/component/options/base.rb +24 -24
  339. data/spec/support/shared/element/base.rb +25 -25
  340. data/spec/support/shared/element/capabilities/auditable.rb +116 -140
  341. data/spec/support/shared/element/capabilities/dom_only.rb +65 -0
  342. data/spec/support/shared/element/capabilities/inputtable.rb +71 -86
  343. data/spec/support/shared/element/capabilities/mutable.rb +122 -111
  344. data/spec/support/shared/element/capabilities/refreshable.rb +10 -10
  345. data/spec/support/shared/element/capabilities/{submitable.rb → submittable.rb} +26 -26
  346. data/spec/support/shared/element/capabilities/with_auditor.rb +10 -10
  347. data/spec/support/shared/element/capabilities/with_dom.rb +8 -8
  348. data/spec/support/shared/element/capabilities/with_node.rb +4 -6
  349. data/spec/support/shared/element/capabilities/with_scope.rb +2 -2
  350. data/spec/support/shared/element/capabilities/with_source.rb +6 -8
  351. data/spec/support/shared/element/dom.rb +144 -0
  352. data/spec/support/shared/element/dom/auditable.rb +42 -0
  353. data/spec/support/shared/element/dom/inputtable.rb +5 -0
  354. data/spec/support/shared/element/dom/mutable.rb +3 -0
  355. data/spec/support/shared/element/dom/submittable.rb +119 -0
  356. data/spec/support/shared/external/wavsep.rb +3 -3
  357. data/spec/support/shared/fingerprinter.rb +2 -2
  358. data/spec/support/shared/framework.rb +1 -1
  359. data/spec/support/shared/http/message.rb +9 -9
  360. data/spec/support/shared/option_group.rb +17 -17
  361. data/spec/support/shared/path_extractor.rb +1 -1
  362. data/spec/support/shared/plugin.rb +2 -2
  363. data/spec/support/shared/support/cache.rb +57 -57
  364. data/spec/support/shared/support/lookup.rb +25 -25
  365. data/ui/cli/framework.rb +22 -11
  366. data/ui/cli/framework/option_parser.rb +15 -0
  367. data/ui/cli/option_parser.rb +8 -1
  368. data/ui/cli/output.rb +2 -1
  369. metadata +54 -20
  370. data/components/checks/active/xss_dom_inputs.rb +0 -236
  371. data/spec/components/checks/active/xss_dom_inputs_spec.rb +0 -30
  372. data/spec/support/servers/checks/active/xss_dom_inputs.rb +0 -59
  373. data/spec/support/shared/element/capabilities/auditable/dom.rb +0 -322
@@ -14,32 +14,33 @@ describe Arachni::RPC::Server::Dispatcher::Service do
14
14
 
15
15
  describe '#dispatcher' do
16
16
  it 'provides access to the parent Dispatcher' do
17
- @dispatcher.echo.test_dispatcher.should be_true
17
+ expect(@dispatcher.echo.test_dispatcher).to be_truthy
18
18
  end
19
19
  end
20
20
 
21
21
  describe '#opts' do
22
22
  it 'provides access to the Dispatcher\'s options' do
23
- @dispatcher.echo.test_opts.should be_true
23
+ expect(@dispatcher.echo.test_opts).to be_truthy
24
24
  end
25
25
  end
26
26
 
27
27
  describe '#node' do
28
28
  it 'provides access to the Dispatcher\'s node' do
29
- @dispatcher.echo.test_node.should be_true
29
+ expect(@dispatcher.echo.test_node).to be_truthy
30
30
  end
31
31
  end
32
32
 
33
33
  describe '#instances' do
34
34
  it 'provides access to the running instances' do
35
- @dispatcher.echo.instances.map{ |i| i['pid'] }.should == @dispatcher.jobs.map{ |j| j['pid'] }
35
+ expect(@dispatcher.echo.instances.map{ |i| i['pid'] }).to eq(@dispatcher.jobs.map{ |j| j['pid'] })
36
36
  end
37
37
  end
38
38
 
39
39
  describe '#map_instances' do
40
40
  it 'asynchronously maps all running instances' do
41
- @dispatcher.echo.test_map_instances.should ==
41
+ expect(@dispatcher.echo.test_map_instances).to eq(
42
42
  Hash[@dispatcher.jobs.map { |j| [j['url'], j['token']] }]
43
+ )
43
44
  end
44
45
  end
45
46
 
@@ -51,11 +52,11 @@ describe Arachni::RPC::Server::Dispatcher::Service do
51
52
  new( Arachni::Options, j['url'], j['token'] ).options.url
52
53
  end
53
54
 
54
- urls.size.should == @instance_count
55
+ expect(urls.size).to eq(@instance_count)
55
56
  urls.sort!
56
57
 
57
58
  1.upto( @instance_count ).each do |i|
58
- urls[i-1].should == "http://stuff.com/#{i}"
59
+ expect(urls[i-1]).to eq("http://stuff.com/#{i}")
59
60
  end
60
61
  end
61
62
  end
@@ -63,26 +64,26 @@ describe Arachni::RPC::Server::Dispatcher::Service do
63
64
  describe '#defer' do
64
65
  it 'defers execution of the given block' do
65
66
  args = [1, 'stuff']
66
- @dispatcher.echo.test_defer( *args ).should == args
67
+ expect(@dispatcher.echo.test_defer( *args )).to eq(args)
67
68
  end
68
69
  end
69
70
 
70
71
  describe '#run_asap' do
71
72
  it 'runs the given block as soon as possible' do
72
73
  args = [1, 'stuff']
73
- @dispatcher.echo.test_run_asap( *args ).should == args
74
+ expect(@dispatcher.echo.test_run_asap( *args )).to eq(args)
74
75
  end
75
76
  end
76
77
 
77
78
  describe '#iterator_for' do
78
79
  it 'provides an asynchronous iterator' do
79
- @dispatcher.echo.test_iterator_for.should be_true
80
+ expect(@dispatcher.echo.test_iterator_for).to be_truthy
80
81
  end
81
82
  end
82
83
 
83
84
  describe '#connect_to_dispatcher' do
84
85
  it 'connects to the a dispatcher by url' do
85
- @dispatcher.echo.test_connect_to_dispatcher.should be_true
86
+ expect(@dispatcher.echo.test_connect_to_dispatcher).to be_truthy
86
87
  end
87
88
  end
88
89
 
@@ -90,9 +91,9 @@ describe Arachni::RPC::Server::Dispatcher::Service do
90
91
  it 'connects to an instance' do
91
92
  instance = @dispatcher.jobs.first
92
93
 
93
- @dispatcher.echo.test_connect_to_instance( instance ).should be_false
94
- @dispatcher.echo.test_connect_to_instance( instance['url'], instance['token'] ).should be_false
95
- @dispatcher.echo.test_connect_to_instance( url: instance['url'], token: instance['token'] ).should be_false
94
+ expect(@dispatcher.echo.test_connect_to_instance( instance )).to be_falsey
95
+ expect(@dispatcher.echo.test_connect_to_instance( instance['url'], instance['token'] )).to be_falsey
96
+ expect(@dispatcher.echo.test_connect_to_instance( url: instance['url'], token: instance['token'] )).to be_falsey
96
97
  end
97
98
  end
98
99
 
@@ -16,7 +16,7 @@ describe Arachni::RPC::Server::Dispatcher do
16
16
 
17
17
  describe '#alive?' do
18
18
  it 'returns true' do
19
- dispatcher_light_spawn.alive?.should == true
19
+ expect(dispatcher_light_spawn.alive?).to eq(true)
20
20
  end
21
21
  end
22
22
 
@@ -27,14 +27,14 @@ describe Arachni::RPC::Server::Dispatcher do
27
27
  dispatcher_light_spawn( weight: 2, neighbour: dispatcher.url )
28
28
  dispatcher_light_spawn( weight: 3, neighbour: dispatcher.url )
29
29
 
30
- dispatcher.preferred.should == dispatcher.url
30
+ expect(dispatcher.preferred).to eq(dispatcher.url)
31
31
  end
32
32
  end
33
33
 
34
34
  context 'when the dispatcher is not a grid member' do
35
35
  it 'returns the URL of the Dispatcher' do
36
36
  dispatcher = dispatcher_light_spawn
37
- dispatcher.preferred.should == dispatcher.url
37
+ expect(dispatcher.preferred).to eq(dispatcher.url)
38
38
  end
39
39
  end
40
40
  end
@@ -42,7 +42,7 @@ describe Arachni::RPC::Server::Dispatcher do
42
42
  describe '#handlers' do
43
43
  it 'returns an array of loaded handlers' do
44
44
  Arachni::Options.paths.services = "#{fixtures_path}services/"
45
- dispatcher_light_spawn.services.include?( 'echo' ).should be_true
45
+ expect(dispatcher_light_spawn.services.include?( 'echo' )).to be_truthy
46
46
  end
47
47
  end
48
48
 
@@ -55,14 +55,14 @@ describe Arachni::RPC::Server::Dispatcher do
55
55
  sleep 0.1 while !dispatcher.dispatch
56
56
  end
57
57
 
58
- dispatcher.jobs.size.should == times
58
+ expect(dispatcher.jobs.size).to eq(times)
59
59
  end
60
60
 
61
61
  context 'when Options#dispatcher_external_address has been set' do
62
62
  it 'advertises that address' do
63
63
  address = '127.0.0.1'
64
64
  dispatcher = dispatcher_light_spawn( external_address: address )
65
- dispatcher.dispatch['url'].should start_with "#{address}:"
65
+ expect(dispatcher.dispatch['url']).to start_with "#{address}:"
66
66
  end
67
67
  end
68
68
  context 'when not a Grid member' do
@@ -70,27 +70,27 @@ describe Arachni::RPC::Server::Dispatcher do
70
70
  info = dispatcher_light_spawn.dispatch
71
71
 
72
72
  %w(token pid port url owner birthdate starttime helpers).each do |k|
73
- info[k].should be_true
73
+ expect(info[k]).to be_truthy
74
74
  end
75
75
 
76
76
  instance = instance_connect( info['url'], info['token'] )
77
- instance.service.alive?.should be_true
77
+ expect(instance.service.alive?).to be_truthy
78
78
  end
79
79
  it 'assigns an optional owner' do
80
80
  owner = 'blah'
81
- dispatcher_light_spawn.dispatch( owner )['owner'].should == owner
81
+ expect(dispatcher_light_spawn.dispatch( owner )['owner']).to eq(owner)
82
82
  end
83
83
  context 'when the pool is empty' do
84
84
  it 'returns false' do
85
85
  dispatcher = dispatcher_light_spawn
86
- dispatcher.dispatch.should be_kind_of Hash
87
- dispatcher.dispatch.should be_false
86
+ expect(dispatcher.dispatch).to be_kind_of Hash
87
+ expect(dispatcher.dispatch).to be_falsey
88
88
  end
89
89
 
90
90
  it 'replenishes the pool' do
91
91
  dispatcher = dispatcher_light_spawn
92
- dispatcher.dispatch.should be_kind_of Hash
93
- dispatcher.dispatch.should be_false
92
+ expect(dispatcher.dispatch).to be_kind_of Hash
93
+ expect(dispatcher.dispatch).to be_falsey
94
94
 
95
95
  hash = nil
96
96
  Timeout.timeout 10 do
@@ -99,7 +99,7 @@ describe Arachni::RPC::Server::Dispatcher do
99
99
  end
100
100
  end
101
101
 
102
- hash.should be_kind_of Hash
102
+ expect(hash).to be_kind_of Hash
103
103
  end
104
104
  end
105
105
  end
@@ -124,12 +124,12 @@ describe Arachni::RPC::Server::Dispatcher do
124
124
  )
125
125
  preferred = d3.url.split( ':' ).first
126
126
 
127
- d3.dispatch['url'].split( ':' ).first.should == preferred
128
- %W{127.0.0.3 127.0.0.2}.should include d1.dispatch['url'].split( ':' ).first
129
- d2.dispatch['url'].split( ':' ).first.should == preferred
130
- %W{127.0.0.1 127.0.0.3}.should include d3.dispatch['url'].split( ':' ).first
131
- %W{127.0.0.2 127.0.0.3}.should include d3.dispatch['url'].split( ':' ).first
132
- %W{127.0.0.2 127.0.0.3}.should include d1.dispatch['url'].split( ':' ).first
127
+ expect(d3.dispatch['url'].split( ':' ).first).to eq(preferred)
128
+ expect(%W{127.0.0.3 127.0.0.2}).to include d1.dispatch['url'].split( ':' ).first
129
+ expect(d2.dispatch['url'].split( ':' ).first).to eq(preferred)
130
+ expect(%W{127.0.0.1 127.0.0.3}).to include d3.dispatch['url'].split( ':' ).first
131
+ expect(%W{127.0.0.2 127.0.0.3}).to include d3.dispatch['url'].split( ':' ).first
132
+ expect(%W{127.0.0.2 127.0.0.3}).to include d1.dispatch['url'].split( ':' ).first
133
133
  end
134
134
 
135
135
  context 'when the load-balance option is set to false' do
@@ -151,8 +151,8 @@ describe Arachni::RPC::Server::Dispatcher do
151
151
  neighbour: d1.url
152
152
  )
153
153
 
154
- d3.dispatch( nil, {}, false )['url'].
155
- split( ':' ).first.should == '127.0.0.3'
154
+ expect(d3.dispatch( nil, {}, false )['url'].
155
+ split( ':' ).first).to eq('127.0.0.3')
156
156
  end
157
157
  end
158
158
  end
@@ -165,7 +165,7 @@ describe Arachni::RPC::Server::Dispatcher do
165
165
  job = dispatcher.dispatch
166
166
  info = dispatcher.job( job['pid'] )
167
167
  @job_info_keys.each do |k|
168
- info[k].should be_true
168
+ expect(info[k]).to be_truthy
169
169
  end
170
170
  end
171
171
  end
@@ -176,7 +176,7 @@ describe Arachni::RPC::Server::Dispatcher do
176
176
 
177
177
  dispatcher.jobs.each do |job|
178
178
  @job_info_keys.each do |k|
179
- job[k].should be_true
179
+ expect(job[k]).to be_truthy
180
180
  end
181
181
  end
182
182
  end
@@ -188,7 +188,7 @@ describe Arachni::RPC::Server::Dispatcher do
188
188
 
189
189
  3.times { dispatcher.dispatch }
190
190
 
191
- dispatcher.running_jobs.size.should == 3
191
+ expect(dispatcher.running_jobs.size).to eq(3)
192
192
  end
193
193
  end
194
194
 
@@ -198,7 +198,7 @@ describe Arachni::RPC::Server::Dispatcher do
198
198
 
199
199
  3.times { Arachni::Processes::Manager.kill dispatcher.dispatch['pid'] }
200
200
 
201
- dispatcher.finished_jobs.size.should == 3
201
+ expect(dispatcher.finished_jobs.size).to eq(3)
202
202
  end
203
203
  end
204
204
 
@@ -206,8 +206,9 @@ describe Arachni::RPC::Server::Dispatcher do
206
206
  it 'returns a float signifying the amount of workload' do
207
207
  dispatcher = dispatcher_light_spawn( weight: 4 )
208
208
 
209
- dispatcher.workload_score.should ==
209
+ expect(dispatcher.workload_score).to eq(
210
210
  ((dispatcher.running_jobs.size + 1) * 4).to_f
211
+ )
211
212
  end
212
213
  end
213
214
 
@@ -223,16 +224,16 @@ describe Arachni::RPC::Server::Dispatcher do
223
224
 
224
225
  %w(running_jobs finished_jobs init_pool_size node consumed_pids
225
226
  neighbours snapshots).each do |k|
226
- stats[k].should be_true
227
+ expect(stats[k]).to be_truthy
227
228
  end
228
229
 
229
230
  finished = stats['finished_jobs']
230
- finished.size.should == 1
231
+ expect(finished.size).to eq(1)
231
232
 
232
- stats['neighbours'].is_a?( Array ).should be_true
233
+ expect(stats['neighbours'].is_a?( Array )).to be_truthy
233
234
 
234
- stats['node'].delete( 'score' ).should == dispatcher.workload_score
235
- stats['node'].keys.should == @node_info_keys
235
+ expect(stats['node'].delete( 'score' )).to eq(dispatcher.workload_score)
236
+ expect(stats['node'].keys).to eq(@node_info_keys)
236
237
  end
237
238
 
238
239
  context 'when there are scan snapshots' do
@@ -249,7 +250,7 @@ describe Arachni::RPC::Server::Dispatcher do
249
250
  sleep 1 while !instance.service.suspended?
250
251
  instance.service.shutdown
251
252
 
252
- dispatcher.statistics['snapshots'].should include instance.service.snapshot_path
253
+ expect(dispatcher.statistics['snapshots']).to include instance.service.snapshot_path
253
254
  end
254
255
  end
255
256
 
@@ -257,14 +258,14 @@ describe Arachni::RPC::Server::Dispatcher do
257
258
  it 'advertises that address' do
258
259
  address = '127.0.0.1'
259
260
  dispatcher = dispatcher_light_spawn( external_address: address )
260
- dispatcher.statistics['node']['url'].should start_with "#{address}:"
261
+ expect(dispatcher.statistics['node']['url']).to start_with "#{address}:"
261
262
  end
262
263
  end
263
264
  end
264
265
 
265
266
  describe '#log' do
266
267
  it 'returns the contents of the log file' do
267
- dispatcher_light_spawn.log.should be_true
268
+ expect(dispatcher_light_spawn.log).to be_truthy
268
269
  end
269
270
  end
270
271
 
@@ -112,18 +112,18 @@ describe Arachni::RPC::Server::Framework::Distributor do
112
112
 
113
113
  describe '#calculate_workload_size' do
114
114
  it 'returns the amount of workload to gather for distribution' do
115
- @distributor.calculate_workload_size( 99999 ).should == 30
115
+ expect(@distributor.calculate_workload_size( 99999 )).to eq(30)
116
116
  end
117
117
 
118
118
  it 'bases it on the amount of idle instances' do
119
119
  distributor = get_distributor
120
120
  distributor.done_slaves << distributor.slaves.first[:url]
121
- distributor.calculate_workload_size( 99999 ).should == 20
121
+ expect(distributor.calculate_workload_size( 99999 )).to eq(20)
122
122
  end
123
123
 
124
124
  context 'when the calculated size exceeds the maximum' do
125
125
  it 'returns the maximum' do
126
- @distributor.calculate_workload_size( 20 ).should == 20
126
+ expect(@distributor.calculate_workload_size( 20 )).to eq(20)
127
127
  end
128
128
  end
129
129
  end
@@ -207,7 +207,7 @@ describe Arachni::RPC::Server::Framework::Distributor do
207
207
  distributor.split_page_workload( pages ).map do |page_chunks|
208
208
  workload << Hash[page_chunks.map { |p| [p.url, p.element_audit_whitelist.to_a] }]
209
209
  end
210
- workload.should == [
210
+ expect(workload).to eq([
211
211
  {
212
212
  "#{@url}1" => [2720541242, 3706493238],
213
213
  "#{@url}2" => [2299786370]
@@ -219,7 +219,7 @@ describe Arachni::RPC::Server::Framework::Distributor do
219
219
  "#{@url}4" => [2195342275],
220
220
  "#{@url}5" => [659674061]
221
221
  }
222
- ]
222
+ ])
223
223
 
224
224
  Arachni::State.clear
225
225
  Arachni::Data.clear
@@ -232,7 +232,7 @@ describe Arachni::RPC::Server::Framework::Distributor do
232
232
  distributor.split_page_workload( pages ).map do |page_chunks|
233
233
  workload << Hash[page_chunks.map { |p| [p.url, p.element_audit_whitelist.to_a] }]
234
234
  end
235
- workload.should == [
235
+ expect(workload).to eq([
236
236
  {
237
237
  'http://test.com/1' => [2720541242, 3706493238],
238
238
  'http://test.com/2' => [2299786370],
@@ -243,7 +243,7 @@ describe Arachni::RPC::Server::Framework::Distributor do
243
243
  'http://test.com/4' => [2444203185, 2195342275],
244
244
  'http://test.com/5' => [659674061]
245
245
  }
246
- ]
246
+ ])
247
247
  end
248
248
  end
249
249
 
@@ -260,11 +260,11 @@ describe Arachni::RPC::Server::Framework::Distributor do
260
260
  distributor.split_page_workload( pages ).map do |page_chunks|
261
261
  workload << page_chunks.map(&:url)
262
262
  end
263
- workload.should == [
263
+ expect(workload).to eq([
264
264
  ['http://test.com/1', 'http://test.com/2'],
265
265
  ['http://test.com/3', 'http://test.com/4'],
266
266
  ['http://test.com/5']
267
- ]
267
+ ])
268
268
  end
269
269
 
270
270
  it 'does not audit them' do
@@ -280,11 +280,11 @@ describe Arachni::RPC::Server::Framework::Distributor do
280
280
  workload << page_chunks
281
281
  end
282
282
  workload.flatten!
283
- workload.size.should == 5
283
+ expect(workload.size).to eq(5)
284
284
 
285
285
  workload.each do |page|
286
- page.elements.should be_any
287
- page.elements.each { |e| page.audit_element?(e).should be_false }
286
+ expect(page.elements).to be_any
287
+ page.elements.each { |e| expect(page.audit_element?(e)).to be_falsey }
288
288
  end
289
289
  end
290
290
  end
@@ -301,7 +301,7 @@ describe Arachni::RPC::Server::Framework::Distributor do
301
301
  get_distributor.split_page_workload( pages ).map do |page_chunks|
302
302
  workload << page_chunks.map(&:url)
303
303
  end
304
- workload.should == [
304
+ expect(workload).to eq([
305
305
  [
306
306
  'http://test.com/0',
307
307
  'http://test.com/1',
@@ -328,7 +328,7 @@ describe Arachni::RPC::Server::Framework::Distributor do
328
328
  'http://test.com/18',
329
329
  'http://test.com/19'
330
330
  ]
331
- ]
331
+ ])
332
332
  end
333
333
  end
334
334
  end
@@ -360,10 +360,10 @@ describe Arachni::RPC::Server::Framework::Distributor do
360
360
  workload << Hash[page_chunks.map { |p| [p.url, p.element_audit_whitelist.to_a] }]
361
361
  end
362
362
 
363
- workload.should == [
363
+ expect(workload).to eq([
364
364
  { 'http://test.com/1' => [2835048516] },
365
365
  { 'http://test.com/5' => [1397105343] }
366
- ]
366
+ ])
367
367
  end
368
368
  end
369
369
 
@@ -377,7 +377,7 @@ describe Arachni::RPC::Server::Framework::Distributor do
377
377
  distributor.split_page_workload( pages ).map do |page_chunks|
378
378
  workload << Hash[page_chunks.map { |p| [p.url, p.audit_whitelist.to_a] }]
379
379
  end
380
- workload.should == []
380
+ expect(workload).to eq([])
381
381
  end
382
382
  end
383
383
  end
@@ -396,7 +396,7 @@ describe Arachni::RPC::Server::Framework::Distributor do
396
396
  describe '#prepare_slave_options' do
397
397
  it 'returns a hash with options suitable for passing to slaves' do
398
398
  h = @distributor.prepare_slave_options
399
- h['datastore'].should == { 'master_priv_token' => 'secret' }
399
+ expect(h['datastore']).to eq({ 'master_priv_token' => 'secret' })
400
400
  end
401
401
 
402
402
  it 'removes plugins which are not distributable'
@@ -413,11 +413,11 @@ describe Arachni::RPC::Server::Framework::Distributor do
413
413
 
414
414
  raised = false
415
415
  begin
416
- Timeout::timeout( 5 ) { q.pop.should == [true, true] }
416
+ Timeout::timeout( 5 ) { expect(q.pop).to eq([true, true]) }
417
417
  rescue Timeout::Error
418
418
  raised = true
419
419
  end
420
- raised.should be_false
420
+ expect(raised).to be_falsey
421
421
  end
422
422
  end
423
423
 
@@ -435,11 +435,11 @@ describe Arachni::RPC::Server::Framework::Distributor do
435
435
 
436
436
  raised = false
437
437
  begin
438
- Timeout::timeout( 5 ) { [q.pop, q.pop].should == [true, true] }
438
+ Timeout::timeout( 5 ) { expect([q.pop, q.pop]).to eq([true, true]) }
439
439
  rescue Timeout::Error
440
440
  raised = true
441
441
  end
442
- raised.should be_false
442
+ expect(raised).to be_falsey
443
443
  end
444
444
 
445
445
  context 'when passed an "after" block' do
@@ -458,11 +458,11 @@ describe Arachni::RPC::Server::Framework::Distributor do
458
458
 
459
459
  raised = false
460
460
  begin
461
- Timeout::timeout( 5 ) { [q.pop, q.pop, q.pop].should == [true, true, :after] }
461
+ Timeout::timeout( 5 ) { expect([q.pop, q.pop, q.pop]).to eq([true, true, :after]) }
462
462
  rescue Timeout::Error
463
463
  raised = true
464
464
  end
465
- raised.should be_false
465
+ expect(raised).to be_falsey
466
466
  end
467
467
 
468
468
  end
@@ -482,11 +482,11 @@ describe Arachni::RPC::Server::Framework::Distributor do
482
482
 
483
483
  raised = false
484
484
  begin
485
- Timeout::timeout( 5 ) { [q.pop, q.pop].sort.should == urls }
485
+ Timeout::timeout( 5 ) { expect([q.pop, q.pop].sort).to eq(urls) }
486
486
  rescue Timeout::Error
487
487
  raised = true
488
488
  end
489
- raised.should be_false
489
+ expect(raised).to be_falsey
490
490
  end
491
491
  end
492
492
 
@@ -504,11 +504,11 @@ describe Arachni::RPC::Server::Framework::Distributor do
504
504
 
505
505
  raised = false
506
506
  begin
507
- Timeout::timeout( 5 ) { [q.pop, q.pop].sort.should == urls }
507
+ Timeout::timeout( 5 ) { expect([q.pop, q.pop].sort).to eq(urls) }
508
508
  rescue Timeout::Error
509
509
  raised = true
510
510
  end
511
- raised.should be_false
511
+ expect(raised).to be_falsey
512
512
  end
513
513
  end
514
514
 
@@ -567,10 +567,10 @@ describe Arachni::RPC::Server::Framework::Distributor do
567
567
  raised = true
568
568
  end
569
569
 
570
- raised.should be_false
570
+ expect(raised).to be_falsey
571
571
 
572
- pref_dispatchers.size.should == 4
573
- pref_dispatchers.should == dispatchers
572
+ expect(pref_dispatchers.size).to eq(4)
573
+ expect(pref_dispatchers).to eq(dispatchers)
574
574
  end
575
575
  end
576
576
 
@@ -582,18 +582,18 @@ describe Arachni::RPC::Server::Framework::Distributor do
582
582
  dispatchers << { 'node' => { 'score' => 2 } }
583
583
  dispatchers << { 'node' => { 'score' => 1 } }
584
584
 
585
- @distributor.pick_dispatchers( dispatchers ).
586
- map { |d| d['node']['score'] }.should == [0, 1, 2, 3]
585
+ expect(@distributor.pick_dispatchers( dispatchers ).
586
+ map { |d| d['node']['score'] }).to eq([0, 1, 2, 3])
587
587
 
588
588
  @opts.spawns = 2
589
- @distributor.pick_dispatchers( dispatchers ).
590
- map { |d| d['node']['score'] }.should == [0, 1]
589
+ expect(@distributor.pick_dispatchers( dispatchers ).
590
+ map { |d| d['node']['score'] }).to eq([0, 1])
591
591
  end
592
592
  end
593
593
 
594
594
  describe '#initialize_slaves' do
595
595
  #before( :all ) do
596
- # @opts.paths.checks = fixtures_path + 'taint_check/'
596
+ # @opts.paths.checks = fixtures_path + 'signature_check/'
597
597
  #
598
598
  # @dispatcher_url = dispatcher_light_spawn.url
599
599
  #