vagrant 0.5.4 → 0.6.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 (234) hide show
  1. data/.gitignore +1 -0
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +56 -0
  4. data/Gemfile +14 -3
  5. data/Gemfile.lock +38 -11
  6. data/README.md +1 -1
  7. data/bin/vagrant +20 -5
  8. data/config/default.rb +6 -8
  9. data/lib/vagrant.rb +40 -13
  10. data/lib/vagrant/action.rb +56 -16
  11. data/lib/vagrant/action/box/destroy.rb +3 -1
  12. data/lib/vagrant/action/box/download.rb +8 -13
  13. data/lib/vagrant/action/box/unpackage.rb +8 -11
  14. data/lib/vagrant/action/box/verify.rb +3 -3
  15. data/lib/vagrant/action/builder.rb +3 -30
  16. data/lib/vagrant/action/builtin.rb +6 -1
  17. data/lib/vagrant/action/environment.rb +14 -62
  18. data/lib/vagrant/action/general/package.rb +29 -22
  19. data/lib/vagrant/action/vm/boot.rb +5 -12
  20. data/lib/vagrant/action/vm/check_box.rb +4 -4
  21. data/lib/vagrant/action/vm/check_guest_additions.rb +4 -6
  22. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +2 -2
  23. data/lib/vagrant/action/vm/clear_nfs_exports.rb +1 -1
  24. data/lib/vagrant/action/vm/clear_shared_folders.rb +1 -1
  25. data/lib/vagrant/action/vm/customize.rb +1 -1
  26. data/lib/vagrant/action/vm/destroy.rb +1 -2
  27. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +1 -1
  28. data/lib/vagrant/action/vm/disable_networks.rb +11 -9
  29. data/lib/vagrant/action/vm/discard_state.rb +2 -2
  30. data/lib/vagrant/action/vm/export.rb +10 -11
  31. data/lib/vagrant/action/vm/forward_ports.rb +21 -9
  32. data/lib/vagrant/action/vm/halt.rb +3 -8
  33. data/lib/vagrant/action/vm/import.rb +16 -14
  34. data/lib/vagrant/action/vm/match_mac_address.rb +1 -1
  35. data/lib/vagrant/action/vm/network.rb +9 -16
  36. data/lib/vagrant/action/vm/nfs.rb +14 -18
  37. data/lib/vagrant/action/vm/provision.rb +5 -5
  38. data/lib/vagrant/action/vm/resume.rb +1 -1
  39. data/lib/vagrant/action/vm/share_folders.rb +6 -44
  40. data/lib/vagrant/action/vm/suspend.rb +1 -1
  41. data/lib/vagrant/action/warden.rb +74 -0
  42. data/lib/vagrant/box.rb +18 -82
  43. data/lib/vagrant/box_collection.rb +47 -0
  44. data/lib/vagrant/cli.rb +55 -0
  45. data/lib/vagrant/command/base.rb +106 -0
  46. data/lib/vagrant/command/box.rb +33 -0
  47. data/lib/vagrant/command/destroy.rb +17 -0
  48. data/lib/vagrant/command/group_base.rb +99 -0
  49. data/lib/vagrant/command/halt.rb +18 -0
  50. data/lib/vagrant/command/helpers.rb +33 -0
  51. data/lib/vagrant/command/init.rb +14 -0
  52. data/lib/vagrant/command/named_base.rb +14 -0
  53. data/lib/vagrant/command/package.rb +41 -0
  54. data/lib/vagrant/command/provision.rb +17 -0
  55. data/lib/vagrant/command/reload.rb +17 -0
  56. data/lib/vagrant/command/resume.rb +17 -0
  57. data/lib/vagrant/command/ssh.rb +41 -0
  58. data/lib/vagrant/command/ssh_config.rb +21 -0
  59. data/lib/vagrant/command/status.rb +23 -0
  60. data/lib/vagrant/command/suspend.rb +17 -0
  61. data/lib/vagrant/command/up.rb +20 -0
  62. data/lib/vagrant/command/upgrade_to_060.rb +45 -0
  63. data/lib/vagrant/command/version.rb +13 -0
  64. data/lib/vagrant/config.rb +107 -189
  65. data/lib/vagrant/config/base.rb +67 -0
  66. data/lib/vagrant/config/error_recorder.rb +19 -0
  67. data/lib/vagrant/config/nfs.rb +10 -0
  68. data/lib/vagrant/config/package.rb +9 -0
  69. data/lib/vagrant/config/ssh.rb +28 -0
  70. data/lib/vagrant/config/vagrant.rb +21 -0
  71. data/lib/vagrant/config/vm.rb +111 -0
  72. data/lib/vagrant/data_store.rb +68 -0
  73. data/lib/vagrant/downloaders/file.rb +3 -3
  74. data/lib/vagrant/downloaders/http.rb +5 -5
  75. data/lib/vagrant/environment.rb +246 -243
  76. data/lib/vagrant/errors.rb +306 -0
  77. data/lib/vagrant/hosts/base.rb +1 -1
  78. data/lib/vagrant/hosts/bsd.rb +3 -9
  79. data/lib/vagrant/hosts/linux.rb +3 -9
  80. data/lib/vagrant/plugin.rb +50 -0
  81. data/lib/vagrant/provisioners/base.rb +0 -6
  82. data/lib/vagrant/provisioners/chef.rb +63 -58
  83. data/lib/vagrant/provisioners/chef_server.rb +9 -11
  84. data/lib/vagrant/provisioners/chef_solo.rb +2 -2
  85. data/lib/vagrant/ssh.rb +34 -37
  86. data/lib/vagrant/systems/base.rb +0 -13
  87. data/lib/vagrant/systems/linux.rb +10 -33
  88. data/lib/vagrant/systems/solaris.rb +59 -0
  89. data/lib/vagrant/test_helpers.rb +109 -0
  90. data/lib/vagrant/ui.rb +65 -0
  91. data/lib/vagrant/util.rb +9 -19
  92. data/lib/vagrant/util/glob_loader.rb +19 -17
  93. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  94. data/lib/vagrant/util/plain_logger.rb +2 -0
  95. data/lib/vagrant/util/platform.rb +2 -0
  96. data/lib/vagrant/util/resource_logger.rb +5 -70
  97. data/lib/vagrant/util/retryable.rb +25 -0
  98. data/lib/vagrant/util/template_renderer.rb +1 -1
  99. data/lib/vagrant/version.rb +1 -1
  100. data/lib/vagrant/vm.rb +27 -13
  101. data/templates/commands/init/Vagrantfile.erb +13 -0
  102. data/templates/config/validation_failed.erb +7 -0
  103. data/templates/locales/en.yml +402 -0
  104. data/templates/package_Vagrantfile.erb +1 -1
  105. data/test/locales/en.yml +8 -0
  106. data/test/test_helper.rb +19 -103
  107. data/test/vagrant/action/box/destroy_test.rb +7 -19
  108. data/test/vagrant/action/box/download_test.rb +9 -25
  109. data/test/vagrant/action/box/package_test.rb +2 -2
  110. data/test/vagrant/action/box/unpackage_test.rb +8 -34
  111. data/test/vagrant/action/box/verify_test.rb +10 -19
  112. data/test/vagrant/action/builder_test.rb +0 -15
  113. data/test/vagrant/action/env/set_test.rb +1 -1
  114. data/test/vagrant/action/environment_test.rb +8 -26
  115. data/test/vagrant/action/general/package_test.rb +53 -53
  116. data/test/vagrant/action/vm/boot_test.rb +5 -22
  117. data/test/vagrant/action/vm/check_box_test.rb +35 -25
  118. data/test/vagrant/action/vm/clean_machine_folder_test.rb +1 -1
  119. data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +1 -1
  120. data/test/vagrant/action/vm/clear_nfs_exports_test.rb +1 -1
  121. data/test/vagrant/action/vm/clear_shared_folders_test.rb +1 -1
  122. data/test/vagrant/action/vm/customize_test.rb +2 -1
  123. data/test/vagrant/action/vm/destroy_test.rb +1 -2
  124. data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +1 -1
  125. data/test/vagrant/action/vm/disable_networks_test.rb +10 -1
  126. data/test/vagrant/action/vm/discard_state_test.rb +10 -1
  127. data/test/vagrant/action/vm/export_test.rb +9 -37
  128. data/test/vagrant/action/vm/forward_ports_helpers_test.rb +2 -2
  129. data/test/vagrant/action/vm/forward_ports_test.rb +19 -16
  130. data/test/vagrant/action/vm/halt_test.rb +11 -1
  131. data/test/vagrant/action/vm/import_test.rb +37 -21
  132. data/test/vagrant/action/vm/match_mac_address_test.rb +1 -1
  133. data/test/vagrant/action/vm/network_test.rb +8 -7
  134. data/test/vagrant/action/vm/nfs_helpers_test.rb +6 -3
  135. data/test/vagrant/action/vm/nfs_test.rb +20 -45
  136. data/test/vagrant/action/vm/package_test.rb +1 -1
  137. data/test/vagrant/action/vm/package_vagrantfile_test.rb +1 -1
  138. data/test/vagrant/action/vm/provision_test.rb +10 -17
  139. data/test/vagrant/action/vm/resume_test.rb +1 -1
  140. data/test/vagrant/action/vm/share_folders_test.rb +25 -106
  141. data/test/vagrant/action/vm/suspend_test.rb +1 -1
  142. data/test/vagrant/action/warden_test.rb +105 -0
  143. data/test/vagrant/action_test.rb +5 -27
  144. data/test/vagrant/box_collection_test.rb +44 -0
  145. data/test/vagrant/box_test.rb +5 -105
  146. data/test/vagrant/cli_test.rb +35 -0
  147. data/test/vagrant/command/base_test.rb +23 -0
  148. data/test/vagrant/command/group_base_test.rb +15 -0
  149. data/test/vagrant/command/helpers_test.rb +88 -0
  150. data/test/vagrant/config/base_test.rb +52 -0
  151. data/test/vagrant/config/error_recorder_test.rb +18 -0
  152. data/test/vagrant/config/ssh_test.rb +12 -0
  153. data/test/vagrant/config/vagrant_test.rb +11 -0
  154. data/test/vagrant/config/vm_test.rb +70 -0
  155. data/test/vagrant/config_test.rb +113 -206
  156. data/test/vagrant/data_store_test.rb +68 -0
  157. data/test/vagrant/downloaders/base_test.rb +1 -1
  158. data/test/vagrant/downloaders/file_test.rb +4 -3
  159. data/test/vagrant/downloaders/http_test.rb +14 -4
  160. data/test/vagrant/environment_test.rb +290 -590
  161. data/test/vagrant/errors_test.rb +42 -0
  162. data/test/vagrant/hosts/base_test.rb +1 -1
  163. data/test/vagrant/hosts/bsd_test.rb +3 -6
  164. data/test/vagrant/hosts/linux_test.rb +3 -5
  165. data/test/vagrant/plugin_test.rb +9 -0
  166. data/test/vagrant/provisioners/base_test.rb +1 -1
  167. data/test/vagrant/provisioners/chef_server_test.rb +31 -35
  168. data/test/vagrant/provisioners/chef_solo_test.rb +1 -1
  169. data/test/vagrant/provisioners/chef_test.rb +7 -7
  170. data/test/vagrant/ssh_session_test.rb +3 -10
  171. data/test/vagrant/ssh_test.rb +25 -33
  172. data/test/vagrant/systems/linux_test.rb +6 -71
  173. data/test/vagrant/ui_test.rb +29 -0
  174. data/test/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
  175. data/test/vagrant/util/resource_logger_test.rb +14 -81
  176. data/test/vagrant/util/retryable_test.rb +38 -0
  177. data/test/vagrant/util/template_renderer_test.rb +4 -4
  178. data/test/vagrant/vm_test.rb +47 -26
  179. data/vagrant.gemspec +14 -12
  180. metadata +142 -108
  181. data/bin/.gitignore +0 -0
  182. data/lib/vagrant/action/action_exception.rb +0 -16
  183. data/lib/vagrant/action/env/error_halt.rb +0 -16
  184. data/lib/vagrant/action/exception_catcher.rb +0 -14
  185. data/lib/vagrant/action/vm/persist.rb +0 -22
  186. data/lib/vagrant/active_list.rb +0 -83
  187. data/lib/vagrant/command.rb +0 -27
  188. data/lib/vagrant/commands/base.rb +0 -181
  189. data/lib/vagrant/commands/box.rb +0 -16
  190. data/lib/vagrant/commands/box/add.rb +0 -30
  191. data/lib/vagrant/commands/box/list.rb +0 -30
  192. data/lib/vagrant/commands/box/remove.rb +0 -30
  193. data/lib/vagrant/commands/box/repackage.rb +0 -35
  194. data/lib/vagrant/commands/destroy.rb +0 -37
  195. data/lib/vagrant/commands/halt.rb +0 -43
  196. data/lib/vagrant/commands/init.rb +0 -36
  197. data/lib/vagrant/commands/package.rb +0 -81
  198. data/lib/vagrant/commands/provision.rb +0 -31
  199. data/lib/vagrant/commands/reload.rb +0 -36
  200. data/lib/vagrant/commands/resume.rb +0 -35
  201. data/lib/vagrant/commands/ssh.rb +0 -78
  202. data/lib/vagrant/commands/ssh_config.rb +0 -45
  203. data/lib/vagrant/commands/status.rb +0 -125
  204. data/lib/vagrant/commands/suspend.rb +0 -36
  205. data/lib/vagrant/commands/up.rb +0 -44
  206. data/lib/vagrant/exceptions/uncallable_action.rb +0 -17
  207. data/lib/vagrant/util/translator.rb +0 -35
  208. data/templates/strings.yml +0 -341
  209. data/templates/unison/crontab_entry.erb +0 -1
  210. data/templates/unison/script.erb +0 -71
  211. data/test/vagrant/action/env/error_halt_test.rb +0 -21
  212. data/test/vagrant/action/exception_catcher_test.rb +0 -30
  213. data/test/vagrant/action/vm/persist_test.rb +0 -50
  214. data/test/vagrant/active_list_test.rb +0 -173
  215. data/test/vagrant/command_test.rb +0 -53
  216. data/test/vagrant/commands/base_test.rb +0 -139
  217. data/test/vagrant/commands/box/add_test.rb +0 -34
  218. data/test/vagrant/commands/box/list_test.rb +0 -32
  219. data/test/vagrant/commands/box/remove_test.rb +0 -41
  220. data/test/vagrant/commands/box/repackage_test.rb +0 -52
  221. data/test/vagrant/commands/destroy_test.rb +0 -44
  222. data/test/vagrant/commands/halt_test.rb +0 -50
  223. data/test/vagrant/commands/init_test.rb +0 -71
  224. data/test/vagrant/commands/package_test.rb +0 -97
  225. data/test/vagrant/commands/provision_test.rb +0 -60
  226. data/test/vagrant/commands/reload_test.rb +0 -47
  227. data/test/vagrant/commands/resume_test.rb +0 -44
  228. data/test/vagrant/commands/ssh_config_test.rb +0 -77
  229. data/test/vagrant/commands/ssh_test.rb +0 -129
  230. data/test/vagrant/commands/status_test.rb +0 -40
  231. data/test/vagrant/commands/suspend_test.rb +0 -44
  232. data/test/vagrant/commands/up_test.rb +0 -49
  233. data/test/vagrant/util/translator_test.rb +0 -61
  234. data/test/vagrant/util_test.rb +0 -27
