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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +66 -0
- data/Gemfile +1 -1
- data/README.md +16 -5
- data/components/checks/active/ldap_injection/errors.txt +1 -0
- data/components/checks/active/source_code_disclosure.rb +1 -1
- data/components/checks/active/unvalidated_redirect.rb +6 -6
- data/components/checks/active/unvalidated_redirect_dom.rb +10 -7
- data/components/checks/passive/grep/captcha.rb +14 -5
- data/components/checks/passive/grep/form_upload.rb +7 -3
- data/components/checks/passive/grep/hsts.rb +3 -3
- data/components/checks/passive/grep/html_objects.rb +2 -3
- data/components/checks/passive/grep/http_only_cookies.rb +2 -3
- data/components/checks/passive/grep/insecure_cookies.rb +1 -1
- data/components/checks/passive/grep/password_autocomplete.rb +2 -2
- data/components/checks/passive/grep/unencrypted_password_forms.rb +7 -7
- data/components/checks/passive/grep/x_frame_options.rb +2 -2
- data/components/checks/passive/http_put.rb +2 -3
- data/components/path_extractors/comments.rb +3 -3
- data/components/path_extractors/scripts.rb +10 -1
- data/components/plugins/defaults/autothrottle.rb +27 -18
- data/components/plugins/defaults/meta/remedies/discovery.rb +30 -33
- data/components/plugins/defaults/meta/remedies/timing_attacks.rb +7 -11
- data/components/plugins/login_script.rb +9 -3
- data/components/plugins/proxy.rb +4 -3
- data/components/reporters/html.rb +11 -14
- data/components/reporters/html/default/issue.erb +13 -38
- data/components/reporters/html/default/issue/info.erb +1 -1
- data/components/reporters/html/default/summary/issues/by_name.erb +3 -3
- data/components/reporters/stdout.rb +62 -71
- data/components/reporters/xml.rb +26 -40
- data/components/reporters/xml/schema.xsd +43 -89
- data/lib/arachni/browser.rb +52 -3
- data/lib/arachni/browser/javascript.rb +3 -3
- data/lib/arachni/browser/javascript/scripts/taint_tracer.js +46 -25
- data/lib/arachni/browser_cluster.rb +61 -0
- data/lib/arachni/browser_cluster/job.rb +21 -1
- data/lib/arachni/browser_cluster/jobs/browser_provider.rb +3 -1
- data/lib/arachni/browser_cluster/jobs/resource_exploration.rb +2 -1
- data/lib/arachni/browser_cluster/jobs/resource_exploration/event_trigger.rb +2 -1
- data/lib/arachni/browser_cluster/jobs/taint_trace.rb +3 -2
- data/lib/arachni/browser_cluster/jobs/taint_trace/event_trigger.rb +1 -1
- data/lib/arachni/browser_cluster/worker.rb +5 -0
- data/lib/arachni/check/auditor.rb +22 -12
- data/lib/arachni/data/framework.rb +13 -1
- data/lib/arachni/data/issues.rb +9 -25
- data/lib/arachni/element/base.rb +9 -3
- data/lib/arachni/element/capabilities/analyzable.rb +2 -6
- data/lib/arachni/element/capabilities/analyzable/differential.rb +24 -7
- data/lib/arachni/element/capabilities/analyzable/{taint.rb → signature.rb} +23 -23
- data/lib/arachni/element/capabilities/auditable.rb +0 -6
- data/lib/arachni/element/capabilities/dom_only.rb +61 -0
- data/lib/arachni/element/capabilities/with_dom.rb +3 -1
- data/lib/arachni/element/cookie.rb +35 -5
- data/lib/arachni/element/cookie/dom.rb +13 -4
- data/lib/arachni/element/{capabilities/auditable/dom.rb → dom.rb} +20 -68
- data/lib/arachni/element/dom/capabilities/auditable.rb +29 -0
- data/lib/arachni/element/dom/capabilities/inputtable.rb +27 -0
- data/lib/arachni/element/dom/capabilities/mutable.rb +21 -0
- data/lib/arachni/element/dom/capabilities/submittable.rb +52 -0
- data/lib/arachni/element/form.rb +12 -1
- data/lib/arachni/element/form/capabilities/mutable.rb +2 -1
- data/lib/arachni/element/form/capabilities/with_dom.rb +0 -1
- data/lib/arachni/element/form/dom.rb +9 -3
- data/lib/arachni/element/header.rb +14 -33
- data/lib/arachni/element/header/capabilities/inputtable.rb +29 -0
- data/lib/arachni/element/header/capabilities/mutable.rb +51 -0
- data/lib/arachni/element/input/dom.rb +71 -0
- data/lib/arachni/element/json.rb +2 -0
- data/lib/arachni/element/link.rb +3 -0
- data/lib/arachni/element/link/capabilities/with_dom.rb +0 -1
- data/lib/arachni/element/link/dom.rb +16 -3
- data/lib/arachni/element/link/dom/capabilities/submittable.rb +29 -0
- data/lib/arachni/element/link_template.rb +3 -5
- data/lib/arachni/element/link_template/capabilities/inputtable.rb +5 -0
- data/lib/arachni/element/link_template/capabilities/with_dom.rb +0 -1
- data/lib/arachni/element/link_template/dom.rb +16 -3
- data/lib/arachni/element/link_template/dom/capabilities/submittable.rb +29 -0
- data/lib/arachni/element/server.rb +3 -5
- data/lib/arachni/element/ui_form.rb +106 -0
- data/lib/arachni/element/ui_form/dom.rb +107 -0
- data/lib/arachni/element/ui_input.rb +62 -0
- data/lib/arachni/element/xml.rb +2 -1
- data/lib/arachni/framework.rb +7 -5
- data/lib/arachni/framework/parts/audit.rb +0 -1
- data/lib/arachni/framework/parts/check.rb +1 -0
- data/lib/arachni/framework/parts/data.rb +4 -0
- data/lib/arachni/framework/parts/state.rb +0 -2
- data/lib/arachni/http/client.rb +17 -6
- data/lib/arachni/http/proxy_server.rb +52 -5
- data/lib/arachni/http/request.rb +1 -1
- data/lib/arachni/issue.rb +34 -179
- data/lib/arachni/issue/severity.rb +2 -0
- data/lib/arachni/option_groups/audit.rb +22 -2
- data/lib/arachni/option_groups/browser_cluster.rb +15 -0
- data/lib/arachni/page.rb +3 -2
- data/lib/arachni/parser.rb +24 -5
- data/lib/arachni/platform/manager.rb +1 -2
- data/lib/arachni/rpc/server/framework.rb +3 -4
- data/lib/arachni/rpc/server/framework/multi_instance.rb +2 -1
- data/lib/arachni/session.rb +1 -1
- data/lib/arachni/trainer.rb +4 -7
- data/lib/arachni/watir/element.rb +12 -1
- data/lib/version +1 -1
- data/spec/arachni/browser/element_locator_spec.rb +43 -43
- data/spec/arachni/browser/javascript/dom_monitor_spec.rb +44 -44
- data/spec/arachni/browser/javascript/proxy/stub_spec.rb +17 -14
- data/spec/arachni/browser/javascript/proxy_spec.rb +24 -24
- data/spec/arachni/browser/javascript/taint_tracer/frame/called_function_spec.rb +11 -11
- data/spec/arachni/browser/javascript/taint_tracer/frame_spec.rb +7 -7
- data/spec/arachni/browser/javascript/taint_tracer/sink/data_flow_spec.rb +13 -13
- data/spec/arachni/browser/javascript/taint_tracer/sink/execution_flow_spec.rb +7 -7
- data/spec/arachni/browser/javascript/taint_tracer_spec.rb +568 -558
- data/spec/arachni/browser/javascript_spec.rb +73 -63
- data/spec/arachni/browser_cluster/job/result_spec.rb +3 -3
- data/spec/arachni/browser_cluster/job_spec.rb +68 -48
- data/spec/arachni/browser_cluster/jobs/resource_exploration/event_trigger/result_spec.rb +2 -2
- data/spec/arachni/browser_cluster/jobs/resource_exploration/event_trigger_spec.rb +5 -4
- data/spec/arachni/browser_cluster/jobs/resource_exploration/result_spec.rb +2 -2
- data/spec/arachni/browser_cluster/jobs/resource_exploration_spec.rb +5 -5
- data/spec/arachni/browser_cluster/worker_spec.rb +87 -70
- data/spec/arachni/browser_cluster_spec.rb +64 -39
- data/spec/arachni/browser_spec.rb +692 -527
- data/spec/arachni/check/auditor_spec.rb +177 -147
- data/spec/arachni/check/base_spec.rb +33 -33
- data/spec/arachni/check/manager_spec.rb +15 -15
- data/spec/arachni/component/base_spec.rb +8 -8
- data/spec/arachni/component/manager_spec.rb +100 -99
- data/spec/arachni/component/options/address_spec.rb +3 -3
- data/spec/arachni/component/options/base_spec.rb +7 -7
- data/spec/arachni/component/options/bool_spec.rb +9 -9
- data/spec/arachni/component/options/float_spec.rb +6 -6
- data/spec/arachni/component/options/int_spec.rb +5 -5
- data/spec/arachni/component/options/multiple_choice_spec.rb +12 -12
- data/spec/arachni/component/options/object_spec.rb +2 -2
- data/spec/arachni/component/options/path_spec.rb +3 -3
- data/spec/arachni/component/options/port_spec.rb +5 -5
- data/spec/arachni/component/options/string_spec.rb +3 -3
- data/spec/arachni/component/options/url_spec.rb +4 -4
- data/spec/arachni/component/utilities_spec.rb +2 -2
- data/spec/arachni/data/framework/rpc_spec.rb +10 -9
- data/spec/arachni/data/framework_spec.rb +65 -46
- data/spec/arachni/data/issues_spec.rb +39 -77
- data/spec/arachni/data/plugins_spec.rb +11 -11
- data/spec/arachni/data/session_spec.rb +6 -6
- data/spec/arachni/data_spec.rb +8 -8
- data/spec/arachni/element/body_spec.rb +10 -10
- data/spec/arachni/element/capabilities/analyzable/differential_spec.rb +39 -21
- data/spec/arachni/element/capabilities/analyzable/{taint_spec.rb → signature_spec.rb} +63 -63
- data/spec/arachni/element/capabilities/analyzable/timeout_spec.rb +51 -51
- data/spec/arachni/element/capabilities/with_scope/scope_spec.rb +5 -5
- data/spec/arachni/element/cookie/dom_spec.rb +37 -18
- data/spec/arachni/element/cookie_spec.rb +206 -139
- data/spec/arachni/element/form/dom_spec.rb +36 -19
- data/spec/arachni/element/form_spec.rb +210 -187
- data/spec/arachni/element/generic_dom_spec.rb +14 -14
- data/spec/arachni/element/header_spec.rb +35 -17
- data/spec/arachni/element/json_spec.rb +53 -31
- data/spec/arachni/element/link/dom_spec.rb +46 -28
- data/spec/arachni/element/link_spec.rb +58 -40
- data/spec/arachni/element/link_template/dom_spec.rb +47 -29
- data/spec/arachni/element/link_template_spec.rb +79 -61
- data/spec/arachni/element/path_spec.rb +1 -1
- data/spec/arachni/element/server_spec.rb +33 -32
- data/spec/arachni/element/ui_form/ui_form_dom_spec.rb +164 -0
- data/spec/arachni/element/ui_form_spec.rb +242 -0
- data/spec/arachni/element/ui_input/dom_spec.rb +157 -0
- data/spec/arachni/element/ui_input_spec.rb +136 -0
- data/spec/arachni/element/xml_spec.rb +42 -24
- data/spec/arachni/element_filter_spec.rb +49 -48
- data/spec/arachni/error_spec.rb +3 -3
- data/spec/arachni/framework/parts/audit_spec.rb +64 -63
- data/spec/arachni/framework/parts/browser_spec.rb +16 -16
- data/spec/arachni/framework/parts/check_spec.rb +3 -3
- data/spec/arachni/framework/parts/data_spec.rb +48 -48
- data/spec/arachni/framework/parts/platform_spec.rb +3 -3
- data/spec/arachni/framework/parts/plugin_spec.rb +7 -6
- data/spec/arachni/framework/parts/report_spec.rb +7 -7
- data/spec/arachni/framework/parts/scope_spec.rb +16 -16
- data/spec/arachni/framework/parts/state_spec.rb +68 -69
- data/spec/arachni/framework_spec.rb +39 -31
- data/spec/arachni/http/client/dynamic_404_handlers_spec.rb +32 -32
- data/spec/arachni/http/client_spec.rb +219 -208
- data/spec/arachni/http/cookie_jar_spec.rb +72 -72
- data/spec/arachni/http/headers_spec.rb +14 -14
- data/spec/arachni/http/proxy_server_spec.rb +43 -42
- data/spec/arachni/http/request_spec.rb +105 -103
- data/spec/arachni/http/response/scope_spec.rb +24 -24
- data/spec/arachni/http/response_spec.rb +50 -49
- data/spec/arachni/issue/severity_spec.rb +10 -9
- data/spec/arachni/issue_spec.rb +71 -369
- data/spec/arachni/option_groups/audit_spec.rb +114 -114
- data/spec/arachni/option_groups/browser_cluster_spec.rb +20 -3
- data/spec/arachni/option_groups/datastore_spec.rb +6 -6
- data/spec/arachni/option_groups/dispatcher_spec.rb +19 -19
- data/spec/arachni/option_groups/http_spec.rb +11 -11
- data/spec/arachni/option_groups/input_spec.rb +31 -27
- data/spec/arachni/option_groups/output_spec.rb +2 -2
- data/spec/arachni/option_groups/paths_spec.rb +17 -17
- data/spec/arachni/option_groups/rpc_spec.rb +2 -2
- data/spec/arachni/option_groups/scope_spec.rb +40 -40
- data/spec/arachni/option_groups/session_spec.rb +6 -5
- data/spec/arachni/option_groups/snapshot_spec.rb +4 -4
- data/spec/arachni/options_spec.rb +46 -45
- data/spec/arachni/page/dom/transition_spec.rb +74 -72
- data/spec/arachni/page/dom_spec.rb +35 -35
- data/spec/arachni/page/scope_spec.rb +15 -15
- data/spec/arachni/page_spec.rb +217 -217
- data/spec/arachni/parser_spec.rb +106 -104
- data/spec/arachni/platform/fingerprinter_spec.rb +17 -14
- data/spec/arachni/platform/list_spec.rb +33 -33
- data/spec/arachni/platform/manager_spec.rb +67 -64
- data/spec/arachni/plugin/base_spec.rb +10 -10
- data/spec/arachni/plugin/manager_spec.rb +38 -37
- data/spec/arachni/report_spec.rb +43 -40
- data/spec/arachni/reporter/base_spec.rb +15 -15
- data/spec/arachni/reporter/manager_spec.rb +4 -4
- data/spec/arachni/reporter/options_spec.rb +6 -6
- data/spec/arachni/rpc/client/base_spec.rb +6 -6
- data/spec/arachni/rpc/client/dispatcher_spec.rb +2 -2
- data/spec/arachni/rpc/client/instance_spec.rb +6 -6
- data/spec/arachni/rpc/server/active_options_spec.rb +11 -8
- data/spec/arachni/rpc/server/base_spec.rb +5 -5
- data/spec/arachni/rpc/server/checks/manager_spec.rb +8 -8
- data/spec/arachni/rpc/server/dispatcher/node_spec.rb +37 -37
- data/spec/arachni/rpc/server/dispatcher/service_spec.rb +15 -14
- data/spec/arachni/rpc/server/dispatcher_spec.rb +36 -35
- data/spec/arachni/rpc/server/framework/distributor_spec.rb +36 -36
- data/spec/arachni/rpc/server/framework_multi_spec.rb +340 -336
- data/spec/arachni/rpc/server/framework_spec.rb +90 -85
- data/spec/arachni/rpc/server/instance_spec.rb +126 -107
- data/spec/arachni/rpc/server/output_spec.rb +1 -1
- data/spec/arachni/rpc/server/plugin/manager_spec.rb +6 -6
- data/spec/arachni/ruby/array_spec.rb +42 -42
- data/spec/arachni/ruby/hash_spec.rb +20 -18
- data/spec/arachni/ruby/io_spec.rb +2 -2
- data/spec/arachni/ruby/object_spec.rb +1 -1
- data/spec/arachni/ruby/set_spec.rb +3 -3
- data/spec/arachni/ruby/string_spec.rb +30 -30
- data/spec/arachni/ruby/webrick_spec.rb +2 -2
- data/spec/arachni/scope_spec.rb +1 -1
- data/spec/arachni/session_spec.rb +67 -64
- data/spec/arachni/snapshot_spec.rb +15 -15
- data/spec/arachni/state/audit_spec.rb +11 -11
- data/spec/arachni/state/element_filter_spec.rb +6 -6
- data/spec/arachni/state/framework/rpc_spec.rb +12 -12
- data/spec/arachni/state/framework_spec.rb +125 -121
- data/spec/arachni/state/http_spec.rb +7 -7
- data/spec/arachni/state/options_spec.rb +7 -7
- data/spec/arachni/state/plugins_spec.rb +8 -8
- data/spec/arachni/state_spec.rb +10 -10
- data/spec/arachni/support/buffer/autoflush_spec.rb +16 -16
- data/spec/arachni/support/buffer/base_spec.rb +39 -39
- data/spec/arachni/support/cache/least_cost_replacement_spec.rb +18 -18
- data/spec/arachni/support/cache/least_recently_pushed_spec.rb +24 -24
- data/spec/arachni/support/cache/least_recently_used_spec.rb +20 -20
- data/spec/arachni/support/cache/preference_spec.rb +4 -4
- data/spec/arachni/support/cache/random_replacement_spec.rb +8 -8
- data/spec/arachni/support/crypto/rsa_aes_cbc_spec.rb +1 -1
- data/spec/arachni/support/database/hash_spec.rb +44 -43
- data/spec/arachni/support/database/queue_spec.rb +27 -27
- data/spec/arachni/support/lookup/hash_set_spec.rb +8 -8
- data/spec/arachni/support/lookup/moolb_spec.rb +3 -3
- data/spec/arachni/support/mixins/observable_spec.rb +6 -6
- data/spec/arachni/support/signature_spec.rb +19 -19
- data/spec/arachni/trainer_spec.rb +39 -39
- data/spec/arachni/typhoeus/hydra_spec.rb +2 -2
- data/spec/arachni/uri/scope_spec.rb +66 -66
- data/spec/arachni/uri_spec.rb +107 -105
- data/spec/arachni/utilities_spec.rb +40 -40
- data/spec/components/checks/active/csrf_spec.rb +8 -8
- data/spec/components/checks/active/no_sql_injection_spec.rb +1 -1
- data/spec/components/checks/active/sql_injection_spec.rb +16 -16
- data/spec/components/checks/active/trainer_spec.rb +4 -4
- data/spec/components/checks/active/unvalidated_redirect_dom_spec.rb +4 -2
- data/spec/components/checks/active/xpath_injection_spec.rb +1 -1
- data/spec/components/checks/active/xss_dom_script_context_spec.rb +51 -21
- data/spec/components/checks/active/xss_dom_spec.rb +46 -24
- data/spec/components/checks/passive/allowed_methods_spec.rb +1 -1
- data/spec/components/checks/passive/grep/cookie_set_for_parent_domain_spec.rb +1 -1
- data/spec/components/checks/passive/grep/hsts_spec.rb +2 -2
- data/spec/components/checks/passive/grep/http_only_cookies_spec.rb +1 -1
- data/spec/components/checks/passive/grep/insecure_cookies_spec.rb +1 -1
- data/spec/components/checks/passive/grep/insecure_cors_policy_spec.rb +2 -2
- data/spec/components/checks/passive/grep/password_autocomplete_spec.rb +1 -1
- data/spec/components/checks/passive/grep/private_ip_spec.rb +3 -3
- data/spec/components/checks/passive/grep/unencrypted_password_forms_spec.rb +1 -1
- data/spec/components/checks/passive/grep/x_frame_options_spec.rb +2 -2
- data/spec/components/checks/passive/interesting_responses_spec.rb +2 -2
- data/spec/components/checks/passive/webdav_spec.rb +1 -1
- data/spec/components/checks/passive/xst_spec.rb +1 -1
- data/spec/components/fingerprinters/servers/apache_spec.rb +2 -2
- data/spec/components/path_extractors/comments_spec.rb +5 -1
- data/spec/components/path_extractors/scripts_spec.rb +5 -2
- data/spec/components/plugins/autologin_spec.rb +22 -22
- data/spec/components/plugins/autothrottle_spec.rb +6 -5
- data/spec/components/plugins/content_types_spec.rb +4 -4
- data/spec/components/plugins/cookie_collector_spec.rb +5 -5
- data/spec/components/plugins/exec_spec.rb +12 -12
- data/spec/components/plugins/form_dicattack_spec.rb +3 -3
- data/spec/components/plugins/headers_collector_spec.rb +8 -8
- data/spec/components/plugins/healthmap_spec.rb +3 -3
- data/spec/components/plugins/http_dicattack_spec.rb +3 -3
- data/spec/components/plugins/login_script_spec.rb +79 -22
- data/spec/components/plugins/meta/remedies/discovery_spec.rb +3 -2
- data/spec/components/plugins/meta/remedies/timing_attacks_spec.rb +3 -3
- data/spec/components/plugins/meta/uniformity_spec.rb +2 -2
- data/spec/components/plugins/restrict_to_dom_state_spec.rb +1 -1
- data/spec/components/plugins/script_spec.rb +1 -1
- data/spec/components/plugins/uncommon_headers_spec.rb +2 -2
- data/spec/components/plugins/vector_collector_spec.rb +2 -2
- data/spec/components/plugins/vector_feed_spec.rb +40 -40
- data/spec/components/plugins/waf_detector_spec.rb +6 -6
- data/spec/components/reporters/json_spec.rb +4 -4
- data/spec/components/reporters/marshal_spec.rb +2 -2
- data/spec/components/reporters/yaml_spec.rb +3 -2
- data/spec/external/wavsep/active/sqli_spec.rb +1 -3
- data/spec/spec_helper.rb +4 -0
- data/spec/support/factories/element/ui_form.rb +14 -0
- data/spec/support/factories/element/ui_input.rb +13 -0
- data/spec/support/factories/issue.rb +0 -13
- data/spec/support/fixtures/report.afr +0 -0
- data/spec/support/fixtures/{taint_check/taint.rb → signature_check/signature.rb} +2 -2
- data/spec/support/helpers/browser_cluster/jobs/taint_tracer.rb +11 -11
- data/spec/support/helpers/framework.rb +1 -1
- data/spec/support/helpers/pages.rb +2 -2
- data/spec/support/servers/arachni/browser.rb +139 -0
- data/spec/support/servers/arachni/browser/javascript/taint_tracer.rb +40 -0
- data/spec/support/servers/arachni/element/capabilities/analyzable/{taint.rb → signature.rb} +0 -0
- data/spec/support/servers/arachni/element/input/input_dom.rb +102 -0
- data/spec/support/servers/arachni/element/ui_form/ui_form_dom.rb +238 -0
- data/spec/support/servers/checks/active/trainer_check.rb +7 -7
- data/spec/support/servers/checks/active/unvalidated_redirect_dom.rb +22 -6
- data/spec/support/servers/checks/active/xss_dom.rb +50 -0
- data/spec/support/servers/checks/active/xss_dom_script_context.rb +53 -0
- data/spec/support/shared/browser/javascript/taint_tracer/sink/base.rb +6 -6
- data/spec/support/shared/check.rb +10 -12
- data/spec/support/shared/component/options/base.rb +24 -24
- data/spec/support/shared/element/base.rb +25 -25
- data/spec/support/shared/element/capabilities/auditable.rb +116 -140
- data/spec/support/shared/element/capabilities/dom_only.rb +65 -0
- data/spec/support/shared/element/capabilities/inputtable.rb +71 -86
- data/spec/support/shared/element/capabilities/mutable.rb +122 -111
- data/spec/support/shared/element/capabilities/refreshable.rb +10 -10
- data/spec/support/shared/element/capabilities/{submitable.rb → submittable.rb} +26 -26
- data/spec/support/shared/element/capabilities/with_auditor.rb +10 -10
- data/spec/support/shared/element/capabilities/with_dom.rb +8 -8
- data/spec/support/shared/element/capabilities/with_node.rb +4 -6
- data/spec/support/shared/element/capabilities/with_scope.rb +2 -2
- data/spec/support/shared/element/capabilities/with_source.rb +6 -8
- data/spec/support/shared/element/dom.rb +144 -0
- data/spec/support/shared/element/dom/auditable.rb +42 -0
- data/spec/support/shared/element/dom/inputtable.rb +5 -0
- data/spec/support/shared/element/dom/mutable.rb +3 -0
- data/spec/support/shared/element/dom/submittable.rb +119 -0
- data/spec/support/shared/external/wavsep.rb +3 -3
- data/spec/support/shared/fingerprinter.rb +2 -2
- data/spec/support/shared/framework.rb +1 -1
- data/spec/support/shared/http/message.rb +9 -9
- data/spec/support/shared/option_group.rb +17 -17
- data/spec/support/shared/path_extractor.rb +1 -1
- data/spec/support/shared/plugin.rb +2 -2
- data/spec/support/shared/support/cache.rb +57 -57
- data/spec/support/shared/support/lookup.rb +25 -25
- data/ui/cli/framework.rb +22 -11
- data/ui/cli/framework/option_parser.rb +15 -0
- data/ui/cli/option_parser.rb +8 -1
- data/ui/cli/output.rb +2 -1
- metadata +54 -20
- data/components/checks/active/xss_dom_inputs.rb +0 -236
- data/spec/components/checks/active/xss_dom_inputs_spec.rb +0 -30
- data/spec/support/servers/checks/active/xss_dom_inputs.rb +0 -59
- 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.
|
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.
|
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.
|
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'] }.
|
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.
|
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.
|
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].
|
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 ).
|
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 ).
|
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.
|
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.
|
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 ).
|
94
|
-
@dispatcher.echo.test_connect_to_instance( instance['url'], instance['token'] ).
|
95
|
-
@dispatcher.echo.test_connect_to_instance( url: instance['url'], token: instance['token'] ).
|
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
|
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.
|
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.
|
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' ).
|
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.
|
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'].
|
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].
|
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
|
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'].
|
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.
|
87
|
-
dispatcher.dispatch.
|
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.
|
93
|
-
dispatcher.dispatch.
|
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.
|
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.
|
128
|
-
%W{127.0.0.3 127.0.0.2}.
|
129
|
-
d2.dispatch['url'].split( ':' ).first.
|
130
|
-
%W{127.0.0.1 127.0.0.3}.
|
131
|
-
%W{127.0.0.2 127.0.0.3}.
|
132
|
-
%W{127.0.0.2 127.0.0.3}.
|
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.
|
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].
|
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].
|
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.
|
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.
|
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.
|
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].
|
227
|
+
expect(stats[k]).to be_truthy
|
227
228
|
end
|
228
229
|
|
229
230
|
finished = stats['finished_jobs']
|
230
|
-
finished.size.
|
231
|
+
expect(finished.size).to eq(1)
|
231
232
|
|
232
|
-
stats['neighbours'].is_a?( Array ).
|
233
|
+
expect(stats['neighbours'].is_a?( Array )).to be_truthy
|
233
234
|
|
234
|
-
stats['node'].delete( 'score' ).
|
235
|
-
stats['node'].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'].
|
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'].
|
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.
|
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 ).
|
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 ).
|
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 ).
|
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.
|
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.
|
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.
|
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.
|
283
|
+
expect(workload.size).to eq(5)
|
284
284
|
|
285
285
|
workload.each do |page|
|
286
|
-
page.elements.
|
287
|
-
page.elements.each { |e| page.audit_element?(e).
|
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.
|
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.
|
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.
|
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'].
|
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.
|
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.
|
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].
|
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.
|
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].
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
570
|
+
expect(raised).to be_falsey
|
571
571
|
|
572
|
-
pref_dispatchers.size.
|
573
|
-
pref_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'] }.
|
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'] }.
|
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 + '
|
596
|
+
# @opts.paths.checks = fixtures_path + 'signature_check/'
|
597
597
|
#
|
598
598
|
# @dispatcher_url = dispatcher_light_spawn.url
|
599
599
|
#
|