tarantula 0.0.5
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.
- data/CHANGELOG +2 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +106 -0
- data/Rakefile +80 -0
- data/init.rb +1 -0
- data/install.rb +1 -0
- data/laf/images/background.jpg +0 -0
- data/laf/images/relevance-os-logo.gif +0 -0
- data/laf/images/tab.png +0 -0
- data/laf/images/table-sort.gif +0 -0
- data/laf/images/tarantula-sprites.png +0 -0
- data/laf/javascripts/jquery-1.2.3.js +3408 -0
- data/laf/javascripts/jquery-ui-tabs.js +890 -0
- data/laf/javascripts/jquery.tablesorter.js +861 -0
- data/laf/javascripts/tarantula.js +10 -0
- data/laf/stylesheets/tarantula.css +638 -0
- data/laf/stylesheets/ui.tabs.css +113 -0
- data/lib/relevance/core_extensions/ellipsize.rb +34 -0
- data/lib/relevance/core_extensions/file.rb +9 -0
- data/lib/relevance/core_extensions/response.rb +9 -0
- data/lib/relevance/core_extensions/test_case.rb +12 -0
- data/lib/relevance/tarantula.rb +63 -0
- data/lib/relevance/tarantula/attack.rb +15 -0
- data/lib/relevance/tarantula/attack_form_submission.rb +75 -0
- data/lib/relevance/tarantula/attack_handler.rb +37 -0
- data/lib/relevance/tarantula/crawler.rb +240 -0
- data/lib/relevance/tarantula/detail.html.erb +77 -0
- data/lib/relevance/tarantula/form.rb +21 -0
- data/lib/relevance/tarantula/form_submission.rb +70 -0
- data/lib/relevance/tarantula/html_document_handler.rb +36 -0
- data/lib/relevance/tarantula/html_report_helper.rb +56 -0
- data/lib/relevance/tarantula/html_reporter.rb +105 -0
- data/lib/relevance/tarantula/index.html.erb +48 -0
- data/lib/relevance/tarantula/invalid_html_handler.rb +18 -0
- data/lib/relevance/tarantula/io_reporter.rb +34 -0
- data/lib/relevance/tarantula/link.rb +56 -0
- data/lib/relevance/tarantula/log_grabber.rb +16 -0
- data/lib/relevance/tarantula/rails_integration_proxy.rb +70 -0
- data/lib/relevance/tarantula/recording.rb +12 -0
- data/lib/relevance/tarantula/response.rb +13 -0
- data/lib/relevance/tarantula/result.rb +66 -0
- data/lib/relevance/tarantula/test_report.html.erb +34 -0
- data/lib/relevance/tarantula/tidy_handler.rb +32 -0
- data/lib/relevance/tarantula/transform.rb +17 -0
- data/manifest.txt +117 -0
- data/rails/init.rb +1 -0
- data/tarantula.gemspec +48 -0
- data/tasks/tarantula_tasks.rake +34 -0
- data/template/tarantula_test.rb +12 -0
- data/test/relevance/core_extensions/ellipsize_test.rb +19 -0
- data/test/relevance/core_extensions/file_test.rb +8 -0
- data/test/relevance/core_extensions/response_test.rb +29 -0
- data/test/relevance/core_extensions/test_case_test.rb +16 -0
- data/test/relevance/tarantula/attack_form_submission_test.rb +79 -0
- data/test/relevance/tarantula/attack_handler_test.rb +29 -0
- data/test/relevance/tarantula/crawler_test.rb +296 -0
- data/test/relevance/tarantula/form_submission_test.rb +71 -0
- data/test/relevance/tarantula/form_test.rb +50 -0
- data/test/relevance/tarantula/html_document_handler_test.rb +43 -0
- data/test/relevance/tarantula/html_report_helper_test.rb +47 -0
- data/test/relevance/tarantula/html_reporter_test.rb +82 -0
- data/test/relevance/tarantula/invalid_html_handler_test.rb +33 -0
- data/test/relevance/tarantula/io_reporter_test.rb +11 -0
- data/test/relevance/tarantula/link_test.rb +61 -0
- data/test/relevance/tarantula/log_grabber_test.rb +26 -0
- data/test/relevance/tarantula/rails_integration_proxy_test.rb +94 -0
- data/test/relevance/tarantula/result_test.rb +85 -0
- data/test/relevance/tarantula/tidy_handler_test.rb +58 -0
- data/test/relevance/tarantula/transform_test.rb +21 -0
- data/test/relevance/tarantula_test.rb +23 -0
- data/test/test_helper.rb +34 -0
- data/tmp/test_output/images/background.jpg +0 -0
- data/tmp/test_output/images/relevance-os-logo.gif +0 -0
- data/tmp/test_output/images/tab.png +0 -0
- data/tmp/test_output/images/table-sort.gif +0 -0
- data/tmp/test_output/images/tarantula-sprites.png +0 -0
- data/tmp/test_output/index.html +255 -0
- data/tmp/test_output/javascripts/jquery-1.2.3.js +3408 -0
- data/tmp/test_output/javascripts/jquery-ui-tabs.js +890 -0
- data/tmp/test_output/javascripts/jquery.tablesorter.js +861 -0
- data/tmp/test_output/javascripts/tarantula.js +10 -0
- data/tmp/test_output/stylesheets/tarantula.css +638 -0
- data/tmp/test_output/stylesheets/ui.tabs.css +113 -0
- data/tmp/test_output/test_user_pages/1.html +71 -0
- data/tmp/test_output/test_user_pages/10.html +71 -0
- data/tmp/test_output/test_user_pages/11.html +71 -0
- data/tmp/test_output/test_user_pages/12.html +71 -0
- data/tmp/test_output/test_user_pages/13.html +71 -0
- data/tmp/test_output/test_user_pages/14.html +71 -0
- data/tmp/test_output/test_user_pages/15.html +71 -0
- data/tmp/test_output/test_user_pages/16.html +71 -0
- data/tmp/test_output/test_user_pages/17.html +71 -0
- data/tmp/test_output/test_user_pages/18.html +71 -0
- data/tmp/test_output/test_user_pages/19.html +71 -0
- data/tmp/test_output/test_user_pages/2.html +71 -0
- data/tmp/test_output/test_user_pages/20.html +71 -0
- data/tmp/test_output/test_user_pages/3.html +71 -0
- data/tmp/test_output/test_user_pages/4.html +71 -0
- data/tmp/test_output/test_user_pages/5.html +71 -0
- data/tmp/test_output/test_user_pages/6.html +71 -0
- data/tmp/test_output/test_user_pages/7.html +71 -0
- data/tmp/test_output/test_user_pages/8.html +71 -0
- data/tmp/test_output/test_user_pages/9.html +71 -0
- data/uninstall.rb +1 -0
- data/vendor/xss-shield/MIT-LICENSE +20 -0
- data/vendor/xss-shield/README +76 -0
- data/vendor/xss-shield/init.rb +16 -0
- data/vendor/xss-shield/lib/xss_shield.rb +6 -0
- data/vendor/xss-shield/lib/xss_shield/erb_hacks.rb +111 -0
- data/vendor/xss-shield/lib/xss_shield/haml_hacks.rb +42 -0
- data/vendor/xss-shield/lib/xss_shield/safe_string.rb +47 -0
- data/vendor/xss-shield/lib/xss_shield/secure_helpers.rb +40 -0
- data/vendor/xss-shield/test/test_actionview_integration.rb +40 -0
- data/vendor/xss-shield/test/test_erb.rb +44 -0
- data/vendor/xss-shield/test/test_haml.rb +43 -0
- data/vendor/xss-shield/test/test_helpers.rb +25 -0
- data/vendor/xss-shield/test/test_safe_string.rb +55 -0
- metadata +283 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
|
2
|
+
|
|
3
|
+
describe "Relevance::Tarantula::Result" do
|
|
4
|
+
before do
|
|
5
|
+
@result = Relevance::Tarantula::Result.new(
|
|
6
|
+
:success => true,
|
|
7
|
+
:method => "get",
|
|
8
|
+
:url => "/some/url?arg1=foo&arg2=bar"
|
|
9
|
+
)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "has a short description" do
|
|
13
|
+
@result.short_description.should == "get /some/url?arg1=foo&arg2=bar"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "has a sequence number" do
|
|
17
|
+
@result.class.next_number = 0
|
|
18
|
+
@result.sequence_number.should == 1
|
|
19
|
+
@result.class.next_number.should == 1
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "has link to the url at localhost" do
|
|
23
|
+
@result.full_url.should == "http://localhost:3000/some/url?arg1=foo&arg2=bar"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "Relevance::Tarantula::Result class methods" do
|
|
29
|
+
before do
|
|
30
|
+
@rh = Relevance::Tarantula::Result
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "defines HTTP responses that are considered 'successful' when spidering" do
|
|
34
|
+
%w{200 201 302 401}.each do |code|
|
|
35
|
+
@rh.successful?(stub(:code => code)).should == true
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "adds successful responses to success collection" do
|
|
40
|
+
stub = stub_everything(:code => "200")
|
|
41
|
+
@rh.handle(Relevance::Tarantula::Result.new(:response => stub)).success.should == true
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "adds failed responses to failure collection" do
|
|
45
|
+
stub = stub_everything(:code => "500")
|
|
46
|
+
result = @rh.handle(Relevance::Tarantula::Result.new(:response => stub))
|
|
47
|
+
result.success.should == false
|
|
48
|
+
result.description.should == "Bad HTTP Response"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe "Relevance::Tarantula::Result allowed errors" do
|
|
54
|
+
before do
|
|
55
|
+
Relevance::Tarantula::Result.allow_errors_for = {}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "defaults to *not* skip errors" do
|
|
59
|
+
Relevance::Tarantula::Result.can_skip_error?(stub(:code => "404")).should == false
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "can skip errors matching code and url" do
|
|
63
|
+
Relevance::Tarantula::Result.allow_errors_for = {"404" => [/some_url/]}
|
|
64
|
+
Relevance::Tarantula::Result.can_skip_error?(stub(:code => "404", :url => "this_is_some_url")).should == true
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "does not skip errors matching code only" do
|
|
68
|
+
Relevance::Tarantula::Result.allow_errors_for = {"404" => [/some_other_url/]}
|
|
69
|
+
Relevance::Tarantula::Result.can_skip_error?(stub(:code => "404", :url => "this_is_some_url")).should == false
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "users allow_nnn_for syntax to specify allowed errors" do
|
|
73
|
+
Relevance::Tarantula::Result.allow_404_for(/this_url/)
|
|
74
|
+
Relevance::Tarantula::Result.allow_errors_for.should == {"404" => [/this_url/]}
|
|
75
|
+
Relevance::Tarantula::Result.allow_404_for(/another_url/)
|
|
76
|
+
Relevance::Tarantula::Result.allow_errors_for.should == {"404" => [/this_url/, /another_url/]}
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "chains to super method missing" do
|
|
80
|
+
lambda{Relevance::Tarantula::Result.allow_xxx_for}.should.raise(NoMethodError)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
|
|
2
|
+
|
|
3
|
+
if defined?(Tidy) && ENV['TIDY_PATH']
|
|
4
|
+
describe "Relevance::Tarantula::TidyHandler default" do
|
|
5
|
+
before do
|
|
6
|
+
@handler = Relevance::Tarantula::TidyHandler.new
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "likes a good document" do
|
|
10
|
+
response = stub(:html? => true, :body => <<-BODY, :code => 200)
|
|
11
|
+
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 3.2//EN\">
|
|
12
|
+
<html>
|
|
13
|
+
<title></title>
|
|
14
|
+
<body></body>
|
|
15
|
+
</html>
|
|
16
|
+
BODY
|
|
17
|
+
@handler.handle(Result.new(:response => response)).should == nil
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "rejects a document with errors" do
|
|
21
|
+
response = stub(:html? => true, :body => "<hotml>", :code => 200)
|
|
22
|
+
result = @handler.handle(Result.new(:response => response))
|
|
23
|
+
result.should.not.be nil
|
|
24
|
+
result.data.should =~ /Error: <hotml> is not recognized!/
|
|
25
|
+
result.description.should == "Bad HTML (Tidy)"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "rejects a document with warnings" do
|
|
29
|
+
response = stub(:html? => true, :body => <<-BODY, :code => 200)
|
|
30
|
+
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 3.2//EN\">
|
|
31
|
+
<html>
|
|
32
|
+
</html>
|
|
33
|
+
BODY
|
|
34
|
+
result = @handler.handle(Result.new(:response => response))
|
|
35
|
+
result.should.not.be nil
|
|
36
|
+
result.data.should =~ /Warning: inserting missing 'title' element/
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "Relevance::Tarantula::TidyHandler with :show_warnings => false" do
|
|
42
|
+
before do
|
|
43
|
+
@handler = Relevance::Tarantula::TidyHandler.new(:show_warnings => false)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "permits a document with warnings" do
|
|
47
|
+
response = stub(:html? => true, :body => <<-BODY, :code => 200)
|
|
48
|
+
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 3.2//EN\">
|
|
49
|
+
<html>
|
|
50
|
+
</html>
|
|
51
|
+
BODY
|
|
52
|
+
result = @handler.handle(Result.new(:response => response))
|
|
53
|
+
result.should.be nil
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
else
|
|
57
|
+
puts "TIDY_PATH not set. Tidy test will not run"
|
|
58
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), "../..", "test_helper.rb")
|
|
2
|
+
|
|
3
|
+
describe "Relevance::Tarantula::Transform" do
|
|
4
|
+
it "can do a simple replace" do
|
|
5
|
+
t = Relevance::Tarantula::Transform.new(/\w/, ".")
|
|
6
|
+
t["hello world"].should == "..... ....."
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "can do a replace with a block" do
|
|
10
|
+
t = Relevance::Tarantula::Transform.new(/([aeiou])/, Proc.new {|value| value.upcase})
|
|
11
|
+
t["hello world"].should == "hEllO wOrld"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# this is broken in Ruby?
|
|
15
|
+
it "cannot access groups from a block, despite Ruby docs" do
|
|
16
|
+
p = Proc.new {|value| $1.upcase}
|
|
17
|
+
t = Relevance::Tarantula::Transform.new(/([aeiou])/, p)
|
|
18
|
+
lambda {t["hello world"]}.should.raise(NoMethodError).message.should ==
|
|
19
|
+
"undefined method `upcase' for nil:NilClass"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper.rb")
|
|
2
|
+
|
|
3
|
+
describe "Relevance::Tarantula" do
|
|
4
|
+
include Relevance::Tarantula
|
|
5
|
+
attr_accessor :verbose
|
|
6
|
+
|
|
7
|
+
it "writes to stdout if verbose" do
|
|
8
|
+
self.verbose = true
|
|
9
|
+
expects(:puts).with("foo")
|
|
10
|
+
log("foo")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "swallows output if !verbose" do
|
|
14
|
+
self.verbose = false
|
|
15
|
+
expects(:puts).never
|
|
16
|
+
log("foo")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "puts RAILS_ROOT behind a method call" do
|
|
20
|
+
lambda{rails_root}.should.raise(NameError).message.should == "uninitialized constant RAILS_ROOT"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
basedir = File.dirname(__FILE__)
|
|
2
|
+
$:.unshift "#{basedir}/../lib"
|
|
3
|
+
require 'rubygems'
|
|
4
|
+
gem 'ruby-debug'
|
|
5
|
+
gem 'test-spec'
|
|
6
|
+
gem 'actionpack'
|
|
7
|
+
gem 'activerecord'
|
|
8
|
+
gem 'activesupport'
|
|
9
|
+
|
|
10
|
+
require 'test/spec'
|
|
11
|
+
require 'mocha'
|
|
12
|
+
require 'ostruct'
|
|
13
|
+
require 'ruby-debug'
|
|
14
|
+
require 'activerecord'
|
|
15
|
+
require 'relevance/tarantula'
|
|
16
|
+
|
|
17
|
+
# needed for html-scanner, grr
|
|
18
|
+
require 'active_support'
|
|
19
|
+
require 'action_controller'
|
|
20
|
+
|
|
21
|
+
require 'redgreen' unless (Object.const_defined?("TextMate") || ENV["EMACS"]) rescue nil # just a nice to have, don't blow up if not there
|
|
22
|
+
|
|
23
|
+
class Test::Unit::TestCase
|
|
24
|
+
def test_output_dir
|
|
25
|
+
File.join(File.dirname(__FILE__), "..", "tmp", "test_output")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# TODO change puts/print to use a single method for logging, which will then make the stubbing cleaner
|
|
29
|
+
def stub_puts_and_print(obj)
|
|
30
|
+
obj.stubs(:puts)
|
|
31
|
+
obj.stubs(:print)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
2
|
+
|
|
3
|
+
<html>
|
|
4
|
+
<head>
|
|
5
|
+
<meta content="text/html; charset=utf-8" http-equiv="Content-type" />
|
|
6
|
+
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
|
|
7
|
+
<meta name="Author" content="Erik Yowell; erik[at]thinkrelevance.com" />
|
|
8
|
+
<title>Tarantula report</title>
|
|
9
|
+
<script src="javascripts/jquery-1.2.3.js" type="text/javascript"></script>
|
|
10
|
+
<script src="javascripts/jquery.tablesorter.js" type="text/javascript"></script>
|
|
11
|
+
<script src="javascripts/jquery-ui-tabs.js" type="text/javascript"></script>
|
|
12
|
+
<script src="javascripts/tarantula.js" type="text/javascript"></script>
|
|
13
|
+
<link href="stylesheets/tarantula.css" rel="stylesheet" type="text/css" media="screen" />
|
|
14
|
+
<link href="stylesheets/ui.tabs.css" rel="stylesheet" type="text/css" media="screen" />
|
|
15
|
+
</head>
|
|
16
|
+
|
|
17
|
+
<body id="top">
|
|
18
|
+
|
|
19
|
+
<div id="container">
|
|
20
|
+
|
|
21
|
+
<div id="header">
|
|
22
|
+
<hr class="top" />
|
|
23
|
+
<h1><span>Tarantula : Eight Legs, Two Fangs, and an Attitude</span></h1>
|
|
24
|
+
<ul class="navigation">
|
|
25
|
+
<li><a href="#" class="result-all"><span>All</span> <em>20</em></a></li>
|
|
26
|
+
<li><a href="#" class="result-failure"><span>Failures</span> <em>10</em></a></li>
|
|
27
|
+
<li><a href="#" class="result-success"><span>Successful</span> <em>10</em></a></li>
|
|
28
|
+
</ul>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<div id="page-container">
|
|
32
|
+
<hr class="top" />
|
|
33
|
+
<div id="page">
|
|
34
|
+
<p>Generated on Fri Sep 26 11:33:58 -0400 2008</p>
|
|
35
|
+
<div id="tabs-container">
|
|
36
|
+
<ul>
|
|
37
|
+
<li><a href="#test_user_pages"><span>test_user_pages</span></a></li></ul>
|
|
38
|
+
<div id="test_user_pages">
|
|
39
|
+
|
|
40
|
+
<table cellspacing="0" class="grid tablesorter">
|
|
41
|
+
<caption>Failures (10)</caption>
|
|
42
|
+
<thead>
|
|
43
|
+
<tr>
|
|
44
|
+
<th class="sort asc"><span>URL</span><span class="sort"><em>↥</em></span></th>
|
|
45
|
+
<th><span>Action</span><span class="sort"><em>↥</em></span></th>
|
|
46
|
+
<th><span>Response</span><span class="sort"><em>↥</em></span></th>
|
|
47
|
+
<th><span>Description</span><span class="sort"><em>↥</em></span></th>
|
|
48
|
+
<th><span>Referrer</span><span class="sort"><em>↥</em></span></th>
|
|
49
|
+
</tr>
|
|
50
|
+
</thead>
|
|
51
|
+
<tfoot>
|
|
52
|
+
<tr>
|
|
53
|
+
<td colspan="5">
|
|
54
|
+
Footer
|
|
55
|
+
</td>
|
|
56
|
+
</tr>
|
|
57
|
+
</tfoot>
|
|
58
|
+
<tbody>
|
|
59
|
+
|
|
60
|
+
<tr>
|
|
61
|
+
<td class="left"><a href="test_user_pages/11.html">/widgets/1</a></td>
|
|
62
|
+
<td class="center">get</td>
|
|
63
|
+
<td class="center"><span class="r5">500</span></td>
|
|
64
|
+
<td></td>
|
|
65
|
+
<td>/random/92</td>
|
|
66
|
+
</tr>
|
|
67
|
+
|
|
68
|
+
<tr>
|
|
69
|
+
<td class="left"><a href="test_user_pages/12.html">/widgets/2</a></td>
|
|
70
|
+
<td class="center">get</td>
|
|
71
|
+
<td class="center"><span class="r5">500</span></td>
|
|
72
|
+
<td></td>
|
|
73
|
+
<td>/random/83</td>
|
|
74
|
+
</tr>
|
|
75
|
+
|
|
76
|
+
<tr>
|
|
77
|
+
<td class="left"><a href="test_user_pages/13.html">/widgets/3</a></td>
|
|
78
|
+
<td class="center">get</td>
|
|
79
|
+
<td class="center"><span class="r5">500</span></td>
|
|
80
|
+
<td></td>
|
|
81
|
+
<td>/random/7</td>
|
|
82
|
+
</tr>
|
|
83
|
+
|
|
84
|
+
<tr>
|
|
85
|
+
<td class="left"><a href="test_user_pages/14.html">/widgets/4</a></td>
|
|
86
|
+
<td class="center">get</td>
|
|
87
|
+
<td class="center"><span class="r5">500</span></td>
|
|
88
|
+
<td></td>
|
|
89
|
+
<td>/random/97</td>
|
|
90
|
+
</tr>
|
|
91
|
+
|
|
92
|
+
<tr>
|
|
93
|
+
<td class="left"><a href="test_user_pages/15.html">/widgets/5</a></td>
|
|
94
|
+
<td class="center">get</td>
|
|
95
|
+
<td class="center"><span class="r5">500</span></td>
|
|
96
|
+
<td></td>
|
|
97
|
+
<td>/random/49</td>
|
|
98
|
+
</tr>
|
|
99
|
+
|
|
100
|
+
<tr>
|
|
101
|
+
<td class="left"><a href="test_user_pages/16.html">/widgets/6</a></td>
|
|
102
|
+
<td class="center">get</td>
|
|
103
|
+
<td class="center"><span class="r5">500</span></td>
|
|
104
|
+
<td></td>
|
|
105
|
+
<td>/random/89</td>
|
|
106
|
+
</tr>
|
|
107
|
+
|
|
108
|
+
<tr>
|
|
109
|
+
<td class="left"><a href="test_user_pages/17.html">/widgets/7</a></td>
|
|
110
|
+
<td class="center">get</td>
|
|
111
|
+
<td class="center"><span class="r5">500</span></td>
|
|
112
|
+
<td></td>
|
|
113
|
+
<td>/random/62</td>
|
|
114
|
+
</tr>
|
|
115
|
+
|
|
116
|
+
<tr>
|
|
117
|
+
<td class="left"><a href="test_user_pages/18.html">/widgets/8</a></td>
|
|
118
|
+
<td class="center">get</td>
|
|
119
|
+
<td class="center"><span class="r5">500</span></td>
|
|
120
|
+
<td></td>
|
|
121
|
+
<td>/random/70</td>
|
|
122
|
+
</tr>
|
|
123
|
+
|
|
124
|
+
<tr>
|
|
125
|
+
<td class="left"><a href="test_user_pages/19.html">/widgets/9</a></td>
|
|
126
|
+
<td class="center">get</td>
|
|
127
|
+
<td class="center"><span class="r5">500</span></td>
|
|
128
|
+
<td></td>
|
|
129
|
+
<td>/random/15</td>
|
|
130
|
+
</tr>
|
|
131
|
+
|
|
132
|
+
<tr>
|
|
133
|
+
<td class="left"><a href="test_user_pages/20.html">/widgets/10</a></td>
|
|
134
|
+
<td class="center">get</td>
|
|
135
|
+
<td class="center"><span class="r5">500</span></td>
|
|
136
|
+
<td></td>
|
|
137
|
+
<td>/random/67</td>
|
|
138
|
+
</tr>
|
|
139
|
+
|
|
140
|
+
</tbody>
|
|
141
|
+
</table>
|
|
142
|
+
|
|
143
|
+
<table cellspacing="0" class="grid tablesorter">
|
|
144
|
+
<caption>Successes (10)</caption>
|
|
145
|
+
<thead>
|
|
146
|
+
<tr>
|
|
147
|
+
<th class="sort asc"><span>URL</span><span class="sort"><em>↥</em></span></th>
|
|
148
|
+
<th><span>Action</span><span class="sort"><em>↥</em></span></th>
|
|
149
|
+
<th><span>Response</span><span class="sort"><em>↥</em></span></th>
|
|
150
|
+
<th><span>Description</span><span class="sort"><em>↥</em></span></th>
|
|
151
|
+
<th><span>Referrer</span><span class="sort"><em>↥</em></span></th>
|
|
152
|
+
</tr>
|
|
153
|
+
</thead>
|
|
154
|
+
<tfoot>
|
|
155
|
+
<tr>
|
|
156
|
+
<td colspan="5">
|
|
157
|
+
Footer
|
|
158
|
+
</td>
|
|
159
|
+
</tr>
|
|
160
|
+
</tfoot>
|
|
161
|
+
<tbody>
|
|
162
|
+
|
|
163
|
+
<tr>
|
|
164
|
+
<td class="left"><a href="test_user_pages/1.html">/widgets/1</a></td>
|
|
165
|
+
<td class="center">get</td>
|
|
166
|
+
<td class="center"><span class="r2">200</span></td>
|
|
167
|
+
<td></td>
|
|
168
|
+
<td>/random/36</td>
|
|
169
|
+
</tr>
|
|
170
|
+
|
|
171
|
+
<tr>
|
|
172
|
+
<td class="left"><a href="test_user_pages/2.html">/widgets/2</a></td>
|
|
173
|
+
<td class="center">get</td>
|
|
174
|
+
<td class="center"><span class="r2">200</span></td>
|
|
175
|
+
<td></td>
|
|
176
|
+
<td>/random/88</td>
|
|
177
|
+
</tr>
|
|
178
|
+
|
|
179
|
+
<tr>
|
|
180
|
+
<td class="left"><a href="test_user_pages/3.html">/widgets/3</a></td>
|
|
181
|
+
<td class="center">get</td>
|
|
182
|
+
<td class="center"><span class="r2">200</span></td>
|
|
183
|
+
<td></td>
|
|
184
|
+
<td>/random/53</td>
|
|
185
|
+
</tr>
|
|
186
|
+
|
|
187
|
+
<tr>
|
|
188
|
+
<td class="left"><a href="test_user_pages/4.html">/widgets/4</a></td>
|
|
189
|
+
<td class="center">get</td>
|
|
190
|
+
<td class="center"><span class="r2">200</span></td>
|
|
191
|
+
<td></td>
|
|
192
|
+
<td>/random/91</td>
|
|
193
|
+
</tr>
|
|
194
|
+
|
|
195
|
+
<tr>
|
|
196
|
+
<td class="left"><a href="test_user_pages/5.html">/widgets/5</a></td>
|
|
197
|
+
<td class="center">get</td>
|
|
198
|
+
<td class="center"><span class="r2">200</span></td>
|
|
199
|
+
<td></td>
|
|
200
|
+
<td>/random/12</td>
|
|
201
|
+
</tr>
|
|
202
|
+
|
|
203
|
+
<tr>
|
|
204
|
+
<td class="left"><a href="test_user_pages/6.html">/widgets/6</a></td>
|
|
205
|
+
<td class="center">get</td>
|
|
206
|
+
<td class="center"><span class="r2">200</span></td>
|
|
207
|
+
<td></td>
|
|
208
|
+
<td>/random/97</td>
|
|
209
|
+
</tr>
|
|
210
|
+
|
|
211
|
+
<tr>
|
|
212
|
+
<td class="left"><a href="test_user_pages/7.html">/widgets/7</a></td>
|
|
213
|
+
<td class="center">get</td>
|
|
214
|
+
<td class="center"><span class="r2">200</span></td>
|
|
215
|
+
<td></td>
|
|
216
|
+
<td>/random/93</td>
|
|
217
|
+
</tr>
|
|
218
|
+
|
|
219
|
+
<tr>
|
|
220
|
+
<td class="left"><a href="test_user_pages/8.html">/widgets/8</a></td>
|
|
221
|
+
<td class="center">get</td>
|
|
222
|
+
<td class="center"><span class="r2">200</span></td>
|
|
223
|
+
<td></td>
|
|
224
|
+
<td>/random/95</td>
|
|
225
|
+
</tr>
|
|
226
|
+
|
|
227
|
+
<tr>
|
|
228
|
+
<td class="left"><a href="test_user_pages/9.html">/widgets/9</a></td>
|
|
229
|
+
<td class="center">get</td>
|
|
230
|
+
<td class="center"><span class="r2">200</span></td>
|
|
231
|
+
<td></td>
|
|
232
|
+
<td>/random/62</td>
|
|
233
|
+
</tr>
|
|
234
|
+
|
|
235
|
+
<tr>
|
|
236
|
+
<td class="left"><a href="test_user_pages/10.html">/widgets/10</a></td>
|
|
237
|
+
<td class="center">get</td>
|
|
238
|
+
<td class="center"><span class="r2">200</span></td>
|
|
239
|
+
<td></td>
|
|
240
|
+
<td>/random/13</td>
|
|
241
|
+
</tr>
|
|
242
|
+
|
|
243
|
+
</tbody>
|
|
244
|
+
</table>
|
|
245
|
+
|
|
246
|
+
</div></div>
|
|
247
|
+
</div>
|
|
248
|
+
<div id="sidebar">
|
|
249
|
+
<h3><span>Tarantula</span></h3>
|
|
250
|
+
<p>Tarantula is an open-source tool for testing Rails web applications. Tarantula is developed by <a href="http://thinkrelevance.com">Relevance, Inc.</a> and lives at <a href="http://opensource.thinkrelevance.com">http://opensource.thinkrelevance.com</a>.</p>
|
|
251
|
+
</div>
|
|
252
|
+
</div>
|
|
253
|
+
</body>
|
|
254
|
+
|
|
255
|
+
</html>
|