tdd_deploy 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/Capfile CHANGED
@@ -6,7 +6,9 @@ role :hosts, "arch"
6
6
  #role :hosts, "ubuntu"
7
7
  # role :hosts, 'li371-193.members.linode.com'
8
8
 
9
- desc "Test to See if we have root access on hosts"
10
- task :check_host_access do
11
-
9
+ namespace :deploy do
10
+ desc "Moc deploy:update"
11
+ task :update do
12
+ system "echo 'mock deloy:update'"
13
+ end
12
14
  end
@@ -36,15 +36,5 @@ module TddDeploy
36
36
  self.env_hash || read_env || reset_env
37
37
  set_env(args.pop) if args.last.is_a? Hash
38
38
  end
39
-
40
- # gather up all descendents so we know what tests to run
41
- class <<self
42
- attr_accessor :children
43
-
44
- def inherited(child)
45
- self.children ||= []
46
- self.children << child
47
- end
48
- end
49
39
  end
50
40
  end
@@ -13,7 +13,7 @@ module TddDeploy
13
13
  result
14
14
  end
15
15
 
16
- def copy_file_to_remote_on_hosts_as userid, host_list, src, dst
16
+ def copy_file_to_remote_hosts_as userid, host_list, src, dst
17
17
  result = true
18
18
  host_list = [host_list] if host_list.is_a? String
19
19
  host_list.uniq.each do |host|
@@ -22,8 +22,8 @@ module TddDeploy
22
22
  result
23
23
  end
24
24
 
25
- def copy_dir_to_remote_on_hosts_as(userid, host_list, src_dir, dest_dir)
26
- raise ::ArgumentError.new("copy_dir_to_remote_on_hosts_as: src_dir does not exist: #{src_dir}") \
25
+ def copy_dir_to_remote_hosts_as(userid, host_list, src_dir, dest_dir)
26
+ raise ::ArgumentError.new("copy_dir_to_remote_hosts_as: src_dir does not exist: #{src_dir}") \
27
27
  unless File.directory? src_dir
28
28
  host_list = [host_list] if host_list.is_a? String
29
29
  result = true
@@ -33,7 +33,7 @@ module TddDeploy
33
33
  Dir.open(src_dir).each do |fname|
34
34
  next if fname[0] == '.'
35
35
  path = File.join(src_dir, fname)
36
- result &= copy_file_to_remote_on_hosts_as userid, host_list, path, File.join(dest_dir, fname)
36
+ result &= copy_file_to_remote_hosts_as userid, host_list, path, File.join(dest_dir, fname)
37
37
  end
38
38
  result
39
39
  end
@@ -47,7 +47,7 @@ module TddDeploy
47
47
  result
48
48
  end
49
49
 
50
- def append_file_to_remote_on_hosts_as userid, host_list, src, dst
50
+ def append_file_to_remote_hosts_as userid, host_list, src, dst
51
51
  result = true
52
52
  host_list = [host_list] if host_list.is_a? String
53
53
  host_list.uniq.each do |host|
@@ -56,8 +56,8 @@ module TddDeploy
56
56
  result
57
57
  end
58
58
 
59
- def append_dir_to_remote_on_hosts_as(userid, host_list, src_dir, dest_dir)
60
- raise ::ArgumentError.new("append_dir_to_remote_on_hosts_as: src_dir does not exist: #{src_dir}") \
59
+ def append_dir_to_remote_hosts_as(userid, host_list, src_dir, dest_dir)
60
+ raise ::ArgumentError.new("append_dir_to_remote_hosts_as: src_dir does not exist: #{src_dir}") \
61
61
  unless File.directory? src_dir
62
62
  host_list = [host_list] if host_list.is_a? String
63
63
  result = true
@@ -67,7 +67,7 @@ module TddDeploy
67
67
  Dir.open(src_dir).each do |fname|
68
68
  next if fname[0] == '.'
69
69
  path = File.join(src_dir, fname)
70
- result &= append_file_to_remote_on_hosts_as userid, host_list, path, File.join(dest_dir, fname)
70
+ result &= append_file_to_remote_hosts_as userid, host_list, path, File.join(dest_dir, fname)
71
71
  end
72
72
  result
73
73
  end
@@ -14,12 +14,13 @@ module TddDeploy
14
14
  #
15
15
  # the most frequently used are 'deploy_test_process_running_on_hosts_as' and 'deploy_test_file_exists_on_hosts_as'.
16
16
  #
17
- # 'deploy_test_on_hosts_as' and 'deploy_test_in_ssh_session_as' are more primative and flexible.
17
+ # 'deploy_test_on_hosts_as' and 'deploy_test_on_a_host_as' are more primative and flexible.
18
18
  module DeployTestMethods
19
19
  include TddDeploy::Assertions
20
20
  include TddDeploy::RunMethods
21
21
 
22
22
  def deploy_test_process_running_on_hosts_as(userid, host_list, pid_file_path, success_msg = nil)
23
+ host_list = rationalize_host_list(host_list)
23
24
  success_msg ||= "Process associated with #{pid_file_path} should be running"
24
25
  ret = deploy_test_file_exists_on_hosts_as(userid, host_list, pid_file_path, success_msg + " no such pid file: #{pid_file_path}") ||
25
26
  ret &= deploy_test_on_hosts_as(userid, host_list, /.+\n\s*\d+.*?\d\d:\d\d:\d\d/, "Process for #{pid_file_path} is running") do
@@ -40,38 +41,32 @@ module TddDeploy
40
41
  # 'match_expr_or_str' can be a Regexp or a string (which will be converted to a Regexp)
41
42
  def deploy_test_on_hosts_as userid, host_list, match_expr_or_str, success_msg, &block
42
43
  ret = true
43
- host_list = [host_list] if host_list.is_a? String
44
+ host_list = rationalize_host_list(host_list)
44
45
  host_list.uniq.each do |host|
45
- ret &= deploy_test_in_ssh_session_as userid, host, match_expr_or_str, success_msg, &block
46
+ ret &= deploy_test_on_a_host_as userid, host, match_expr_or_str, success_msg, &block
46
47
  end
47
48
  ret
48
49
  end
49
50
 
50
- # deploy_test_in_ssh_session_as runs the command(s) return by '&block' on the specified host
51
+ # deploy_test_on_a_host_as runs the command(s) return by '&block' on the specified host
51
52
  # as user 'userid'
52
53
  # declares an error if EITHER STDOUT does not match 'match' OR STDERR returns anything
