tdd_deploy 0.0.1
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 +12 -0
- data/Gemfile +9 -0
- data/bin/tdd_deploy_context +132 -0
- data/bin/tdd_deploy_server.rb +6 -0
- data/config.ru +6 -0
- data/lib/tasks/tdd_deploy.rake +24 -0
- data/lib/tdd_deploy/assertions.rb +146 -0
- data/lib/tdd_deploy/base.rb +62 -0
- data/lib/tdd_deploy/deploy_test_methods.rb +65 -0
- data/lib/tdd_deploy/environ.rb +272 -0
- data/lib/tdd_deploy/host_tests/host_connection.rb +29 -0
- data/lib/tdd_deploy/host_tests/remote_ip_tables.rb +34 -0
- data/lib/tdd_deploy/host_tests/remote_monit.rb +17 -0
- data/lib/tdd_deploy/host_tests/remote_nginx.rb +17 -0
- data/lib/tdd_deploy/host_tests/remote_postfix.rb +23 -0
- data/lib/tdd_deploy/host_tests/remote_postgresql.rb +17 -0
- data/lib/tdd_deploy/railengine.rb +10 -0
- data/lib/tdd_deploy/run_methods.rb +126 -0
- data/lib/tdd_deploy/server.rb +58 -0
- data/lib/tdd_deploy/site_tests/site_layout.rb +46 -0
- data/lib/tdd_deploy/site_tests/site_user.rb +14 -0
- data/lib/tdd_deploy/version.rb +3 -0
- data/lib/tdd_deploy.rb +12 -0
- data/tests/test_assertions.rb +62 -0
- data/tests/test_base.rb +20 -0
- data/tests/test_colored_tests.rb +47 -0
- data/tests/test_environ.rb +153 -0
- data/tests/test_helpers.rb +10 -0
- data/tests/test_host_tests.rb +31 -0
- data/tests/test_remote_ip_tables.rb +27 -0
- data/tests/test_remote_monit.rb +27 -0
- data/tests/test_remote_nginx.rb +27 -0
- data/tests/test_remote_postfix.rb +27 -0
- data/tests/test_remote_postgresql.rb +27 -0
- data/tests/test_run_methods.rb +89 -0
- data/tests/test_server.rb +46 -0
- data/tests/test_site_layout.rb +34 -0
- data/tests/test_site_user.rb +21 -0
- data/tests/test_tdd_deploy.rb +17 -0
- data/tests/test_tdd_deploy_context.rb +35 -0
- data/tests/test_tdd_deploy_server.rb +59 -0
- data/tests/test_test_deploy_methods.rb +97 -0
- metadata +146 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
$:.unshift File.expand_path('..', __FILE__)
|
2
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
3
|
+
|
4
|
+
require 'test_helpers'
|
5
|
+
require 'tdd_deploy'
|
6
|
+
|
7
|
+
class TestTddDeployTestCase < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def test_tdd_deploy
|
10
|
+
assert defined?(TddDeploy::Assertions), "TddDeploy::Assertions should be defined"
|
11
|
+
assert defined?(TddDeploy::Base), "TddDeploy::Base should be defined"
|
12
|
+
assert defined?(TddDeploy::DeployTestMethods), "TddDeploy::DeployTestMethods should be defined"
|
13
|
+
assert defined?(TddDeploy::Environ), "TddDeploy::Environ should be defined"
|
14
|
+
assert defined?(TddDeploy::RunMethods), "TddDeploy::RunMethods should be defined"
|
15
|
+
assert defined?(TddDeploy::VERSION), "TddDeploy::VERSION should be defined"
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'tdd_deploy/environ'
|
5
|
+
require 'tdd_deploy/run_methods'
|
6
|
+
|
7
|
+
class TestTddDeployContextTestCase < Test::Unit::TestCase
|
8
|
+
GEM_ROOT = File.expand_path('../..', __FILE__)
|
9
|
+
BIN_DIR = File.join(GEM_ROOT, 'bin')
|
10
|
+
|
11
|
+
include TddDeploy::RunMethods
|
12
|
+
|
13
|
+
def test_set_env_rb_exists
|
14
|
+
assert File.exists?(File.join(BIN_DIR, 'tdd_deploy_context')), "tdd_deploy_context exists"
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_run_context_editor
|
18
|
+
stdout, stderr, cmd = run_locally 'quit' do
|
19
|
+
"#{File.join(BIN_DIR, 'tdd_deploy_context')}"
|
20
|
+
end
|
21
|
+
assert_not_nil stdout, "tdd_deploy_context is runable. stderr: #{stderr}"
|
22
|
+
assert_nil stderr, "tdd_deploy_context does not generate errors"
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_changing_env
|
26
|
+
command = "web_hosts frog toad turtle\nssh_timeout 12\nsave\n"
|
27
|
+
stdout, stderr, cmd = run_locally command do
|
28
|
+
"#{File.join(BIN_DIR, 'tdd_deploy_context')}"
|
29
|
+
end
|
30
|
+
assert_not_nil stdout, "successful run should not be nil: stderr: #{stderr}"
|
31
|
+
assert_match /"frog"/, stdout, "'frog' should be in stdout"
|
32
|
+
assert_match /abort/i, stderr, "tdd_deploy_context generates abort error"
|
33
|
+
refute_match /discard/i, stderr, "tdd_deploy_context should not discard edits"
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'tdd_deploy/run_methods'
|
5
|
+
|
6
|
+
class TestTddDeployServerTestCase < Test::Unit::TestCase
|
7
|
+
GEM_ROOT = File.expand_path('../..', __FILE__)
|
8
|
+
BIN_DIR = File.join(GEM_ROOT, 'bin')
|
9
|
+
PORT = 8809
|
10
|
+
#
|
11
|
+
# include TddDeploy::RunMethods
|
12
|
+
#
|
13
|
+
# def setup
|
14
|
+
# require 'tdd_deploy/tdd_deploy_server'
|
15
|
+
# @tester = TddDeploy::Server.new(PORT, :web_hosts => 'arch', :db_hosts => 'arch',
|
16
|
+
# :host_admin => 'mike', :local_admin => 'mike', :ssh_timeout => 2)
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# def teardown
|
20
|
+
# @tester = nil
|
21
|
+
# end
|
22
|
+
|
23
|
+
def test_set_env_rb_exists
|
24
|
+
assert File.exists?(File.join(BIN_DIR, 'tdd_deploy_server.rb')), "tdd_deploy_server exists"
|
25
|
+
end
|
26
|
+
#
|
27
|
+
# def test_tester_accessors
|
28
|
+
# assert_equal PORT, @tester.port, "@tester.port should be #{PORT}"
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# def test_classes_array
|
32
|
+
# @tester.load_all_tests
|
33
|
+
# assert_not_nil @tester.test_classes, "@tester.test_classes should not be nil"
|
34
|
+
# assert @tester.test_classes.include?(TddDeploy::HostConnection), "@tester.test_classes should contain TddDeploy::HostConnection"
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# def test_run_all_tests
|
38
|
+
# ret = @tester.run_all_tests
|
39
|
+
# assert ret, "@tester should run all tests and return true: #{@tester.test_failures}"
|
40
|
+
# # puts @tester.test_results
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# def test_rack_interface
|
44
|
+
# code, headers, body = @tester.call({})
|
45
|
+
# assert_equal 200, code, "@tester always responds with 200"
|
46
|
+
# assert_not_nil body, "body should not be nil"
|
47
|
+
# assert_equal 'text/html', headers['Content-Type'], "Content-Type is text/html"
|
48
|
+
# assert_equal headers['Content-Length'].to_i, body.join('').length, "Content-Length is the size of body"
|
49
|
+
# end
|
50
|
+
|
51
|
+
# def test_run_server
|
52
|
+
# stdout, stderr, cmd = run_locally 'quit' do
|
53
|
+
# "#{File.join(BIN_DIR, 'tdd_deploy_server')}"
|
54
|
+
# end
|
55
|
+
# assert_not_nil stdout, "tdd_deploy_server is runable. stderr: #{stderr}"
|
56
|
+
# assert_nil stderr, "tdd_deploy_server does not generate errors"
|
57
|
+
# end
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
$:.unshift File.expand_path('..', __FILE__)
|
2
|
+
require 'test_helpers'
|
3
|
+
require 'tdd_deploy/environ'
|
4
|
+
require 'tdd_deploy/run_methods'
|
5
|
+
require 'tdd_deploy/deploy_test_methods'
|
6
|
+
|
7
|
+
# NOTES: These tests require a host to talk to. I run an Arch Linux server on my local
|
8
|
+
# machine as a virtual host. Set up your own with appropriate accounts if you need to run
|
9
|
+
# these tests.
|
10
|
+
|
11
|
+
class DeployTester
|
12
|
+
include TddDeploy::Assertions
|
13
|
+
include TddDeploy::Environ
|
14
|
+
include TddDeploy::RunMethods
|
15
|
+
include TddDeploy::DeployTestMethods
|
16
|
+
|
17
|
+
def initialize env_hash
|
18
|
+
self.reset_env
|
19
|
+
self.set_env env_hash
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class DeployTestMethodsTestCase < Test::Unit::TestCase
|
24
|
+
def setup
|
25
|
+
@tester = DeployTester.new( { :host_admin => 'mike', :local_admin => 'mike', :db_hosts => 'arch',
|
26
|
+
:web_hosts => 'arch', :ssh_timeout => 2 } )
|
27
|
+
end
|
28
|
+
|
29
|
+
def teardown
|
30
|
+
@tester = nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_default_env
|
34
|
+
@tester.reset_env
|
35
|
+
assert_equal 'host_admin', @tester.host_admin, "host_admin should be 'host_admin'"
|
36
|
+
assert_equal 'local_admin', @tester.local_admin, "local_admin should be 'local_admin'"
|
37
|
+
assert_equal 'local_admin@bogus.tld', @tester.local_admin_email, "local_admin_email should be 'local_admin@bogus.tld'"
|
38
|
+
# assert_equal 'hosts', @tester.hosts, "hosts should be 'arch'"
|
39
|
+
assert_equal ['bar', 'foo'], @tester.hosts, "hosts should be 'bar,foo'"
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_custom_env
|
43
|
+
@tester.set_env 'host_admin' => 'mike', :local_admin => 'mike', :local_admin_email => 'mike@clove.com'
|
44
|
+
assert_equal 'mike', @tester.host_admin, "host_admin should be 'mike'"
|
45
|
+
assert_equal 'mike', @tester.local_admin, "local_admin should be 'mike'"
|
46
|
+
assert_equal 'mike@clove.com', @tester.local_admin_email, "local_admin_email should be 'mike@clove.com'"
|
47
|
+
assert_equal ['arch'], @tester.hosts, "hosts should be 'arch'"
|
48
|
+
end
|
49
|
+
|
50
|
+
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
|
52
|
+
'pwd'
|
53
|
+
end
|
54
|
+
refute result, "refute version: should fail with bad userid #{result}"
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_deploy_test_in_ssh_session_as
|
58
|
+
assert_raises ArgumentError do
|
59
|
+
@tester.deploy_test_in_ssh_session_as 'root', @tester.hosts.first, '', 'session catches empty match expression' do
|
60
|
+
'uname -a'
|
61
|
+
end
|
62
|
+
@tester.reset_tests
|
63
|
+
end
|
64
|
+
|
65
|
+
tmp = @tester.deploy_test_in_ssh_session_as 'root', @tester.hosts.first, 'no-file-exists', 'generate an error' do
|
66
|
+
'ls /usr/no-file-exists'
|
67
|
+
end
|
68
|
+
# @tester.announce_test_results
|
69
|
+
@tester.reset_tests
|
70
|
+
refute tmp, "run as root should fail when accessing a non-existent file"
|
71
|
+
|
72
|
+
tmp = @tester.deploy_test_in_ssh_session_as 'root', @tester.hosts.first, "/root", "should run as root on host #{@tester.hosts.first}" do
|
73
|
+
'pwd'
|
74
|
+
end
|
75
|
+
# @tester.announce_test_results
|
76
|
+
@tester.reset_tests
|
77
|
+
assert tmp, "should be able to run on #{@tester.hosts.first} as root"
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_deploy_test_in_ssh_session
|
81
|
+
@tester.deploy_test_in_ssh_session @tester.hosts.first, "/home/#{@tester.host_admin}", "can't run as #{@tester.host_admin} on host" do
|
82
|
+
'pwd'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_deploy_test_on_all_hosts_as
|
87
|
+
@tester.deploy_test_on_all_hosts_as 'root', '/root', "can't run as root on all hosts" do
|
88
|
+
'pwd'
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_deploy_test_on_all_hosts
|
93
|
+
@tester.deploy_test_on_all_hosts "/home/#{@tester.host_admin}", 'can\'t run on some hosts' do
|
94
|
+
'pwd'
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
metadata
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tdd_deploy
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Mike Howard
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-08-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: capistrano
|
16
|
+
requirement: &2165185440 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2165185440
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: net-ping
|
27
|
+
requirement: &2165184940 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2165184940
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: net-ssh
|
38
|
+
requirement: &2165184400 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2165184400
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: ZenTest
|
49
|
+
requirement: &2165183760 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 4.5.0
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2165183760
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: autotest-growl
|
60
|
+
requirement: &2165183240 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2165183240
|
69
|
+
description: Test driven support for host provisioning & Capistrano deployment - for
|
70
|
+
those who don't want to bother learning too much
|
71
|
+
email: ! ' mike@clove.com '
|
72
|
+
executables:
|
73
|
+
- tdd_deploy_context
|
74
|
+
- tdd_deploy_server.rb
|
75
|
+
extensions: []
|
76
|
+
extra_rdoc_files: []
|
77
|
+
files:
|
78
|
+
- Capfile
|
79
|
+
- Gemfile
|
80
|
+
- config.ru
|
81
|
+
- bin/tdd_deploy_context
|
82
|
+
- bin/tdd_deploy_server.rb
|
83
|
+
- lib/tdd_deploy/assertions.rb
|
84
|
+
- lib/tdd_deploy/base.rb
|
85
|
+
- lib/tdd_deploy/deploy_test_methods.rb
|
86
|
+
- lib/tdd_deploy/environ.rb
|
87
|
+
- lib/tdd_deploy/host_tests/host_connection.rb
|
88
|
+
- lib/tdd_deploy/host_tests/remote_ip_tables.rb
|
89
|
+
- lib/tdd_deploy/host_tests/remote_monit.rb
|
90
|
+
- lib/tdd_deploy/host_tests/remote_nginx.rb
|
91
|
+
- lib/tdd_deploy/host_tests/remote_postfix.rb
|
92
|
+
- lib/tdd_deploy/host_tests/remote_postgresql.rb
|
93
|
+
- lib/tdd_deploy/railengine.rb
|
94
|
+
- lib/tdd_deploy/run_methods.rb
|
95
|
+
- lib/tdd_deploy/server.rb
|
96
|
+
- lib/tdd_deploy/site_tests/site_layout.rb
|
97
|
+
- lib/tdd_deploy/site_tests/site_user.rb
|
98
|
+
- lib/tdd_deploy/version.rb
|
99
|
+
- lib/tdd_deploy.rb
|
100
|
+
- tests/test_assertions.rb
|
101
|
+
- tests/test_base.rb
|
102
|
+
- tests/test_colored_tests.rb
|
103
|
+
- tests/test_environ.rb
|
104
|
+
- tests/test_helpers.rb
|
105
|
+
- tests/test_host_tests.rb
|
106
|
+
- tests/test_remote_ip_tables.rb
|
107
|
+
- tests/test_remote_monit.rb
|
108
|
+
- tests/test_remote_nginx.rb
|
109
|
+
- tests/test_remote_postfix.rb
|
110
|
+
- tests/test_remote_postgresql.rb
|
111
|
+
- tests/test_run_methods.rb
|
112
|
+
- tests/test_server.rb
|
113
|
+
- tests/test_site_layout.rb
|
114
|
+
- tests/test_site_user.rb
|
115
|
+
- tests/test_tdd_deploy.rb
|
116
|
+
- tests/test_tdd_deploy_context.rb
|
117
|
+
- tests/test_tdd_deploy_server.rb
|
118
|
+
- tests/test_test_deploy_methods.rb
|
119
|
+
- lib/tasks/tdd_deploy.rake
|
120
|
+
homepage: https://github.com/mikehoward/tdd_deploy
|
121
|
+
licenses:
|
122
|
+
- GPL3
|
123
|
+
post_install_message:
|
124
|
+
rdoc_options: []
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
none: false
|
129
|
+
requirements:
|
130
|
+
- - ! '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 1.9.2
|
133
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
|
+
none: false
|
135
|
+
requirements:
|
136
|
+
- - ! '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
requirements: []
|
140
|
+
rubyforge_project:
|
141
|
+
rubygems_version: 1.8.6
|
142
|
+
signing_key:
|
143
|
+
specification_version: 3
|
144
|
+
summary: Test driven support for host provisioning & Capistrano deployment - for those
|
145
|
+
who don't want to bother learning too much
|
146
|
+
test_files: []
|