soda 0.0.12 → 0.0.13

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/bin/SodaSuite CHANGED
@@ -30,11 +30,13 @@
30
30
  ###############################################################################
31
31
  # Needed Ruby libs:
32
32
  ###############################################################################
33
+ require 'rubygems'
33
34
  require 'Soda'
34
35
  require 'getoptlong'
35
36
  require 'libxml'
36
37
  require 'watir'
37
38
  require 'SodaReportSummery'
39
+ require 'SodaSuiteSummary'
38
40
  require 'pp'
39
41
 
40
42
  ###############################################################################
@@ -119,46 +121,15 @@ class SodaSuite
119
121
  # None.
120
122
  #
121
123
  ###############################################################################
122
- def ExecuteTestSuite(suite, rerun = false, reruntest = nil)
124
+ def ExecuteTestSuites(suites)
123
125
  soda = nil
124
- master_result = 0
125
126
  result = nil
126
-
127
- soda = Soda::Soda.new(@SodaParams)
128
-
129
- if (reruntest != nil)
130
- SodaUtils.PrintSoda("Running rerun test setup script: "+
131
- "'#{reruntest}'.\n")
132
- soda.run(reruntest)
133
- end
134
-
135
- suite.each do |test|
136
- result = soda.run(test, rerun)
137
- if (result == -1)
138
- SodaUtils.PrintSoda("Failed executing test file: #{test}!\n",
139
- SodaUtils::ERROR)
140
- master_result = -1
141
-
142
- begin
143
- soda.browser.close()
144
- rescue Exception => e
145
- print "Exception: #{e.message}\n"
146
- ensure
147
- end
148
- soda = Soda::Soda.new(@SodaParams)
149
- end
150
- end
151
-
152
- begin
153
- soda.browser.close()
154
- rescue Exception => e
155
- print "Exception: #{e.message}\n"
156
- ensure
157
- end
158
127
 
159
- soda = nil
160
- return master_result
161
- end
128
+ soda = Soda::Soda.new(@SodaParams)
129
+ result = soda.RunAllSuites(suites)
130
+
131
+ return result
132
+ end
162
133
 
163
134
  ###############################################################################
164
135
  # Execute -- Medhod
@@ -621,6 +592,11 @@ def Main
621
592
  PrintHelp()
622
593
  end
623
594
 
595
+ if (params['suites'].length > 0 && params['resultsdir'] == nil)
596
+ SodaUtils.PrintSoda("Missing argument --resultsdir!\n")
597
+ PrintHelp()
598
+ end
599
+
624
600
  if (params['debug'])
625
601
  SodaUtils.PrintSoda("SodaSuite Params:\n")
626
602
  params.each do |k, v|
@@ -649,12 +625,7 @@ def Main
649
625
 
650
626
  if (params['suites'].length > 0)
651
627
  sweet = SodaSuite.new(params)
652
- params['suites'].each do |swt|
653
- result = sweet.ExecuteTestSuite(swt)
654
- if (result != 0)
655
- master_result = -1
656
- end
657
- end
628
+ result = sweet.ExecuteTestSuites(params['suites'])
658
629
  end
659
630
 
660
631
  if (params['test_files'].length > 0)
@@ -672,20 +643,19 @@ def Main
672
643
  end
673
644
  end
674
645
 
675
- # see if we should rerun failed tests #
676
- if (rerun_failed_test && failed_tests.length > 0)
677
- SodaUtils.PrintSoda("Rerunning failed tests.\n")
678
- sweet.ExecuteTestSuite(failed_tests, true, rerun_test_script)
679
- SodaUtils.PrintSoda("Finished rerunning failed tests.\n")
680
- end
681
-
682
646
  if (params['resultsdir'] != nil)
683
647
  begin
684
- summery = SodaReportSummery.new(params['resultsdir'],
685
- params['summaryfile'], true)
648
+ if (params['suites'].length > 0)
649
+ summary = SodaSuiteSummary.new(params['resultsdir'],
650
+ params['summaryfile'], true)
651
+ else
652
+ summery = SodaReportSummery.new(params['resultsdir'],
653
+ params['summaryfile'], true)
654
+ end
686
655
  rescue Exception => e
687
- print "Error: calling: SodaReportSummery!\n"
688
- print "StackTrace: #{e.backtrace}\n\n"
656
+ print "Error: calling: SodaReportSummery: #{e.message}\n"
657
+ print e.backtrace.join("\n")
658
+ print "\n\n"
689
659
  exit(-1)
690
660
  ensure
691
661
  end