@@ -3,28 +3,16 @@ require "test_helper"
3
3
  class DestroyBoxActionTest < Test::Unit::TestCase
4
4
  setup do
5
5
  @klass = Vagrant::Action::Box::Destroy
6
- @app, @env = mock_action_data
7
-
8
- @vm = mock("vm")
9
- @env["vm"] = @vm
10
- @env["box"] = Vagrant::Box.new(mock_environment, "foo")
11
-
12
- @internal_vm = mock("internal")
13
- @vm.stubs(:vm).returns(@internal_vm)
6
+ @app, @env = action_env
7
+ @env["box"] = Vagrant::Box.new(vagrant_env, "foo")
14
8
 
15
9
  @instance = @klass.new(@app, @env)
16
10
  end
17
11
 
18
- context "calling" do
19
- setup do
20
- @env.logger.stubs(:info)
21
- end
22
-
23
- should "delete the box directory" do
24
- seq = sequence("seq")
25
- FileUtils.expects(:rm_rf).with(@env["box"].directory).in_sequence(seq)
26
- @app.expects(:call).with(@env).once.in_sequence(seq)
27
- @instance.call(@env)
28
- end
12
+ should "delete the box directory" do
13
+ seq = sequence("seq")
14
+ FileUtils.expects(:rm_rf).with(@env["box"].directory).in_sequence(seq)
15
+ @app.expects(:call).with(@env).once.in_sequence(seq)
16
+ @instance.call(@env)
29
17
  end
