Ticket #12: tarantula_less_mem_with_tests2.patch.txt

File tarantula_less_mem_with_tests2.patch.txt, 13.7 kB (added by someone23, 4 months ago)

updated patch with test fixes

Line 
1 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/lib/relevance/tarantula/crawler.rb tarantula.less_mem/lib/relevance/tarantula/crawler.rb
2 --- tarantula.orig/lib/relevance/tarantula/crawler.rb   2008-05-03 18:49:16.000000000 -0400
3 +++ tarantula.less_mem/lib/relevance/tarantula/crawler.rb       2008-05-04 00:05:25.000000000 -0400
4 @@ -20,15 +20,15 @@
5      @links_to_crawl = []
6      @forms_to_crawl = []
7      @referrers = {}
8 -    @skip_uri_patterns =[
9 +    @skip_uri_patterns = [
10        /^javascript/,
11        /^mailto/,
12 -      /^http/,                                     
13 +      /^http/,
14      ]
15      self.transform_url_patterns = [
16        [/#.*$/, '']
17      ]
18 -    @reporters = []
19 +    @reporters = [Relevance::Tarantula::IOReporter.new($stderr)]
20      @decoder = HTMLEntities.new
21      
22    end
23 @@ -74,9 +74,9 @@
24    end 
25    
26    def save_result(result)
27 -    return if result.nil?
28 -    collection = result.success ? successes : failures
29 -    collection << result
30 +    reporters.each do |reporter|
31 +      reporter.report(result)
32 +    end
33    end
34    
35    def handle_link_results(link, response)
36 @@ -178,26 +178,21 @@
37    end
38  
39    def generate_reports
40 -    FileUtils.mkdir_p(report_dir)
41 +    errors = []
42      reporters.each do |reporter|
43 -      reporter.report(report_dir, self)
44 -    end
45 -  end
46
47 -  def report_to_console
48 -    unless (failures).empty?
49 -      $stderr.puts "****** FAILURES"
50 -      failures.each do |failure|
51 -        $stderr.puts "#{failure.code}: #{failure.url}"
52 +      begin
53 +        reporter.finish_report
54 +      rescue RuntimeError => e
55 +        errors << e
56        end
57 -      raise "#{failures.size} failures"
58 +    end
59 +    unless errors.empty?
60 +      raise errors.map(&:message).join("\n")
61      end
62    end
63    
64    def report_results
65 -    puts "Writing results to #{report_dir}"
66      generate_reports
67 -    report_to_console
68    end
69    
70    def total_links_count
71 @@ -217,4 +212,4 @@
72        print "\r #{links_completed_count} of #{total_links_count} links completed               "
73      end
74    end 
75 -end
76 \ No newline at end of file
77 +end
78 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/lib/relevance/tarantula/html_reporter.rb tarantula.less_mem/lib/relevance/tarantula/html_reporter.rb
79 --- tarantula.orig/lib/relevance/tarantula/html_reporter.rb     2008-05-03 18:49:16.000000000 -0400
80 +++ tarantula.less_mem/lib/relevance/tarantula/html_reporter.rb 2008-05-04 00:04:11.000000000 -0400
81 @@ -1,28 +1,33 @@
82  class Relevance::Tarantula::HtmlReporter
83
84    include Relevance::Tarantula
85 -  attr_accessor :basedir, :results
86 +  attr_accessor :basedir, :results
87    delegate :successes, :failures, :to => :results
88 -  def self.report(basedir, results)
89 -    self.new(basedir, results)
90 -  end
91 -
92 -  def initialize(basedir, results)
93
94 +  HtmlResultOverview = Struct.new(:code, :url, :description, :method, :referrer, :file_name)
95
96 +  def initialize(basedir)
97      @basedir = basedir
98 -    @results = results
99 -    copy_styles
100 -    create_index
101 -    create_detail_reports
102 +    @results = Struct.new(:successes, :failures).new([], [])
103 +    FileUtils.mkdir_p(@basedir)
104    end
105    
106 -  def template(name)
107 -    File.read(File.join(File.dirname(__FILE__), name))
108 +  def report(result)
109 +    return if result.nil?
110 +   
111 +    create_detail_report(result)
112 +   
113 +    collection = result.success ? results.successes : results.failures
114 +    collection << HtmlResultOverview.new(
115 +      result.code, result.url, result.description, result.method, result.referrer, result.file_name
116 +    )
117    end
118    
119 -  def output(name, body)
120 -    File.open(File.join(basedir, name), "w") do |file|
121 -      file.write body
122 -    end
123 -  end     
124 +  def finish_report
125 +    puts "Writing results to #{basedir}"
126 +    copy_styles
127 +    create_index
128 +  end
129    
130    def copy_styles
131      # not using cp_r because it picks up .svn crap
132 @@ -44,19 +49,26 @@
133      template = ERB.new(template("index.html.erb"))
134      output("index.html", template.result(binding))
135    end
136 -
137 -  def create_detail_reports
138 -    template = ERB.new(template("detail.html.erb"))
139 -    results.successes.each do |result|
140 -      output(result.file_name, template.result(result.send(:binding)))
141 -    end
142 -    results.failures.each do |result|
143 -      output(result.file_name, template.result(result.send(:binding)))
144
145 +  def template(name)
146 +    File.read(File.join(File.dirname(__FILE__), name))
147 +  end
148
149 +  def output(name, body)
150 +    File.open(File.join(basedir, name), "w") do |file|
151 +      file.write body
152      end
153 +  end     
154
155 +  def create_detail_report(result)
156 +    template = ERB.new(template("detail.html.erb"))
157 +    output(result.file_name, template.result(result.send(:binding)))
158    end
159 -
160
161    # CSS class for HTML status codes
162    def class_for_code(code)
163      "r#{Integer(code)/100}"
164    end
165
166
167  end
168 \ No newline at end of file
169 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/lib/relevance/tarantula/io_reporter.rb tarantula.less_mem/lib/relevance/tarantula/io_reporter.rb
170 --- tarantula.orig/lib/relevance/tarantula/io_reporter.rb       1969-12-31 19:00:00.000000000 -0500
171 +++ tarantula.less_mem/lib/relevance/tarantula/io_reporter.rb   2008-05-04 00:04:11.000000000 -0400
172 @@ -0,0 +1,34 @@
173 +class Relevance::Tarantula::IOReporter
174
175 +  include Relevance::Tarantula
176 +  attr_accessor :io, :results
177 +  delegate :successes, :failures, :to => :results
178
179 +  IOResultOverview = Struct.new(:code, :url)
180
181 +  def initialize(io)
182 +    @io = io
183 +    @results = Struct.new(:successes, :failures).new([], [])
184 +  end
185
186 +  def report(result)
187 +    return if result.nil?
188 +   
189 +    unless result.success # collection = result.success ? results.successes : results.failures
190 +      results.failures << IOResultOverview.new(
191 +        result.code, result.url
192 +      )
193 +    end
194 +  end
195
196 +  def finish_report
197 +    unless (failures).empty?
198 +      io.puts "****** FAILURES"
199 +      failures.each do |failure|
200 +        io.puts "#{failure.code}: #{failure.url}"
201 +      end
202 +      raise "#{failures.size} failures"
203 +    end
204 +  end
205
206 +end
207 \ No newline at end of file
208 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/lib/relevance/tarantula/rails_integration_proxy.rb tarantula.less_mem/lib/relevance/tarantula/rails_integration_proxy.rb
209 --- tarantula.orig/lib/relevance/tarantula/rails_integration_proxy.rb   2008-05-03 18:49:16.000000000 -0400
210 +++ tarantula.less_mem/lib/relevance/tarantula/rails_integration_proxy.rb       2008-05-04 00:04:11.000000000 -0400
211 @@ -18,7 +18,7 @@
212        [/\?\d+$/, ''],                               # strip trailing numbers for assets
213        [/^http:\/\/#{integration_test.host}/, '']    # strip full path down to relative
214      ]
215 -    t.reporters << Relevance::Tarantula::HtmlReporter
216 +    t.reporters << Relevance::Tarantula::HtmlReporter.new(t.report_dir)
217      t
218    end
219  
220 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/lib/relevance/tarantula/result.rb tarantula.less_mem/lib/relevance/tarantula/result.rb
221 --- tarantula.orig/lib/relevance/tarantula/result.rb    2008-05-03 18:49:16.000000000 -0400
222 +++ tarantula.less_mem/lib/relevance/tarantula/result.rb        2008-05-04 00:04:11.000000000 -0400
223 @@ -30,7 +30,7 @@
224      "#{DEFAULT_LOCALHOST}#{url}"
225    end
226    ALLOW_NNN_FOR = /^allow_(\d\d\d)_for$/
227 -  class <<self
228 +  class << self
229      attr_accessor :next_number
230      def handle(result)
231        retval = result.dup
232 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/lib/relevance/tarantula.rb tarantula.less_mem/lib/relevance/tarantula.rb
233 --- tarantula.orig/lib/relevance/tarantula.rb   2008-05-03 18:49:16.000000000 -0400
234 +++ tarantula.less_mem/lib/relevance/tarantula.rb       2008-05-04 00:04:11.000000000 -0400
235 @@ -47,6 +47,7 @@
236  
237  require 'relevance/tarantula/html_reporter'
238  require 'relevance/tarantula/html_report_helper'
239 +require 'relevance/tarantula/io_reporter'
240  require 'relevance/tarantula/recording'
241  require 'relevance/tarantula/response'
242  require 'relevance/tarantula/result'
243 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/test/relevance/core_extensions/test_case_test.rb tarantula.less_mem/test/relevance/core_extensions/test_case_test.rb
244 --- tarantula.orig/test/relevance/core_extensions/test_case_test.rb     2008-05-03 18:49:15.000000000 -0400
245 +++ tarantula.less_mem/test/relevance/core_extensions/test_case_test.rb 2008-05-04 00:04:11.000000000 -0400
246 @@ -4,6 +4,7 @@
247  describe "TestCase extensions" do
248    it "can create the crawler" do
249      RailsIntegrationProxy.stubs(:rails_root).returns("STUB_RAILS_ROOT")
250 +    Crawler.any_instance.stubs(:rails_root).returns("STUB_RAILS_ROOT")
251      tarantula_crawler(stub_everything)
252    end
253    
254 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/test/relevance/tarantula/crawler_test.rb tarantula.less_mem/test/relevance/tarantula/crawler_test.rb
255 --- tarantula.orig/test/relevance/tarantula/crawler_test.rb     2008-05-03 18:49:16.000000000 -0400
256 +++ tarantula.less_mem/test/relevance/tarantula/crawler_test.rb 2008-05-04 00:06:59.000000000 -0400
257 @@ -98,12 +98,9 @@
258  end
259  
260  describe 'Relevance::Tarantula::Crawler#report_results' do
261 -  it "delegates to generate_reports then report_to_console" do
262 +  it "delegates to generate_reports" do
263      crawler = Crawler.new
264 -    crawler.expects(:report_dir)
265 -    crawler.expects(:puts)
266      crawler.expects(:generate_reports)
267 -    crawler.expects(:report_to_console)
268      crawler.report_results
269    end
270  end
271 @@ -187,21 +184,14 @@
272      crawler.do_crawl
273    end
274    
275 -  it "reports errors to stderr and then raises" do
276 -    crawler = Crawler.new
277 -    crawler.failures << stub(:code => "404", :url => "/uh-oh")
278 -    $stderr.expects(:puts).with("****** FAILURES")
279 -    $stderr.expects(:puts).with("404: /uh-oh")
280 -    lambda {crawler.report_to_console}.should.raise RuntimeError
281 -  end
282
283    it "asks each reporter to write its report in report_dir" do
284      crawler = Crawler.new
285 -    crawler.failures << stub(:code => "404", :url => "/uh-oh")
286      crawler.stubs(:report_dir).returns(test_output_dir)
287      reporter = stub_everything
288      reporter.expects(:report)
289 +    reporter.expects(:finish_report)
290      crawler.reporters = [reporter]
291 +    crawler.save_result stub(:code => "404", :url => "/uh-oh")
292      crawler.generate_reports
293    end
294    
295 @@ -286,4 +276,4 @@
296      crawler = Crawler.new
297      lambda{crawler.foo}.should.raise(NoMethodError)
298    end
299 -end
300 \ No newline at end of file
301 +end
302 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/test/relevance/tarantula/html_reporter_test.rb tarantula.less_mem/test/relevance/tarantula/html_reporter_test.rb
303 --- tarantula.orig/test/relevance/tarantula/html_reporter_test.rb       2008-05-03 18:49:16.000000000 -0400
304 +++ tarantula.less_mem/test/relevance/tarantula/html_reporter_test.rb   2008-05-04 00:04:11.000000000 -0400
305 @@ -6,7 +6,7 @@
306      FileUtils.rm_rf(test_output_dir)
307      FileUtils.mkdir_p(test_output_dir)
308      Relevance::Tarantula::Result.next_number = 0
309 -    @results = (1..10).map do |index|
310 +    @success_results = (1..10).map do |index|
311        Relevance::Tarantula::Result.new(
312          :success => true,
313          :method => "get",
314 @@ -23,6 +23,23 @@
315          :data => "{:param1 => :value, :param2 => :another_value}"
316        )
317      end
318 +    @fail_results = (1..10).map do |index|
319 +      Relevance::Tarantula::Result.new(
320 +        :success => false,
321 +        :method => "get",
322 +        :url => "/widgets/#{index}",
323 +        :response => stub(:code => 500, :body => "<h1>header</h1>\n<p>text</p>"),
324 +        :referrer => "/random/#{rand(100)}",
325 +        :log => <<-END,
326 +Made-up stack trace:
327 +/some_module/some_class.rb:697:in `bad_method'
328 +/some_module/other_class.rb:12345677:in `long_method'
329 +this link should be <a href="#">escaped</a>
330 +blah blah blah
331 +END
332 +        :data => "{:param1 => :value, :param2 => :another_value}"
333 +      )
334 +    end
335      @index = File.join(test_output_dir, "index.html")
336      FileUtils.rm_f @index
337      @detail = File.join(test_output_dir, "1.html")
338 @@ -31,8 +48,10 @@
339    
340    it "creates a report based on tarantula results" do   
341      Relevance::Tarantula::Result.any_instance.stubs(:rails_root).returns("STUB_ROOT")
342 -    results = stub(:successes => @results, :failures => @results)
343 -    Relevance::Tarantula::HtmlReporter.report(test_output_dir, results)
344 +    # results = stub(:successes => @results, :failures => @results)
345 +    reporter = Relevance::Tarantula::HtmlReporter.new(test_output_dir)
346 +    (@success_results + @fail_results).each {|r| reporter.report(r)}
347 +    reporter.finish_report
348      File.should.exist @index
349      File.should.exist @detail
350    end
351 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/test/relevance/tarantula/io_reporter_test.rb tarantula.less_mem/test/relevance/tarantula/io_reporter_test.rb
352 --- tarantula.orig/test/relevance/tarantula/io_reporter_test.rb 1969-12-31 19:00:00.000000000 -0500
353 +++ tarantula.less_mem/test/relevance/tarantula/io_reporter_test.rb     2008-05-04 00:04:11.000000000 -0400
354 @@ -0,0 +1,12 @@
355 +require File.join(File.dirname(__FILE__), "..", "..", "test_helper.rb")
356 +include Relevance::Tarantula
357 +
358 +describe 'Relevance::Tarantula::IOReporter' do
359 +  it "reports errors to stderr and then raises" do
360 +    reporter = IOReporter.new($stderr)
361 +    reporter.report stub(:code => "404", :url => "/uh-oh", :success => false)
362 +    $stderr.expects(:puts).with("****** FAILURES")
363 +    $stderr.expects(:puts).with("404: /uh-oh")
364 +    lambda {reporter.finish_report}.should.raise RuntimeError
365 +  end
366 +end
367 diff -Naru --exclude=.svn --exclude='*~' tarantula.orig/test/relevance/tarantula/rails_integration_proxy_test.rb tarantula.less_mem/test/relevance/tarantula/rails_integration_proxy_test.rb
368 --- tarantula.orig/test/relevance/tarantula/rails_integration_proxy_test.rb     2008-05-03 18:49:16.000000000 -0400
369 +++ tarantula.less_mem/test/relevance/tarantula/rails_integration_proxy_test.rb 2008-05-04 00:04:11.000000000 -0400
370 @@ -4,6 +4,7 @@
371  describe "Relevance::Tarantula::RailsIntegrationProxy rails_integration_test" do
372    before {
373      Crawler.any_instance.stubs(:crawl)
374 +    Crawler.any_instance.stubs(:rails_root).returns("STUB_RAILS_ROOT")
375      RailsIntegrationProxy.stubs(:rails_root).returns("STUB_RAILS_ROOT")
376    }
377