dk-abdeploy 0.0.1 → 0.1.0
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.
- checksums.yaml +4 -4
- data/README.md +81 -8
- data/dk-abdeploy.gemspec +6 -3
- data/lib/dk-abdeploy.rb +7 -3
- data/lib/dk-abdeploy/cleanup.rb +40 -0
- data/lib/dk-abdeploy/constants.rb +25 -0
- data/lib/dk-abdeploy/link.rb +30 -0
- data/lib/dk-abdeploy/setup.rb +43 -0
- data/lib/dk-abdeploy/update.rb +90 -0
- data/lib/dk-abdeploy/utils/current_git_branch.rb +24 -0
- data/lib/dk-abdeploy/validate.rb +87 -0
- data/lib/dk-abdeploy/version.rb +1 -1
- data/test/support/validate.rb +27 -0
- data/test/unit/cleanup_tests.rb +97 -0
- data/test/unit/dk-abdeploy_tests.rb +42 -0
- data/test/unit/link_tests.rb +84 -0
- data/test/unit/setup_tests.rb +84 -0
- data/test/unit/update_tests.rb +230 -0
- data/test/unit/utils/current_git_branch_tests.rb +41 -0
- data/test/unit/validate_tests.rb +137 -0
- metadata +50 -8
data/lib/dk-abdeploy/version.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'much-plugin'
|
2
|
+
require 'dk/task'
|
3
|
+
require 'dk-abdeploy/validate'
|
4
|
+
|
5
|
+
class Dk::ABDeploy::Validate
|
6
|
+
|
7
|
+
module TestHelpers
|
8
|
+
include MuchPlugin
|
9
|
+
|
10
|
+
plugin_included do
|
11
|
+
|
12
|
+
# this just adds an extra setup block just for dk-abdeploy tests
|
13
|
+
setup do
|
14
|
+
@root = @dk_abdeploy_root
|
15
|
+
@repo = @dk_abdeploy_repo
|
16
|
+
@shared = @dk_abdeploy_shared
|
17
|
+
@current = @dk_abdeploy_current
|
18
|
+
@releases = @dk_abdeploy_releases
|
19
|
+
@release_a = @dk_abdeploy_release_a
|
20
|
+
@release_b = @dk_abdeploy_release_b
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'dk-abdeploy/cleanup'
|
3
|
+
|
4
|
+
require 'dk/task'
|
5
|
+
require 'dk/task_run'
|
6
|
+
require 'dk-abdeploy'
|
7
|
+
require 'dk-abdeploy/update'
|
8
|
+
require 'test/support/validate'
|
9
|
+
|
10
|
+
class Dk::ABDeploy::Cleanup
|
11
|
+
|
12
|
+
class UnitTests < Assert::Context
|
13
|
+
desc "Dk::ABDeploy::Cleanup"
|
14
|
+
setup do
|
15
|
+
@task_class = Dk::ABDeploy::Cleanup
|
16
|
+
end
|
17
|
+
subject{ @task_class }
|
18
|
+
|
19
|
+
should "be a Dk task" do
|
20
|
+
assert_includes Dk::Task, subject
|
21
|
+
end
|
22
|
+
|
23
|
+
should "know its description" do
|
24
|
+
exp = "(dk-abdeploy) update the non-deploy release's source post-update"
|
25
|
+
assert_equal exp, subject.description
|
26
|
+
end
|
27
|
+
|
28
|
+
should "run the Validate task as a before callback" do
|
29
|
+
assert_equal [Dk::ABDeploy::Validate], subject.before_callback_task_classes
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
class InitTests < UnitTests
|
35
|
+
include Dk::ABDeploy::Update::TestHelpers
|
36
|
+
|
37
|
+
desc "when init"
|
38
|
+
setup do
|
39
|
+
@params.merge!({
|
40
|
+
Dk::ABDeploy::REF_PARAM_NAME => Factory.hex,
|
41
|
+
})
|
42
|
+
@runner = test_runner(@task_class, :params => @params)
|
43
|
+
@task = @runner.task
|
44
|
+
end
|
45
|
+
subject{ @task }
|
46
|
+
|
47
|
+
should "know its ssh hosts" do
|
48
|
+
assert_equal Dk::ABDeploy::SSH_HOSTS_GROUP_NAME, subject.dk_dsl_ssh_hosts
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
class RunTests < InitTests
|
54
|
+
desc "and run"
|
55
|
+
setup do
|
56
|
+
@runner.run
|
57
|
+
end
|
58
|
+
subject{ @runner }
|
59
|
+
|
60
|
+
should "run the Validate callback and 1 ssh cmd" do
|
61
|
+
assert_equal 2, subject.runs.size
|
62
|
+
end
|
63
|
+
|
64
|
+
should "run an ssh cmd to reset the current release git repo" do
|
65
|
+
_, git_reset_ssh = subject.runs
|
66
|
+
|
67
|
+
repo_dir = @params[Dk::ABDeploy::CURRENT_RELEASE_DIR_PARAM_NAME]
|
68
|
+
ref = @params[Dk::ABDeploy::REF_PARAM_NAME]
|
69
|
+
exp = Dk::ABDeploy::Update.git_reset_cmd_str(repo_dir, ref)
|
70
|
+
assert_equal exp, git_reset_ssh.cmd_str
|
71
|
+
end
|
72
|
+
|
73
|
+
should "complain if the current release dir or ref params aren't set" do
|
74
|
+
value = [nil, ''].sample
|
75
|
+
|
76
|
+
runner = test_runner(@task_class, :params => {
|
77
|
+
Dk::ABDeploy::REF_PARAM_NAME => value,
|
78
|
+
Dk::ABDeploy::CURRENT_RELEASE_DIR_PARAM_NAME => value
|
79
|
+
})
|
80
|
+
assert_raises(ArgumentError){ runner.run }
|
81
|
+
|
82
|
+
runner = test_runner(@task_class, :params => {
|
83
|
+
Dk::ABDeploy::REF_PARAM_NAME => Factory.string,
|
84
|
+
Dk::ABDeploy::CURRENT_RELEASE_DIR_PARAM_NAME => value
|
85
|
+
})
|
86
|
+
assert_raises(ArgumentError){ runner.run }
|
87
|
+
|
88
|
+
runner = test_runner(@task_class, :params => {
|
89
|
+
Dk::ABDeploy::REF_PARAM_NAME => value,
|
90
|
+
Dk::ABDeploy::CURRENT_RELEASE_DIR_PARAM_NAME => Factory.string
|
91
|
+
})
|
92
|
+
assert_raises(ArgumentError){ runner.run }
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'dk-abdeploy'
|
3
|
+
|
4
|
+
module Dk::ABDeploy
|
5
|
+
|
6
|
+
class UnitTests < Assert::Context
|
7
|
+
desc "Dk::ABDeploy"
|
8
|
+
setup do
|
9
|
+
@deploy_module = Dk::ABDeploy
|
10
|
+
end
|
11
|
+
subject{ @deploy_module }
|
12
|
+
|
13
|
+
should "know its dir/link names" do
|
14
|
+
assert_equal 'shared', subject::SHARED_DIR_NAME
|
15
|
+
assert_equal 'releases', subject::RELEASES_DIR_NAME
|
16
|
+
assert_equal 'A', subject::RELEASE_A_DIR_NAME
|
17
|
+
assert_equal 'B', subject::RELEASE_B_DIR_NAME
|
18
|
+
assert_equal 'current', subject::CURRENT_LINK_NAME
|
19
|
+
end
|
20
|
+
|
21
|
+
should "know its param names" do
|
22
|
+
s = subject
|
23
|
+
assert_equal 'dk_abdeploy_root', s::ROOT_PARAM_NAME
|
24
|
+
assert_equal 'dk_abdeploy_shared_dir', s::SHARED_DIR_PARAM_NAME
|
25
|
+
assert_equal 'dk_abdeploy_current_dir', s::CURRENT_DIR_PARAM_NAME
|
26
|
+
assert_equal 'dk_abdeploy_releases_dir', s::RELEASES_DIR_PARAM_NAME
|
27
|
+
assert_equal 'dk_abdeploy_release_a_dir', s::RELEASE_A_DIR_PARAM_NAME
|
28
|
+
assert_equal 'dk_abdeploy_release_b_dir', s::RELEASE_B_DIR_PARAM_NAME
|
29
|
+
assert_equal 'dk_abdeploy_current_release_dir', s::CURRENT_RELEASE_DIR_PARAM_NAME
|
30
|
+
assert_equal 'dk_abdeploy_deploy_release_dir', s::DEPLOY_RELEASE_DIR_PARAM_NAME
|
31
|
+
assert_equal 'dk_abdeploy_repo', s::REPO_PARAM_NAME
|
32
|
+
assert_equal 'dk_abdeploy_ref', s::REF_PARAM_NAME
|
33
|
+
assert_equal 'dk_abdeploy_primary_ssh_host', s::PRIMARY_SSH_HOST_PARAM_NAME
|
34
|
+
end
|
35
|
+
|
36
|
+
should "know its ssh hosts group name" do
|
37
|
+
assert_equal 'dk_abdeploy_servers', subject::SSH_HOSTS_GROUP_NAME
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'dk-abdeploy/link'
|
3
|
+
|
4
|
+
require 'dk/task'
|
5
|
+
require 'dk/task_run'
|
6
|
+
require 'dk-abdeploy'
|
7
|
+
require 'test/support/validate'
|
8
|
+
|
9
|
+
class Dk::ABDeploy::Link
|
10
|
+
|
11
|
+
class UnitTests < Assert::Context
|
12
|
+
desc "Dk::ABDeploy::Link"
|
13
|
+
setup do
|
14
|
+
@task_class = Dk::ABDeploy::Link
|
15
|
+
end
|
16
|
+
subject{ @task_class }
|
17
|
+
|
18
|
+
should "be a Dk task" do
|
19
|
+
assert_includes Dk::Task, subject
|
20
|
+
end
|
21
|
+
|
22
|
+
should "know its description" do
|
23
|
+
exp = "(dk-abdeploy) link the deploy release dir as the current dir"
|
24
|
+
assert_equal exp, subject.description
|
25
|
+
end
|
26
|
+
|
27
|
+
should "run the Validate task as a before callback" do
|
28
|
+
assert_equal [Dk::ABDeploy::Validate], subject.before_callback_task_classes
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
class InitTests < UnitTests
|
34
|
+
include Dk::ABDeploy::Validate::TestHelpers
|
35
|
+
|
36
|
+
desc "when init"
|
37
|
+
setup do
|
38
|
+
release_dirs = [
|
39
|
+
@params[Dk::ABDeploy::RELEASE_A_DIR_PARAM_NAME],
|
40
|
+
@params[Dk::ABDeploy::RELEASE_B_DIR_PARAM_NAME]
|
41
|
+
]
|
42
|
+
@params[Dk::ABDeploy::DEPLOY_RELEASE_DIR_PARAM_NAME] = release_dirs.sample
|
43
|
+
|
44
|
+
@runner = test_runner(@task_class, :params => @params)
|
45
|
+
@task = @runner.task
|
46
|
+
end
|
47
|
+
subject{ @task }
|
48
|
+
|
49
|
+
should "know its ssh hosts" do
|
50
|
+
assert_equal Dk::ABDeploy::SSH_HOSTS_GROUP_NAME, subject.dk_dsl_ssh_hosts
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
class RunTests < InitTests
|
56
|
+
desc "and run"
|
57
|
+
setup do
|
58
|
+
@runner.run
|
59
|
+
end
|
60
|
+
subject{ @runner }
|
61
|
+
|
62
|
+
should "run the Validate task callback and 1 ssh cmd" do
|
63
|
+
assert_equal 2, subject.runs.size
|
64
|
+
end
|
65
|
+
|
66
|
+
should "run an ssh cmds to link the deploy release dir as the current dir" do
|
67
|
+
_, link_ssh = subject.runs
|
68
|
+
curr_dir = @params[Dk::ABDeploy::CURRENT_DIR_PARAM_NAME]
|
69
|
+
release_dir = @params[Dk::ABDeploy::DEPLOY_RELEASE_DIR_PARAM_NAME]
|
70
|
+
|
71
|
+
exp = "rm -f #{curr_dir} && ln -s #{release_dir} #{curr_dir}"
|
72
|
+
assert_equal exp, link_ssh.cmd_str
|
73
|
+
end
|
74
|
+
|
75
|
+
should "complain if the deploy release dir param isn't set" do
|
76
|
+
runner = test_runner(@task_class, :params => {
|
77
|
+
Dk::ABDeploy::DEPLOY_RELEASE_DIR_PARAM_NAME => [nil, ''].sample
|
78
|
+
})
|
79
|
+
assert_raises(ArgumentError){ runner.run }
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'dk-abdeploy/setup'
|
3
|
+
|
4
|
+
require 'dk/task'
|
5
|
+
require 'dk/task_run'
|
6
|
+
require 'dk-abdeploy'
|
7
|
+
require 'test/support/validate'
|
8
|
+
|
9
|
+
class Dk::ABDeploy::Setup
|
10
|
+
|
11
|
+
class UnitTests < Assert::Context
|
12
|
+
desc "Dk::ABDeploy::Setup"
|
13
|
+
setup do
|
14
|
+
@task_class = Dk::ABDeploy::Setup
|
15
|
+
end
|
16
|
+
subject{ @task_class }
|
17
|
+
|
18
|
+
should "be a Dk task" do
|
19
|
+
assert_includes Dk::Task, subject
|
20
|
+
end
|
21
|
+
|
22
|
+
should "know its description" do
|
23
|
+
exp = "(dk-abdeploy) create the dirs and clone the repos for the A/B deploy scheme"
|
24
|
+
assert_equal exp, subject.description
|
25
|
+
end
|
26
|
+
|
27
|
+
should "run the Validate task as a before callback" do
|
28
|
+
assert_equal [Dk::ABDeploy::Validate], subject.before_callback_task_classes
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
class InitTests < UnitTests
|
34
|
+
include Dk::ABDeploy::Validate::TestHelpers
|
35
|
+
|
36
|
+
desc "when init"
|
37
|
+
setup do
|
38
|
+
@runner = test_runner(@task_class, :params => @params)
|
39
|
+
@task = @runner.task
|
40
|
+
end
|
41
|
+
subject{ @task }
|
42
|
+
|
43
|
+
should "know its ssh hosts" do
|
44
|
+
assert_equal Dk::ABDeploy::SSH_HOSTS_GROUP_NAME, subject.dk_dsl_ssh_hosts
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
class RunTests < InitTests
|
50
|
+
desc "and run"
|
51
|
+
setup do
|
52
|
+
@runner.run
|
53
|
+
end
|
54
|
+
subject{ @runner }
|
55
|
+
|
56
|
+
should "run the Validate task callback and 3 ssh cmds" do
|
57
|
+
assert_equal 4, subject.runs.size
|
58
|
+
end
|
59
|
+
|
60
|
+
should "run ssh cmds to make the dirs and clone the A/B repos" do
|
61
|
+
_, mkdir_ssh, clone_a_ssh, clone_b_ssh = subject.runs
|
62
|
+
|
63
|
+
exp = "mkdir -p #{@root} #{@shared} #{@releases} #{@release_a} #{@release_b}"
|
64
|
+
assert_equal exp, mkdir_ssh.cmd_str
|
65
|
+
|
66
|
+
exp = clone_cmd_str(@repo, @release_a)
|
67
|
+
assert_equal exp, clone_a_ssh.cmd_str
|
68
|
+
|
69
|
+
exp = clone_cmd_str(@repo, @release_b)
|
70
|
+
assert_equal exp, clone_b_ssh.cmd_str
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def clone_cmd_str(repo, release_dir)
|
76
|
+
"if [ -d #{release_dir}/.git ]; " \
|
77
|
+
"then echo 'repo already cloned'; " \
|
78
|
+
"else git clone -q #{repo} #{release_dir}; " \
|
79
|
+
"fi"
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,230 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'dk-abdeploy/update'
|
3
|
+
|
4
|
+
require 'dk/task'
|
5
|
+
require 'dk/task_run'
|
6
|
+
require 'dk-abdeploy'
|
7
|
+
require 'test/support/validate'
|
8
|
+
|
9
|
+
class Dk::ABDeploy::Update
|
10
|
+
|
11
|
+
class UnitTests < Assert::Context
|
12
|
+
desc "Dk::ABDeploy::Update"
|
13
|
+
setup do
|
14
|
+
@task_class = Dk::ABDeploy::Update
|
15
|
+
end
|
16
|
+
subject{ @task_class }
|
17
|
+
|
18
|
+
should have_imeths :readlink_cmd_str, :git_reset_cmd_str
|
19
|
+
|
20
|
+
should "be a Dk task" do
|
21
|
+
assert_includes Dk::Task, subject
|
22
|
+
end
|
23
|
+
|
24
|
+
should "know its description" do
|
25
|
+
exp = "(dk-abdeploy) update the non-current release's source"
|
26
|
+
assert_equal exp, subject.description
|
27
|
+
end
|
28
|
+
|
29
|
+
should "run the Validate task as a before callback" do
|
30
|
+
assert_equal [Dk::ABDeploy::Validate], subject.before_callback_task_classes
|
31
|
+
end
|
32
|
+
|
33
|
+
should "build readlink cmd strs" do
|
34
|
+
link = Factory.path
|
35
|
+
|
36
|
+
exp = "readlink #{link}"
|
37
|
+
assert_equal exp, subject.readlink_cmd_str(link)
|
38
|
+
end
|
39
|
+
|
40
|
+
should "build git reset cmd strs" do
|
41
|
+
repo_dir = Factory.path
|
42
|
+
ref = Factory.string
|
43
|
+
|
44
|
+
exp = "cd #{repo_dir} && " \
|
45
|
+
"git fetch -q origin && " \
|
46
|
+
"git reset -q --hard #{ref} && " \
|
47
|
+
"git clean -q -d -x -f"
|
48
|
+
assert_equal exp, subject.git_reset_cmd_str(repo_dir, ref)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
class InitTests < UnitTests
|
54
|
+
include Dk::ABDeploy::Validate::TestHelpers
|
55
|
+
|
56
|
+
desc "when init"
|
57
|
+
setup do
|
58
|
+
@params.merge!({
|
59
|
+
Dk::ABDeploy::REF_PARAM_NAME => Factory.hex,
|
60
|
+
Dk::ABDeploy::PRIMARY_SSH_HOST_PARAM_NAME => "#{Factory.string}.example.com"
|
61
|
+
})
|
62
|
+
@runner = test_runner(@task_class, :params => @params)
|
63
|
+
@task = @runner.task
|
64
|
+
end
|
65
|
+
subject{ @task }
|
66
|
+
|
67
|
+
should "know its ssh hosts" do
|
68
|
+
assert_equal Dk::ABDeploy::SSH_HOSTS_GROUP_NAME, subject.dk_dsl_ssh_hosts
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
class RunTests < InitTests
|
74
|
+
desc "and run"
|
75
|
+
setup do
|
76
|
+
@curr_link = @params[Dk::ABDeploy::CURRENT_DIR_PARAM_NAME]
|
77
|
+
@rl_cmd_str = @task_class.readlink_cmd_str(@curr_link)
|
78
|
+
|
79
|
+
@runner.run
|
80
|
+
end
|
81
|
+
subject{ @runner }
|
82
|
+
|
83
|
+
should "run the Validate task callback, 1 cmd and 1 ssh cmd" do
|
84
|
+
assert_equal 3, subject.runs.size
|
85
|
+
end
|
86
|
+
|
87
|
+
should "run a readlink ssh to set or default the current release dir param" do
|
88
|
+
_, rl_ssh, _ = subject.runs
|
89
|
+
|
90
|
+
exp = @task_class.readlink_cmd_str(@params[Dk::ABDeploy::CURRENT_DIR_PARAM_NAME])
|
91
|
+
assert_equal exp, rl_ssh.cmd_str
|
92
|
+
exp = [@params[Dk::ABDeploy::PRIMARY_SSH_HOST_PARAM_NAME]]
|
93
|
+
assert_equal exp, rl_ssh.cmd_opts[:hosts]
|
94
|
+
end
|
95
|
+
|
96
|
+
should "set the current release dir param or default it to the B dir if none" do
|
97
|
+
curr_release_dir = Factory.path
|
98
|
+
runner = test_runner(@task_class, :params => @params)
|
99
|
+
runner.stub_ssh(@rl_cmd_str, {
|
100
|
+
:opts => {
|
101
|
+
:hosts => @params[Dk::ABDeploy::PRIMARY_SSH_HOST_PARAM_NAME]
|
102
|
+
}
|
103
|
+
}){ |spy| spy.stdout = curr_release_dir }
|
104
|
+
runner.run
|
105
|
+
exp = curr_release_dir
|
106
|
+
assert_equal exp, runner.params[Dk::ABDeploy::CURRENT_RELEASE_DIR_PARAM_NAME]
|
107
|
+
|
108
|
+
runner = test_runner(@task_class, :params => @params)
|
109
|
+
runner.stub_ssh(@rl_cmd_str, {
|
110
|
+
:opts => {
|
111
|
+
:hosts => @params[Dk::ABDeploy::PRIMARY_SSH_HOST_PARAM_NAME]
|
112
|
+
}
|
113
|
+
}){ |spy| spy.stdout = '' }
|
114
|
+
runner.run
|
115
|
+
exp = @params[Dk::ABDeploy::RELEASE_B_DIR_PARAM_NAME]
|
116
|
+
assert_equal exp, runner.params[Dk::ABDeploy::CURRENT_RELEASE_DIR_PARAM_NAME]
|
117
|
+
end
|
118
|
+
|
119
|
+
should "set the deploy release dir to the A dir by default" do
|
120
|
+
exp = @params[Dk::ABDeploy::RELEASE_A_DIR_PARAM_NAME]
|
121
|
+
assert_equal exp, subject.params[Dk::ABDeploy::DEPLOY_RELEASE_DIR_PARAM_NAME]
|
122
|
+
end
|
123
|
+
|
124
|
+
should "set the deploy release dir to the non-current release dir" do
|
125
|
+
# if current is A, set deploy to B
|
126
|
+
curr_release_dir = @params[Dk::ABDeploy::RELEASE_A_DIR_PARAM_NAME]
|
127
|
+
runner = test_runner(@task_class, :params => @params)
|
128
|
+
runner.stub_ssh(@rl_cmd_str, {
|
129
|
+
:opts => {
|
130
|
+
:hosts => @params[Dk::ABDeploy::PRIMARY_SSH_HOST_PARAM_NAME]
|
131
|
+
}
|
132
|
+
}){ |spy| spy.stdout = curr_release_dir }
|
133
|
+
runner.run
|
134
|
+
|
135
|
+
exp = @params[Dk::ABDeploy::RELEASE_B_DIR_PARAM_NAME]
|
136
|
+
assert_equal exp, runner.params[Dk::ABDeploy::DEPLOY_RELEASE_DIR_PARAM_NAME]
|
137
|
+
|
138
|
+
# if current is B, set deploy to A
|
139
|
+
curr_release_dir = @params[Dk::ABDeploy::RELEASE_B_DIR_PARAM_NAME]
|
140
|
+
runner = test_runner(@task_class, :params => @params)
|
141
|
+
runner.stub_ssh(@rl_cmd_str, {
|
142
|
+
:opts => {
|
143
|
+
:hosts => @params[Dk::ABDeploy::PRIMARY_SSH_HOST_PARAM_NAME]
|
144
|
+
}
|
145
|
+
}){ |spy| spy.stdout = curr_release_dir }
|
146
|
+
runner.run
|
147
|
+
|
148
|
+
exp = @params[Dk::ABDeploy::RELEASE_A_DIR_PARAM_NAME]
|
149
|
+
assert_equal exp, runner.params[Dk::ABDeploy::DEPLOY_RELEASE_DIR_PARAM_NAME]
|
150
|
+
end
|
151
|
+
|
152
|
+
should "run an ssh cmd to reset the deploy release git repo" do
|
153
|
+
_, _, git_reset_ssh = subject.runs
|
154
|
+
repo_dir = @params[Dk::ABDeploy::RELEASE_A_DIR_PARAM_NAME]
|
155
|
+
ref = @params[Dk::ABDeploy::REF_PARAM_NAME]
|
156
|
+
|
157
|
+
exp = @task_class.git_reset_cmd_str(repo_dir, ref)
|
158
|
+
assert_equal exp, git_reset_ssh.cmd_str
|
159
|
+
end
|
160
|
+
|
161
|
+
should "complain if the ref/host params aren't set" do
|
162
|
+
value = [nil, ''].sample
|
163
|
+
|
164
|
+
runner = test_runner(@task_class, :params => {
|
165
|
+
Dk::ABDeploy::REF_PARAM_NAME => value,
|
166
|
+
Dk::ABDeploy::PRIMARY_SSH_HOST_PARAM_NAME => value
|
167
|
+
})
|
168
|
+
assert_raises(ArgumentError){ runner.run }
|
169
|
+
|
170
|
+
runner = test_runner(@task_class, :params => {
|
171
|
+
Dk::ABDeploy::REF_PARAM_NAME => Factory.string,
|
172
|
+
Dk::ABDeploy::PRIMARY_SSH_HOST_PARAM_NAME => value
|
173
|
+
})
|
174
|
+
assert_raises(ArgumentError){ runner.run }
|
175
|
+
|
176
|
+
runner = test_runner(@task_class, :params => {
|
177
|
+
Dk::ABDeploy::REF_PARAM_NAME => value,
|
178
|
+
Dk::ABDeploy::PRIMARY_SSH_HOST_PARAM_NAME => Factory.string
|
179
|
+
})
|
180
|
+
assert_raises(ArgumentError){ runner.run }
|
181
|
+
end
|
182
|
+
|
183
|
+
private
|
184
|
+
|
185
|
+
def readlink_cmd_str(task, link, ssh_opts)
|
186
|
+
ssh_cmd_str(task, "readlink #{link}", ssh_opts)
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
class TestHelpersTests < UnitTests
|
192
|
+
desc "TestHelpers"
|
193
|
+
setup do
|
194
|
+
@context_class = Class.new do
|
195
|
+
def self.setup_blocks; @setup_blocks ||= []; end
|
196
|
+
def self.setup(&block)
|
197
|
+
self.setup_blocks << block
|
198
|
+
end
|
199
|
+
include Dk::ABDeploy::Update::TestHelpers
|
200
|
+
attr_reader :params
|
201
|
+
def initialize
|
202
|
+
self.class.setup_blocks.each{ |b| self.instance_eval(&b) }
|
203
|
+
end
|
204
|
+
end
|
205
|
+
@context = @context_class.new
|
206
|
+
end
|
207
|
+
subject{ @context }
|
208
|
+
|
209
|
+
should "use much-plugin" do
|
210
|
+
assert_includes MuchPlugin, @context_class
|
211
|
+
end
|
212
|
+
|
213
|
+
should "setup the params the update task does" do
|
214
|
+
exp_release_dirs = [
|
215
|
+
subject.params[Dk::ABDeploy::RELEASE_A_DIR_PARAM_NAME],
|
216
|
+
subject.params[Dk::ABDeploy::RELEASE_B_DIR_PARAM_NAME]
|
217
|
+
]
|
218
|
+
|
219
|
+
exp_release_dirs.delete(
|
220
|
+
subject.params[Dk::ABDeploy::CURRENT_RELEASE_DIR_PARAM_NAME]
|
221
|
+
)
|
222
|
+
assert_equal 1, exp_release_dirs.size
|
223
|
+
|
224
|
+
exp = exp_release_dirs.first
|
225
|
+
assert_equal exp, subject.params[Dk::ABDeploy::DEPLOY_RELEASE_DIR_PARAM_NAME]
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
end
|