hydra 0.7.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,9 +1,57 @@
1
1
  = Hydra
2
2
 
3
- A distributed testing toolkit.
3
+ Spread your tests over multiple machines to test your code faster.
4
4
 
5
- Heavily under development and not ready for public use.
5
+ == Description
6
+
7
+ Hydra is a distributed testing framework. It allows you to distribute
8
+ your tests locally across multiple cores and processors, as well as
9
+ run your tests remotely over SSH.
10
+
11
+ Hydra's goals are to make distributed testing easy. So as long as
12
+ you can ssh into a computer and run the tests, you can automate
13
+ the distribution with Hydra.
14
+
15
+ == Usage
16
+
17
+ In your rakefile:
18
+
19
+ require 'hydra'
20
+ require 'hydra/tasks'
21
+
22
+ Hydra::TestTask.new('hydra') do |t|
23
+ t.add_files 'test/unit/**/*_test.rb'
24
+ t.add_files 'test/functional/**/*_test.rb'
25
+ t.add_files 'test/integration/**/*_test.rb'
26
+ end
27
+
28
+ Then you can run 'rake hydra'.
29
+
30
+ == Configuration
31
+
32
+ Place the config file in the main project directory as
33
+ 'hydra.yml' or 'config/hydra.yml'.
34
+
35
+ workers:
36
+ - type: local
37
+ runners: 2
38
+ - type: ssh
39
+ connect: user@example.com -p3022
40
+ directory: /absolute/path/to/project
41
+ runners: 4
42
+
43
+ The "connect" option is passed to SSH. So if you've setup an
44
+ ssh config alias to a server, you can use that.
45
+
46
+ The "directory" option is the path for the project directory
47
+ where the tests should be run.
48
+
49
+ The "runners" option is how many processes will be running
50
+ on the remote machine. It's best to pick the same number
51
+ as the number of cores on that machine (as well as your
52
+ own).
6
53
 
7
54
  == Copyright
8
55
 
9
56
  Copyright (c) 2010 Nick Gauthier. See LICENSE for details.
57
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.2
1
+ 0.8.0
data/hydra.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{hydra}
8
- s.version = "0.7.2"
8
+ s.version = "0.8.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nick Gauthier"]
12
- s.date = %q{2010-02-05}
12
+ s.date = %q{2010-02-06}
13
13
  s.description = %q{Spread your tests over multiple machines to test your code faster.}
14
14
  s.email = %q{nick@smartlogicsolutions.com}
