rutema 0.6.5 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +9 -0
- data/Manifest.txt +1 -2
- data/lib/rutema/configuration.rb +28 -15
- data/lib/rutema/db.rb +125 -0
- data/lib/rutema/historian.rb +27 -38
- data/lib/rutema/reporter_ar.rb +13 -14
- data/lib/rutema/system.rb +5 -7
- data/lib/rutemaweb/main.rb +2 -19
- data/lib/rutemaweb/public/style.css +3 -0
- data/lib/rutemaweb/ramaze_controller.rb +2 -2
- data/test/distro_test/config/database.rutema +5 -1
- data/test/distro_test/config/database.rutemah +6 -1
- data/test/test_configuration.rb +16 -4
- data/test/test_historian.rb +37 -16
- data/test/test_model.rb +13 -2
- data/test/test_reporter.rb +5 -2
- data/test/test_system.rb +0 -1
- metadata +3 -4
- data/test/samples/rutemah_config.rb +0 -3
- data/test/samples/valid_config.rb +0 -20
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
== 0.7.0 / 2008-05-16
|
2
|
+
* Support for tools, paths and context information in the configuration solidified (http://patir.rubyforge.org/rutema/tool_configuration.html for more)
|
3
|
+
* Changes in the configuration for Historian and ActiveRecordReporter. Check the distro_test samples
|
4
|
+
* database connection code consolidated in db.rb
|
5
|
+
* Added support for jdbc/h2 to work with jRuby
|
6
|
+
* AR-reporter configuration expanded to support different adapters. Consistent with the Historian db configuration
|
7
|
+
* rutema unit tests now run under jRuby
|
8
|
+
* rutemah runs under jRuby
|
9
|
+
|
1
10
|
== 0.6.5 / 2008-04-15
|
2
11
|
* Updated rutemaweb controller to work with ramaze 0.3.9.1
|
3
12
|
== 0.6.4 / 2008-03-30
|
data/Manifest.txt
CHANGED
@@ -13,6 +13,7 @@ lib/rutema/reporter.rb
|
|
13
13
|
lib/rutema/reporter_ar.rb
|
14
14
|
lib/rutema/historian.rb
|
15
15
|
lib/rutema/model.rb
|
16
|
+
lib/rutema/db.rb
|
16
17
|
lib/rutemaweb/main.rb
|
17
18
|
lib/rutemaweb/ramaze_controller.rb
|
18
19
|
lib/rutemaweb/public/bg_menu.gif
|
@@ -39,8 +40,6 @@ test/samples/teardown.spec
|
|
39
40
|
test/samples/test.spec
|
40
41
|
test/samples/tests/no_title.spec
|
41
42
|
test/samples/tests/sample.spec
|
42
|
-
test/samples/valid_config.rb
|
43
|
-
test/samples/rutemah_config.rb
|
44
43
|
test/distro_test/config/minimal.rutema
|
45
44
|
test/distro_test/config/database.rutema
|
46
45
|
test/distro_test/config/database.rutemah
|
data/lib/rutema/configuration.rb
CHANGED
@@ -7,18 +7,24 @@ require 'patir/configuration'
|
|
7
7
|
module Rutema
|
8
8
|
#This module defines the "configuration directives" used in the configuration of RutemaX
|
9
9
|
module RutemaXConfiguration
|
10
|
-
#Adds a
|
10
|
+
#Adds a hash of values to the tools hash of the configuration
|
11
|
+
#
|
12
|
+
#
|
13
|
+
#This hash is then accessible in the parser and reporters as a property of the configuration instance
|
11
14
|
#
|
12
15
|
#Required keys:
|
13
16
|
# :name - the name to use for accessing the path in code
|
14
|
-
# :path - the path to the executable
|
15
17
|
#Example:
|
16
|
-
# configuration.tool={:name=>"make",:path=>"/bin/make"}
|
18
|
+
# configuration.tool={:name=>"make",:path=>"/bin/make",:configuration=>{:important=>"info"}}
|
19
|
+
#
|
20
|
+
#The path to make can be accessed in the parser as
|
21
|
+
# @configuration.make[:path]
|
22
|
+
#
|
23
|
+
#This way you can pass configuration information for the tools you use
|
17
24
|
def tool= definition
|
18
25
|
@tools||=Hash.new
|
19
26
|
raise Patir::ConfigurationException,"required key :name is missing from #{definition}" unless definition[:name]
|
20
|
-
|
21
|
-
@tools[definition[:name]]=definition[:path]
|
27
|
+
@tools[definition[:name]]=definition
|
22
28
|
end
|
23
29
|
#Adds a path to the paths hash of the configuration
|
24
30
|
#
|
@@ -57,9 +63,9 @@ module Rutema
|
|
57
63
|
end
|
58
64
|
|
59
65
|
#Hash values for passing data to the system. It's supposed to be used in the reporters and contain
|
60
|
-
#values such as
|
66
|
+
#values such as version numbers, tester names etc.
|
61
67
|
#
|
62
|
-
def
|
68
|
+
def context= definition
|
63
69
|
@context||=Hash.new
|
64
70
|
raise Patir::ConfigurationException,"Only accepting hash values as context_data" unless definition.kind_of?(Hash)
|
65
71
|
definition.each do |k,v|
|
@@ -98,6 +104,7 @@ module Rutema
|
|
98
104
|
end
|
99
105
|
|
100
106
|
private
|
107
|
+
#Checks if a path exists and raises a Patir::ConfigurationException if not
|
101
108
|
def check_path path
|
102
109
|
path=File.expand_path(path)
|
103
110
|
raise Patir::ConfigurationException,"#{path} does not exist" unless File.exists?(path)
|
@@ -113,13 +120,14 @@ module Rutema
|
|
113
120
|
|
114
121
|
#This module defines the "configuration directives" used in the configuration of RutemaH
|
115
122
|
module RutemaHConfiguration
|
116
|
-
#The configuration keys for the historian's database
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
+
#The configuration keys for the historian's database. This is adapter dependent.
|
124
|
+
#
|
125
|
+
#Currently SQLite is supported on MRI and h2 on jRuby.
|
126
|
+
#
|
127
|
+
#:database defines the name of the file (or directory for h2) to use for the database and is the only required key.
|
128
|
+
def db= definition
|
129
|
+
raise Patir::ConfigurationException,"required key :database is missing from #{definition}" unless definition[:database]
|
130
|
+
@db=definition
|
123
131
|
end
|
124
132
|
end
|
125
133
|
#This class reads a RutemaX configuration file
|
@@ -144,6 +152,8 @@ module Rutema
|
|
144
152
|
@configuration.check=@check
|
145
153
|
@configuration.context=OpenStruct.new(@context)
|
146
154
|
@configuration.parser=@parser
|
155
|
+
raise Patir::ConfigurationException,"No parser defined" unless @configuration.parser
|
156
|
+
raise Patir::ConfigurationException,"Syntax error in parser definition - missing :class" unless @configuration.parser[:class]
|
147
157
|
@configuration.reporters=@reporters
|
148
158
|
@configuration.tests=@tests.collect{|e| File.expand_path(e) }
|
149
159
|
@configuration.filename=@config_file
|
@@ -161,7 +171,10 @@ module Rutema
|
|
161
171
|
|
162
172
|
def configuration
|
163
173
|
cfg=super
|
164
|
-
|
174
|
+
Dir.chdir(File.dirname(config_file)) do |path|
|
175
|
+
@db[:database]=File.expand_path(@db[:database])
|
176
|
+
cfg.db=@db
|
177
|
+
end
|
165
178
|
return cfg
|
166
179
|
end
|
167
180
|
end
|
data/lib/rutema/db.rb
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
module Rutema
|
2
|
+
|
3
|
+
class SQLiteConnection
|
4
|
+
def initialize logger, database
|
5
|
+
@logger=logger
|
6
|
+
@database=database
|
7
|
+
end
|
8
|
+
|
9
|
+
def adapter
|
10
|
+
"sqlite3"
|
11
|
+
end
|
12
|
+
|
13
|
+
def connected?
|
14
|
+
result = ActiveRecord::Base.connected?
|
15
|
+
@logger.debug "Connected " + result.to_s
|
16
|
+
return result
|
17
|
+
end
|
18
|
+
|
19
|
+
def connect
|
20
|
+
ActiveRecord::Base.establish_connection(:adapter=>adapter, :database=>@database )
|
21
|
+
@logger.warn("'#{@database}' does not exist") if !(File.exists?(@database)) && @database!=":memory:"
|
22
|
+
connected?
|
23
|
+
end
|
24
|
+
|
25
|
+
def migrate
|
26
|
+
return if File.exists?(@database)
|
27
|
+
@logger.info "Migrating DB"
|
28
|
+
Model::Schema.migrate(:up)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class H2Connection
|
33
|
+
def initialize logger, database
|
34
|
+
@logger=logger
|
35
|
+
@database=database
|
36
|
+
end
|
37
|
+
|
38
|
+
def adapter
|
39
|
+
"jdbch2"
|
40
|
+
end
|
41
|
+
def port
|
42
|
+
7098
|
43
|
+
end
|
44
|
+
def base_dir
|
45
|
+
"/"
|
46
|
+
end
|
47
|
+
def connected?
|
48
|
+
begin
|
49
|
+
ActiveRecord::Base.retrieve_connection
|
50
|
+
rescue RuntimeError
|
51
|
+
end
|
52
|
+
result = ActiveRecord::Base.connected?
|
53
|
+
@logger.debug "Connected " + result.to_s
|
54
|
+
result
|
55
|
+
end
|
56
|
+
|
57
|
+
def connect
|
58
|
+
connect_server
|
59
|
+
if not connected?
|
60
|
+
start_server
|
61
|
+
connect_server
|
62
|
+
end
|
63
|
+
connected?
|
64
|
+
end
|
65
|
+
|
66
|
+
def connect_server
|
67
|
+
url = server_url
|
68
|
+
@logger.info "Connecting to " + server_url
|
69
|
+
ActiveRecord::Base.establish_connection(:adapter=>adapter,
|
70
|
+
:driver => 'org.h2.Driver',
|
71
|
+
:url=> server_url)
|
72
|
+
end
|
73
|
+
|
74
|
+
def server_url
|
75
|
+
# database is supposed to be an absolute path
|
76
|
+
"jdbc:h2:tcp://localhost:" + port.to_s + @database
|
77
|
+
end
|
78
|
+
|
79
|
+
# Start a h2 server to allow mixed mode accessing.
|
80
|
+
def start_server
|
81
|
+
args = ["-tcpPort", port.to_s, "-baseDir", base_dir]
|
82
|
+
@logger.info "Starting H2 server using arguments " + args.join(" ")
|
83
|
+
require 'jdbc/h2'
|
84
|
+
Rutema.includeJava
|
85
|
+
org.h2.tools.Server.createTcpServer(args.to_java(:string)).start()
|
86
|
+
end
|
87
|
+
|
88
|
+
def migrate
|
89
|
+
return if File.exists?("#{@database}.data.db")
|
90
|
+
@logger.info "Migrating DB"
|
91
|
+
Model::Schema.migrate(:up)
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
#Exception occuring when connecting to a database
|
99
|
+
class ConnectionError<RuntimeError
|
100
|
+
end
|
101
|
+
#Establishes an ActiveRecord connection
|
102
|
+
def self.connect_to_ar database,logger,perform_migration=true
|
103
|
+
raise ConnectionError,"No database source defined in the configuration" unless database
|
104
|
+
logger.debug("Connecting to #{database}")
|
105
|
+
conn = connection(logger, database)
|
106
|
+
conn.connect
|
107
|
+
conn.migrate if perform_migration
|
108
|
+
end
|
109
|
+
|
110
|
+
private
|
111
|
+
|
112
|
+
@@connection=nil
|
113
|
+
|
114
|
+
def self.connection logger, database
|
115
|
+
if not @@connection
|
116
|
+
@@connection = RUBY_PLATFORM =~ /java/ ? H2Connection.new(logger, database) : SQLiteConnection.new(logger, database)
|
117
|
+
end
|
118
|
+
@@connection
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.includeJava
|
122
|
+
# "undefined method 'include'" in instance method
|
123
|
+
include Java if RUBY_PLATFORM =~ /java/
|
124
|
+
end
|
125
|
+
end
|
data/lib/rutema/historian.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),"..")
|
2
2
|
require 'rutema/model'
|
3
3
|
require 'rutema/system'
|
4
|
+
require 'rutema/db'
|
5
|
+
require 'rubygems'
|
4
6
|
require "ruport"
|
5
7
|
|
6
8
|
module Rutema
|
@@ -58,22 +60,31 @@ module Rutema
|
|
58
60
|
@logger=logger
|
59
61
|
@logger||=Patir.setup_logger
|
60
62
|
@configuration=configuration
|
61
|
-
|
63
|
+
Rutema.connect_to_ar(@configuration.db[:database],@logger,false)
|
62
64
|
end
|
63
65
|
|
64
66
|
def history mode
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
67
|
+
begin
|
68
|
+
case mode
|
69
|
+
when "all"
|
70
|
+
table=Model::Scenario.report_table(:all)
|
71
|
+
if table.empty?
|
72
|
+
@logger.warn("No entries found")
|
73
|
+
else
|
74
|
+
ret=Ruport::Data::Grouping(beautify(table),:by=>"run_id")
|
75
|
+
end
|
76
|
+
when String
|
77
|
+
ret=per_spec(mode)
|
78
|
+
end
|
79
|
+
rescue
|
80
|
+
@logger.debug($!)
|
81
|
+
@logger.error("Could not retrieve scenario data from the database")
|
72
82
|
end
|
73
83
|
return ret
|
74
84
|
end
|
75
85
|
private
|
76
86
|
def beautify table
|
87
|
+
@logger.debug("Beautifying...")
|
77
88
|
table.reorder("run_id","name","status","attended","version","start_time","stop_time")
|
78
89
|
table.replace_column("version") {|r| r.version ? r.version : "N/A"}
|
79
90
|
table.replace_column("attended") {|r| r.attended=="t" ? "yes" : "no"}
|
@@ -81,37 +92,15 @@ module Rutema
|
|
81
92
|
return table
|
82
93
|
end
|
83
94
|
def per_spec spec_name
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
else
|
90
|
-
beautify(table)
|
91
|
-
end
|
92
|
-
rescue
|
93
|
-
@logger.debug($!)
|
94
|
-
@logger.error("Could not retrieve scenario data from the database")
|
95
|
-
end
|
96
|
-
end
|
97
|
-
def connect
|
98
|
-
ActiveRecord::Base.logger = @logger
|
99
|
-
if @configuration.source
|
100
|
-
if ActiveRecord::Base.connected?
|
101
|
-
@logger.info("Using cached database connection")
|
102
|
-
else
|
103
|
-
if File.exist?(@configuration.source) || @configuration.source==":memory:"
|
104
|
-
@logger.info("Connecting with database '#{@configuration.source}'")
|
105
|
-
ActiveRecord::Base.establish_connection(:adapter=>"sqlite3", :database=>@configuration.source )
|
106
|
-
else
|
107
|
-
@logger.fatal("Could not find #{@configuration.source}")
|
108
|
-
exit 1
|
109
|
-
end
|
110
|
-
end
|
95
|
+
@logger.debug("History of #{spec_name}")
|
96
|
+
table=Model::Scenario.report_table(:all,:conditions=>"name = '#{spec_name}'",:except=>["id","number"])
|
97
|
+
if table.empty?
|
98
|
+
@logger.warn("No test run records found for #{spec_name}")
|
99
|
+
nil
|
111
100
|
else
|
112
|
-
|
113
|
-
exit 1
|
101
|
+
beautify(table)
|
114
102
|
end
|
103
|
+
|
115
104
|
end
|
116
105
|
end
|
117
106
|
end
|
data/lib/rutema/reporter_ar.rb
CHANGED
@@ -2,24 +2,31 @@
|
|
2
2
|
require 'yaml'
|
3
3
|
require 'rutema/reporter'
|
4
4
|
require 'rutema/model'
|
5
|
+
require 'rutema/db'
|
5
6
|
require 'rubygems'
|
6
7
|
require 'patir/command'
|
7
8
|
|
8
9
|
module Rutema
|
9
10
|
#The ActiveRecordReporter will store the results of a test run in a database using ActiveRecord.
|
10
11
|
#
|
11
|
-
#The
|
12
|
+
#The DBMSs supported are dependent on the platform: either SQLite3 or h2 (jruby)
|
12
13
|
class ActiveRecordReporter<Reporter
|
14
|
+
#The required keys in this reporter's configuration are:
|
15
|
+
# :db - the database configuration. A Hash with the DB adapter information
|
16
|
+
# :db=>{:database=>"sample.rb"}
|
17
|
+
#
|
18
|
+
#Optioanlly you can pass a Logger instance with the :logger key
|
13
19
|
def initialize definition
|
14
20
|
@logger=definition[:logger]
|
15
21
|
@logger||=Patir.setup_logger
|
16
|
-
|
17
|
-
|
18
|
-
|
22
|
+
database_configuration = definition[:db]
|
23
|
+
raise "No database configuration defined" unless database_configuration
|
24
|
+
unless database_configuration[:database]==":memory:"
|
25
|
+
@dbfile=File.expand_path(database_configuration[:database])
|
19
26
|
else
|
20
|
-
@dbfile=
|
27
|
+
@dbfile=database_configuration[:database]
|
21
28
|
end
|
22
|
-
|
29
|
+
Rutema.connect_to_ar(@dbfile,@logger)
|
23
30
|
end
|
24
31
|
|
25
32
|
#We get all the data for a Rutema::Model::Run entry in here.
|
@@ -70,13 +77,5 @@ module Rutema
|
|
70
77
|
run_entry.save!
|
71
78
|
end
|
72
79
|
|
73
|
-
private
|
74
|
-
def connect
|
75
|
-
ActiveRecord::Base.logger = @logger
|
76
|
-
@logger.info("Connecting with database '#{@dbfile}'")
|
77
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3",
|
78
|
-
:database => @dbfile)
|
79
|
-
Model::Schema.migrate(:up) unless File.exists?(@dbfile)
|
80
|
-
end
|
81
80
|
end
|
82
81
|
end
|
data/lib/rutema/system.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
# Copyright (c) 2007 Vassilis Rizopoulos. All rights reserved.
|
2
2
|
|
3
3
|
require 'rexml/document'
|
4
|
-
|
4
|
+
$:.unshift File.join(File.dirname(__FILE__),"..")
|
5
5
|
require 'rutema/specification'
|
6
6
|
require 'rutema/configuration'
|
7
7
|
require 'rutema/reporter_ar'
|
8
|
-
|
9
|
-
|
10
8
|
require 'rubygems'
|
11
9
|
require 'highline'
|
12
10
|
require 'patir/command'
|
@@ -15,8 +13,8 @@ module Rutema
|
|
15
13
|
#This module defines the version numbers for the library
|
16
14
|
module Version
|
17
15
|
MAJOR=0
|
18
|
-
MINOR=
|
19
|
-
TINY=
|
16
|
+
MINOR=7
|
17
|
+
TINY=0
|
20
18
|
STRING=[ MAJOR, MINOR, TINY ].join( "." )
|
21
19
|
end
|
22
20
|
#Is raised when an error is found in a specification
|
@@ -604,10 +602,10 @@ module Rutema
|
|
604
602
|
@logger.info("Report:\n#{@coordinator.to_s}")
|
605
603
|
@coordinator.report
|
606
604
|
if @coordinator.parse_errors.empty? && @coordinator.last_run_a_success?
|
607
|
-
@logger.info("All tests
|
605
|
+
@logger.info("All tests successful")
|
608
606
|
exit 0
|
609
607
|
else
|
610
|
-
@logger.warn("Not all tests were
|
608
|
+
@logger.warn("Not all tests were successful")
|
611
609
|
exit 1
|
612
610
|
end
|
613
611
|
end
|
data/lib/rutemaweb/main.rb
CHANGED
@@ -7,30 +7,13 @@ def start_ramaze
|
|
7
7
|
logger=Patir.setup_logger
|
8
8
|
db_file=parse_command_line(ARGV)
|
9
9
|
db_file=File.expand_path(db_file)
|
10
|
-
|
10
|
+
Rutema.connect_to_ar(db_file,logger)
|
11
11
|
require 'rutemaweb/ramaze_controller'
|
12
12
|
Dir.chdir(File.dirname(__FILE__)) do
|
13
13
|
Ramaze.start :force=>true#,:adapter=>:thin
|
14
14
|
end
|
15
15
|
end
|
16
|
-
|
17
|
-
if db_file
|
18
|
-
if ActiveRecord::Base.connected?
|
19
|
-
logger.info("Using cached database connection")
|
20
|
-
else
|
21
|
-
if File.exist?(db_file)
|
22
|
-
logger.info("Connecting with database '#{db_file}'")
|
23
|
-
ActiveRecord::Base.establish_connection(:adapter=>"sqlite3", :database=>db_file )
|
24
|
-
else
|
25
|
-
logger.fatal("Could not find #{db_file}")
|
26
|
-
exit 1
|
27
|
-
end
|
28
|
-
end
|
29
|
-
else
|
30
|
-
logger.fatal("No database source defined in the configuration")
|
31
|
-
exit 1
|
32
|
-
end
|
33
|
-
end
|
16
|
+
|
34
17
|
|
35
18
|
def parse_command_line args
|
36
19
|
args.options do |opt|
|
@@ -3,6 +3,7 @@ $:.unshift File.join(File.dirname(__FILE__),"..")
|
|
3
3
|
require 'rutema/system'
|
4
4
|
require 'rubygems'
|
5
5
|
require 'ramaze'
|
6
|
+
require 'rutemaweb/ruport_formatter.rb'
|
6
7
|
|
7
8
|
|
8
9
|
module Rutema
|
@@ -82,8 +83,7 @@ module Rutema
|
|
82
83
|
img_src=IMG_STEP_ERROR if "error"==r.status
|
83
84
|
"<img src=\"#{img_src}\" align=\"center\"/>"
|
84
85
|
end
|
85
|
-
table.
|
86
|
-
ret=table.to_html
|
86
|
+
ret=table.to_vhtml
|
87
87
|
end
|
88
88
|
return ret
|
89
89
|
end
|
@@ -1,5 +1,9 @@
|
|
1
|
+
#The parser to use
|
1
2
|
configuration.parser={:class=>Rutema::MinimalXMLParser}
|
2
|
-
|
3
|
+
#Use the AR-Reporter.
|
4
|
+
#In case of reporters the whole Hash is passed to the reporter initializer, so any keys are dependent on the reporter to use
|
5
|
+
#Check the appropriate RDoc entries
|
6
|
+
configuration.reporter={:class=>Rutema::ActiveRecordReporter, :db=>{:database=>"sample.db"}}
|
3
7
|
configuration.tests=[
|
4
8
|
"../specs/T001.spec",
|
5
9
|
"../specs/T002.spec",
|
@@ -1,2 +1,7 @@
|
|
1
|
+
#include the configuration from database.rutema
|
1
2
|
configuration.load_from_file("database.rutema")
|
2
|
-
configuration
|
3
|
+
#This is the verbose version of the configuration entry:
|
4
|
+
#configuration.db={:database=>"sample.db",:adapter=>"sqlite3"}
|
5
|
+
#For the time being the adapter is being automatically set according to the platform we're running on, so the :adapter is ignored
|
6
|
+
#SQLite for MRI and h2 for jRuby
|
7
|
+
configuration.db={:database=>"sample.db"}
|
data/test/test_configuration.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
$:.unshift File.join(File.dirname(__FILE__),"..","lib")
|
2
2
|
|
3
3
|
require 'test/unit'
|
4
|
-
|
4
|
+
#$DEBUG=true
|
5
5
|
module TestRutema
|
6
6
|
require 'rutema/system'
|
7
7
|
|
@@ -13,23 +13,35 @@ module TestRutema
|
|
13
13
|
def teardown
|
14
14
|
Dir.chdir(@prev_dir)
|
15
15
|
end
|
16
|
-
def
|
16
|
+
def test_rutemax_configuration
|
17
17
|
cfg=nil
|
18
18
|
#load the valid configuration
|
19
|
-
assert_nothing_raised() { cfg=Rutema::RutemaXConfigurator.new("
|
19
|
+
assert_nothing_raised() { cfg=Rutema::RutemaXConfigurator.new("distro_test/config/full.rutema").configuration}
|
20
20
|
assert_not_nil(cfg.parser)
|
21
21
|
assert_not_nil(cfg.reporters)
|
22
22
|
assert_equal(1, cfg.reporters.size)
|
23
23
|
assert_not_nil(cfg.tools)
|
24
|
+
assert_not_nil(cfg.tools.test[:configuration])
|
25
|
+
assert_not_nil(cfg.tools.test[:path])
|
26
|
+
assert_equal("test", cfg.tools.test[:name])
|
24
27
|
assert_not_nil(cfg.paths)
|
28
|
+
assert_not_nil(cfg.paths.test)
|
25
29
|
assert_not_nil(cfg.setup)
|
26
30
|
assert_not_nil(cfg.teardown)
|
27
31
|
assert_not_nil(cfg.check)
|
28
32
|
assert_not_nil(cfg.tests)
|
29
33
|
assert_not_nil(cfg.context)
|
30
34
|
end
|
35
|
+
def test_rutemah_configuration
|
36
|
+
cfg=nil
|
37
|
+
#load the valid configuration
|
38
|
+
assert_nothing_raised() { cfg=Rutema::RutemaHConfigurator.new("distro_test/config/database.rutemah").configuration}
|
39
|
+
assert_not_nil(cfg.db)
|
40
|
+
assert_nothing_raised() { cfg=Rutema::RutemaHConfigurator.new("distro_test/config/jruby.rutemah").configuration}
|
41
|
+
assert_not_nil(cfg.db)
|
42
|
+
end
|
31
43
|
def test_specification_paths
|
32
|
-
cfg=Rutema::RutemaXConfigurator.new("
|
44
|
+
cfg=Rutema::RutemaXConfigurator.new("distro_test/config/full.rutema").configuration
|
33
45
|
assert_not_nil(cfg.tests)
|
34
46
|
end
|
35
47
|
end
|
data/test/test_historian.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
$:.unshift File.join(File.dirname(__FILE__),"..","lib")
|
2
|
-
$:.unshift File.join(File.dirname(__FILE__),"..","ext")
|
3
2
|
require 'test/unit'
|
4
3
|
require 'ostruct'
|
5
4
|
require 'fileutils'
|
@@ -7,23 +6,38 @@ require 'rutema/historian'
|
|
7
6
|
#$DEBUG=true
|
8
7
|
module TestRutema
|
9
8
|
class TestHistorian<Test::Unit::TestCase
|
10
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3",:database =>":memory:")
|
11
|
-
Rutema::Model::Schema.up
|
12
9
|
def setup
|
13
10
|
@configuration=OpenStruct.new
|
14
|
-
@configuration.
|
15
|
-
|
11
|
+
@configuration.db={:database=>":memory:"}
|
12
|
+
@configuration.db={:database=>"db/h2"} if RUBY_PLATFORM =~ /java/
|
16
13
|
end
|
17
14
|
def teardown
|
15
|
+
ActiveRecord::Base.remove_connection
|
16
|
+
FileUtils.rm_rf("db/") if File.exists?("db/")
|
18
17
|
end
|
19
18
|
def test_history
|
20
19
|
assert_nothing_raised() do
|
21
20
|
h=Rutema::Historian.new(@configuration)
|
21
|
+
Rutema::Model::Schema.up
|
22
|
+
a_bunch_of_data
|
22
23
|
assert_not_nil( h.history("all"), "There should be some history there" )
|
23
24
|
assert_not_nil(h.history("TC001"), "TC001 should have some history" )
|
24
25
|
assert_nil(h.history("test5"), "No history expected of test5" )
|
25
|
-
|
26
|
-
|
26
|
+
assert_not_nil( h.history("all") )
|
27
|
+
assert_not_nil( h.history("TC002") )
|
28
|
+
end
|
29
|
+
end
|
30
|
+
def test_no_db
|
31
|
+
ActiveRecord::Base.remove_connection
|
32
|
+
if RUBY_PLATFORM =~ /java/
|
33
|
+
@configuration.db={:database=>"foo",:adapter=>"jdbch2"}
|
34
|
+
else
|
35
|
+
@configuration.db={:database=>"foo",:adapter=>"sqlite3"}
|
36
|
+
|
37
|
+
end
|
38
|
+
assert_nothing_raised() do
|
39
|
+
h=Rutema::Historian.new(@configuration)
|
40
|
+
assert_nothing_raised() { h.history("all")}
|
27
41
|
end
|
28
42
|
end
|
29
43
|
|
@@ -39,23 +53,30 @@ module TestRutema
|
|
39
53
|
1.upto(2) do |i|
|
40
54
|
steps=[]
|
41
55
|
steps<<Rutema::Model::Step.new(:name=>"hard",:number=>1,:status=>"success",
|
42
|
-
|
56
|
+
:output=>"the first step is hard",:error=>"",:duration=>1)
|
43
57
|
steps<<Rutema::Model::Step.new(:name=>"easy",:number=>2,:status=>"success",
|
44
|
-
|
58
|
+
:output=>"the next step is easy",:error=>"",:duration=>1)
|
45
59
|
scenarios<<Rutema::Model::Scenario.new(:name=>"TC00#{i}",:version=>"100",
|
46
|
-
|
47
|
-
|
48
|
-
|
60
|
+
:attended=>false,:status=>"success",
|
61
|
+
:start_time=>(Time.now-10000*i),:stop_time=>(Time.now-10000*i),
|
62
|
+
:steps=>steps)
|
49
63
|
end
|
50
64
|
return scenarios
|
51
65
|
end
|
52
66
|
def failure_scenarios
|
53
67
|
failed_step=Rutema::Model::Step.new(:name=>"echo",:number=>1,:status=>"error",
|
54
|
-
|
68
|
+
:output=>"Hel^.",:error=>"IO error",:duration=>1)
|
55
69
|
[Rutema::Model::Scenario.new(:name=>"TC003",:version=>"10",
|
56
70
|
:attended=>false,:status=>"error",:steps=>[failed_step],
|
57
71
|
:start_time=>(Time.now-10000),:stop_time=>Time.now)]
|
72
|
+
end
|
73
|
+
def setup_for_mri
|
74
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3",:database =>":memory:")
|
75
|
+
@configuration.db={:database=>":memory:",:adapter=>"sqlite3"}
|
76
|
+
end
|
77
|
+
def setup_for_java
|
78
|
+
ActiveRecord::Base.establish_connection(:adapter => "jdbch2",:database =>"db/h2")
|
79
|
+
@configuration.db={:database=>"db/h2",:adapter=>"jdbch2"}
|
80
|
+
end
|
58
81
|
end
|
59
|
-
|
60
|
-
end
|
61
|
-
end
|
82
|
+
end
|
data/test/test_model.rb
CHANGED
@@ -2,13 +2,24 @@ $:.unshift File.join(File.dirname(__FILE__),"..","lib")
|
|
2
2
|
|
3
3
|
require 'test/unit'
|
4
4
|
require 'rutema/model'
|
5
|
+
require 'fileutils'
|
5
6
|
require 'rubygems'
|
6
7
|
require 'active_record/fixtures'
|
7
8
|
|
8
9
|
module TestRutema
|
9
10
|
class TestModel<Test::Unit::TestCase
|
10
|
-
|
11
|
-
|
11
|
+
def setup
|
12
|
+
if RUBY_PLATFORM =~ /java/
|
13
|
+
ActiveRecord::Base.establish_connection(:adapter => "jdbch2",:database =>"db/h2")
|
14
|
+
else
|
15
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3",:database =>":memory:")
|
16
|
+
end
|
17
|
+
Rutema::Model::Schema.up
|
18
|
+
end
|
19
|
+
def teardown
|
20
|
+
ActiveRecord::Base.remove_connection
|
21
|
+
FileUtils.rm_rf("db/") if File.exists?("db/")
|
22
|
+
end
|
12
23
|
#test the CRUD operations
|
13
24
|
def test_create_read_update_delete
|
14
25
|
#create
|
data/test/test_reporter.rb
CHANGED
@@ -14,7 +14,6 @@ module TestRutema
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
class TestActiveRecordReporter<Test::Unit::TestCase
|
17
|
-
DB_FILE=":memory:"
|
18
17
|
def setup
|
19
18
|
@prev_dir=Dir.pwd
|
20
19
|
Dir.chdir(File.dirname(__FILE__))
|
@@ -29,8 +28,12 @@ module TestRutema
|
|
29
28
|
test2.step=MockCommand.new(2)
|
30
29
|
test2.step=MockCommand.new(3)
|
31
30
|
@status=[test1,test2]
|
31
|
+
@database={:db=>{:database=>":memory:"}}
|
32
|
+
@database={:db=>{:database=>"db/h2"}} if RUBY_PLATFORM =~ /java/
|
32
33
|
end
|
33
34
|
def teardown
|
35
|
+
ActiveRecord::Base.remove_connection
|
36
|
+
FileUtils.rm_rf("db")
|
34
37
|
Dir.chdir(@prev_dir)
|
35
38
|
end
|
36
39
|
def test_report
|
@@ -39,7 +42,7 @@ module TestRutema
|
|
39
42
|
specs={"test1"=>spec1,
|
40
43
|
"test2"=>spec2
|
41
44
|
}
|
42
|
-
r=Rutema::ActiveRecordReporter.new(
|
45
|
+
r=Rutema::ActiveRecordReporter.new(@database)
|
43
46
|
#without configuration
|
44
47
|
assert_nothing_raised() { r.report(specs,@status,@parse_errors,nil) }
|
45
48
|
configuration=OpenStruct.new
|
data/test/test_system.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rutema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vassilis Rizopoulos
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-05-16 00:00:00 +02:00
|
13
13
|
default_executable: rutemax
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -122,6 +122,7 @@ files:
|
|
122
122
|
- lib/rutema/reporter_ar.rb
|
123
123
|
- lib/rutema/historian.rb
|
124
124
|
- lib/rutema/model.rb
|
125
|
+
- lib/rutema/db.rb
|
125
126
|
- lib/rutemaweb/main.rb
|
126
127
|
- lib/rutemaweb/ramaze_controller.rb
|
127
128
|
- lib/rutemaweb/public/bg_menu.gif
|
@@ -148,8 +149,6 @@ files:
|
|
148
149
|
- test/samples/test.spec
|
149
150
|
- test/samples/tests/no_title.spec
|
150
151
|
- test/samples/tests/sample.spec
|
151
|
-
- test/samples/valid_config.rb
|
152
|
-
- test/samples/rutemah_config.rb
|
153
152
|
- test/distro_test/config/minimal.rutema
|
154
153
|
- test/distro_test/config/database.rutema
|
155
154
|
- test/distro_test/config/database.rutemah
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'rake'
|
2
|
-
#
|
3
|
-
configuration.parser={:class=>Rutema::MinimalXMLParser}
|
4
|
-
configuration.reporter={:class=>Rutema::EmailReporter,
|
5
|
-
:server=>"localhost",
|
6
|
-
:port=>25,
|
7
|
-
:recipients=>["test"],
|
8
|
-
:sender=>"rutema",
|
9
|
-
:subject=>"test",
|
10
|
-
:dummy=>true
|
11
|
-
}
|
12
|
-
configuration.tool={:name=>"echo",:path=>"echo.exe"}
|
13
|
-
configuration.tool={:name=>"tool",:path=>"tool.exe"}
|
14
|
-
configuration.path={:name=>"SourcePath",:path=>"../../lib"}
|
15
|
-
configuration.setup="setup.spec"
|
16
|
-
configuration.teardown="teardown.spec"
|
17
|
-
configuration.check="check.spec"
|
18
|
-
configuration.tests=["test.spec"]
|
19
|
-
configuration.tests=Rake::FileList["tests/*.spec"]
|
20
|
-
configuration.context_data={:tester=>"riva"}
|