@@ -28,6 +28,7 @@
28
28
 
29
29
  require 'rubygems'
30
30
  require 'SodaReportSummery'
31
+ require 'SodaSuiteSummary'
31
32
  require 'getoptlong'
32
33
 
33
34
  ###############################################################################
@@ -51,6 +52,10 @@ Required Flags:
51
52
  --reportdir: This flag tells #{$0} where to find the Soda log files.
52
53
 
53
54
  Optional Flags:
55
+ --usesuites: This flag say that the summary to be generated is for reports
56
+ that were created by SodaSuite using the --suite flag and not the --test
57
+ flag.
58
+
54
59
  --help: Prints this message and exits.
55
60
 
56
61
  HLP
@@ -77,10 +82,12 @@ def Main()
77
82
  reportdir = nil
78
83
  summary_file = nil
79
84
  summary_obj = nil
85
+ use_suites = false
80
86
 
81
87
  opts = GetoptLong.new(
82
88
  ['--reportdir', '-r', GetoptLong::REQUIRED_ARGUMENT],
83
- ['--help', '-h', GetoptLong::OPTIONAL_ARGUMENT]
89
+ ['--help', '-h', GetoptLong::OPTIONAL_ARGUMENT],
90
+ ['--usesuites', '-s', GetoptLong::OPTIONAL_ARGUMENT]
84
91
  )
85
92
 
86
93
  opts.quiet = true
@@ -88,6 +95,8 @@ def Main()
88
95
  case (opt)
89
96
  when "--reportdir"
90
97
  reportdir = arg
98
+ when "--usesuites"
99
+ use_suites = true
91
100
  when "--help"
92
101
  PrintHelp()
93
102
  exit(0)
@@ -103,11 +112,17 @@ def Main()
103
112
  summary_file = "#{reportdir}/summary.html"
104
113
  begin
105
114
  print "(*)Creating summary report...\n"
106
- summary_obj = SodaReportSummery.new(reportdir, summary_file, true)
115
+ if (use_suites)
116
+ summary_obj = SodaSuiteSummary.new(reportdir, summary_file, true)
117
+ else
118
+ summary_obj = SodaReportSummery.new(reportdir, summary_file, true)
119
+ end
107
120
  print "(*)Finished creating report.\n"
108
121
  print "(*)Summary File: #{summary_file}\n"
109
122
  rescue Exception => e
110
- print "(!)Error: #{e.message}!\n\n"
123
+ print "(!)Error: #{e.message}!\n"
124
+ print e.backtrace.join("\n")
125
+ print "\n\n"
111
126
  exit(2)
112
127
  ensure
113
128
  end
data/lib/Soda.rb CHANGED
@@ -57,6 +57,7 @@ require "fields/FileField"
57
57
  require "fields/LiField"
58
58
  require 'thread'
59
59
  require 'date'
60
+ require 'pp'
60
61
 
61
62
  ###############################################################################
62
63
  # Soda -- Class
@@ -2676,7 +2677,7 @@ JSCode
2676
2677
  # returns a SodaReport object.
2677
2678
  #
2678
2679
  ###############################################################################
2679
- def run(file, rerun = false)
2680
+ def run(file, rerun = false, genhtml = true)
2680
2681
  result = 0
2681
2682
  master_result = 0
2682
2683
  thread_soda = nil
@@ -2743,11 +2744,157 @@ JSCode
2743
2744
 
2744
2745
  @rep.SodaPrintCurrentReport()
2745
2746
  @rep.EndTestReport()
2746
- @rep.ReportHTML()
2747
+ @rep.ReportHTML() if (genhtml)
2747
2748
 
2748
2749
  return master_result
2749
2750
  end
2750
2751
 