30
18
  end
@@ -3,15 +3,9 @@ require "test_helper"
3
3
  class DownloadBoxActionTest < Test::Unit::TestCase
4
4
  setup do
5
5
  @klass = Vagrant::Action::Box::Download
6
- @app, @env = mock_action_data
7
-
8
- @vm = mock("vm")
9
- @env["vm"] = @vm
10
- @env["box"] = Vagrant::Box.new(mock_environment, "foo")
6
+ @app, @env = action_env
7
+ @env["box"] = Vagrant::Box.new(vagrant_env, "foo")
11
8
  @env["box"].uri = "http://google.com"
12
-
13
- @internal_vm = mock("internal")
14
- @vm.stubs(:vm).returns(@internal_vm)
15
9
  end
16
10
 
17
11
  context "initializing" do
@@ -32,17 +26,7 @@ class DownloadBoxActionTest < Test::Unit::TestCase
32
26
  @instance.expects(:instantiate_downloader).in_sequence(seq).returns(true)
33
27
  @instance.expects(:download).in_sequence(seq)
34
28
  @app.expects(:call).with(@env).in_sequence(seq)
35
- @instance.expects(:cleanup).in_sequence(seq)
36
- @instance.call(@env)
37
- end
38
-
39
- should "halt the chain if downloader instantiation fails" do
40
- seq = sequence("seq")
41
- @env.error!(:foo)
42
- @instance.expects(:instantiate_downloader).in_sequence(seq).returns(false)
43
- @instance.expects(:download).never
44
- @app.expects(:call).with(@env).never
45
- @instance.expects(:cleanup).never
29
+ @instance.expects(:recover).with(@env).in_sequence(seq)
46
30
  @instance.call(@env)