15
15
  s.extra_rdoc_files = [
@@ -40,11 +40,12 @@ Gem::Specification.new do |s|
40
40
  "lib/hydra/safe_fork.rb",
41
41
  "lib/hydra/ssh.rb",
42
42
  "lib/hydra/stdio.rb",
43
+ "lib/hydra/tasks.rb",
43
44
  "lib/hydra/trace.rb",
44
45
  "lib/hydra/worker.rb",
45
46
  "test/fixtures/assert_true.rb",
46
47
  "test/fixtures/config.yml",
47
- "test/fixtures/echo_the_dolphin.rb",
48
+ "test/fixtures/hello_world.rb",
48
49
  "test/fixtures/slow.rb",
49
50
  "test/fixtures/write_file.rb",
50
51
  "test/master_test.rb",
@@ -67,7 +68,7 @@ Gem::Specification.new do |s|
67
68
  "test/fixtures/write_file.rb",
68
69
  "test/fixtures/slow.rb",
69
70
  "test/fixtures/assert_true.rb",
70
- "test/fixtures/echo_the_dolphin.rb",
71
+ "test/fixtures/hello_world.rb",
71
72
  "test/master_test.rb",
72
73
  "test/worker_test.rb",
73
74
  "test/runner_test.rb",
@@ -0,0 +1,76 @@
1
+ module Hydra #:nodoc:
2
+ # Define a test task that uses hydra to test the files.
3
+ #
4
+ # TODO: examples
5
+ class TestTask
6
+ # Name of the task. Default 'hydra'
7
+ attr_accessor :name
8
+
9
+ # Files to test.
10
+ # You can add files manually via:
11
+ # t.files << [file1, file2, etc]
12
+ #
13
+ # Or you can use the add_files method
14
+ attr_accessor :files
15
+
16
+ # True if you want to see Hydra's message traces
17
+ attr_accessor :verbose
18
+
19
+ # Path to the hydra config file.
20
+ # If not set, it will check 'hydra.yml' and 'config/hydra.yml'
21
+ attr_accessor :config
22
+
23
+ # Create a new HydraTestTask
24
+ def initialize(name = :hydra)
25
+ @name = name
26
+ @files = []
27
+ @verbose = false
28
+
29
+ yield self if block_given?
30
+
31
+ @config = find_config_file
32
+
33
+ @opts = {
34
+ :verbose => @verbose,
35
+ :files => @files
36
+ }
37
+ if @config
38
+ @opts.merge!(:config => @config)
39
+ else
40
+ $stderr.write "Hydra: No configuration file found at 'hydra.yml' or 'config/hydra.yml'\n"
41
+ $stderr.write "Hydra: Using default configuration for a single-core machine\n"
42
+ @opts.merge!(:workers => [{:type => :local, :runners => 1}])
43
+ end
44
+
45
+ define
46
+ end
47
+
48
+ # Create the rake task defined by this HydraTestTask
49
+ def define
50
+ desc "Hydra Tests" + (@name == :hydra ? "" : " for #{@name}")
51
+ task @name do
52
+ $stdout.write "Hydra Testing #{files.inspect}\n"
53
+ Hydra::Master.new(@opts)
54
+ $stdout.write "\nHydra Completed\n"
55
+ exit(0) #bypass test on_exit output
56
+ end
57
+ end
58
+
59
+ # Add files to test by passing in a string to be run through Dir.glob.
60
+ # For example:
61
+ #
62
+ # t.add_files 'test/units/*.rb'
63
+ def add_files(pattern)
64
+ @files += Dir.glob(pattern)
65
+ end
66
+
67
+ # Search for the hydra config file
68
+ def find_config_file
69
+ @config ||= 'hydra.yml'
70
+ return @config if File.exists?(@config)
71
+ @config = File.join('config', 'hydra.yml')
72
+ return @config if File.exists?(@config)
73
+ @config = nil
74
+ end
75
+ end
76
+ end
data/lib/hydra/worker.rb CHANGED
@@ -91,6 +91,7 @@ module Hydra #:nodoc:
91
91
  @listeners.each{|l| l.join }
92
92
  @io.close
93
93
  trace "Done processing messages"
94
+ exit(0) # avoids test summaries
94
95
  end
95
96
 
96
97
  def process_messages_from_master
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ $stdout.write "{:class=>Hydra::Messages::TestMessage, :text=>\"Hello World\"}\n"
3
+ $stdout.flush
data/test/ssh_test.rb CHANGED
@@ -5,11 +5,10 @@ class SSHTest < Test::Unit::TestCase
5
5
  ssh = Hydra::SSH.new(
6
6
  'localhost', # connect to this machine
7
7
  File.expand_path(File.join(File.dirname(__FILE__))), # move to the test directory
8
- "ruby fixtures/echo_the_dolphin.rb"
8
+ "ruby fixtures/hello_world.rb"
9
9
  )
10
- message = Hydra::Messages::TestMessage.new
11
- ssh.write message
12
- assert_equal message.text, ssh.gets.text
10
+ response = ssh.gets
11
+ assert_equal "Hello World", response.text
13
12
  ssh.close
14
13
  end
15
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Gauthier
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-05 00:00:00 -05:00
12
+ date: 2010-02-06 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -65,11 +65,12 @@ files:
65
65
  - lib/hydra/safe_fork.rb
66
66
  - lib/hydra/ssh.rb
67
67
  - lib/hydra/stdio.rb
68
+ - lib/hydra/tasks.rb
68
69
  - lib/hydra/trace.rb
69
70
  - lib/hydra/worker.rb
70
71
  - test/fixtures/assert_true.rb
71
72
  - test/fixtures/config.yml
72
- - test/fixtures/echo_the_dolphin.rb
73
+ - test/fixtures/hello_world.rb
73
74
  - test/fixtures/slow.rb
74
75
  - test/fixtures/write_file.rb
75
76
  - test/master_test.rb
@@ -114,7 +115,7 @@ test_files:
114
115
  - test/fixtures/write_file.rb
115
116
  - test/fixtures/slow.rb
116
117
  - test/fixtures/assert_true.rb
117
- - test/fixtures/echo_the_dolphin.rb
118
+ - test/fixtures/hello_world.rb
118
119
  - test/master_test.rb
119
120
  - test/worker_test.rb
120
121
  - test/runner_test.rb
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Echoes back to the sender
3
- $stdout.sync = true
4
- while line = $stdin.get
5
- $stdout.write line
6
- end
7
-