vagrant 0.2.0 → 0.3.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.
Files changed (149) hide show
  1. data/Gemfile +4 -4
  2. data/Rakefile +3 -3
  3. data/VERSION +1 -1
  4. data/bin/vagrant +5 -13
  5. data/config/default.rb +1 -0
  6. data/keys/README.md +8 -1
  7. data/keys/vagrant.ppk +26 -0
  8. data/lib/vagrant.rb +3 -3
  9. data/lib/vagrant/actions/base.rb +15 -4
  10. data/lib/vagrant/actions/box/add.rb +1 -1
  11. data/lib/vagrant/actions/box/download.rb +72 -66
  12. data/lib/vagrant/actions/box/unpackage.rb +1 -4
  13. data/lib/vagrant/actions/runner.rb +1 -1
  14. data/lib/vagrant/actions/vm/boot.rb +5 -7
  15. data/lib/vagrant/actions/vm/customize.rb +2 -2
  16. data/lib/vagrant/actions/vm/destroy.rb +2 -2
  17. data/lib/vagrant/actions/vm/down.rb +7 -0
  18. data/lib/vagrant/actions/vm/export.rb +10 -4
  19. data/lib/vagrant/actions/vm/forward_ports.rb +5 -15
  20. data/lib/vagrant/actions/vm/halt.rb +5 -3
  21. data/lib/vagrant/actions/vm/import.rb +10 -3
  22. data/lib/vagrant/actions/vm/move_hard_drive.rb +1 -3
  23. data/lib/vagrant/actions/vm/package.rb +33 -10
  24. data/lib/vagrant/actions/vm/provision.rb +4 -4
  25. data/lib/vagrant/actions/vm/reload.rb +1 -1
  26. data/lib/vagrant/actions/vm/resume.rb +1 -1
  27. data/lib/vagrant/actions/vm/shared_folders.rb +7 -7
  28. data/lib/vagrant/actions/vm/start.rb +3 -2
  29. data/lib/vagrant/actions/vm/suspend.rb +2 -2
  30. data/lib/vagrant/actions/vm/up.rb +7 -17
  31. data/lib/vagrant/active_list.rb +52 -45
  32. data/lib/vagrant/box.rb +18 -11
  33. data/lib/vagrant/busy.rb +7 -0
  34. data/lib/vagrant/command.rb +27 -0
  35. data/lib/vagrant/commands/base.rb +163 -0
  36. data/lib/vagrant/commands/box.rb +16 -0
  37. data/lib/vagrant/commands/box/add.rb +24 -0
  38. data/lib/vagrant/commands/box/list.rb +30 -0
  39. data/lib/vagrant/commands/box/remove.rb +31 -0
  40. data/lib/vagrant/commands/destroy.rb +23 -0
  41. data/lib/vagrant/commands/down.rb +16 -0
  42. data/lib/vagrant/commands/halt.rb +23 -0
  43. data/lib/vagrant/commands/init.rb +32 -0
  44. data/lib/vagrant/commands/package.rb +46 -0
  45. data/lib/vagrant/commands/reload.rb +22 -0
  46. data/lib/vagrant/commands/resume.rb +22 -0
  47. data/lib/vagrant/commands/ssh.rb +22 -0
  48. data/lib/vagrant/commands/ssh_config.rb +30 -0
  49. data/lib/vagrant/commands/status.rb +58 -0
  50. data/lib/vagrant/commands/suspend.rb +23 -0
  51. data/lib/vagrant/commands/up.rb +26 -0
  52. data/lib/vagrant/config.rb +21 -11
  53. data/lib/vagrant/downloaders/file.rb +5 -5
  54. data/lib/vagrant/downloaders/http.rb +10 -15
  55. data/lib/vagrant/environment.rb +259 -0
  56. data/lib/vagrant/provisioners/base.rb +7 -0
  57. data/lib/vagrant/provisioners/chef.rb +24 -9
  58. data/lib/vagrant/provisioners/chef_server.rb +23 -48
  59. data/lib/vagrant/provisioners/chef_solo.rb +48 -22
  60. data/lib/vagrant/ssh.rb +95 -46
  61. data/lib/vagrant/util.rb +2 -2
  62. data/lib/vagrant/util/errors.rb +36 -0
  63. data/lib/vagrant/util/platform.rb +12 -0
  64. data/lib/vagrant/util/progress_meter.rb +33 -0
  65. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  66. data/lib/vagrant/util/template_renderer.rb +83 -0
  67. data/lib/vagrant/vm.rb +1 -0
  68. data/templates/{Vagrantfile → Vagrantfile.erb} +2 -2
  69. data/templates/chef_server_client.erb +16 -0
  70. data/templates/chef_solo_solo.erb +4 -0
  71. data/templates/errors.yml +157 -0
  72. data/templates/package_Vagrantfile.erb +11 -0
  73. data/templates/ssh_config.erb +7 -0
  74. data/test/test_helper.rb +12 -15
  75. data/test/vagrant/actions/box/add_test.rb +1 -2
  76. data/test/vagrant/actions/box/destroy_test.rb +0 -1
  77. data/test/vagrant/actions/box/download_test.rb +40 -15
  78. data/test/vagrant/actions/box/unpackage_test.rb +2 -3
  79. data/test/vagrant/actions/collection_test.rb +8 -5
  80. data/test/vagrant/actions/runner_test.rb +8 -6
  81. data/test/vagrant/actions/vm/boot_test.rb +12 -11
  82. data/test/vagrant/actions/vm/customize_test.rb +2 -3
  83. data/test/vagrant/actions/vm/destroy_test.rb +2 -3
  84. data/test/vagrant/actions/vm/down_test.rb +16 -3
  85. data/test/vagrant/actions/vm/export_test.rb +4 -5
  86. data/test/vagrant/actions/vm/forward_ports_test.rb +6 -5
  87. data/test/vagrant/actions/vm/halt_test.rb +8 -2
  88. data/test/vagrant/actions/vm/import_test.rb +5 -5
  89. data/test/vagrant/actions/vm/move_hard_drive_test.rb +4 -6
  90. data/test/vagrant/actions/vm/package_test.rb +60 -22
  91. data/test/vagrant/actions/vm/provision_test.rb +7 -16
  92. data/test/vagrant/actions/vm/reload_test.rb +3 -2
  93. data/test/vagrant/actions/vm/resume_test.rb +0 -1
  94. data/test/vagrant/actions/vm/shared_folders_test.rb +17 -12
  95. data/test/vagrant/actions/vm/start_test.rb +10 -3
  96. data/test/vagrant/actions/vm/suspend_test.rb +1 -2
  97. data/test/vagrant/actions/vm/up_test.rb +19 -11
  98. data/test/vagrant/active_list_test.rb +148 -129
  99. data/test/vagrant/box_test.rb +26 -14
  100. data/test/vagrant/busy_test.rb +15 -6
  101. data/test/vagrant/command_test.rb +53 -0
  102. data/test/vagrant/commands/base_test.rb +118 -0
  103. data/test/vagrant/commands/box/add_test.rb +34 -0
  104. data/test/vagrant/commands/box/list_test.rb +32 -0
  105. data/test/vagrant/commands/box/remove_test.rb +41 -0
  106. data/test/vagrant/commands/destroy_test.rb +32 -0
  107. data/test/vagrant/commands/down_test.rb +17 -0
  108. data/test/vagrant/commands/halt_test.rb +28 -0
  109. data/test/vagrant/commands/init_test.rb +55 -0
  110. data/test/vagrant/commands/package_test.rb +84 -0
  111. data/test/vagrant/commands/reload_test.rb +28 -0
  112. data/test/vagrant/commands/resume_test.rb +33 -0
  113. data/test/vagrant/commands/ssh_config_test.rb +54 -0
  114. data/test/vagrant/commands/ssh_test.rb +32 -0
  115. data/test/vagrant/commands/status_test.rb +20 -0
  116. data/test/vagrant/commands/suspend_test.rb +33 -0
  117. data/test/vagrant/commands/up_test.rb +41 -0
  118. data/test/vagrant/config_test.rb +42 -17
  119. data/test/vagrant/downloaders/file_test.rb +7 -0
  120. data/test/vagrant/downloaders/http_test.rb +12 -0
  121. data/test/vagrant/environment_test.rb +595 -0
  122. data/test/vagrant/provisioners/base_test.rb +7 -1
  123. data/test/vagrant/provisioners/chef_server_test.rb +41 -51
  124. data/test/vagrant/provisioners/chef_solo_test.rb +93 -62
  125. data/test/vagrant/provisioners/chef_test.rb +61 -15
  126. data/test/vagrant/ssh_test.rb +166 -38
  127. data/test/vagrant/util/errors_test.rb +57 -0
  128. data/test/vagrant/util/progress_meter_test.rb +33 -0
  129. data/test/vagrant/{stacked_proc_runner_test.rb → util/stacked_proc_runner_test.rb} +3 -3
  130. data/test/vagrant/util/template_renderer_test.rb +138 -0
  131. data/test/vagrant/vm_test.rb +3 -2
  132. data/vagrant.gemspec +88 -33
  133. metadata +94 -51
  134. data/bin/vagrant-box +0 -34
  135. data/bin/vagrant-down +0 -27
  136. data/bin/vagrant-halt +0 -28
  137. data/bin/vagrant-init +0 -27
  138. data/bin/vagrant-package +0 -29
  139. data/bin/vagrant-reload +0 -29
  140. data/bin/vagrant-resume +0 -27
  141. data/bin/vagrant-ssh +0 -27
  142. data/bin/vagrant-status +0 -29
  143. data/bin/vagrant-suspend +0 -27
  144. data/bin/vagrant-up +0 -29
  145. data/lib/vagrant/commands.rb +0 -234
  146. data/lib/vagrant/env.rb +0 -189
  147. data/lib/vagrant/stacked_proc_runner.rb +0 -33
  148. data/test/vagrant/commands_test.rb +0 -269
  149. data/test/vagrant/env_test.rb +0 -418
