tdd_deploy 0.1.7 → 0.1.8

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/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