53
54
  # 'match' can be a Regexp or a string (which will be converted to a Regexp)
54
- def deploy_test_in_ssh_session_as(userid, host, match, success_msg, &block)
55
+ def deploy_test_on_a_host_as(userid, host, match, success_msg, &block)
55
56
  match = Regexp.new(match) if match.is_a? String
56
57
  raise ArgumentError, 'match expression cannot be empty' if match =~ ''
57
58
 
58
- rsp, err_rsp, cmd = run_in_ssh_session_on_host_as(userid, host, &block)
59
-
60
- result = err_rsp.nil?
61
-
59
+ rsp, err_rsp, cmd = run_on_a_host_as(userid, host, &block)
62
60
  prefix = "user@host: #{userid}@#{host}: #{success_msg}"
63
61
 
64
- fail host, "#{prefix}: command generated error data:\n" +
65
- " command: #{cmd}\n stdout: '#{rsp}'\n stderr: '#{err_rsp}'" if err_rsp
66
-
67
- if rsp.nil?
68
- fail host, "#{prefix}: stdout is empty for command '#{cmd}'"
69
- result &= false
70
- elsif !assert_match host, match, rsp, prefix
71
- result &= false
62
+ if err_rsp
63
+ return fail host, "#{prefix}: command generated error data:\n" +
64
+ " command: #{cmd}\n stdout: '#{rsp}'\n stderr: '#{err_rsp}'"
65
+ elsif rsp.nil?
66
+ return fail host, "#{prefix}: stdout is empty for command '#{cmd}'"
67
+ else
68
+ return assert_match host, match, rsp, prefix
72
69
  end
73
-
74
- result
75
70
  end
76
71
  end
77
72
  end
@@ -392,5 +392,20 @@ module TddDeploy
392
392
  def migration_hosts
393
393
  self.capfile.migration_host_list
394
394
  end
395
+
396
+ # takes the name of a list (as a string or symbol), a single string, or an array of host names
397
+ def rationalize_host_list(host_list_or_list_name)
398
+ if host_list_or_list_name.is_a? String
399
+ return self.respond_to?(host_list_or_list_name.to_sym) ? self.send(host_list_or_list_name.to_sym) :
400
+ [host_list_or_list_name]
401
+ elsif host_list_or_list_name.is_a? Symbol
402
+ return self.respond_to?(host_list_or_list_name) ? self.send(host_list_or_list_name) :
403
+ [host_list_or_list_name.to_s]
404
+ elsif host_list_or_list_name.is_a? Array
405
+ return host_list_or_list_name.map { |host| host.to_s }
406
+ else
407
+ raise ArgumentError.new("rationalize_host_list(#{host_list_or_list_name.inspect}) is invalid")
408
+ end
409
+ end
395
410
  end
396
411
  end
@@ -1,10 +1,10 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # == TddDeploy::HostConnection
5
5
  #
6
6
  # tests that hosts are pingable and that the current user can log in as both 'host_admin' and 'root'
7
- class HostConnection < TddDeploy::Base
7
+ class HostConnection < TddDeploy::TestBase
8
8
  # ping - pings all hosts
9
9
  def ping
10
10
  result = true
@@ -1,4 +1,4 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # == TddDeploy::RemoteIpTables
@@ -6,7 +6,7 @@ module TddDeploy
6
6
  # checks to see if iptables is working by attempting to connect to each host on a collection
7
7
  # of 'interesting' ports. the ports probed are: 20, 23, 25, 53, 5432, 2812
8
8
  #
9
- class RemoteIpTables < TddDeploy::Base
9
+ class RemoteIpTables < TddDeploy::TestBase
10
10
  # tcp_some_blocked_ports - checks TCP ports
11
11
  def tcp_some_blocked_ports
12
12
  self.hosts.each do |host|
@@ -1,10 +1,10 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # == TddDeploy::RemoteMonit
5
5
  #
6
6
  # verifies monit executable is present and running on all hosts
7
- class RemoteMonit < TddDeploy::Base
7
+ class RemoteMonit < TddDeploy::TestBase
8
8
  def test_monit_installed
9
9
  deploy_test_file_exists_on_hosts_as self.host_admin, self.hosts, '/usr/bin/monit', 'monit should be installed'
10
10
  end
@@ -1,10 +1,10 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # == TddDeploy::RemoteNginx
5
5
  #
6
6
  # verifies Nginx executable is both present and running on web_hosts + balance_hosts
7
- class RemoteNginx < TddDeploy::Base
7
+ class RemoteNginx < TddDeploy::TestBase
8
8
  def test_nginx_installed
9
9
  deploy_test_file_exists_on_hosts_as self.host_admin, self.web_hosts + self.balance_hosts, '/usr/sbin/nginx', "nginx should be installed"
10
10
  end
@@ -1,11 +1,11 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # == TddDeploy::RemotePostfix
5
5
  #
6
6
  # verifies that postfix executable is installed, running and will accept mail to local_admin_mail
7
7
  # on all hosts
8
- class RemotePostfix < TddDeploy::Base
8
+ class RemotePostfix < TddDeploy::TestBase
9
9
  def test_postfix_installed
10
10
  deploy_test_file_exists_on_hosts_as 'root', self.hosts, '/usr/sbin/postfix', "postfix should be installed"
11
11
  end
@@ -1,10 +1,10 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # == TddDeploy::RemotePostgresql
5
5
  #
6
6
  # verifies that the postgresql exectuable is both installed and running on db_hosts
7
- class RemotePostgresql < TddDeploy::Base
7
+ class RemotePostgresql < TddDeploy::TestBase
8
8
  def test_postgresql_installed
9
9
  deploy_test_file_exists_on_hosts_as 'root', self.db_hosts, "/usr/bin/postgres", 'postgres should be installed'
10
10
  end