@@ -1,189 +0,0 @@
1
- module Vagrant
2
- class Env
3
- ROOTFILE_NAME = "Vagrantfile"
4
- HOME_SUBDIRS = ["tmp", "boxes"]
5
-
6
- # Initialize class variables used
7
- @@persisted_vm = nil
8
- @@root_path = nil
9
- @@box = nil
10
-
11
- extend Vagrant::Util
12
-
13
- class << self
14
- def box; @@box; end
15
- def persisted_vm; @@persisted_vm; end
16
- def root_path; @@root_path; end
17
- def dotfile_path;File.join(root_path, Vagrant.config.vagrant.dotfile_name); end
18
- def home_path; File.expand_path(Vagrant.config.vagrant.home); end
19
- def tmp_path; File.join(home_path, "tmp"); end
20
- def boxes_path; File.join(home_path, "boxes"); end
21
-
22
- def load!
23
- load_root_path!
24
- load_config!
25
- load_home_directory!
26
- load_box!
27
- load_config!
28
- check_virtualbox!
29
- load_vm!
30
- end
31
-
32
- def check_virtualbox!
33
- version = VirtualBox::Command.version
34
- if version.nil?
35
- error_and_exit(<<-msg)
36
- Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed.
37
- If VirtualBox is installed, you may need to tweak the paths to the `VBoxManage`
38
- application which ships with VirtualBox and the path to the global XML configuration
39
- which VirtualBox typically stores somewhere in your home directory.
40
-
41
- The following shows how to configure VirtualBox. This can be done in the
42
- Vagrantfile. Note that 90% of the time, you shouldn't need to do this if VirtualBox
43
- is installed. Please use the various Vagrant support lines to request more information
44
- if you can't get this working.
45
-
46
- VirtualBox::Command.vboxmanage = "/path/to/my/VBoxManage"
47
- VirtualBox::Global.vboxconfig = "~/path/to/VirtualBox.xml"
48
- msg
49
- elsif version.to_f < 3.1
50
- error_and_exit(<<-msg)
51
- Vagrant has detected that you have VirtualBox version #{version} installed!
52
- Vagrant requires that you use at least VirtualBox version 3.1. Please install
53
- a more recent version of VirtualBox to continue.
54
- msg
55
- end
56
- end
57
-
58
- def load_config!
59
- # Prepare load paths for config files
60
- load_paths = [File.join(PROJECT_ROOT, "config", "default.rb")]
61
- load_paths << File.join(box.directory, ROOTFILE_NAME) if box
62
- load_paths << File.join(home_path, ROOTFILE_NAME) if Vagrant.config.vagrant.home
63
- load_paths << File.join(root_path, ROOTFILE_NAME) if root_path
64
-
65
- # Then clear out the old data
66
- Config.reset!
67
-
68
- load_paths.each do |path|
69
- if File.exist?(path)
70
- logger.info "Loading config from #{path}..."
71
- load path
72
- end
73
- end
74
-
75
- # Execute the configurations
76
- Config.execute!
77
- end
78
-
79
- def load_home_directory!
80
- home_dir = File.expand_path(Vagrant.config.vagrant.home)
81
-
82
- dirs = HOME_SUBDIRS.collect { |path| File.join(home_dir, path) }
83
- dirs.unshift(home_dir)
84
-
85
- dirs.each do |dir|
86
- next if File.directory?(dir)
87
-
88
- logger.info "Creating home directory since it doesn't exist: #{dir}"
89
- FileUtils.mkdir_p(dir)
90
- end
91
- end
92
-
93
- def load_box!
94
- return unless root_path
95
-
96
- @@box = Box.find(Vagrant.config.vm.box) if Vagrant.config.vm.box
97
- end
98
-
99
- def load_vm!
100
- return if !root_path || !File.file?(dotfile_path)
101
-
102
- File.open(dotfile_path) do |f|
103
- @@persisted_vm = Vagrant::VM.find(f.read)
104
- end
105
- rescue Errno::ENOENT
106
- @@persisted_vm = nil
107
- end
108
-
109
- def persist_vm(vm)
110
- # Save to the dotfile for this project
111
- File.open(dotfile_path, 'w+') do |f|
112
- f.write(vm.uuid)
113
- end
114
-
115
- # Also add to the global store
116
- ActiveList.add(vm)
117
- end
118
-
119
- def depersist_vm(vm)
120
- # Delete the dotfile if it exists
121
- File.delete(dotfile_path) if File.exist?(dotfile_path)
122
-
123
- # Remove from the global store
124
- ActiveList.remove(vm)
125
- end
126
-
127
- def load_root_path!(path=nil)
128
- path = Pathname.new(File.expand_path(path || Dir.pwd))
129
-
130
- # Stop if we're at the root.
131
- return false if path.root?
132
-
133
- file = "#{path}/#{ROOTFILE_NAME}"
134
- if File.exist?(file)
135
- @@root_path = path.to_s
136
- return true
137
- end
138
-
139
- load_root_path!(path.parent)
140
- end
141
-
142
- def require_root_path
143
- if !root_path
144
- error_and_exit(<<-msg)
145
- A `#{ROOTFILE_NAME}` was not found! This file is required for vagrant to run
146
- since it describes the expected environment that vagrant is supposed
147
- to manage. Please create a #{ROOTFILE_NAME} and place it in your project
148
- root.
149
- msg
150
- end
151
- end
152
-
153
- def require_box
154
- require_root_path
155
-
156
- if !box
157
- if !Vagrant.config.vm.box
158
- error_and_exit(<<-msg)
159
- No base box was specified! A base box is required as a staring point
160
- for every vagrant virtual machine. Please specify one in your Vagrantfile
161
- using `config.vm.box`
162
- msg
163
- else
164
- error_and_exit(<<-msg)
165
- Specified box `#{Vagrant.config.vm.box}` does not exist!
166
-
167
- The box must be added through the `vagrant box add` command. Please view
168
- the documentation associated with the command for more information.
169
- msg
170
- end
171
- end
172
- end
173
-
174
- def require_persisted_vm
175
- require_root_path
176
-
177
- if !persisted_vm
178
- error_and_exit(<<-error)
179
- The task you're trying to run requires that the vagrant environment
180
- already be created, but unfortunately this vagrant still appears to
181
- have no box! You can setup the environment by setting up your
182
- #{ROOTFILE_NAME} and running `vagrant up`
183
- error
184
- return
185
- end
186
- end
187
- end
188
- end
189
- end
@@ -1,33 +0,0 @@
1
- module Vagrant
2
- # Represents the "stacked proc runner" behavior which is used a
3
- # couple places within Vagrant. This allows procs to "stack" on
4
- # each other, then all execute in a single action. An example of
5
- # its uses can be seen in the {Config} class.
6
- module StackedProcRunner
7
- # Returns the proc stack. This should always be called as the
8
- # accessor of the stack. The instance variable itself should _never_
9
- # be used.
10
- #
11
- # @return [Array<Proc>]
12
- def proc_stack
13
- @_proc_stack ||= []
14
- end
15
-
16
- # Adds (pushes) a proc to the stack. The actual proc added here is
17
- # not executed, but merely stored.
18
- #
19
- # @param [Proc] block
20
- def push_proc(&block)
21
- proc_stack << block
22
- end
23
-
24
- # Executes all the procs on the stack, passing in the given arguments.
25
- # The stack is not cleared afterwords. It is up to the user of this
26
- # mixin to clear the stack by calling `proc_stack.clear`.
27
- def run_procs!(*args)
28
- proc_stack.each do |proc|
29
- proc.call(*args)
30
- end
31
- end
32
- end
33
- end
@@ -1,269 +0,0 @@
1
- require File.join(File.dirname(__FILE__), '..', 'test_helper')
2
-
3
- class CommandsTest < Test::Unit::TestCase
4
- setup do
5
- Vagrant::Env.stubs(:load!)
6
-
7
- @persisted_vm = mock("persisted_vm")
8
- @persisted_vm.stubs(:execute!)
9
- Vagrant::Env.stubs(:persisted_vm).returns(@persisted_vm)
10
- Vagrant::Env.stubs(:require_persisted_vm)
11
- end
12
-
13
- context "init" do
14
- setup do
15
- FileUtils.stubs(:cp)
16
- @rootfile_path = File.join(Dir.pwd, Vagrant::Env::ROOTFILE_NAME)
17
- @template_path = File.join(PROJECT_ROOT, "templates", Vagrant::Env::ROOTFILE_NAME)
18
- end
19
-
20
- should "error and exit if a rootfile already exists" do
21
- File.expects(:exist?).with(@rootfile_path).returns(true)
22
- Vagrant::Commands.expects(:error_and_exit).once
23
- Vagrant::Commands.init
24
- end
25
-
26
- should "copy the templated rootfile to the current path" do
27
- File.expects(:exist?).with(@rootfile_path).returns(false)
28
- FileUtils.expects(:cp).with(@template_path, @rootfile_path).once
29
- Vagrant::Commands.init
30
- end
31
- end
32
-
33
- context "up" do
34
- setup do
35
- Vagrant::Env.stubs(:persisted_vm).returns(nil)
36
- Vagrant::VM.stubs(:execute!)
37
- Vagrant::Env.stubs(:require_box)
38
- end
39
-
40
- should "require load the environment" do
41
- Vagrant::Env.expects(:load!).once
42
- Vagrant::Commands.up
43
- end
44
-
45
- should "require a box" do
46
- Vagrant::Env.expects(:require_box).once
47
- Vagrant::Commands.up
48
- end
49
-
50
- should "call the up action on VM if it doesn't exist" do
51
- Vagrant::VM.expects(:execute!).with(Vagrant::Actions::VM::Up).once
52
- Vagrant::Commands.up
53
- end
54
-
55
- should "call start on the persisted vm if it exists" do
56
- Vagrant::Env.stubs(:persisted_vm).returns(@persisted_vm)
57
- @persisted_vm.expects(:start).once
58
- Vagrant::VM.expects(:execute!).never
59
- Vagrant::Commands.up
60
- end
61
- end
62
-
63
- context "down" do
64
- setup do
65
- @persisted_vm.stubs(:destroy)
66
- end
67
-
68
- should "require a persisted VM" do
69
- Vagrant::Env.expects(:require_persisted_vm).once
70
- Vagrant::Commands.down
71
- end
72
-
73
- should "destroy the persisted VM and the VM image" do
74
- @persisted_vm.expects(:destroy).once
75
- Vagrant::Commands.down
76
- end
77
- end
78
-
79
- context "reload" do
80
- should "require a persisted VM" do
81
- Vagrant::Env.expects(:require_persisted_vm).once
82
- Vagrant::Commands.reload
83
- end
84
-
85
- should "call the `reload` action on the VM" do
86
- @persisted_vm.expects(:execute!).with(Vagrant::Actions::VM::Reload).once
87
- Vagrant::Commands.reload
88
- end
89
- end
90
-
91
- context "ssh" do
92
- setup do
93
- Vagrant::SSH.stubs(:connect)
94
- end
95
-
96
- should "require a persisted VM" do
97
- Vagrant::Env.expects(:require_persisted_vm).once
98
- Vagrant::Commands.ssh
99
- end
100
-
101
- should "connect to SSH" do
102
- Vagrant::SSH.expects(:connect).once
103
- Vagrant::Commands.ssh
104
- end
105
- end
106
-
107
- context "halt" do
108
- should "require a persisted VM" do
109
- Vagrant::Env.expects(:require_persisted_vm).once
110
- Vagrant::Commands.halt
111
- end
112
-
113
- should "call the `halt` action on the VM" do
114
- @persisted_vm.expects(:execute!).with(Vagrant::Actions::VM::Halt).once
115
- Vagrant::Commands.halt
116
- end
117
- end
118
-
119
- context "suspend" do
120
- setup do
121
- @persisted_vm.stubs(:suspend)
122
- @persisted_vm.stubs(:saved?).returns(false)
123
- end
124
-
125
- should "require a persisted VM" do
126
- Vagrant::Env.expects(:require_persisted_vm).once
127
- Vagrant::Commands.suspend
128
- end
129
-
130
- should "suspend the VM" do
131
- @persisted_vm.expects(:suspend).once
132
- Vagrant::Commands.suspend
133
- end
134
- end
135
-
136
- context "resume" do
137
- setup do
138
- @persisted_vm.stubs(:resume)
139
- @persisted_vm.stubs(:saved?).returns(true)
140
- end
141
-
142
- should "require a persisted VM" do
143
- Vagrant::Env.expects(:require_persisted_vm).once
144
- Vagrant::Commands.resume
145
- end
146
-
147
- should "save the state of the VM" do
148
- @persisted_vm.expects(:resume).once
149
- Vagrant::Commands.resume
150
- end
151
- end
152
-
153
- context "package" do
154
- setup do
155
- @persisted_vm.stubs(:package)
156
- @persisted_vm.stubs(:powered_off?).returns(true)
157
- end
158
-
159
- should "require a persisted vm" do
160
- Vagrant::Env.expects(:require_persisted_vm).once
161
- Vagrant::Commands.package
162
- end
163
-
164
- should "error and exit if the VM is not powered off" do
165
- @persisted_vm.stubs(:powered_off?).returns(false)
166
- Vagrant::Commands.expects(:error_and_exit).once
167
- @persisted_vm.expects(:package).never
168
- Vagrant::Commands.package
169
- end
170
-
171
- should "call package on the persisted VM" do
172
- @persisted_vm.expects(:package).once
173
- Vagrant::Commands.package
174
- end
175
-
176
- should "pass the out path and include_files to the package method" do
177
- out_path = mock("out_path")
178
- include_files = mock("include_files")
179
- @persisted_vm.expects(:package).with(out_path, include_files).once
180
- Vagrant::Commands.package(out_path, include_files)
181
- end
182
-
183
- should "default to an empty array when not include_files are specified" do
184
- out_path = mock("out_path")
185
- @persisted_vm.expects(:package).with(out_path, []).once
186
- Vagrant::Commands.package(out_path)
187
- end
188
- end
189
-
190
- context "box" do
191
- setup do
192
- Vagrant::Commands.stubs(:box_foo)
193
- Vagrant::Commands.stubs(:box_add)
194
- Vagrant::Commands.stubs(:box_remove)
195
- end
196
-
197
- should "load the environment" do
198
- Vagrant::Env.expects(:load!).once
199
- Vagrant::Commands.box(["add"])
200
- end
201
-
202
- should "error and exit if the first argument is not 'add' or 'remove'" do
203
- Vagrant::Commands.expects(:error_and_exit).once
204
- Vagrant::Commands.box(["foo"])
205
- end
206
-
207
- should "not error and exit if the first argument is 'add' or 'remove'" do
208
- commands = ["add", "remove"]
209
-
210
- commands.each do |command|
211
- Vagrant::Commands.expects(:error_and_exit).never
212
- Vagrant::Commands.expects("box_#{command}".to_sym).once
213
- Vagrant::Commands.box([command])
214
- end
215
- end
216
-
217
- should "forward any additional arguments" do
218
- Vagrant::Commands.expects(:box_add).with(1,2,3).once
219
- Vagrant::Commands.box(["add",1,2,3])
220
- end
221
- end
222
-
223
- context "box list" do
224
- setup do
225
- @boxes = ["foo", "bar"]
226
-
227
- Vagrant::Box.stubs(:all).returns(@boxes)
228
- Vagrant::Commands.stubs(:puts)
229
- end
230
-
231
- should "call all on box and sort the results" do
232
- @all = mock("all")
233
- @all.expects(:sort).returns(@boxes)
234
- Vagrant::Box.expects(:all).returns(@all)
235
- Vagrant::Commands.box_list
236
- end
237
- end
238
-
239
- context "box add" do
240
- setup do
241
- @name = "foo"
242
- @path = "bar"
243
- end
244
-
245
- should "execute the add action with the name and path" do
246
- Vagrant::Box.expects(:add).with(@name, @path).once
247
- Vagrant::Commands.box_add(@name, @path)
248
- end
249
- end
250
-
251
- context "box remove" do
252
- setup do
253
- @name = "foo"
254
- end
255
-
256
- should "error and exit if the box doesn't exist" do
257
- Vagrant::Box.expects(:find).returns(nil)
258
- Vagrant::Commands.expects(:error_and_exit).once
259
- Vagrant::Commands.box_remove(@name)
260
- end
261
-
262
- should "call destroy on the box if it exists" do
263
- @box = mock("box")
264
- Vagrant::Box.expects(:find).with(@name).returns(@box)
265
- @box.expects(:destroy).once
266
- Vagrant::Commands.box_remove(@name)
267
- end
268
- end
269
- end