vagrantup 0.3.4 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/README.md +2 -2
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/config/default.rb +13 -3
- data/lib/vagrant.rb +10 -13
- data/lib/vagrant/actions/base.rb +14 -2
- data/lib/vagrant/actions/box/download.rb +2 -7
- data/lib/vagrant/actions/box/verify.rb +1 -1
- data/lib/vagrant/actions/runner.rb +0 -1
- data/lib/vagrant/actions/vm/boot.rb +2 -6
- data/lib/vagrant/actions/vm/customize.rb +7 -5
- data/lib/vagrant/actions/vm/destroy.rb +4 -3
- data/lib/vagrant/actions/vm/down.rb +6 -3
- data/lib/vagrant/actions/vm/export.rb +2 -4
- data/lib/vagrant/actions/vm/forward_ports.rb +77 -16
- data/lib/vagrant/actions/vm/halt.rb +10 -2
- data/lib/vagrant/actions/vm/import.rb +2 -4
- data/lib/vagrant/actions/vm/move_hard_drive.rb +2 -2
- data/lib/vagrant/actions/vm/network.rb +120 -0
- data/lib/vagrant/actions/vm/package.rb +11 -7
- data/lib/vagrant/actions/vm/provision.rb +3 -3
- data/lib/vagrant/actions/vm/reload.rb +2 -9
- data/lib/vagrant/actions/vm/shared_folders.rb +19 -39
- data/lib/vagrant/actions/vm/start.rb +10 -2
- data/lib/vagrant/actions/vm/up.rb +5 -6
- data/lib/vagrant/active_list.rb +23 -13
- data/lib/vagrant/box.rb +2 -2
- data/lib/vagrant/busy.rb +3 -3
- data/lib/vagrant/command.rb +2 -2
- data/lib/vagrant/commands/base.rb +40 -20
- data/lib/vagrant/commands/destroy.rb +17 -3
- data/lib/vagrant/commands/halt.rb +23 -3
- data/lib/vagrant/commands/package.rb +54 -14
- data/lib/vagrant/commands/provision.rb +31 -0
- data/lib/vagrant/commands/reload.rb +16 -3
- data/lib/vagrant/commands/resume.rb +16 -3
- data/lib/vagrant/commands/ssh.rb +25 -3
- data/lib/vagrant/commands/ssh_config.rb +20 -5
- data/lib/vagrant/commands/status.rb +107 -40
- data/lib/vagrant/commands/suspend.rb +16 -3
- data/lib/vagrant/commands/up.rb +26 -7
- data/lib/vagrant/config.rb +82 -12
- data/lib/vagrant/downloaders/base.rb +8 -1
- data/lib/vagrant/downloaders/http.rb +31 -19
- data/lib/vagrant/environment.rb +146 -49
- data/lib/vagrant/provisioners/base.rb +19 -5
- data/lib/vagrant/provisioners/chef.rb +12 -4
- data/lib/vagrant/provisioners/chef_server.rb +13 -6
- data/lib/vagrant/provisioners/chef_solo.rb +7 -3
- data/lib/vagrant/resource_logger.rb +126 -0
- data/lib/vagrant/ssh.rb +109 -8
- data/lib/vagrant/systems/base.rb +70 -0
- data/lib/vagrant/systems/linux.rb +137 -0
- data/lib/vagrant/util.rb +1 -45
- data/lib/vagrant/util/error_helper.rb +13 -0
- data/lib/vagrant/util/glob_loader.rb +22 -0
- data/lib/vagrant/util/output_helper.rb +9 -0
- data/lib/vagrant/util/plain_logger.rb +12 -0
- data/lib/vagrant/util/platform.rb +7 -2
- data/lib/vagrant/util/template_renderer.rb +2 -2
- data/lib/vagrant/util/translator.rb +35 -0
- data/lib/vagrant/vm.rb +91 -10
- data/templates/crontab_entry.erb +1 -0
- data/templates/network_entry.erb +8 -0
- data/templates/ssh_config.erb +1 -0
- data/templates/{errors.yml → strings.yml} +111 -3
- data/templates/sync.erb +14 -0
- data/test/test_helper.rb +46 -3
- data/test/vagrant/actions/box/download_test.rb +0 -17
- data/test/vagrant/actions/vm/boot_test.rb +3 -10
- data/test/vagrant/actions/vm/customize_test.rb +6 -0
- data/test/vagrant/actions/vm/destroy_test.rb +6 -5
- data/test/vagrant/actions/vm/down_test.rb +5 -11
- data/test/vagrant/actions/vm/export_test.rb +1 -0
- data/test/vagrant/actions/vm/forward_ports_test.rb +92 -15
- data/test/vagrant/actions/vm/halt_test.rb +36 -4
- data/test/vagrant/actions/vm/import_test.rb +2 -0
- data/test/vagrant/actions/vm/network_test.rb +237 -0
- data/test/vagrant/actions/vm/package_test.rb +35 -5
- data/test/vagrant/actions/vm/provision_test.rb +3 -3
- data/test/vagrant/actions/vm/reload_test.rb +1 -1
- data/test/vagrant/actions/vm/shared_folders_test.rb +41 -74
- data/test/vagrant/actions/vm/start_test.rb +41 -3
- data/test/vagrant/actions/vm/up_test.rb +10 -21
- data/test/vagrant/active_list_test.rb +28 -43
- data/test/vagrant/commands/base_test.rb +25 -4
- data/test/vagrant/commands/destroy_test.rb +24 -12
- data/test/vagrant/commands/halt_test.rb +33 -11
- data/test/vagrant/commands/package_test.rb +77 -57
- data/test/vagrant/commands/provision_test.rb +50 -0
- data/test/vagrant/commands/reload_test.rb +27 -11
- data/test/vagrant/commands/resume_test.rb +25 -14
- data/test/vagrant/commands/ssh_config_test.rb +40 -17
- data/test/vagrant/commands/ssh_test.rb +52 -13
- data/test/vagrant/commands/status_test.rb +21 -1
- data/test/vagrant/commands/suspend_test.rb +25 -14
- data/test/vagrant/commands/up_test.rb +25 -19
- data/test/vagrant/config_test.rb +74 -18
- data/test/vagrant/downloaders/base_test.rb +2 -1
- data/test/vagrant/downloaders/http_test.rb +18 -8
- data/test/vagrant/environment_test.rb +245 -77
- data/test/vagrant/provisioners/base_test.rb +4 -4
- data/test/vagrant/provisioners/chef_server_test.rb +18 -7
- data/test/vagrant/provisioners/chef_solo_test.rb +17 -7
- data/test/vagrant/provisioners/chef_test.rb +22 -9
- data/test/vagrant/resource_logger_test.rb +144 -0
- data/test/vagrant/ssh_session_test.rb +46 -0
- data/test/vagrant/ssh_test.rb +42 -2
- data/test/vagrant/systems/linux_test.rb +174 -0
- data/test/vagrant/util/error_helper_test.rb +5 -0
- data/test/vagrant/util/output_helper_test.rb +5 -0
- data/test/vagrant/util/plain_logger_test.rb +17 -0
- data/test/vagrant/util/platform_test.rb +18 -0
- data/test/vagrant/util/{errors_test.rb → translator_test.rb} +25 -21
- data/test/vagrant/util_test.rb +12 -49
- data/test/vagrant/vm_test.rb +133 -11
- data/vagrant.gemspec +39 -15
- metadata +38 -14
- data/lib/vagrant/commands/down.rb +0 -16
- data/lib/vagrant/util/errors.rb +0 -36
- data/lib/vagrant/util/progress_meter.rb +0 -33
- data/test/vagrant/commands/down_test.rb +0 -17
- data/test/vagrant/util/progress_meter_test.rb +0 -33
@@ -2,11 +2,14 @@ require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
|
|
2
2
|
|
3
3
|
class StartActionTest < Test::Unit::TestCase
|
4
4
|
setup do
|
5
|
-
@
|
5
|
+
@runner, @vm, @action = mock_action(Vagrant::Actions::VM::Start)
|
6
|
+
|
7
|
+
@action.options[:provision] = true
|
6
8
|
end
|
7
9
|
|
8
10
|
context "sub-actions" do
|
9
11
|
setup do
|
12
|
+
@runner.stubs(:created?).returns(false)
|
10
13
|
@vm.stubs(:saved?).returns(true)
|
11
14
|
File.stubs(:file?).returns(true)
|
12
15
|
File.stubs(:exist?).returns(true)
|
@@ -16,7 +19,7 @@ class StartActionTest < Test::Unit::TestCase
|
|
16
19
|
def setup_action_expectations
|
17
20
|
default_seq = sequence("default_seq")
|
18
21
|
@default_order.flatten.each do |action|
|
19
|
-
@
|
22
|
+
@runner.expects(:add_action).with(action, @action.options).once.in_sequence(default_seq)
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
@@ -27,9 +30,44 @@ class StartActionTest < Test::Unit::TestCase
|
|
27
30
|
|
28
31
|
should "add customize to the beginning if its not saved" do
|
29
32
|
@vm.expects(:saved?).returns(false)
|
30
|
-
@default_order.unshift([Vagrant::Actions::VM::Customize, Vagrant::Actions::VM::ForwardPorts, Vagrant::Actions::VM::SharedFolders])
|
33
|
+
@default_order.unshift([Vagrant::Actions::VM::Customize, Vagrant::Actions::VM::ForwardPorts, Vagrant::Actions::VM::SharedFolders, Vagrant::Actions::VM::Network])
|
34
|
+
setup_action_expectations
|
35
|
+
@action.prepare
|
36
|
+
end
|
37
|
+
|
38
|
+
should "add do additional if VM is not created yet" do
|
39
|
+
@runner.stubs(:vm).returns(nil)
|
40
|
+
@default_order.unshift([Vagrant::Actions::VM::Customize, Vagrant::Actions::VM::ForwardPorts, Vagrant::Actions::VM::SharedFolders, Vagrant::Actions::VM::Network])
|
31
41
|
setup_action_expectations
|
32
42
|
@action.prepare
|
33
43
|
end
|
44
|
+
|
45
|
+
should "add provisioning if its enabled and not saved" do
|
46
|
+
@vm.env.config.vm.provisioner = :chef_solo
|
47
|
+
|
48
|
+
@runner.stubs(:vm).returns(nil)
|
49
|
+
@default_order.unshift([Vagrant::Actions::VM::Customize, Vagrant::Actions::VM::ForwardPorts, Vagrant::Actions::VM::SharedFolders, Vagrant::Actions::VM::Network])
|
50
|
+
@default_order << Vagrant::Actions::VM::Provision
|
51
|
+
setup_action_expectations
|
52
|
+
@action.prepare
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "provision?" do
|
57
|
+
should "return false if no provisioner is set" do
|
58
|
+
@vm.env.config.vm.provisioner = nil
|
59
|
+
assert !@action.provision?
|
60
|
+
end
|
61
|
+
|
62
|
+
should "return true if a provisioner is set" do
|
63
|
+
@vm.env.config.vm.provisioner = :chef_solo
|
64
|
+
assert @action.provision?
|
65
|
+
end
|
66
|
+
|
67
|
+
should "return false if provisioning is specifically disabled" do
|
68
|
+
@vm.env.config.vm.provisioner = :chef_solo
|
69
|
+
@action.options[:provision] = false
|
70
|
+
assert !@action.provision?
|
71
|
+
end
|
34
72
|
end
|
35
73
|
end
|
@@ -7,9 +7,11 @@ class UpActionTest < Test::Unit::TestCase
|
|
7
7
|
|
8
8
|
context "sub-actions" do
|
9
9
|
setup do
|
10
|
+
@runner.stubs(:created?).returns(false)
|
11
|
+
|
10
12
|
File.stubs(:file?).returns(true)
|
11
13
|
File.stubs(:exist?).returns(true)
|
12
|
-
@default_order = [Vagrant::Actions::VM::Import, Vagrant::Actions::VM::
|
14
|
+
@default_order = [Vagrant::Actions::VM::Import, Vagrant::Actions::VM::Start]
|
13
15
|
|
14
16
|
@dotfile_path = "foo"
|
15
17
|
@runner.env.stubs(:dotfile_path).returns(@dotfile_path)
|
@@ -18,7 +20,7 @@ class UpActionTest < Test::Unit::TestCase
|
|
18
20
|
def setup_action_expectations
|
19
21
|
default_seq = sequence("default_seq")
|
20
22
|
@default_order.each do |action|
|
21
|
-
@runner.expects(:add_action).with(action).once.in_sequence(default_seq)
|
23
|
+
@runner.expects(:add_action).with(action, @action.options).once.in_sequence(default_seq)
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
@@ -47,19 +49,6 @@ class UpActionTest < Test::Unit::TestCase
|
|
47
49
|
@action.prepare
|
48
50
|
end
|
49
51
|
|
50
|
-
should "add in the provisioning step if enabled" do
|
51
|
-
env = mock_environment do |config|
|
52
|
-
config.vm.provisioner = "foo"
|
53
|
-
end
|
54
|
-
|
55
|
-
@runner.stubs(:env).returns(env)
|
56
|
-
env.stubs(:dotfile_path).returns(@dotfile_path)
|
57
|
-
|
58
|
-
@default_order.push(Vagrant::Actions::VM::Provision)
|
59
|
-
setup_action_expectations
|
60
|
-
@action.prepare
|
61
|
-
end
|
62
|
-
|
63
52
|
should "add in the action to move hard drive if config is set" do
|
64
53
|
env = mock_environment do |config|
|
65
54
|
File.expects(:directory?).with("foo").returns(true)
|
@@ -76,19 +65,19 @@ class UpActionTest < Test::Unit::TestCase
|
|
76
65
|
end
|
77
66
|
|
78
67
|
context "callbacks" do
|
79
|
-
should "call
|
68
|
+
should "call update dotfile and mac address setup after import" do
|
80
69
|
boot_seq = sequence("boot")
|
81
|
-
@action.expects(:
|
70
|
+
@action.expects(:update_dotfile).once.in_sequence(boot_seq)
|
82
71
|
@action.expects(:setup_mac_address).once.in_sequence(boot_seq)
|
83
72
|
@action.after_import
|
84
73
|
end
|
85
74
|
end
|
86
75
|
|
87
|
-
context "
|
88
|
-
should "
|
76
|
+
context "updating the dotfile" do
|
77
|
+
should "call update dotfile on the VM's environment" do
|
89
78
|
@runner.stubs(:uuid)
|
90
|
-
@runner.env.expects(:
|
91
|
-
@action.
|
79
|
+
@runner.env.expects(:update_dotfile).once
|
80
|
+
@action.update_dotfile
|
92
81
|
end
|
93
82
|
end
|
94
83
|
|
@@ -36,13 +36,13 @@ class ActiveListTest < Test::Unit::TestCase
|
|
36
36
|
should "not load if the active json file doesn't exist" do
|
37
37
|
File.expects(:file?).with(@list.path).returns(false)
|
38
38
|
File.expects(:open).never
|
39
|
-
assert_equal
|
39
|
+
assert_equal Hash.new, @list.list(true)
|
40
40
|
end
|
41
41
|
|
42
42
|
should "parse the JSON by reading the file" do
|
43
43
|
file = mock("file")
|
44
44
|
data = mock("data")
|
45
|
-
result =
|
45
|
+
result = { :hey => :yep }
|
46
46
|
File.expects(:file?).returns(true)
|
47
47
|
File.expects(:open).with(@list.path, 'r').once.yields(file)
|
48
48
|
file.expects(:read).returns(data)
|
@@ -57,52 +57,43 @@ class ActiveListTest < Test::Unit::TestCase
|
|
57
57
|
assert result.equal?(@list.list)
|
58
58
|
assert result.equal?(@list.list)
|
59
59
|
end
|
60
|
-
end
|
61
60
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
61
|
+
should "be an empty hash if JSON parsing raises an exception" do
|
62
|
+
file = mock("file")
|
63
|
+
file.stubs(:read)
|
64
|
+
File.expects(:file?).returns(true)
|
65
|
+
File.expects(:open).with(@list.path, 'r').once.yields(file)
|
66
|
+
JSON.expects(:parse).raises(Exception)
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
results = []
|
71
|
-
@the_list.each do |item|
|
72
|
-
result = mock("result-#{item}")
|
73
|
-
Vagrant::VM.expects(:find).with(item).returns(result).in_sequence(new_seq)
|
74
|
-
results << result
|
68
|
+
assert_nothing_raised do
|
69
|
+
assert_equal Hash.new, @list.list(true)
|
75
70
|
end
|
76
|
-
|
77
|
-
assert_equal results, @list.vms
|
78
|
-
end
|
79
|
-
|
80
|
-
should "compact out the nil values" do
|
81
|
-
Vagrant::VM.stubs(:find).returns(nil)
|
82
|
-
results = @list.vms
|
83
|
-
assert results.empty?
|
84
71
|
end
|
85
72
|
end
|
86
73
|
|
87
|
-
context "
|
88
|
-
should "
|
89
|
-
|
90
|
-
result =
|
74
|
+
context "filter list" do
|
75
|
+
should "remove nonexistent VMs" do
|
76
|
+
list = {}
|
77
|
+
result = {}
|
91
78
|
5.times do |i|
|
92
79
|
vm = mock("vm#{i}")
|
93
|
-
vm.
|
94
|
-
|
95
|
-
|
80
|
+
vm.stubs(:uuid).returns(i)
|
81
|
+
|
82
|
+
list[vm.uuid] = {}
|
83
|
+
|
84
|
+
found_vm = i % 2 ? nil : vm
|
85
|
+
Vagrant::VM.stubs(:find).with(vm.uuid, @env).returns(found_vm)
|
86
|
+
results[vm.uuid] = {} if found_vm
|
96
87
|
end
|
97
88
|
|
98
|
-
@list.stubs(:
|
99
|
-
assert_equal result, @list.
|
89
|
+
@list.stubs(:list).returns(list)
|
90
|
+
assert_equal result, @list.filter_list
|
100
91
|
end
|
101
92
|
end
|
102
93
|
|
103
94
|
context "adding a VM to the list" do
|
104
95
|
setup do
|
105
|
-
@the_list =
|
96
|
+
@the_list = {}
|
106
97
|
@list.stubs(:list).returns(@the_list)
|
107
98
|
@list.stubs(:save)
|
108
99
|
|
@@ -113,19 +104,13 @@ class ActiveListTest < Test::Unit::TestCase
|
|
113
104
|
|
114
105
|
should "add the VMs UUID to the list" do
|
115
106
|
@list.add(@vm)
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
should "uniq the array so multiples never exist" do
|
120
|
-
@the_list << @uuid
|
121
|
-
assert_equal 1, @the_list.length
|
122
|
-
@list.add(@vm)
|
123
|
-
assert_equal 1, @the_list.length
|
107
|
+
assert @the_list[@uuid]
|
108
|
+
assert @the_list[@uuid].is_a?(Hash)
|
124
109
|
end
|
125
110
|
|
126
111
|
should "save after adding" do
|
127
112
|
save_seq = sequence('save')
|
128
|
-
@the_list.expects(
|
113
|
+
@the_list.expects(:[]=).in_sequence(save_seq)
|
129
114
|
@list.expects(:save).in_sequence(save_seq)
|
130
115
|
@list.add(@vm)
|
131
116
|
end
|
@@ -165,7 +150,7 @@ class ActiveListTest < Test::Unit::TestCase
|
|
165
150
|
context "saving" do
|
166
151
|
setup do
|
167
152
|
@filtered = ["zoo"]
|
168
|
-
@list.stubs(:
|
153
|
+
@list.stubs(:filter_list).returns(@filtered)
|
169
154
|
end
|
170
155
|
|
171
156
|
should "open the JSON path and save to it" do
|
@@ -67,20 +67,40 @@ class CommandsBaseTest < Test::Unit::TestCase
|
|
67
67
|
context "executing" do
|
68
68
|
should "show version if flag is set" do
|
69
69
|
@instance.expects(:puts_version).once
|
70
|
-
@instance.expects(:
|
70
|
+
@instance.expects(:show_help).never
|
71
71
|
@instance.execute(["--version"])
|
72
72
|
end
|
73
73
|
|
74
74
|
should "just print the help by default" do
|
75
75
|
@instance.expects(:puts_version).never
|
76
|
-
@
|
76
|
+
@instance.expects(:show_help).once
|
77
77
|
@instance.execute([])
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
|
+
context "all or single methods" do
|
82
|
+
should "call the single method if a name is given" do
|
83
|
+
name = "bar"
|
84
|
+
@instance.expects(:foo_single).with(name).once
|
85
|
+
@instance.all_or_single(["bar"], :foo)
|
86
|
+
end
|
87
|
+
|
88
|
+
should "call the single method for each VM if no name is given" do
|
89
|
+
vms = { :foo => nil, :bar => nil }
|
90
|
+
vms.keys.each do |name|
|
91
|
+
@instance.expects(:foo_single).with(name).once
|
92
|
+
end
|
93
|
+
|
94
|
+
@env.stubs(:vms).returns(vms)
|
95
|
+
@instance.all_or_single([], :foo)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
81
99
|
context "getting the option parser" do
|
82
100
|
should "create it with the options spec if it hasn't been created yet" do
|
83
101
|
opts = mock("opts")
|
102
|
+
opts.stubs(:on)
|
103
|
+
|
84
104
|
result = mock("result")
|
85
105
|
OptionParser.expects(:new).yields(opts).returns(result)
|
86
106
|
@instance.expects(:options_spec).with(opts)
|
@@ -110,8 +130,9 @@ class CommandsBaseTest < Test::Unit::TestCase
|
|
110
130
|
end
|
111
131
|
|
112
132
|
should "parse the options with the args" do
|
113
|
-
|
114
|
-
|
133
|
+
result = mock("result")
|
134
|
+
@option_parser.expects(:parse!).with(@args).once.returns(result)
|
135
|
+
assert_equal result, @instance.parse_options(@args)
|
115
136
|
end
|
116
137
|
end
|
117
138
|
end
|
@@ -4,29 +4,41 @@ class CommandsDestroyTest < Test::Unit::TestCase
|
|
4
4
|
setup do
|
5
5
|
@klass = Vagrant::Commands::Destroy
|
6
6
|
|
7
|
-
@persisted_vm = mock("persisted_vm")
|
8
|
-
@persisted_vm.stubs(:execute!)
|
9
|
-
|
10
7
|
@env = mock_environment
|
11
|
-
@env.stubs(:require_persisted_vm)
|
12
|
-
@env.stubs(:vm).returns(@persisted_vm)
|
13
8
|
|
14
9
|
@instance = @klass.new(@env)
|
15
10
|
end
|
16
11
|
|
17
12
|
context "executing" do
|
13
|
+
should "call all or single for the method" do
|
14
|
+
@instance.expects(:all_or_single).with([], :destroy)
|
15
|
+
@instance.execute
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "destroying a single VM" do
|
18
20
|
setup do
|
19
|
-
@
|
21
|
+
@foo_vm = mock("vm")
|
22
|
+
@foo_vm.stubs(:env).returns(@env)
|
23
|
+
vms = { :foo => @foo_vm }
|
24
|
+
@env.stubs(:vms).returns(vms)
|
25
|
+
end
|
26
|
+
should "error and exit if the VM doesn't exist" do
|
27
|
+
@env.stubs(:vms).returns({})
|
28
|
+
@instance.expects(:error_and_exit).with(:unknown_vm, :vm => :foo).once
|
29
|
+
@instance.destroy_single(:foo)
|
20
30
|
end
|
21
31
|
|
22
|
-
should "
|
23
|
-
@
|
24
|
-
@
|
32
|
+
should "destroy if its created" do
|
33
|
+
@foo_vm.stubs(:created?).returns(true)
|
34
|
+
@foo_vm.expects(:destroy).once
|
35
|
+
@instance.destroy_single(:foo)
|
25
36
|
end
|
26
37
|
|
27
|
-
should "
|
28
|
-
@
|
29
|
-
@
|
38
|
+
should "do nothing if its not created" do
|
39
|
+
@foo_vm.stubs(:created?).returns(false)
|
40
|
+
@foo_vm.expects(:destroy).never
|
41
|
+
@instance.destroy_single(:foo)
|
30
42
|
end
|
31
43
|
end
|
32
44
|
end
|
@@ -4,25 +4,47 @@ class CommandsHaltTest < Test::Unit::TestCase
|
|
4
4
|
setup do
|
5
5
|
@klass = Vagrant::Commands::Halt
|
6
6
|
|
7
|
-
@persisted_vm = mock("persisted_vm")
|
8
|
-
@persisted_vm.stubs(:execute!)
|
9
|
-
|
10
7
|
@env = mock_environment
|
11
|
-
@env.stubs(:require_persisted_vm)
|
12
|
-
@env.stubs(:vm).returns(@persisted_vm)
|
13
|
-
|
14
8
|
@instance = @klass.new(@env)
|
15
9
|
end
|
16
10
|
|
17
11
|
context "executing" do
|
18
|
-
should "
|
19
|
-
@
|
12
|
+
should "call all or single for the method" do
|
13
|
+
@instance.expects(:all_or_single).with([], :halt)
|
20
14
|
@instance.execute
|
21
15
|
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "halting a single VM" do
|
19
|
+
setup do
|
20
|
+
@foo_vm = mock("vm")
|
21
|
+
@foo_vm.stubs(:env).returns(@env)
|
22
|
+
vms = { :foo => @foo_vm }
|
23
|
+
@env.stubs(:vms).returns(vms)
|
24
|
+
end
|
22
25
|
|
23
|
-
should "
|
24
|
-
@
|
25
|
-
@instance.
|
26
|
+
should "error and exit if the VM doesn't exist" do
|
27
|
+
@env.stubs(:vms).returns({})
|
28
|
+
@instance.expects(:error_and_exit).with(:unknown_vm, :vm => :foo).once
|
29
|
+
@instance.halt_single(:foo)
|
30
|
+
end
|
31
|
+
|
32
|
+
should "halt if its created" do
|
33
|
+
@foo_vm.stubs(:created?).returns(true)
|
34
|
+
@foo_vm.expects(:halt).with(:force => false).once
|
35
|
+
@instance.execute(["foo"])
|
36
|
+
end
|
37
|
+
|
38
|
+
should "halt and force if specified" do
|
39
|
+
@foo_vm.stubs(:created?).returns(true)
|
40
|
+
@foo_vm.expects(:halt).with(:force => true).once
|
41
|
+
@instance.execute(["foo", "--force"])
|
42
|
+
end
|
43
|
+
|
44
|
+
should "do nothing if its not created" do
|
45
|
+
@foo_vm.stubs(:created?).returns(false)
|
46
|
+
@foo_vm.expects(:halt).never
|
47
|
+
@instance.halt_single(:foo)
|
26
48
|
end
|
27
49
|
end
|
28
50
|
end
|
@@ -4,81 +4,101 @@ class CommandsPackageTest < Test::Unit::TestCase
|
|
4
4
|
setup do
|
5
5
|
@klass = Vagrant::Commands::Package
|
6
6
|
|
7
|
-
@persisted_vm = mock("persisted_vm")
|
8
|
-
@persisted_vm.stubs(:execute!)
|
9
|
-
|
10
7
|
@env = mock_environment
|
11
|
-
@env.stubs(:require_persisted_vm)
|
12
|
-
@env.stubs(:vm).returns(@persisted_vm)
|
13
|
-
|
14
8
|
@instance = @klass.new(@env)
|
15
9
|
end
|
16
10
|
|
17
11
|
context "executing" do
|
12
|
+
should "package base if a base is given" do
|
13
|
+
@instance.expects(:package_base).once
|
14
|
+
@instance.execute(["--base","foo"])
|
15
|
+
end
|
16
|
+
|
17
|
+
should "package single if no name is given" do
|
18
|
+
@instance.expects(:package_single).with(nil).once
|
19
|
+
@instance.execute
|
20
|
+
end
|
21
|
+
|
22
|
+
should "package single if a name is given" do
|
23
|
+
@instance.expects(:package_single).with("foo").once
|
24
|
+
@instance.execute(["foo"])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "packaging base" do
|
29
|
+
should "error and exit if no VM is found" do
|
30
|
+
Vagrant::VM.expects(:find).with("foo", @instance.env).returns(nil)
|
31
|
+
@instance.expects(:error_and_exit).with(:vm_base_not_found, :name => "foo").once
|
32
|
+
@instance.execute(["--base", "foo"])
|
33
|
+
end
|
34
|
+
|
35
|
+
should "package the VM like any other VM" do
|
36
|
+
vm = mock("vm")
|
37
|
+
Vagrant::VM.expects(:find).with("foo", @instance.env).returns(vm)
|
38
|
+
@instance.expects(:package_vm).with(vm).once
|
39
|
+
@instance.execute(["--base", "foo"])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "packaging a single VM" do
|
18
44
|
setup do
|
19
|
-
@
|
20
|
-
@
|
45
|
+
@vm = mock("vm")
|
46
|
+
@vm.stubs(:created?).returns(true)
|
47
|
+
|
48
|
+
@vms = {:bar => @vm}
|
49
|
+
@env.stubs(:vms).returns(@vms)
|
50
|
+
@env.stubs(:multivm?).returns(false)
|
21
51
|
end
|
22
52
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
53
|
+
should "error and exit if no name is given in a multi-vm env" do
|
54
|
+
@env.stubs(:multivm?).returns(true)
|
55
|
+
@instance.expects(:error_and_exit).with(:package_multivm).once
|
56
|
+
@instance.package_single(nil)
|
28
57
|
end
|
29
58
|
|
30
|
-
|
31
|
-
|
32
|
-
|
59
|
+
should "error and exit if the VM doesn't exist" do
|
60
|
+
@instance.expects(:error_and_exit).with(:unknown_vm, :vm => :foo).once
|
61
|
+
@instance.package_single(:foo)
|
62
|
+
end
|
33
63
|
|
34
|
-
|
35
|
-
|
36
|
-
|
64
|
+
should "error and exit if the VM is not created" do
|
65
|
+
@vm.stubs(:created?).returns(false)
|
66
|
+
@instance.expects(:error_and_exit).with(:environment_not_created).once
|
67
|
+
@instance.package_single(:bar)
|
68
|
+
end
|
37
69
|
|
38
|
-
|
39
|
-
|
70
|
+
should "use the first VM is no name is given in a single VM environment" do
|
71
|
+
@instance.expects(:package_vm).with(@vm).once
|
72
|
+
@instance.package_single(nil)
|
73
|
+
end
|
40
74
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
75
|
+
should "package the VM" do
|
76
|
+
@instance.expects(:package_vm).with(@vm).once
|
77
|
+
@instance.package_single(:bar)
|
78
|
+
end
|
79
|
+
end
|
45
80
|
|
46
|
-
|
47
|
-
|
81
|
+
context "packaging a VM" do
|
82
|
+
setup do
|
83
|
+
@vm = mock("vm")
|
84
|
+
@vm.stubs(:powered_off?).returns(true)
|
48
85
|
|
49
|
-
|
50
|
-
|
51
|
-
|
86
|
+
@options = {}
|
87
|
+
@instance.stubs(:options).returns(@options)
|
88
|
+
end
|
52
89
|
|
53
|
-
|
54
|
-
|
90
|
+
should "error and exit if VM is not powered off" do
|
91
|
+
@vm.stubs(:powered_off?).returns(false)
|
92
|
+
@instance.expects(:error_and_exit).with(:vm_power_off_to_package).once
|
93
|
+
@instance.package_vm(@vm)
|
55
94
|
end
|
56
95
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
should "call package on the persisted VM" do
|
66
|
-
@persisted_vm.expects(:package).once
|
67
|
-
@instance.execute
|
68
|
-
end
|
69
|
-
|
70
|
-
should "pass the out path and include_files to the package method" do
|
71
|
-
out_path = mock("out_path")
|
72
|
-
include_files = "foo"
|
73
|
-
@persisted_vm.expects(:package).with(out_path, [include_files]).once
|
74
|
-
@instance.execute([out_path, "--include", include_files])
|
75
|
-
end
|
76
|
-
|
77
|
-
should "default to an empty array when not include_files are specified" do
|
78
|
-
out_path = mock("out_path")
|
79
|
-
@persisted_vm.expects(:package).with(out_path, []).once
|
80
|
-
@instance.execute([out_path])
|
81
|
-
end
|
96
|
+
should "package the VM with the proper arguments" do
|
97
|
+
@options[:output] = "foo.box"
|
98
|
+
@options[:include] = :bar
|
99
|
+
|
100
|
+
@vm.expects(:package).with(@options).once
|
101
|
+
@instance.package_vm(@vm)
|
82
102
|
end
|
83
103
|
end
|
84
104
|
end
|