2752
+ ###############################################################################
2753
+ # RunAllSuites -- Method
2754
+ # This function run a list of suite files as suites, not as tests.
2755
+ #
2756
+ # Input:
2757
+ # suites: An array of Soda suite files to be ran.
2758
+ #
2759
+ # Output:
2760
+ # returns a hash with the results from the ran suites.
2761
+ #
2762
+ ###############################################################################
2763
+ def RunAllSuites(suites)
2764
+ results = {}
2765
+ err = 0
2766
+ indent = " " * 2
2767
+ indent2 = "#{indent}" * 2
2768
+ indent3 = "#{indent}" * 4
2769
+ hostname = `hostname`
2770
+ hostname = hostname.chomp()
2771
+
2772
+ suites.each do |s|
2773
+ base_suite_name = File.basename(s)
2774
+ RestartGlobalTime()
2775
+ results[base_suite_name] = RunSuite(s)
2776
+ RestartGlobalTime()
2777
+ end
2778
+
2779
+ time = Time.now()
2780
+ time = "#{time.to_i}-#{time.usec}"
2781
+ suite_report = "#{@resultsDir}/#{hostname}-#{time}-suite.xml"
2782
+ fd = File.new(suite_report, "w+")
2783
+ fd.write("<data>\n")
2784
+
2785
+ RestartGlobalTime()
2786
+
2787
+ results.each do |k,v|
2788
+ fd.write("\t<suite>\n")
2789
+ fd.write("\t#{indent}<suitefile>#{k}</suitefile>\n")
2790
+ v.each do |testname, testhash|
2791
+ fd.write("\t#{indent2}<test>\n")
2792
+ fd.write("\t#{indent3}<testfile>#{testname}</testfile>\n")
2793
+ testhash.each do |tname, tvalue|
2794
+ if (tname == "result")
2795
+ err = -1 if (tvalue.to_i != 0)
2796
+ end
2797
+ new_name = "#{tname}"
2798
+ new_name = new_name.gsub(" ", "_")
2799
+ fd.write("\t#{indent3}<#{new_name}>#{tvalue}</#{new_name}>\n")
2800
+ end
2801
+ fd.write("\t#{indent2}</test>\n")
2802
+ end
2803
+ fd.write("\t</suite>\n")
2804
+ end
2805
+ fd.write("</data>\n")
2806
+ fd.close()
2807
+
2808
+ RestartGlobalTime()
2809
+
2810
+ return err
2811
+ end
2812
+
2813
+ ###############################################################################
2814
+ #
2815
+ ###############################################################################
2816
+ def RunSuite(suitefile)
2817
+ parser = nil
2818
+ doc = nil
2819
+ result = {}
2820
+ tests = []
2821
+ setup_test = nil
2822
+ cleanup_test = nil
2823
+ setup_results = 0
2824
+
2825
+ begin
2826
+ parser = LibXML::XML::Parser.file(suitefile)
2827
+ doc = parser.parse()
2828
+ doc = doc.root()
2829
+
2830
+ doc.each do |node|
2831
+ next if (node.name !~ /script/)
2832
+ attrs = node.attributes()
2833
+ attrs = attrs.to_h()
2834
+
2835
+ if (attrs.key?('file'))
2836
+ base_name = File.basename(attrs['file'])
2837
+ if (base_name =~ /^setup/)
2838
+ setup_test = attrs['file']
2839
+ elsif (base_name =~ /^cleanup/)
2840
+ cleanup_test = attrs['file']
2841
+ else
2842
+ tests.push(attrs['file'])
2843
+ end
2844
+ elsif (attrs.key?('fileset'))
2845
+ files = File.join(attrs['fileset'], "*.xml")
2846
+ files = Dir.glob(files)
2847
+ files.each do |f|
2848
+ tests.push(f)
2849
+ end
2850
+ end
2851
+ end
2852
+ rescue Exception => e
2853
+ print "ERROR: #{e.message}!\n"
2854
+ print e.backtrace.join("\n")
2855
+ result = nil
2856
+ ensure
2857
+ end
2858
+
2859
+
2860
+ if (setup_test != nil)
2861
+ setup_result = run(setup_test, false, false)
2862
+ if (setup_result != 0)
2863
+ SodaUtils.PrintSoda("Failed calling setup test: "+
2864
+ "'#{setup_test}'!\n", SodaUtils::ERROR)
2865
+ result[setup_test] = {'result' => -1}
2866
+ setup_result = false
2867
+ else
2868
+ setup_result = true
2869
+ result[setup_test] = {'result' => 0}
2870
+ end
2871
+ else
2872
+ setup_result = true
2873
+ end
2874
+
2875
+ if (setup_result)
2876
+ tests.each do |test|
2877
+ result[test] = {}
2878
+ result[test]['result'] = run(test, false)
2879
+ result[test].merge!(@rep.GetRawResults)
2880
+ @rep.ZeroTestResults()
2881
+ end
2882
+ end
2883
+
2884
+ if (cleanup_test != nil)
2885
+ cleanup_result = run(cleanup_test, false, false)
2886
+ if (cleanup_result != 0)
2887
+ SodaUtils.PrintSoda("Failed calling cleanup test: "+
2888
+ "'#{cleanup_test}'!\n", SodaUtils::ERROR)
2889
+ result[cleanup_test] = {'result' => -1}
2890
+ else
2891
+ result[cleanup_test] = {'result' => 0}
2892
+ end
2893
+ end
2894
+
2895
+ return result
2896
+ end
2897
+
2751
2898
  ###############################################################################