47
31
  end
48
32
  end
@@ -57,9 +41,9 @@ class DownloadBoxActionTest < Test::Unit::TestCase
57
41
 
58
42
  should "error environment if URI is invalid for any downloaders" do
59
43
  @env["box"].uri = "foobar"
60
- assert !@instance.instantiate_downloader
61
- assert @env.error?
62
- assert_equal :box_download_unknown_type, @env.error.first
44
+ assert_raises(Vagrant::Errors::BoxDownloadUnknownType) {
45
+ @instance.instantiate_downloader
46
+ }
63
47
  end
64
48
  end
65
49
 
@@ -91,7 +75,7 @@ class DownloadBoxActionTest < Test::Unit::TestCase
91
75
  context "tempfile" do
92
76
  should "create a tempfile in the vagrant tmp directory" do
93
77
  File.expects(:open).with { |name, bitmask|
94
- name =~ /#{Vagrant::Action::Box::Download::BASENAME}/ && name =~ /#{@env.env.tmp_path}/
78
+ name.to_s =~ /#{Vagrant::Action::Box::Download::BASENAME}/ && name.to_s =~ /#{@env.env.tmp_path}/
95
79
  }.once
96
80
  @instance.with_tempfile
97
81
  end
@@ -115,13 +99,13 @@ class DownloadBoxActionTest < Test::Unit::TestCase
115
99
 