@@ -0,0 +1,38 @@
1
+ require 'tdd_deploy/base'
2
+ require 'tdd_deploy/copy_methods'
3
+
4
+ module TddDeploy
5
+ class Installer < TddDeploy::Base
6
+ include TddDeploy::CopyMethods
7
+
8
+ def install_config_files_on_host_list_as userid, host_list_name
9
+ raise ::ArgumentError.new("install_config_files_on_host_list_as(userid, host_list_name): invalid host_list_name: #{host_list_name}") \
10
+ unless self.respond_to? host_list_name.to_sym
11
+ config_dir = File.join(self.site_doc_root, '..', 'config')
12
+ src_dir = File.join('tdd_deploy_configs', host_list_name.to_s, 'config')
13
+ copy_dir_to_remote_hosts_as userid, rationalize_host_list(host_list_name), src_dir, config_dir
14
+ end
15
+
16
+ def empty_special_dir userid, host_list_name
17
+ raise ::ArgumentError.new("install_config_files_on_host_list_as(userid, host_list_name): invalid host_list_name: #{host_list_name}") \
18
+ unless self.respond_to? host_list_name.to_sym
19
+ host_list = rationalize_host_list host_list_name
20
+ run_on_hosts_as(userid, host_list, "rm #{self.site_special_dir}/*")
21
+ end
22
+
23
+ def install_special_files_on_host_list_as userid, host_list_name
24
+ raise ::ArgumentError.new("install_config_files_on_host_list_as(userid, host_list_name): invalid host_list_name: #{host_list_name}") \
25
+ unless self.respond_to? host_list_name.to_sym
26
+
27
+ host_list = rationalize_host_list host_list_name
28
+ src_dir = File.join('tdd_deploy_configs', host_list_name.to_s, 'site')
29
+ append_dir_to_remote_hosts_as userid, host_list, src_dir, self.site_special_dir
30
+ end
31
+
32
+ def run_cap_deploy
33
+ stdout, stderr, cmd = run_locally { 'cap deploy:update' }
34
+ return fail if stderr =~ /failed|rolling back/
35
+ return true
36
+ end
37
+ end
38
+ end
@@ -1,4 +1,4 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # == TddDeploy::SmokeTest
@@ -9,7 +9,7 @@ module TddDeploy
9
9
  #
10
10
  # * return_true
11
11
  # * smoke
12
- class SmokeTest < TddDeploy::Base
12
+ class SmokeTest < TddDeploy::TestBase
13
13
 
14
14
  # returns true
15
15
  def return_true
@@ -31,17 +31,18 @@ module TddDeploy
31
31
 
32
32
  # runs supplied command on list of hosts as specified user
33
33
  def run_on_hosts_as userid, host_list, cmd = nil, &block
34
+
34
35
  host_list = [host_list] if host_list.is_a? String
35
36
  result = {}
36
37
  host_list.uniq.each do |host|
37
- result[host] = run_in_ssh_session_on_host_as userid, host, cmd, &block
38
+ result[host] = run_on_a_host_as userid, host, cmd, &block
38
39
  end
39
40
  result
40
41
  end
41
42
 
42
43
  # Runs the command secified in &block on 'host' as user 'userid'.
43
44
  # Returns an array [stdout, stderr] returned from the command.
44
- def run_in_ssh_session_on_host_as(userid, host, cmd = nil, &block)
45
+ def run_on_a_host_as(userid, host, cmd = nil, &block)
45
46
  login = "#{userid}@#{host}"
46
47
  match = Regexp.new(match) if match.is_a? String
47
48
  raise ArgumentError.new('match expression cannot be empty') if match =~ ''