2752
2899
  # GetCurrentBrowser -- Method
2753
2900
  # This method get the current Watir browser object.
data/lib/SodaReporter.rb CHANGED
@@ -45,12 +45,17 @@ require 'SodaLogReporter'
45
45
  # simple reporter class that tracks asserts, exceptions, and log messages
46
46
  ###############################################################################
47
47
  class SodaReporter
48
+ attr_accessor :asserts_count, :js_error_count, :css_error_count,
49
+ :assertFails_count, :exception_count, :test_skip_count,
50
+ :test_blocked_count, :test_watchdog_count
48
51
 
49
52
  def initialize(testfile, savehtml = false, resultsdir = nil, debug = 0,
50
53
  callback = nil, rerun = false)
51
54
  @sodatest_file = testfile
52
55
  @saveHtmlFiles = savehtml
53
56
  @debug = debug
57
+ @start_time = nil
58
+ @end_time = nil
54
59
  @js_error_count = 0
55
60
  @css_error_count = 0
56
61
  @asserts_count = 0
@@ -116,8 +121,76 @@ class SodaReporter
116
121
  log("[New Test]\n")
117
122
  log("Starting soda test: #{@sodatest_file}\n")
118
123
  log("Saving HTML files => #{@saveHtmlFiles.to_s()}.\n")
124
+ @start_time = Time.now().strftime("%m/%d/%Y-%H:%M:%S")
119
125
  end
120
126
 
127
+ ###############################################################################
128
+ # GetRawResults -- Method
129
+ # This method gets test results data.
130
+ #
131
+ # Input:
132
+ # None.
133
+ #
134
+ # Output:
135
+ # returns a hash of test report data.
136
+ #
137
+ ###############################################################################
138
+ def GetRawResults()
139
+
140
+ @end_time = Time.now().strftime("%m/%d/%Y-%H:%M:%S") if (@end_time == nil)
141
+ start = DateTime.strptime("#{@start_time}",
142
+ "%m/%d/%Y-%H:%M:%S")
143
+ stop = DateTime.strptime("#{@end_time}",
144
+ "%m/%d/%Y-%H:%M:%S")
145
+ total_time = (stop - start)
146
+
147
+ results = {
148
+ 'Test Assert Count' => @asserts_count,
149
+ 'Test JavaScript Error Count' => @js_error_count,
150
+ 'Test CSS Error Count' => @css_error_count,
151
+ 'Test Assert Failures' => @assertFails_count,
152
+ 'Test Exceptions' => @exception_count,
153
+ 'Test Skip Count' => @test_skip_count,
154
+ 'Test Blocked Count' => @test_blocked_count,
155
+ 'Test WatchDog Count' => @test_watchdog_count,
156
+ 'Test Warning Count' => @test_warning_count,
157
+ 'Test Event Count' => @total,
158
+ 'Test Start Time' => @start_time,
159
+ 'Test Stop Time' => @end_time
160
+ }
161
+
162
+ return results
163
+ end
164
+
165
+ ###############################################################################
166
+ # ZeroTestResults -- Method
167
+ # This method zero's out needed reported values for a test when running
168
+ # a suite. Really this is only needed until SugarCRM internally starts
169
+ # using real suites and I can go back to undo the hack's put in place to
170
+ # do suite reporting when using the --test option to run suites.
171
+ #
172
+ # Input:
173
+ # None.
174
+ #
175
+ # Output:
176
+ # None.
177
+ #
178
+ ###############################################################################
179
+ def ZeroTestResults()
180
+ @asserts_count = 0
181
+ @js_error_count = 0
182
+ @css_error_count = 0
183
+ @assertFails_count = 0
184
+ @exception_count = 0
185
+ @test_skip_count = 0
186
+ @test_blocked_count = 0
187
+ @test_watchdog_count = 0
188
+ @test_warning_count = 0
189
+ @total = 0
190
+ @start_time = nil
191
+ @end_time = nil
192
+ end
193
+
121
194
  ###############################################################################
122
195
  # GetResultDir -- Method
123
196
  # This method returns the current result dir.
@@ -398,6 +471,7 @@ class SodaReporter
398
471
  NFSRenameHack(@log_filename, tmp_logfile)
399
472
 
400
473
  @log_filename = tmp_logfile
474
+ @end_time = Time.now().strftime("%m/%d/%Y-%H:%M:%S")
401
475
  end
402
476
 
403
477
  ###############################################################################