116
100
  should "delete the temporary file if it exists" do
117
101
  File.expects(:unlink).with(@temp_path).once
118
- @instance.cleanup
102
+ @instance.recover(@env)
119
103
  end
120
104
 
121
105
  should "not delete anything if it doesn't exist" do
122
106
  File.stubs(:exist?).returns(false)
123
107
  File.expects(:unlink).never
124
- @instance.cleanup
108
+ @instance.recover(@env)
125
109
  end
126
110
  end
127
111
 
@@ -3,8 +3,8 @@ require "test_helper"
3
3
  class PackageBoxActionTest < Test::Unit::TestCase
4
4
  setup do
5
5
  @klass = Vagrant::Action::Box::Package
6
- @app, @env = mock_action_data
7
- @env["box"] = Vagrant::Box.new(mock_environment, "foo")
6
+ @app, @env = action_env
7
+ @env["box"] = Vagrant::Box.new(vagrant_env, "foo")
8
8
 
9
9
  @instance = @klass.new(@app, @env)
10
10
  end
@@ -3,14 +3,8 @@ require "test_helper"
3
3
  class UnpackageBoxActionTest < Test::Unit::TestCase
4
4
  setup do
5
5
  @klass = Vagrant::Action::Box::Unpackage
6
- @app, @env = mock_action_data
7
-
8
- @vm = mock("vm")
9
- @env["vm"] = @vm
10
- @env["box"] = Vagrant::Box.new(mock_environment, "foo")
11
-
12
- @internal_vm = mock("internal")
13
- @vm.stubs(:vm).returns(@internal_vm)
6
+ @app, @env = action_env
7
+ @env["box"] = Vagrant::Box.new(vagrant_env, "foo")
14
8
 
15
9
  @instance = @klass.new(@app, @env)
16
10
  end
@@ -21,26 +15,6 @@ class UnpackageBoxActionTest < Test::Unit::TestCase
21
15
  @instance.expects(:setup_box_directory).in_sequence(seq).returns(true)
22
16
  @instance.expects(:decompress).in_sequence(seq)
23
17
  @app.expects(:call).with(@env)
24
- @instance.expects(:cleanup).never
25
- @instance.call(@env)
26
- end
27
-
28
- should "halt the chain if setting up the box directory fails" do
29
- @instance.expects(:setup_box_directory).returns(false)
30
- @instance.expects(:decompress).never
31
- @app.expects(:call).never
32
- @instance.expects(:cleanup).never
33
- @instance.call(@env)
34
- end
35
-
36
- should "cleanup if there was an error" do
37
- @env.error!(:foo)
38
-
39
- seq = sequence("sequence")
40
- @instance.expects(:setup_box_directory).in_sequence(seq).returns(true)
41
- @instance.expects(:decompress).in_sequence(seq)
42
- @app.expects(:call).with(@env)
43
- @instance.expects(:cleanup).once
44
18
  @instance.call(@env)
45
19
  end
46
20
  end
@@ -54,13 +28,13 @@ class UnpackageBoxActionTest < Test::Unit::TestCase
54
28
 
55
29
  should "do nothing if not a directory" do
56
30
  FileUtils.expects(:rm_rf).never
57
- @instance.cleanup
31
+ @instance.recover(nil)
58
32
  end