@@ -72,7 +72,13 @@ end
72
72
  .even { background: #ccc;}
73
73
  .red { color: #800;}
74
74
  .green { color: #080;}
75
- .warn { color: #f80;}
75
+ .warn {
76
+ color: #e0ffff;
77
+ padding: 5px;
78
+ border: 1px solid black;
79
+ font-weight: normal;
80
+ background: #800000;
81
+ }
76
82
  </style>
77
83
  <!-- Date: 2011-08-20 -->
78
84
  </head>
@@ -81,7 +87,7 @@ end
81
87
  <h1>TddDeploy (<%= TddDeploy::VERSION %>) Test Results: site: <%= site %> / hosts: <%= hosts %></h1>
82
88
 
83
89
  <% if (failures = total_failures) == 0 %>
84
- <p id="test-summary-passed">All Tests Passed</p>
90
+ <p id="test-summary-passed">All <%= total_tests %> Tests Passed</p>
85
91
  <% else %>
86
92
  <p id="test-summary-failed"><%= failures %> of <%= total_tests %> Tests Failed</p>
87
93
  <% end %>
@@ -98,11 +104,15 @@ end
98
104
  <td><a href="/?run_configurator">Run Configurator</a></td>
99
105
  <td></td>
100
106
  </tr>
101
- <!-- <tr class="<%= even_odd %>">
102
- <th>Installation</th>
103
- <td>Site Specials</td>
104
- <td>Site Config</td>
105
- </tr> -->
107
+ <tr class="<%= even_odd %>">
108
+ <th>Install</th>
109
+ <td><a href="/?install_special">Site Specials</a></td>
110
+ <td><a href="/?install_configs">Site Config</a></td>
111
+ </tr>
112
+ <tr class="<%= even_odd %>">
113
+ <th>Capistrano</th>
114
+ <td><a href="/?run_cap_deploy">run cap deploy:update</a></td>
115
+ </tr>
106
116
  </table>
107
117
  </div> <!-- test summary -->
108
118
 
@@ -120,10 +130,10 @@ end
120
130
 
121
131
  <h3>Capistrano Variables</h3>
122
132
  <% if server_obj.app_hosts.sort != (server_obj.app + server_obj.migration_hosts).uniq.sort %>
123
- <p class="warn">'app_hosts' does not match Capistrano 'app' and 'migration_hosts'</p>
133
+ <p><span class="warn">Warning: 'app_hosts' does not match Capistrano 'app' and 'migration_hosts'</span></p>
124
134
  <% end %>
125
135
  <% if server_obj.db_hosts.uniq.sort != server_obj.db.uniq.sort %>
126
- <p class="warn">'db_hosts' does not match Capistrano 'db'</p>
136
+ <p><span class="warn">Warning: 'db_hosts' does not match Capistrano 'db'</span></p>
127
137
  <% end %>
128
138
  <table>
129
139
  <% reset_even_odd %>
@@ -3,6 +3,7 @@ $:.unshift File.expand_path('../lib', __FILE__)
3
3
 
4
4
  require 'uri'
5
5
  require 'tdd_deploy'
6
+ require 'tdd_deploy/test_base'
6
7
 
7
8
  module TddDeploy
8
9
  # == TddDeploy::Server
@@ -60,6 +61,34 @@ module TddDeploy
60
61
  configurator = TddDeploy::Configurator.new
61
62
  configurator.make_configuration_files
62
63
  end
64
+
65
+ if self.query_hash['install_special']
66
+ require 'tdd_deploy/installer'
67
+ installer = TddDeploy::Installer.new
68
+ [:app_hosts, :balance_hosts, :db_hosts, :web_hosts].each do |host_list|
69
+ installer.empty_special_dir self.site_user, host_list
70
+ end
71
+ [:app_hosts, :balance_hosts, :db_hosts, :web_hosts].each do |host_list|
72
+ installer.install_special_files_on_host_list_as self.site_user, host_list
73
+ end
74
+ query_hash['failed-tests'] = true
75
+ end
76
+
77
+ if self.query_hash['install_configs']
78
+ require 'tdd_deploy/installer'
79
+ installer ||= TddDeploy::Installer.new
80
+ [:app_hosts, :balance_hosts, :db_hosts, :web_hosts].each do |host_list|
81
+ installer.install_config_files_on_host_list_as self.site_user, host_list
82
+ end
83
+ query_hash['failed-tests'] = true
84
+ end
85
+
86
+ if self.query_hash['run_cap_deploy']
87
+ require 'tdd_deploy/installer'
88
+ installer ||= TddDeploy::Installer.new
89
+ installer.run_cap_deploy
90
+ query_hash['failed-tests'] = true
91
+ end
63
92
 
64
93
  load_all_tests
65
94
 
@@ -83,21 +112,23 @@ module TddDeploy
83
112
  # both host_tests and site_tests are clobbered by the rake install task.
84
113
  # local_tests is safe.
85
114
  def load_all_tests
115
+ # discard any already defined tests
116
+ TddDeploy::TestBase.flush_children_methods
117
+
118
+ # reload all tests
86
119
  [TddDeploy::Server::HOST_TESTS_DIR, TddDeploy::Server::SITE_TESTS_DIR,
87
120
  TddDeploy::Server::LOCAL_TESTS_DIR].each do |dir|
88
121
  if File.exists?(dir)
89
122
  # puts "gathering tests from #{dir}"
90
123
  Dir.new(dir).each do |fname|
91
- next if fname[0] == '.'
92
-
93
- load File.join(dir, fname)
124
+ load File.join(dir, fname) if fname =~ /\.rb$/
94
125
  end
95
126
  else
96
127
  puts "skipping #{dir} - no such directory"
97
128
  end
98
129
  end
99
130
 
100
- self.test_classes = TddDeploy::Base.children - [self.class]
131
+ self.test_classes = TddDeploy::TestBase.children
101
132
 
102
133
  @test_to_class_map = {}
103
134
  self.test_classes.each do |klass|
@@ -1,10 +1,10 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # == TddDeploy::SiteDatabase
5
5
  #
6
6
  # tests to make sure a database named 'site' is defined in postgresql databases
7
- class SiteDatabase < TddDeploy::Base
7
+ class SiteDatabase < TddDeploy::TestBase
8
8
 
9
9
  def test_site_db_defined
10
10
  deploy_test_on_hosts_as self.site_user, self.db_hosts, "#{self.site}\s*\|\s*#{self.site}", "database for #{self.site} should exist" do
@@ -1,4 +1,4 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # == TddDeploy::SiteLayout
@@ -15,21 +15,21 @@ module TddDeploy
15
15
  # * '~/site/nginx.conf - an nginx configuratino fragment which tells nginx to proxy the site's *thin* servers
16
16
  # * ~/site/monitrc - a monit configuration fragment which tells monit how to monitor the site's *thin* servers.
17
17
  # * ~/site/one_thin_server - shell script to start a single server instance
18
- class SiteLayout < TddDeploy::Base
18
+ class SiteLayout < TddDeploy::TestBase
19
19
  def test_site_subdir
20
20
  deploy_test_file_exists_on_hosts_as self.site_user, self.web_hosts, "#{self.site_doc_root}"
21
21
  end
22
22
 
23
23
  def test_releases_subdir
24
- deploy_test_file_exists_on_hosts_as self.site_user, self.web_hosts, "#{self.site_doc_root}/../releases"
24
+ deploy_test_file_exists_on_hosts_as self.site_user, self.web_hosts, "#{self.site_doc_root}/../../../releases"
25
25
  end
26
26
 
27
27
  def test_thin_conf
28
- deploy_test_file_exists_on_hosts_as self.site_user, self.web_hosts, "#{site_doc_root}/config/thin.conf"
28
+ deploy_test_file_exists_on_hosts_as self.site_user, self.web_hosts, "#{site_doc_root}/../config/thin.conf"
29
29
  end
30
30
 
31
31
  def test_one_thin_server_conf
32
- deploy_test_file_exists_on_hosts_as self.site_user, self.web_hosts, "#{site_doc_root}/config/one_thin_server.conf"
32
+ deploy_test_file_exists_on_hosts_as self.site_user, self.web_hosts, "#{site_doc_root}/../config/one_thin_server.conf"
33
33
  end
34
34
 
35
35
  def test_site_dir_exists
@@ -1,10 +1,10 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # = TddDeploy::SiteUser
5
5
  #
6
6
  # tests all hosts to make sure that the local user can log on as *site_user*
7
- class SiteRvm < TddDeploy::Base
7
+ class SiteRvm < TddDeploy::TestBase
8
8
  def test_rvm
9
9
  deploy_test_on_hosts_as self.site_user, self.app_hosts, /RVM is the Ruby/, "rvm should be installed" do
10
10
  'source ~/.rvm/scripts/rvm ; rvm'
@@ -1,10 +1,10 @@
1
- require 'tdd_deploy/base'
1
+ require 'tdd_deploy/test_base'
2
2
 
3
3
  module TddDeploy
4
4
  # = TddDeploy::SiteUser
5
5
  #
6
6
  # tests all hosts to make sure that the local user can log on as *site_user*
7
- class SiteUser < TddDeploy::Base
7
+ class SiteUser < TddDeploy::TestBase
8
8
  def test_login_as_site_user
9
9
  deploy_test_on_hosts_as self.site_user, self.hosts, "/home/#{self.site_user}", "should be able to log into host as #{self.site_user}" do
10
10
  'pwd'
@@ -0,0 +1,37 @@
1
+ require 'tdd_deploy/base'
2
+
3
+ module TddDeploy
4
+ # == TddDeploy::TestBase
5
+ #
6
+ # provides a base class for host and site tests.
7
+ class TestBase < TddDeploy::Base
8
+
9
+ def initialze
10
+ super
11
+
12
+ end
13
+
14
+ # gather up all descendents so we know what tests to run
15
+ class <<self
16
+ attr_writer :children
17
+
18
+ def children
19
+ @children ||= []
20
+ end
21
+
22
+ # removes all methods from defined children.
23
+ def flush_children_methods
24
+ self.children.each do |child|
25
+ child.instance_methods(false).each do |meth|
26
+ child.send :remove_method, meth
27
+ end
28
+ end
29
+ end
30
+
31
+ def inherited(child)
32
+ self.children ||= []
33
+ self.children << child unless self.children.include? child
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module TddDeploy
2
- VERSION = '0.1.7'
2
+ VERSION = '0.1.8'
3
3
  end
data/tests/test_base.rb CHANGED
@@ -14,7 +14,6 @@ end
14
14
 
15
15
  class TestBaseTestCase < Test::Unit::TestCase
16
16
  def test_tdd_deploy_base_children
17
- assert TddDeploy::Base.children.include?(TestBase::Foo), "TddDeploy::Base.children should contain TestBase::Foo"
18
- assert TddDeploy::Base.children.include?(TestBase::Bar), "TddDeploy::Base.children should contain TestBase::Bar"
17
+ assert_equal TddDeploy::Base, TestBase::Foo.superclass, "Foo is a child of TddDeploy::Base"
19
18
  end
20
19
  end
@@ -25,10 +25,10 @@ class RunMethodsTestCase < Test::Unit::TestCase
25
25
  def test_mkdir_on_remote_as
26
26
  result = mkdir_on_remote_as 'site_user', 'arch', 'test-dir'
27
27
  assert result, "mkdir_on_remote_as site_user on arch returns true"
28
- stdout, stderr, cmd = run_in_ssh_session_on_host_as 'site_user', 'arch', 'test -d test-dir && echo "success"'
28
+ stdout, stderr, cmd = run_on_a_host_as 'site_user', 'arch', 'test -d test-dir && echo "success"'
29
29
  assert_equal "success\n", stdout, "deploy_test_file_exists_on_hosts_as says 'test-dir' exists"
30
30
 
31
- stdout, stderr, cmd = run_in_ssh_session_on_host_as 'site_user', 'arch', 'rmdir test-dir ; test -d test-dir || echo "success"'
31
+ stdout, stderr, cmd = run_on_a_host_as 'site_user', 'arch', 'rmdir test-dir ; test -d test-dir || echo "success"'
32
32
  assert_equal "success\n", stdout, "deploy_test_file_exists_on_hosts_as says 'test-dir' removed"
33
33
  end
34
34
 
@@ -37,14 +37,14 @@ class RunMethodsTestCase < Test::Unit::TestCase
37
37
  result = append_string_to_remote_file_as 'site_user', 'arch', str, 'test-file'
38
38
  assert result, "append_string_to_remote_file_as returns true on success"
39
39
 
40
- stdout, stderr, cmd = run_in_ssh_session_on_host_as('site_user', 'arch', 'cat test-file')
40
+ stdout, stderr, cmd = run_on_a_host_as('site_user', 'arch', 'cat test-file')
41
41
  assert_equal str, stdout, "test-file should exist on arch"
42
42
  assert_nil stderr, "stderr should be nil"
43
43
 
44
44
  result = append_string_to_remote_file_as 'site_user', 'arch', "another line\n", 'test-file'
45
45
  assert result, "append_string_to_remote_file_as returns true on success"
46
46
 
47
- stdout, stderr, cmd = run_in_ssh_session_on_host_as('site_user', 'arch', 'cat test-file')
47
+ stdout, stderr, cmd = run_on_a_host_as('site_user', 'arch', 'cat test-file')
48
48
  assert_match /line 1/, stdout, "output should contain 'line 1'"
49
49
  assert_match /another line/, stdout, "output should contain 'another line'"
50
50
  assert_equal 4, stdout.split("\n").length, "output should contain 4 lines"
@@ -55,7 +55,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
55
55
  result = copy_string_to_remote_file_as 'site_user', 'arch', str, 'test-file'
56
56
  assert result, "copy_string_to_remote_file_as returns true on success"
57
57
 
58
- stdout, stderr, cmd = run_in_ssh_session_on_host_as('site_user', 'arch', 'cat test-file')
58
+ stdout, stderr, cmd = run_on_a_host_as('site_user', 'arch', 'cat test-file')
59
59
  assert_equal str, stdout, "test-file should exist on arch"
60
60
  assert_nil stderr, "stderr should be nil"
61
61
  end
@@ -69,7 +69,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
69
69
  tmp_file.close
70
70
  result = copy_file_to_remote_as 'site_user', 'arch', tmp_file.path, 'test-file'
71
71
 
72
- stdout, stderr, cmd = run_in_ssh_session_on_host_as 'site_user', 'arch', 'cat test-file'
72
+ stdout, stderr, cmd = run_on_a_host_as 'site_user', 'arch', 'cat test-file'
73
73
  assert_equal input_text, stdout, "remote file should contain input_text"
74
74
 
75
75
  assert result, "copy should return true"
@@ -91,11 +91,11 @@ class RunMethodsTestCase < Test::Unit::TestCase
91
91
  tmp2_file.write input2_text
92
92
  tmp2_file.close
93
93
  assert append_file_to_remote_file_as('site_user', 'arch', tmp_file.path, 'test-file'), 'copy file should work'
94
- stdout, stderr, cmd = run_in_ssh_session_on_host_as 'site_user', 'arch', 'cat test-file'
94
+ stdout, stderr, cmd = run_on_a_host_as 'site_user', 'arch', 'cat test-file'
95
95
  assert_equal input_text, stdout, "remote file should contain input_text"
96
96
 
97
97
  assert append_file_to_remote_file_as('site_user', 'arch', tmp2_file.path, 'test-file'), 'append should return true'
98
- stdout, stderr, cmd = run_in_ssh_session_on_host_as 'site_user', 'arch', 'cat test-file'
98
+ stdout, stderr, cmd = run_on_a_host_as 'site_user', 'arch', 'cat test-file'
99
99
  assert_equal input_text + input2_text, stdout, "remote file should contain input_text + input2_text"
100
100
  ensure
101
101
  tmp_file.unlink
@@ -103,7 +103,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
103
103
  end
104
104
  end
105
105
 
106
- def test_copy_string_to_remote_on_hosts_as
106
+ def test_copy_string_to_remote_hosts_as
107
107
  host_list = ['arch']
108
108
  str = "line 1\nline 2\nline 3\n"
109
109
  result = copy_string_to_remote_file_on_hosts_as 'site_user', host_list, str, 'test-file'
@@ -116,7 +116,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
116
116
  end
117
117
 
118
118
 
119
- def test_copy_string_to_remote_on_hosts_as_with_host_list_as_str
119
+ def test_copy_string_to_remote_hosts_as_with_host_list_as_str
120
120
  host_list = 'arch'
121
121
  str = "line 1\nline 2\nline 3\n"
122
122
  result = copy_string_to_remote_file_on_hosts_as 'site_user', host_list, str, 'test-file'
@@ -129,7 +129,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
129
129
  end
130
130
 
131
131
 
132
- def test_copy_file_to_remote_on_hosts_as
132
+ def test_copy_file_to_remote_hosts_as
133
133
  host_list = ['arch']
134
134
  require 'tempfile'
135
135
  tmp_file = Tempfile.new('foo')
@@ -137,7 +137,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
137
137
  input_text = "line one\nline two\nline 3\n"
138
138
  tmp_file.write input_text
139
139
  tmp_file.close
140
- result = copy_file_to_remote_on_hosts_as 'site_user', host_list, tmp_file.path, 'test-file'
140
+ result = copy_file_to_remote_hosts_as 'site_user', host_list, tmp_file.path, 'test-file'
141
141
 
142
142
  results = run_on_hosts_as 'site_user', host_list, 'cat test-file'
143
143
  assert_equal input_text, results['arch'][0], "remote file should contain input_text"
@@ -148,7 +148,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
148
148
  end
149
149
  end
150
150
 
151
- def test_copy_dir_to_remote_on_hosts_as
151
+ def test_copy_dir_to_remote_hosts_as
152
152
  host_list = ['arch']
153
153
  dir_name = 'test-dir'
154
154
  Dir.mkdir dir_name unless File.exists? dir_name
@@ -159,7 +159,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
159
159
  f.close
160
160
  end
161
161
 
162
- assert copy_dir_to_remote_on_hosts_as('site_user', host_list, dir_name, dir_name), 'copy directory should work'
162
+ assert copy_dir_to_remote_hosts_as('site_user', host_list, dir_name, dir_name), 'copy directory should work'
163
163
 
164
164
  result_hash = run_on_hosts_as 'site_user', host_list, "ls"
165
165
  assert_match Regexp.new(dir_name), result_hash['arch'][0], "ls of home should contain directory name"
@@ -171,12 +171,12 @@ class RunMethodsTestCase < Test::Unit::TestCase
171
171
  end
172
172
  ['foo', 'bar', 'baz'].each do |fname|
173
173
  path = File.join dir_name, fname
174
- stdout, stderr, cmd = run_in_ssh_session_on_host_as 'site_user', 'arch', "cat #{path}"
174
+ stdout, stderr, cmd = run_on_a_host_as 'site_user', 'arch', "cat #{path}"
175
175
  assert_equal "This is a file named #{fname}\n", stdout, "copy_dir... should copy file contents of #{fname}"
176
176
  end
177
177
  end
178
178
 
179
- def test_append_string_to_remote_on_hosts_as_with_host_list_as_str
179
+ def test_append_string_to_remote_hosts_as_with_host_list_as_str
180
180
  host_list = 'arch'
181
181
  str = "line 1\nline 2\nline 3\n"
182
182
  result = append_string_to_remote_file_on_hosts_as 'site_user', host_list, str, 'test-file'
@@ -195,7 +195,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
195
195
  end
196
196
 
197
197
 
198
- def test_append_file_to_remote_on_hosts_as
198
+ def test_append_file_to_remote_hosts_as
199
199
  host_list = ['arch']
200
200
  require 'tempfile'
201
201
  tmp_file = Tempfile.new('foo')
@@ -203,8 +203,8 @@ class RunMethodsTestCase < Test::Unit::TestCase
203
203
  input_text = "line one\nline two\nline 3\n"
204
204
  tmp_file.write input_text
205
205
  tmp_file.close
206
- assert append_file_to_remote_on_hosts_as('site_user', host_list, tmp_file.path, 'test-file'), 'should work'
207
- assert append_file_to_remote_on_hosts_as('site_user', host_list, tmp_file.path, 'test-file'), 'should work'
206
+ assert append_file_to_remote_hosts_as('site_user', host_list, tmp_file.path, 'test-file'), 'should work'
207
+ assert append_file_to_remote_hosts_as('site_user', host_list, tmp_file.path, 'test-file'), 'should work'
208
208
 
209
209
  results = run_on_hosts_as 'site_user', host_list, 'cat test-file'
210
210
  assert_equal input_text * 2, results['arch'][0], "remote file should contain input_text"
@@ -213,7 +213,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
213
213
  end
214
214
  end
215
215
 
216
- def test_append_dir_to_remote_on_hosts_as
216
+ def test_append_dir_to_remote_hosts_as
217
217
  host_list = ['arch']
218
218
  dir_name = 'test-dir'
219
219
  Dir.mkdir dir_name unless File.exists? dir_name
@@ -224,8 +224,8 @@ class RunMethodsTestCase < Test::Unit::TestCase
224
224
  f.close
225
225
  end
226
226
 
227
- assert append_dir_to_remote_on_hosts_as('site_user', host_list, dir_name, dir_name), 'append directory should work'
228
- assert append_dir_to_remote_on_hosts_as('site_user', host_list, dir_name, dir_name), 'append directory should work'
227
+ assert append_dir_to_remote_hosts_as('site_user', host_list, dir_name, dir_name), 'append directory should work'
228
+ assert append_dir_to_remote_hosts_as('site_user', host_list, dir_name, dir_name), 'append directory should work'
229
229
 
230
230
  result_hash = run_on_hosts_as 'site_user', host_list, "ls"
231
231
  assert_match Regexp.new(dir_name), result_hash['arch'][0], "ls of home should contain directory name"
@@ -237,7 +237,7 @@ class RunMethodsTestCase < Test::Unit::TestCase
237
237
  end
238
238
  ['foo', 'bar', 'baz'].each do |fname|
239
239
  path = File.join dir_name, fname
240
- stdout, stderr, cmd = run_in_ssh_session_on_host_as 'site_user', 'arch', "cat #{path}"
240
+ stdout, stderr, cmd = run_on_a_host_as 'site_user', 'arch', "cat #{path}"
241
241
  assert_equal "This is a file named #{fname}\nThis is a file named #{fname}\n", stdout, "append_dir... should append file contents of #{fname}"
242
242
  end
243
243
  end
@@ -29,6 +29,13 @@ class DeployTestMethodsTestCase < Test::Unit::TestCase
29
29
  def teardown
30
30
  @tester = nil
31
31
  end
32
+
33
+ def test_rationalize_host_list
34
+ assert_equal ['arch'], @tester.send(:rationalize_host_list, 'arch'), "rationalize_host_list should translate arch to ['arch']"
35
+ assert_equal ['arch'], @tester.send(:rationalize_host_list, :web_hosts), "rationalize_host_list should translate :web_hosts to ['arch']"
36
+ assert_equal ['arch'], @tester.send(:rationalize_host_list, [:arch]), "rationalize_host_list should translate [:arch] to ['arch']"
37
+ assert_equal ['arch'], @tester.send(:rationalize_host_list, ['arch']), "rationalize_host_list should translate ['arch'] to ['arch']"
38
+ end
32
39
 
33
40
  def test_default_env
34
41
  @tester.reset_env
@@ -48,28 +55,28 @@ class DeployTestMethodsTestCase < Test::Unit::TestCase
48
55
  end
49
56
 
50
57
  def test_force_failure
51
- result = @tester.deploy_test_in_ssh_session_as 'no-user', @tester.hosts.first, '/home/no-user', 'should fail with bad user' do
58
+ result = @tester.deploy_test_on_a_host_as 'no-user', @tester.hosts.first, '/home/no-user', 'should fail with bad user' do
52
59
  'pwd'
53
60
  end
54
61
  refute result, "refute version: should fail with bad userid #{result}"
55
62
  end
56
63
 
57
- def test_deploy_test_in_ssh_session_as
64
+ def test_deploy_test_on_a_host_as
58
65
  assert_raises ArgumentError do
59
- @tester.deploy_test_in_ssh_session_as 'root', @tester.hosts.first, '', 'session catches empty match expression' do
66
+ @tester.deploy_test_on_a_host_as 'root', @tester.hosts.first, '', 'session catches empty match expression' do
60
67
  'uname -a'
61
68
  end
62
69
  @tester.reset_tests
63
70
  end
64
71
 
65
- tmp = @tester.deploy_test_in_ssh_session_as 'root', @tester.hosts.first, 'no-file-exists', 'generate an error' do
72
+ tmp = @tester.deploy_test_on_a_host_as 'root', @tester.hosts.first, 'no-file-exists', 'generate an error' do
66
73
  'ls /usr/no-file-exists'
67
74
  end
68
75
  # @tester.announce_formatted_test_results
69
76
  @tester.reset_tests
70
77
  refute tmp, "run as root should fail when accessing a non-existent file"
71
78
 
72
- tmp = @tester.deploy_test_in_ssh_session_as 'root', @tester.hosts.first, "/root", "should run as root on host #{@tester.hosts.first}" do
79
+ tmp = @tester.deploy_test_on_a_host_as 'root', @tester.hosts.first, "/root", "should run as root on host #{@tester.hosts.first}" do
73
80
  'pwd'
74
81
  end
75
82
  # @tester.announce_formatted_test_results
@@ -0,0 +1,42 @@
1
+ $:.unshift File.expand_path('..', __FILE__)
2
+ require 'test_helpers'
3
+ require 'tdd_deploy/installer'
4
+
5
+ class TestTddDeployInstallerTestCase < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @helper = TddDeploy::Installer.new
9
+ @helper.set_env :site_user => 'site_user', :app_hosts => ['arch']
10
+ end
11
+
12
+ def test_install_special_files
13
+ assert @helper.install_special_files_on_host_list_as('site_user', 'app_hosts'), "install_special_files_on_host_as should copy stuff to app_hosts"
14
+ stdout, stderr, cmd = @helper.run_on_a_host_as 'site_user', 'arch', "ls #{@helper.site_special_dir}"
15
+ assert_match /monitrc/, stdout, "special dir should contain monitrc"
16
+ assert_nil stderr, "test command should run w/o errors"
17
+ end
18
+
19
+ def test_empty_special_dir
20
+ @helper.run_on_a_host_as @helper.site_user, 'arch', "echo 'this is a string' >#{@helper.site_special_dir}/foo"
21
+ stdout, stderr, cmd = @helper.run_on_a_host_as @helper.site_user, 'arch', "ls #{@helper.site_special_dir}"
22
+ assert_match /foo/, stdout, "should be able to create file 'foo'"
23
+
24
+ assert @helper.empty_special_dir(@helper.site_user, :app_hosts), "empty_special_dir should return true"
25
+ stdout, stderr, cmd = @helper.run_on_a_host_as @helper.site_user, 'arch', "ls #{@helper.site_special_dir}"
26
+ assert stdout !~ /foo/, "foo file should be gone"
27
+ end
28
+
29
+ def test_install_config_files
30
+ assert @helper.install_config_files_on_host_list_as('site_user', 'app_hosts'), 'install config_files should return true'
31
+
32
+ config_dir = File.join @helper.site_doc_root, '..', 'config'
33
+
34
+ stdout, stderr, cmd = @helper.run_on_a_host_as 'site_user', 'arch', "ls #{config_dir}"
35
+ assert_match /one_thin_server.conf/, stdout, "config dir should contain one_thin_server.conf"
36
+ assert_nil stderr, "test command should run w/o errors"
37
+ end
38
+
39
+ def test_run_cap_deploy
40
+ assert @helper.run_cap_deploy, "running cap deploy should succeed"
41
+ end
42
+ end
@@ -19,24 +19,24 @@ class RunMethodsTestCase < Test::Unit::TestCase
19
19
  refute ping_host('non-existent-host'), 'cannot ping non-existent-host'
20
20
  end
21
21
 
22
- def test_run_in_ssh_session_on_host_as
23
- stdout, stderr, cmd = run_in_ssh_session_on_host_as 'mike', 'arch', 'pwd'
22
+ def test_run_on_a_host_as
23
+ stdout, stderr, cmd = run_on_a_host_as 'mike', 'arch', 'pwd'
24
24
  assert_equal "/home/mike\n", stdout, "should be able to run as mike on host arch"
25
25
  assert_nil stderr, "should not return error if can connect to host"
26
26
  assert_equal 'pwd', cmd, 'cmd should be pwd'
27
27
 
28
- stdout, stderr = run_in_ssh_session_on_host_as 'mike', 'no-host', 'pwd'
28
+ stdout, stderr = run_on_a_host_as 'mike', 'no-host', 'pwd'
29
29
  refute_equal "/home/mike\n", stdout, "should not return home directory for bad host name"
30
30
  refute_nil stderr, "should return an error message for bad host name"
31
31
  assert_equal 'pwd', cmd, 'cmd should be pwd'
32
32
 
33
- stdout, stderr = run_in_ssh_session_on_host_as 'no-user', 'arch', 'pwd'
33
+ stdout, stderr = run_on_a_host_as 'no-user', 'arch', 'pwd'
34
34
  refute_equal "/home/mike\n", stdout, "should not return home directory for bad user name"
35
35
  refute_nil stderr, "should return an error message for bad user name"
36
36
  end
37
37
 
38
- def test_run_in_ssh_session_on_host_as
39
- stdout, stderr, cmd = run_in_ssh_session_on_host_as 'mike', 'arch' do
38
+ def test_run_on_a_host_as
39
+ stdout, stderr, cmd = run_on_a_host_as 'mike', 'arch' do
40
40
  'pwd'
41
41
  end
42
42
  assert_equal "/home/mike\n", stdout, "should be able to run as mike on host arch"
data/tests/test_server.rb CHANGED
@@ -3,6 +3,7 @@ $:.unshift File.expand_path('../../lib', __FILE__)
3
3
  require 'test/unit'
4
4
  require 'tdd_deploy/environ'
5
5
  require 'tdd_deploy/server'
6
+ require 'tdd_deploy/test_base'
6
7
 
7
8
  class TestServerTestCase < Test::Unit::TestCase
8
9
  GEM_ROOT = File.expand_path('../..', __FILE__)
@@ -24,8 +25,10 @@ class TestServerTestCase < Test::Unit::TestCase
24
25
  end
25
26
 
26
27
  def teardown
27
- @tester = nil
28
28
  system('rm -f site_host_setup.env')
29
+ TddDeploy::TestBase.flush_children_methods
30
+ @tester.load_all_tests
31
+ @tester = nil
29
32
  end
30
33
 
31
34
  def test_env_file_detection
@@ -0,0 +1,37 @@
1
+ $:.unshift File.expand_path('../', __FILE__)
2
+ $:.unshift File.expand_path('../../lib', __FILE__)
3
+
4
+ require 'test_helpers'
5
+ require 'tdd_deploy/test_base'
6
+ require 'tdd_deploy/server'
7
+
8
+ class TestBaseTestCase < Test::Unit::TestCase
9
+ def setup
10
+ TddDeploy::Server.new.load_all_tests
11
+ end
12
+
13
+ def teardown
14
+ TddDeploy::Server.new.load_all_tests
15
+ end
16
+
17
+ def test_require_subclass
18
+ assert TddDeploy::TestBase.children.include?(TddDeploy::HostConnection), "children must contain TddDeploy::HostConnection"
19
+ end
20
+
21
+ def test_flush_children_methods
22
+ children_before = TddDeploy::TestBase.children
23
+ TddDeploy::TestBase.children.each do |child|
24
+ assert_not_equal [], child.instance_methods(false), "child #{child} should have methods"
25
+ end
26
+ TddDeploy::TestBase.flush_children_methods
27
+ assert_equal children_before, TddDeploy::TestBase.children, "flush_children should not change children Array"
28
+ TddDeploy::TestBase.children.each do |child|
29
+ assert_equal [], child.instance_methods(false), "Each child should not have any methods"
30
+ end
31
+
32
+ TddDeploy::Server.new.load_all_tests
33
+ TddDeploy::TestBase.children.each do |child|
34
+ assert_not_equal [], child.instance_methods(false), "child #{child} should have methods after reloading"
35
+ end
36
+ end
37
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tdd_deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-08-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
16
- requirement: &2160122860 !ruby/object:Gem::Requirement
16
+ requirement: &2153638900 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2160122860
24
+ version_requirements: *2153638900
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: net-ping
27
- requirement: &2160122180 !ruby/object:Gem::Requirement
27
+ requirement: &2153638200 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *2160122180
35
+ version_requirements: *2153638200
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: net-ssh
38
- requirement: &2160121720 !ruby/object:Gem::Requirement
38
+ requirement: &2153637600 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *2160121720
46
+ version_requirements: *2153637600
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rack
49
- requirement: &2160121060 !ruby/object:Gem::Requirement
49
+ requirement: &2153637000 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *2160121060
57
+ version_requirements: *2153637000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: ZenTest
60
- requirement: &2160120340 !ruby/object:Gem::Requirement
60
+ requirement: &2153636080 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 4.5.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2160120340
68
+ version_requirements: *2153636080
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: autotest-growl
71
- requirement: &2160119700 !ruby/object:Gem::Requirement
71
+ requirement: &2153623700 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2160119700
79
+ version_requirements: *2153623700
80
80
  description: Test driven support for host provisioning & Capistrano deployment - for
81
81
  those who don't want to bother learning too much
82
82
  email: ! ' mike@clove.com '
@@ -104,6 +104,7 @@ files:
104
104
  - lib/tdd_deploy/host_tests/remote_nginx.rb
105
105
  - lib/tdd_deploy/host_tests/remote_postfix.rb
106
106
  - lib/tdd_deploy/host_tests/remote_postgresql.rb
107
+ - lib/tdd_deploy/installer.rb
107
108
  - lib/tdd_deploy/local_tests/smoke_test.rb
108
109
  - lib/tdd_deploy/railengine.rb
109
110
  - lib/tdd_deploy/run_methods.rb
@@ -112,6 +113,7 @@ files:
112
113
  - lib/tdd_deploy/site_tests/site_layout.rb
113
114
  - lib/tdd_deploy/site_tests/site_rvm.rb
114
115
  - lib/tdd_deploy/site_tests/site_user.rb
116
+ - lib/tdd_deploy/test_base.rb
115
117
  - lib/tdd_deploy/version.rb
116
118
  - lib/tdd_deploy.rb
117
119
  - tests/test_assertions.rb
@@ -123,6 +125,7 @@ files:
123
125
  - tests/test_environ.rb
124
126
  - tests/test_helpers.rb
125
127
  - tests/test_host_tests.rb
128
+ - tests/test_installer.rb
126
129
  - tests/test_remote_ip_tables.rb
127
130
  - tests/test_remote_monit.rb
128
131
  - tests/test_remote_nginx.rb
@@ -136,6 +139,7 @@ files:
136
139
  - tests/test_tdd_deploy.rb
137
140
  - tests/test_tdd_deploy_context.rb
138
141
  - tests/test_tdd_deploy_server.rb
142
+ - tests/test_test_base.rb
139
143
  - lib/tasks/tdd_deploy.rake
140
144
  - lib/tdd_deploy/server-templates/test_results.html.erb
141
145
  - lib/tdd_deploy/site-erb/app_hosts/config/one_thin_server.conf.erb