59
33
 
60
34
  should "remove the directory if exists" do
61
35
  File.expects(:directory?).with(@instance.box_directory).once.returns(true)
62
36
  FileUtils.expects(:rm_rf).with(@instance.box_directory).once
63
- @instance.cleanup
37
+ @instance.recover(nil)
64
38
  end
65
39
  end
66
40
 
@@ -72,9 +46,9 @@ class UnpackageBoxActionTest < Test::Unit::TestCase
72
46
 
73
47
  should "error the environment if the box already exists" do
74
48
  File.expects(:directory?).returns(true)
75
- assert !@instance.setup_box_directory
76
- assert @env.error?
77
- assert_equal :box_already_exists, @env.error.first
49
+ assert_raises(Vagrant::Errors::BoxAlreadyExists) {
50
+ @instance.setup_box_directory
51
+ }
78
52
  end
79
53
 
80
54
  should "create the directory" do
@@ -96,7 +70,7 @@ class UnpackageBoxActionTest < Test::Unit::TestCase
96
70
  end
97
71
 
98
72
  should "open the tar file within the new directory, and extract it all" do
99
- Archive::Tar::Minitar.expects(:unpack).with(@env["download.temp_path"], @env["box"].directory).once
73
+ Archive::Tar::Minitar.expects(:unpack).with(@env["download.temp_path"], @env["box"].directory.to_s).once
100
74
  @instance.decompress
101
75
  end
102
76
  end
@@ -3,37 +3,28 @@ require "test_helper"
3
3
  class VerifyBoxActionTest < Test::Unit::TestCase
4
4
  setup do
5
5
  @klass = Vagrant::Action::Box::Verify
6
- @app, @env = mock_action_data
7
-
8
- @vm = mock("vm")
9
- @env["vm"] = @vm
10
- @env["box"] = Vagrant::Box.new(mock_environment, "foo")
11
-
12
- @internal_vm = mock("internal")
13
- @vm.stubs(:vm).returns(@internal_vm)
6
+ @app, @env = action_env
7
+ @env["box"] = Vagrant::Box.new(vagrant_env, "foo")
14
8
 
15
9
  @instance = @klass.new(@app, @env)
16
10
  end
17
11
 
18
12
  context "calling" do
19
- setup do
20
- @env.logger.stubs(:info)
21
- end
22
-
23
13
  should "continue fine if verification succeeds" do
24
14
  seq = sequence("seq")
25
- VirtualBox::Appliance.expects(:new).with(@env["box"].ovf_file).in_sequence(seq)
15
+ VirtualBox::Appliance.expects(:new).with(@env["box"].ovf_file.to_s).in_sequence(seq)
26
16
  @app.expects(:call).with(@env).once.in_sequence(seq)
27
- @instance.call(@env)
28
- assert !@env.error?
17
+ assert_nothing_raised {
18
+ @instance.call(@env)
19
+ }
29
20
  end
30
21
 
31
22
  should "halt chain if verification fails" do
32
- VirtualBox::Appliance.expects(:new).with(@env["box"].ovf_file).raises(Exception)
23
+ VirtualBox::Appliance.expects(:new).with(@env["box"].ovf_file.to_s).raises(Exception)
33
24
  @app.expects(:call).with(@env).never
34
- @instance.call(@env)
35
- assert @env.error?
36
- assert_equal :box_verification_failed, @env.error.first
25
+ assert_raises(Vagrant::Errors::BoxVerificationFailed) {
26
+ @instance.call(@env)
27
+ }
37
28
  end
38
29
  end
39
30
  end
@@ -155,21 +155,6 @@ class ActionBuilderTest < Test::Unit::TestCase
155
155
  end
156
156
 
157
157
  context "converting to an app" do
158
- teardown do
159
- Vagrant::Action.actions.clear
160
- end
161
-
162
- should "preprend error halt to the chain" do
163
- result = mock("result")
164
- env = {:a => :b}
165
- middleware = mock("middleware")
166
- middleware.stubs(:is_a?).with(Class).returns(true)
167
- middleware.expects(:new).with(anything, env).returns(result)
168
- @instance.use middleware
169
- result = @instance.to_app(env)
170
- assert result.kind_of?(Vagrant::Action::Env::ErrorHalt)
171
- end
172
-
173
158
  should "make non-classes lambdas" do
174
159
  env = Vagrant::Action::Environment.new(nil)
175
160
  env.expects(:foo).once
@@ -3,7 +3,7 @@ require "test_helper"
3
3
  class SetEnvActionTest < Test::Unit::TestCase
4
4
  setup do
5
5
  @klass = Vagrant::Action::Env::Set
6
- @app, @env = mock_action_data
6
+ @app, @env = action_env
7
7
  @env.clear
8
8
  end
9
9
 
@@ -3,7 +3,11 @@ require "test_helper"
3
3
  class ActionEnvironmentTest < Test::Unit::TestCase
4
4
  setup do
5
5
  @klass = Vagrant::Action::Environment
6
- @instance = @klass.new(mock_environment)
6
+ @instance = @klass.new(vagrant_env)
7
+ end
8
+
9
+ should "be a hash with indifferent access" do
10
+ assert @instance.is_a?(Vagrant::Util::HashWithIndifferentAccess)
7
11
  end
8
12
 
9
13
  should "default values to those on the env" do
@@ -11,35 +15,13 @@ class ActionEnvironmentTest < Test::Unit::TestCase
11
15
  assert_equal "value", @instance["key"]
12
16
  end
13
17
 
14
- should "setup the logger" do
15
- assert_equal @instance.env.logger, @instance.logger
16
- end
17
-
18
- should "not be erroneous initially" do
19
- assert !@instance.error?
20
- end
21
-
22
- should "mark as erroneous" do
23
- @instance.error!(:key)
24
- assert_equal [:key, {}], @instance.error
25
- end
26
-
27
- should "properly report erroneous" do
28
- @instance.error!(:key)
29
- assert @instance.error?
18
+ should "setup the UI" do
19
+ assert_equal @instance.env.ui, @instance.ui
30
20
  end
31
21
 
32
22
  should "report interrupted if interrupt error" do
33
23
  assert !@instance.interrupted?
34
- @instance.error!(:interrupt)
24
+ @instance.interrupt!
35
25
  assert @instance.interrupted?
36
26
  end
37
-
38
- should "have indifferent access" do
39
- @instance[:foo] = :bar
40
- @instance["bar"] = :baz
41
-
42
- assert_equal :bar, @instance["foo"]
43
- assert_equal :baz, @instance[:bar]
44
- end
45
27
  end
@@ -3,7 +3,7 @@ require "test_helper"
3
3
  class PackageGeneralActionTest < Test::Unit::TestCase
4
4
  setup do
5
5
  @klass = Vagrant::Action::General::Package
6
- @app, @env = mock_action_data
6
+ @app, @env = action_env
7
7
 
8
8
  @vm = mock("vm")
9
9
  @env["vm"] = @vm
@@ -18,7 +18,6 @@ class PackageGeneralActionTest < Test::Unit::TestCase
18
18
 
19
19
  should "initialize fine" do
20
20
  @klass.new(@app, @env)
21
- assert !@env.error?
22
21
  end
23
22
 
24
23
  should "set the output path to configured by default" do
@@ -37,7 +36,7 @@ class PackageGeneralActionTest < Test::Unit::TestCase
37
36
  assert_equal [], @env["package.include"]
38
37
  end
39
38
 
40
- should "not set the output path if it is already set" do
39
+ should "not set the include path if it is already set" do
41
40
  @env["package.include"] = "foo"
42
41
  @klass.new(@app, @env)
43
42
  assert_equal "foo", @env["package.include"]
@@ -56,58 +55,34 @@ class PackageGeneralActionTest < Test::Unit::TestCase
56
55
  context "calling" do
57
56
  should "call the proper methods then continue chain" do
58
57
  seq = sequence("seq")
59
- @instance.expects(:verify_included_files).in_sequence(seq).returns(true)
58
+ @instance.expects(:verify_files_to_copy).in_sequence(seq).returns(true)
60
59
  @instance.expects(:compress).in_sequence(seq)
61
60
  @app.expects(:call).with(@env).in_sequence(seq)
62
- @instance.expects(:cleanup).never
63
-
64
- @instance.call(@env)
65
- end
66
-
67
- should "halt the chain if verify failed" do
68
- @instance.expects(:verify_included_files).returns(false)
69
- @instance.expects(:compress).never
70
- @app.expects(:call).never
71
-
72
61
  @instance.call(@env)
73
62
  end
74
63
 
75
64
  should "halt the chain if the output file already exists" do
76
65
  File.expects(:exist?).returns(true)
77
66
  @app.expects(:call).never
78
- @instance.call(@env)
79
-
80
- assert @env.error?
81
- assert_equal :package_output_exists, @env.error.first
67
+ assert_raises(Vagrant::Errors::PackageOutputExists) {
68
+ @instance.call(@env)
69
+ }
82
70
  end
83
71
 
84
72
  should "halt the chain if directory isn't set" do
85
73
  @env["package.directory"] = nil
86
74
  @app.expects(:call).never
87
- @instance.call(@env)
88
-
89
- assert @env.error?
90
- assert_equal :package_requires_directory, @env.error.first
75
+ assert_raises(Vagrant::Errors::PackageRequiresDirectory) {
76
+ @instance.call(@env)
77
+ }
91
78
  end
92
79
 
93
80
  should "halt the chain if directory doesn't exist" do
94
81
  File.expects(:directory?).with(@env["package.directory"]).returns(false)
95
82
  @app.expects(:call).never
96
- @instance.call(@env)
97
-
98
- assert @env.error?
99
- assert_equal :package_requires_directory, @env.error.first
100
- end
101
-
102
- should "run cleanup if environment errors" do
103
- seq = sequence("seq")
104
- @instance.expects(:verify_included_files).in_sequence(seq).returns(true)
105
- @instance.expects(:compress).in_sequence(seq)
106
- @app.expects(:call).with(@env).in_sequence(seq)
107
- @instance.expects(:cleanup).in_sequence(seq)
108
-
109
- @env.error!(:foo)
110
- @instance.call(@env)
83
+ assert_raises(Vagrant::Errors::PackageRequiresDirectory) {
84
+ @instance.call(@env)
85
+ }
111
86
  end
112
87
  end
113
88
 
@@ -123,18 +98,45 @@ class PackageGeneralActionTest < Test::Unit::TestCase
123
98
  File.expects(:exist?).with(@instance.tar_path).returns(false)
124
99
  File.expects(:delete).never
125
100
 
126
- @instance.cleanup
101
+ @instance.recover(@env)
127
102
  end
128
103
 
129
104
  should "delete the packaged box if it exists" do
130
105
  File.expects(:exist?).returns(true)
131
106
  File.expects(:delete).with(@instance.tar_path).once
132
107
 
133
- @instance.cleanup
108
+ @instance.recover(@env)
134
109
  end
135
110
  end
136
111
 
137
- context "verifying included files" do
112
+ context "files to copy" do
113
+ setup do
114
+ @env["package.include"] = []
115
+ @package_dir = Pathname.new(@env["package.directory"]).join("include")
116
+ end
117
+
118
+ should "have included files whole path if relative" do
119
+ path = "lib/foo"
120
+ @env["package.include"] = [path]
121
+ result = @instance.files_to_copy
122
+ assert_equal @package_dir.join(path), result[path]
123
+ end
124
+
125
+ should "have the filename if an absolute path" do
126
+ path = "/foo/bar"
127
+ @env["package.include"] = [path]
128
+ result = @instance.files_to_copy
129
+ assert_equal @package_dir.join("bar"), result[path]
130
+ end
131
+
132
+ should "include the Vagrantfile if specified" do
133
+ @env["package.vagrantfile"] = "foo"
134
+ result = @instance.files_to_copy
135
+ assert_equal @package_dir.join("_Vagrantfile"), result["foo"]
136
+ end
137
+ end
138
+
139
+ context "verifying files to copy" do
138
140
  setup do
139
141
  @env["package.include"] = ["foo"]
140
142
  File.stubs(:exist?).returns(true)
@@ -142,14 +144,15 @@ class PackageGeneralActionTest < Test::Unit::TestCase
142
144
 
143
145
  should "error if included file is not found" do
144
146
  File.expects(:exist?).with("foo").returns(false)
145
- assert !@instance.verify_included_files
146
- assert @env.error?
147
- assert_equal :package_include_file_doesnt_exist, @env.error.first
147
+ assert_raises(Vagrant::Errors::PackageIncludeMissing) {
148
+ @instance.verify_files_to_copy
149
+ }
148
150
  end
149
151
 
150
152
  should "return true if all exist" do
151
- assert @instance.verify_included_files
152
- assert !@env.error?
153
+ assert_nothing_raised {
154
+ assert @instance.verify_files_to_copy
155
+ }
153
156
  end
154
157
  end
155
158
 
@@ -166,14 +169,11 @@ class PackageGeneralActionTest < Test::Unit::TestCase
166
169
  end
167
170
 
168
171
  should "create the include directory and copy files to it" do
169
- include_dir = File.join(@env["package.directory"], "include")
170
- copy_seq = sequence("copy_seq")
171
- FileUtils.expects(:mkdir_p).with(include_dir).once.in_sequence(copy_seq)
172
-
173
- 5.times do |i|
174
- file = mock("f#{i}")
175
- @env["package.include"] << file
176
- FileUtils.expects(:cp).with(file, include_dir).in_sequence(copy_seq)
172
+ @env["package.include"] = ["/foo/bar", "lib/foo"]
173
+ seq = sequence("seq")
174
+ @instance.files_to_copy.each do |from, to|
175
+ FileUtils.expects(:mkdir_p).with(to.parent).in_sequence(seq)
176
+ FileUtils.expects(:cp).with(from, to).in_sequence(seq)
177
177
  end
178
178
 
179
179
  @instance.copy_include_files