fixed-vagrant 0.7.4.dev

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 (242) hide show
  1. data/.gitignore +15 -0
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +272 -0
  4. data/Gemfile +21 -0
  5. data/LICENSE +21 -0
  6. data/README.md +75 -0
  7. data/Rakefile +22 -0
  8. data/bin/vagrant +22 -0
  9. data/config/default.rb +39 -0
  10. data/contrib/README.md +12 -0
  11. data/contrib/emacs/vagrant.el +8 -0
  12. data/contrib/vim/vagrantfile.vim +9 -0
  13. data/keys/README.md +17 -0
  14. data/keys/vagrant +27 -0
  15. data/keys/vagrant.ppk +26 -0
  16. data/keys/vagrant.pub +1 -0
  17. data/lib/vagrant.rb +42 -0
  18. data/lib/vagrant/action.rb +134 -0
  19. data/lib/vagrant/action/box.rb +11 -0
  20. data/lib/vagrant/action/box/destroy.rb +21 -0
  21. data/lib/vagrant/action/box/download.rb +72 -0
  22. data/lib/vagrant/action/box/package.rb +19 -0
  23. data/lib/vagrant/action/box/unpackage.rb +55 -0
  24. data/lib/vagrant/action/box/verify.rb +23 -0
  25. data/lib/vagrant/action/builder.rb +124 -0
  26. data/lib/vagrant/action/builtin.rb +104 -0
  27. data/lib/vagrant/action/env.rb +7 -0
  28. data/lib/vagrant/action/env/set.rb +18 -0
  29. data/lib/vagrant/action/environment.rb +50 -0
  30. data/lib/vagrant/action/general.rb +8 -0
  31. data/lib/vagrant/action/general/package.rb +109 -0
  32. data/lib/vagrant/action/general/validate.rb +19 -0
  33. data/lib/vagrant/action/vm.rb +31 -0
  34. data/lib/vagrant/action/vm/boot.rb +48 -0
  35. data/lib/vagrant/action/vm/check_box.rb +28 -0
  36. data/lib/vagrant/action/vm/check_guest_additions.rb +30 -0
  37. data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
  38. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +39 -0
  39. data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
  40. data/lib/vagrant/action/vm/clear_shared_folders.rb +32 -0
  41. data/lib/vagrant/action/vm/customize.rb +21 -0
  42. data/lib/vagrant/action/vm/destroy.rb +19 -0
  43. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +30 -0
  44. data/lib/vagrant/action/vm/discard_state.rb +22 -0
  45. data/lib/vagrant/action/vm/export.rb +52 -0
  46. data/lib/vagrant/action/vm/forward_ports.rb +134 -0
  47. data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
  48. data/lib/vagrant/action/vm/halt.rb +29 -0
  49. data/lib/vagrant/action/vm/host_name.rb +21 -0
  50. data/lib/vagrant/action/vm/import.rb +35 -0
  51. data/lib/vagrant/action/vm/match_mac_address.rb +21 -0
  52. data/lib/vagrant/action/vm/network.rb +139 -0
  53. data/lib/vagrant/action/vm/nfs.rb +159 -0
  54. data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
  55. data/lib/vagrant/action/vm/package.rb +23 -0
  56. data/lib/vagrant/action/vm/package_vagrantfile.rb +33 -0
  57. data/lib/vagrant/action/vm/provision.rb +41 -0
  58. data/lib/vagrant/action/vm/resume.rb +20 -0
  59. data/lib/vagrant/action/vm/share_folders.rb +70 -0
  60. data/lib/vagrant/action/vm/suspend.rb +20 -0
  61. data/lib/vagrant/action/warden.rb +79 -0
  62. data/lib/vagrant/box.rb +90 -0
  63. data/lib/vagrant/box_collection.rb +53 -0
  64. data/lib/vagrant/cli.rb +55 -0
  65. data/lib/vagrant/command.rb +25 -0
  66. data/lib/vagrant/command/base.rb +106 -0
  67. data/lib/vagrant/command/box.rb +33 -0
  68. data/lib/vagrant/command/destroy.rb +17 -0
  69. data/lib/vagrant/command/group_base.rb +107 -0
  70. data/lib/vagrant/command/halt.rb +18 -0
  71. data/lib/vagrant/command/helpers.rb +33 -0
  72. data/lib/vagrant/command/init.rb +14 -0
  73. data/lib/vagrant/command/named_base.rb +14 -0
  74. data/lib/vagrant/command/package.rb +41 -0
  75. data/lib/vagrant/command/provision.rb +17 -0
  76. data/lib/vagrant/command/reload.rb +17 -0
  77. data/lib/vagrant/command/resume.rb +17 -0
  78. data/lib/vagrant/command/ssh.rb +42 -0
  79. data/lib/vagrant/command/ssh_config.rb +26 -0
  80. data/lib/vagrant/command/status.rb +22 -0
  81. data/lib/vagrant/command/suspend.rb +17 -0
  82. data/lib/vagrant/command/up.rb +19 -0
  83. data/lib/vagrant/command/upgrade_to_060.rb +45 -0
  84. data/lib/vagrant/command/version.rb +13 -0
  85. data/lib/vagrant/config.rb +123 -0
  86. data/lib/vagrant/config/base.rb +85 -0
  87. data/lib/vagrant/config/error_recorder.rb +19 -0
  88. data/lib/vagrant/config/nfs.rb +10 -0
  89. data/lib/vagrant/config/package.rb +9 -0
  90. data/lib/vagrant/config/ssh.rb +33 -0
  91. data/lib/vagrant/config/top.rb +61 -0
  92. data/lib/vagrant/config/vagrant.rb +16 -0
  93. data/lib/vagrant/config/vm.rb +137 -0
  94. data/lib/vagrant/config/vm/provisioner.rb +56 -0
  95. data/lib/vagrant/config/vm/sub_vm.rb +17 -0
  96. data/lib/vagrant/data_store.rb +70 -0
  97. data/lib/vagrant/downloaders.rb +7 -0
  98. data/lib/vagrant/downloaders/base.rb +23 -0
  99. data/lib/vagrant/downloaders/file.rb +22 -0
  100. data/lib/vagrant/downloaders/http.rb +64 -0
  101. data/lib/vagrant/environment.rb +392 -0
  102. data/lib/vagrant/errors.rb +332 -0
  103. data/lib/vagrant/hosts.rb +8 -0
  104. data/lib/vagrant/hosts/arch.rb +27 -0
  105. data/lib/vagrant/hosts/base.rb +78 -0
  106. data/lib/vagrant/hosts/bsd.rb +52 -0
  107. data/lib/vagrant/hosts/linux.rb +47 -0
  108. data/lib/vagrant/plugin.rb +57 -0
  109. data/lib/vagrant/provisioners.rb +9 -0
  110. data/lib/vagrant/provisioners/base.rb +63 -0
  111. data/lib/vagrant/provisioners/chef.rb +130 -0
  112. data/lib/vagrant/provisioners/chef_server.rb +103 -0
  113. data/lib/vagrant/provisioners/chef_solo.rb +142 -0
  114. data/lib/vagrant/provisioners/puppet.rb +137 -0
  115. data/lib/vagrant/provisioners/puppet_server.rb +55 -0
  116. data/lib/vagrant/provisioners/shell.rb +52 -0
  117. data/lib/vagrant/ssh.rb +173 -0
  118. data/lib/vagrant/ssh/session.rb +125 -0
  119. data/lib/vagrant/systems.rb +11 -0
  120. data/lib/vagrant/systems/base.rb +87 -0
  121. data/lib/vagrant/systems/debian.rb +36 -0
  122. data/lib/vagrant/systems/freebsd.rb +84 -0
  123. data/lib/vagrant/systems/gentoo.rb +27 -0
  124. data/lib/vagrant/systems/linux.rb +83 -0
  125. data/lib/vagrant/systems/linux/config.rb +21 -0
  126. data/lib/vagrant/systems/linux/error.rb +9 -0
  127. data/lib/vagrant/systems/redhat.rb +39 -0
  128. data/lib/vagrant/systems/solaris.rb +62 -0
  129. data/lib/vagrant/systems/ubuntu.rb +17 -0
  130. data/lib/vagrant/test_helpers.rb +128 -0
  131. data/lib/vagrant/ui.rb +69 -0
  132. data/lib/vagrant/util.rb +13 -0
  133. data/lib/vagrant/util/busy.rb +59 -0
  134. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  135. data/lib/vagrant/util/plain_logger.rb +25 -0
  136. data/lib/vagrant/util/platform.rb +65 -0
  137. data/lib/vagrant/util/resource_logger.rb +63 -0
  138. data/lib/vagrant/util/retryable.rb +25 -0
  139. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  140. data/lib/vagrant/util/template_renderer.rb +83 -0
  141. data/lib/vagrant/version.rb +6 -0
  142. data/lib/vagrant/vm.rb +177 -0
  143. data/templates/chef_server_client.erb +18 -0
  144. data/templates/chef_solo_solo.erb +19 -0
  145. data/templates/commands/init/Vagrantfile.erb +82 -0
  146. data/templates/config/validation_failed.erb +7 -0
  147. data/templates/locales/en.yml +535 -0
  148. data/templates/network_entry_debian.erb +8 -0
  149. data/templates/network_entry_gentoo.erb +5 -0
  150. data/templates/network_entry_redhat.erb +8 -0
  151. data/templates/nfs/exports.erb +5 -0
  152. data/templates/nfs/exports_linux.erb +5 -0
  153. data/templates/package_Vagrantfile.erb +11 -0
  154. data/templates/ssh_config.erb +9 -0
  155. data/test/locales/en.yml +8 -0
  156. data/test/test_helper.rb +26 -0
  157. data/test/vagrant/action/box/destroy_test.rb +18 -0
  158. data/test/vagrant/action/box/download_test.rb +125 -0
  159. data/test/vagrant/action/box/package_test.rb +25 -0
  160. data/test/vagrant/action/box/unpackage_test.rb +84 -0
  161. data/test/vagrant/action/box/verify_test.rb +30 -0
  162. data/test/vagrant/action/builder_test.rb +203 -0
  163. data/test/vagrant/action/env/set_test.rb +24 -0
  164. data/test/vagrant/action/environment_test.rb +27 -0
  165. data/test/vagrant/action/general/package_test.rb +268 -0
  166. data/test/vagrant/action/general/validate_test.rb +31 -0
  167. data/test/vagrant/action/vm/boot_test.rb +66 -0
  168. data/test/vagrant/action/vm/check_box_test.rb +56 -0
  169. data/test/vagrant/action/vm/check_guest_additions_test.rb +9 -0
  170. data/test/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
  171. data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +72 -0
  172. data/test/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
  173. data/test/vagrant/action/vm/clear_shared_folders_test.rb +49 -0
  174. data/test/vagrant/action/vm/customize_test.rb +30 -0
  175. data/test/vagrant/action/vm/destroy_test.rb +25 -0
  176. data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
  177. data/test/vagrant/action/vm/discard_state_test.rb +45 -0
  178. data/test/vagrant/action/vm/export_test.rb +107 -0
  179. data/test/vagrant/action/vm/forward_ports_helpers_test.rb +70 -0
  180. data/test/vagrant/action/vm/forward_ports_test.rb +194 -0
  181. data/test/vagrant/action/vm/halt_test.rb +79 -0
  182. data/test/vagrant/action/vm/host_name_test.rb +36 -0
  183. data/test/vagrant/action/vm/import_test.rb +66 -0
  184. data/test/vagrant/action/vm/match_mac_address_test.rb +36 -0
  185. data/test/vagrant/action/vm/network_test.rb +286 -0
  186. data/test/vagrant/action/vm/nfs_helpers_test.rb +26 -0
  187. data/test/vagrant/action/vm/nfs_test.rb +260 -0
  188. data/test/vagrant/action/vm/package_test.rb +25 -0
  189. data/test/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
  190. data/test/vagrant/action/vm/provision_test.rb +90 -0
  191. data/test/vagrant/action/vm/resume_test.rb +35 -0
  192. data/test/vagrant/action/vm/share_folders_test.rb +139 -0
  193. data/test/vagrant/action/vm/suspend_test.rb +35 -0
  194. data/test/vagrant/action/warden_test.rb +119 -0
  195. data/test/vagrant/action_test.rb +89 -0
  196. data/test/vagrant/box_collection_test.rb +45 -0
  197. data/test/vagrant/box_test.rb +74 -0
  198. data/test/vagrant/cli_test.rb +35 -0
  199. data/test/vagrant/command/base_test.rb +23 -0
  200. data/test/vagrant/command/group_base_test.rb +15 -0
  201. data/test/vagrant/command/helpers_test.rb +88 -0
  202. data/test/vagrant/command/package_test.rb +27 -0
  203. data/test/vagrant/config/base_test.rb +52 -0
  204. data/test/vagrant/config/error_recorder_test.rb +18 -0
  205. data/test/vagrant/config/ssh_test.rb +12 -0
  206. data/test/vagrant/config/vagrant_test.rb +35 -0
  207. data/test/vagrant/config/vm/provisioner_test.rb +92 -0
  208. data/test/vagrant/config/vm_test.rb +86 -0
  209. data/test/vagrant/config_test.rb +162 -0
  210. data/test/vagrant/data_store_test.rb +77 -0
  211. data/test/vagrant/downloaders/base_test.rb +28 -0
  212. data/test/vagrant/downloaders/file_test.rb +48 -0
  213. data/test/vagrant/downloaders/http_test.rb +80 -0
  214. data/test/vagrant/environment_test.rb +508 -0
  215. data/test/vagrant/errors_test.rb +42 -0
  216. data/test/vagrant/hosts/base_test.rb +46 -0
  217. data/test/vagrant/hosts/bsd_test.rb +53 -0
  218. data/test/vagrant/hosts/linux_test.rb +54 -0
  219. data/test/vagrant/plugin_test.rb +9 -0
  220. data/test/vagrant/provisioners/base_test.rb +63 -0
  221. data/test/vagrant/provisioners/chef_server_test.rb +188 -0
  222. data/test/vagrant/provisioners/chef_solo_test.rb +219 -0
  223. data/test/vagrant/provisioners/chef_test.rb +179 -0
  224. data/test/vagrant/provisioners/puppet_server_test.rb +68 -0
  225. data/test/vagrant/provisioners/puppet_test.rb +182 -0
  226. data/test/vagrant/provisioners/shell_test.rb +68 -0
  227. data/test/vagrant/ssh/session_test.rb +40 -0
  228. data/test/vagrant/ssh_test.rb +342 -0
  229. data/test/vagrant/systems/base_test.rb +18 -0
  230. data/test/vagrant/systems/linux_test.rb +114 -0
  231. data/test/vagrant/ui_test.rb +29 -0
  232. data/test/vagrant/util/busy_test.rb +106 -0
  233. data/test/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
  234. data/test/vagrant/util/plain_logger_test.rb +17 -0
  235. data/test/vagrant/util/platform_test.rb +18 -0
  236. data/test/vagrant/util/resource_logger_test.rb +78 -0
  237. data/test/vagrant/util/retryable_test.rb +50 -0
  238. data/test/vagrant/util/stacked_proc_runner_test.rb +43 -0
  239. data/test/vagrant/util/template_renderer_test.rb +145 -0
  240. data/test/vagrant/vm_test.rb +291 -0
  241. data/vagrant.gemspec +36 -0
  242. metadata +514 -0
@@ -0,0 +1,8 @@
1
+ #VAGRANT-BEGIN
2
+ # The contents below are automatically generated by Vagrant.
3
+ # Please do not modify any of these contents.
4
+ auto eth<%= net_options[:adapter] %>
5
+ iface eth<%= net_options[:adapter] %> inet static
6
+ address <%= net_options[:ip] %>
7
+ netmask <%= net_options[:netmask] %>
8
+ #VAGRANT-END
@@ -0,0 +1,5 @@
1
+ #VAGRANT-BEGIN
2
+ # The contents below are automatically generated by Vagrant.
3
+ # Please do not modify any of these contents.
4
+ config_eth<%= net_options[:adapter] %>=("<%= net_options[:ip] %> netmask <%= net_options[:netmask] %>")
5
+ #VAGRANT-END
@@ -0,0 +1,8 @@
1
+ #VAGRANT-BEGIN
2
+ # The contents below are automatically generated by Vagrant.
3
+ # Please do not modify any of these contents.
4
+ BOOTPROTO=static
5
+ DHCPCLASS=
6
+ IPADDR=<%= net_options[:ip] %>
7
+ NETMASK=<%= net_options[:netmask] %>
8
+ #VAGRANT-END
@@ -0,0 +1,5 @@
1
+ # VAGRANT-BEGIN: <%= uuid %>
2
+ <% folders.each do |name, opts| %>
3
+ "<%= opts[:hostpath] %>" <%= ip %><% if opts[:map_uid] -%> -mapall=<%= [opts[:map_uid],opts[:map_gid]].compact.join(":") %><% end -%>
4
+ <% end %>
5
+ # VAGRANT-END: <%= uuid %>
@@ -0,0 +1,5 @@
1
+ # VAGRANT-BEGIN: <%= uuid %>
2
+ <% folders.each do |name, opts| %>
3
+ "<%= opts[:hostpath] %>" <%= ip %>(rw,no_subtree_check,all_squash<% if opts[:map_uid] %>,anonuid=<%= opts[:map_uid] %><% end %><% if opts[:map_gid] %>,anongid=<%= opts[:map_gid] %><% end %>)
4
+ <% end %>
5
+ # VAGRANT-END: <%= uuid %>
@@ -0,0 +1,11 @@
1
+ Vagrant::Config.run do |config|
2
+ # This Vagrantfile is auto-generated by `vagrant package` to contain
3
+ # the MAC address of the box. Custom configuration should be placed in
4
+ # the actual `Vagrantfile` in this box.
5
+ config.vm.base_mac = "<%= base_mac %>"
6
+ end
7
+
8
+ # Load include vagrant file if it exists after the auto-generated
9
+ # so it can override any of the settings
10
+ include_vagrantfile = File.expand_path("../include/_Vagrantfile", __FILE__)
11
+ load include_vagrantfile if File.exist?(include_vagrantfile)
@@ -0,0 +1,9 @@
1
+ Host <%= host_key %>
2
+ HostName <%= ssh_host %>
3
+ User <%= ssh_user %>
4
+ Port <%= ssh_port %>
5
+ UserKnownHostsFile /dev/null
6
+ StrictHostKeyChecking no
7
+ PasswordAuthentication no
8
+ IdentityFile <%= private_key_path %>
9
+ IdentitiesOnly yes
@@ -0,0 +1,8 @@
1
+ en:
2
+ vagrant:
3
+ test:
4
+ errors:
5
+ test_key: This is a test key
6
+ test_key_with_interpolation: This is a test key that says %{key}
7
+ alternate:
8
+ test_key: This is an alternate
@@ -0,0 +1,26 @@
1
+ # Add this folder to the load path for "test_helper"
2
+ $:.unshift(File.dirname(__FILE__))
3
+
4
+ require 'vagrant'
5
+ require 'mario'
6
+ require 'contest'
7
+ require 'mocha'
8
+
9
+ # Try to load ruby debug since its useful if it is available.
10
+ # But not a big deal if its not available (probably on a non-MRI
11
+ # platform)
12
+ begin
13
+ require 'ruby-debug'
14
+ rescue LoadError
15
+ end
16
+
17
+ # Silence Mario by sending log output to black hole
18
+ Mario::Platform.logger(nil)
19
+
20
+ # Add the I18n locale for tests
21
+ I18n.load_path << File.expand_path("../locales/en.yml", __FILE__)
22
+
23
+ class Test::Unit::TestCase
24
+ include Vagrant::TestHelpers
25
+ end
26
+
@@ -0,0 +1,18 @@
1
+ require "test_helper"
2
+
3
+ class DestroyBoxActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::Box::Destroy
6
+ @app, @env = action_env
7
+ @env["box"] = Vagrant::Box.new(vagrant_env, "foo")
8
+
9
+ @instance = @klass.new(@app, @env)
10
+ end
11
+
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)
17
+ end
18
+ end
@@ -0,0 +1,125 @@
1
+ require "test_helper"
2
+
3
+ class DownloadBoxActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::Box::Download
6
+ @app, @env = action_env
7
+ @env["box"] = Vagrant::Box.new(vagrant_env, "foo")
8
+ @env["box"].uri = "http://google.com"
9
+ end
10
+
11
+ context "initializing" do
12
+ should "initialize download classes" do
13
+ @klass.new(@app, @env)
14
+ assert_equal [Vagrant::Downloaders::HTTP, Vagrant::Downloaders::File], @env["download.classes"]
15
+ end
16
+ end
17
+
18
+ context "with an instance" do
19
+ setup do
20
+ @instance = @klass.new(@app, @env)
21
+ end
22
+
23
+ context "calling" do
24
+ should "call the proper methods in sequence" do
25
+ seq = sequence("seq")
26
+ @instance.expects(:instantiate_downloader).in_sequence(seq).returns(true)
27
+ @instance.expects(:download).in_sequence(seq)
28
+ @app.expects(:call).with(@env).in_sequence(seq)
29
+ @instance.expects(:recover).with(@env).in_sequence(seq)
30
+ @instance.call(@env)
31
+ end
32
+ end
33
+
34
+ context "instantiating downloader" do
35
+ should "instantiate the proper class" do
36
+ instance = mock("instance")
37
+ Vagrant::Downloaders::HTTP.expects(:new).with(@env).returns(instance)
38
+ instance.expects(:prepare).with(@env["box"].uri).once
39
+ assert @instance.instantiate_downloader
40
+ end
41
+
42
+ should "error environment if URI is invalid for any downloaders" do
43
+ @env["box"].uri = "foobar"
44
+ assert_raises(Vagrant::Errors::BoxDownloadUnknownType) {
45
+ @instance.instantiate_downloader
46
+ }
47
+ end
48
+ end
49
+
50
+ context "downloading" do
51
+ setup do
52
+ @path = "foo"
53
+
54
+ @tempfile = mock("tempfile")
55
+ @tempfile.stubs(:path).returns(@path)
56
+
57
+ @instance.stubs(:with_tempfile).yields(@tempfile)
58
+ @instance.stubs(:download_to)
59
+ end
60
+
61
+ should "make a tempfile and copy the URI contents to it" do
62
+ @instance.expects(:with_tempfile).yields(@tempfile)
63
+ @instance.expects(:download_to).with(@tempfile)
64
+ @instance.download
65
+ end
66
+
67
+ should "save the tempfile path" do
68
+ @instance.download
69
+ assert @env.has_key?("download.temp_path")
70
+ assert_equal @tempfile.path, @env["download.temp_path"]
71
+ assert_equal @tempfile.path, @instance.temp_path
72
+ end
73
+ end
74
+
75
+ context "tempfile" do
76
+ should "create a tempfile in the vagrant tmp directory" do
77
+ File.expects(:open).with { |name, bitmask|
78
+ name.to_s =~ /#{Vagrant::Action::Box::Download::BASENAME}/ && name.to_s =~ /#{@env.env.tmp_path}/
79
+ }.once
80
+ @instance.with_tempfile
81
+ end
82
+
83
+ should "yield the tempfile object" do
84
+ @tempfile = mock("tempfile")
85
+ File.expects(:open).yields(@tempfile)
86
+
87
+ @instance.with_tempfile do |otherfile|
88
+ assert @tempfile.equal?(otherfile)
89
+ end
90
+ end
91
+ end
92
+
93
+ context "cleaning up" do
94
+ setup do
95
+ @temp_path = "foo"
96
+ @instance.stubs(:temp_path).returns(@temp_path)
97
+ File.stubs(:exist?).returns(true)
98
+ end
99
+
100
+ should "delete the temporary file if it exists" do
101
+ File.expects(:unlink).with(@temp_path).once
102
+ @instance.recover(@env)
103
+ end
104
+
105
+ should "not delete anything if it doesn't exist" do
106
+ File.stubs(:exist?).returns(false)
107
+ File.expects(:unlink).never
108
+ @instance.recover(@env)
109
+ end
110
+ end
111
+
112
+ context "downloading to" do
113
+ setup do
114
+ @downloader = mock("downloader")
115
+ @instance.instance_variable_set(:@downloader, @downloader)
116
+ end
117
+
118
+ should "call download! on the download with the URI and tempfile" do
119
+ tempfile = "foo"
120
+ @downloader.expects(:download!).with(@env["box"].uri, tempfile)
121
+ @instance.download_to(tempfile)
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,25 @@
1
+ require "test_helper"
2
+
3
+ class PackageBoxActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::Box::Package
6
+ @app, @env = action_env
7
+ @env["box"] = Vagrant::Box.new(vagrant_env, "foo")
8
+
9
+ @instance = @klass.new(@app, @env)
10
+ end
11
+
12
+ should "be a subclass of general packaging middleware" do
13
+ assert @instance.is_a?(Vagrant::Action::General::Package)
14
+ end
15
+
16
+ should "set the package directory then call parent" do
17
+ @instance.expects(:general_call).once.with() do |env|
18
+ assert env["package.directory"]
19
+ assert_equal env["package.directory"], @env["box"].directory
20
+ true
21
+ end
22
+
23
+ @instance.call(@env)
24
+ end
25
+ end
@@ -0,0 +1,84 @@
1
+ require "test_helper"
2
+
3
+ class UnpackageBoxActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::Box::Unpackage
6
+ @app, @env = action_env
7
+ @env["box"] = Vagrant::Box.new(vagrant_env, "foo")
8
+
9
+ @instance = @klass.new(@app, @env)
10
+ end
11
+
12
+ context "calling" do
13
+ should "call the proper chain" do
14
+ seq = sequence("sequence")
15
+ @instance.expects(:setup_box_directory).in_sequence(seq).returns(true)
16
+ @instance.expects(:decompress).in_sequence(seq)
17
+ @app.expects(:call).with(@env)
18
+ @instance.call(@env)
19
+ end
20
+ end
21
+
22
+ context "cleaning up" do
23
+ setup do
24
+ @instance.stubs(:box_directory).returns("foo")
25
+ File.stubs(:directory?).returns(false)
26
+ FileUtils.stubs(:rm_rf)
27
+ end
28
+
29
+ should "do nothing if box directory is not set" do
30
+ @instance.stubs(:box_directory).returns(nil)
31
+ File.expects(:directory?).never
32
+ FileUtils.expects(:rm_rf).never
33
+ @instance.recover(nil)
34
+ end
35
+
36
+ should "do nothing if not a directory" do
37
+ FileUtils.expects(:rm_rf).never
38
+ @instance.recover(nil)
39
+ end
40
+
41
+ should "remove the directory if exists" do
42
+ File.expects(:directory?).with(@instance.box_directory).once.returns(true)
43
+ FileUtils.expects(:rm_rf).with(@instance.box_directory).once
44
+ @instance.recover(nil)
45
+ end
46
+ end
47
+
48
+ context "setting up the box directory" do
49
+ setup do
50
+ File.stubs(:directory?).returns(false)
51
+ FileUtils.stubs(:mkdir_p)
52
+ end
53
+
54
+ should "error the environment if the box already exists" do
55
+ File.expects(:directory?).returns(true)
56
+ assert_raises(Vagrant::Errors::BoxAlreadyExists) {
57
+ @instance.setup_box_directory
58
+ }
59
+ end
60
+
61
+ should "create the directory" do
62
+ FileUtils.expects(:mkdir_p).with(@env["box"].directory).once
63
+ @instance.setup_box_directory
64
+ end
65
+ end
66
+
67
+ context "decompressing" do
68
+ setup do
69
+ @env["download.temp_path"] = "bar"
70
+
71
+ Dir.stubs(:chdir).yields
72
+ end
73
+
74
+ should "change to the box directory" do
75
+ Dir.expects(:chdir).with(@env["box"].directory)
76
+ @instance.decompress
77
+ end
78
+
79
+ should "open the tar file within the new directory, and extract it all" do
80
+ Archive::Tar::Minitar.expects(:unpack).with(@env["download.temp_path"], @env["box"].directory.to_s).once
81
+ @instance.decompress
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,30 @@
1
+ require "test_helper"
2
+
3
+ class VerifyBoxActionTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::Box::Verify
6
+ @app, @env = action_env
7
+ @env["box"] = Vagrant::Box.new(vagrant_env, "foo")
8
+
9
+ @instance = @klass.new(@app, @env)
10
+ end
11
+
12
+ context "calling" do
13
+ should "continue fine if verification succeeds" do
14
+ seq = sequence("seq")
15
+ VirtualBox::Appliance.expects(:new).with(@env["box"].ovf_file.to_s).in_sequence(seq)
16
+ @app.expects(:call).with(@env).once.in_sequence(seq)
17
+ assert_nothing_raised {
18
+ @instance.call(@env)
19
+ }
20
+ end
21
+
22
+ should "halt chain if verification fails" do
23
+ VirtualBox::Appliance.expects(:new).with(@env["box"].ovf_file.to_s).raises(Exception)
24
+ @app.expects(:call).with(@env).never
25
+ assert_raises(Vagrant::Errors::BoxVerificationFailed) {
26
+ @instance.call(@env)
27
+ }
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,203 @@
1
+ require "test_helper"
2
+
3
+ class ActionBuilderTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Action::Builder
6
+ end
7
+
8
+ context "initializing" do
9
+ should "setup empty middleware stack" do
10
+ builder = @klass.new
11
+ assert builder.stack.empty?
12
+ end
13
+
14
+ should "take block to setup stack" do
15
+ builder = @klass.new do
16
+ use Hash
17
+ use lambda { |i| i }
18
+ end
19
+
20
+ assert !builder.stack.empty?
21
+ assert_equal 2, builder.stack.length
22
+ end
23
+ end
24
+
25
+ context "with an instance" do
26
+ setup do
27
+ @instance = @klass.new
28
+ end
29
+
30
+ context "adding to the stack" do
31
+ should "return self" do
32
+ assert @instance.equal?(@instance.use(1))
33
+ end
34
+
35
+ should "add to the end" do
36
+ @instance.use 1
37
+ @instance.use 2
38
+ assert_equal [2, [], nil], @instance.stack.last
39
+ end
40
+
41
+ should "merge in other builder's stack" do
42
+ other = @klass.new do
43
+ use 2
44
+ use 3
45
+ end
46
+
47
+ @instance.use 1
48
+ @instance.use other
49
+ assert_equal 3, @instance.stack.length
50
+ end
51
+
52
+ should "prepend a set environment task for merging middlewares if given" do
53
+ other = @klass.new do
54
+ use 1
55
+ end
56
+
57
+ @instance.use 0
58
+ @instance.use(other, :foo => :bar)
59
+ assert_equal 3, @instance.stack.length
60
+ assert_equal Vagrant::Action::Env::Set, @instance.stack[1].first
61
+ end
62
+ end
63
+
64
+ context "flatten" do
65
+ should "return the flattened format of the builder" do
66
+ env = Vagrant::Action::Environment.new(nil)
67
+ env.expects(:foo).once
68
+
69
+ func = lambda { |x| x.foo }
70
+ @instance.use func
71
+ proc = @instance.flatten
72
+ assert proc.respond_to?(:call)
73
+ proc.call(env)
74
+ end
75
+ end
76
+
77
+ context "inserting" do
78
+ setup do
79
+ @instance.use "1"
80
+ @instance.use "2"
81
+ end
82
+
83
+ should "insert at the proper numeric index" do
84
+ @instance.insert(1, "3")
85
+ assert_equal "3", @instance.stack[1].first
86
+ end
87
+
88
+ should "insert next to the proper object if given" do
89
+ @instance.insert("2", "3")
90
+ assert_equal "3", @instance.stack[1].first
91
+ end
92
+
93
+ should "be able to call insert_before as well" do
94
+ @instance.insert_before("1", "0")
95
+ assert_equal "0", @instance.stack.first.first
96
+ end
97
+
98
+ should "be able to insert_after" do
99
+ @instance.insert_after("1", "0")
100
+ assert_equal "0", @instance.stack[1].first
101
+ end
102
+
103
+ should "be able to insert_after using numeric index" do
104
+ @instance.insert_after(1, "0")
105
+ assert_equal "0", @instance.stack[2].first
106
+ end
107
+
108
+ should "raise an exception if invalid index" do
109
+ assert_raises(RuntimeError) {
110
+ @instance.insert_after("15", "0")
111
+ }
112
+ end
113
+ end
114
+
115
+ context "swapping" do
116
+ setup do
117
+ @instance.use "1"
118
+ @instance.use "2"
119
+ end
120
+
121
+ should "be able to swap using the object" do
122
+ @instance.swap "1", "3"
123
+ assert_equal "3", @instance.stack.first.first
124
+ end
125
+
126
+ should "be able to swap using the index" do
127
+ @instance.swap 0, "3"
128
+ assert_equal "3", @instance.stack.first.first
129
+ end
130
+ end
131
+
132
+ context "deleting" do
133
+ setup do
134
+ @instance.use "1"
135
+ end
136
+
137
+ should "delete the proper object" do
138
+ @instance.delete("1")
139
+ assert @instance.stack.empty?
140
+ end
141
+
142
+ should "delete by index if given" do
143
+ @instance.delete(0)
144
+ assert @instance.stack.empty?
145
+ end
146
+ end
147
+
148
+ context "getting an index of an object" do
149
+ should "return the proper index if it exists" do
150
+ @instance.use 1
151
+ @instance.use 2
152
+ @instance.use 3
153
+ assert_equal 1, @instance.index(2)
154
+ end
155
+ end
156
+
157
+ context "converting to an app" do
158
+ should "make non-classes lambdas" do
159
+ env = Vagrant::Action::Environment.new(nil)
160
+ env.expects(:foo).once
161
+
162
+ func = lambda { |x| x.foo }
163
+ @instance.use func
164
+ @instance.to_app(env).call(env)
165
+ end
166
+
167
+ should "raise exception if given invalid middleware" do
168
+ @instance.use 7
169
+ assert_raises(RuntimeError) {
170
+ @instance.to_app(nil)
171
+ }
172
+ end
173
+ end
174
+
175
+ context "calling" do
176
+ def mock_middleware
177
+ middleware = Class.new do
178
+ def initialize(app, env)
179
+ @app = app
180
+ end
181
+
182
+ def call(env)
183
+ @app.call(env)
184
+ end
185
+ end
186
+ end
187
+
188
+ should "convert to an app then call with the env" do
189
+ mw = mock_middleware
190
+ mw.any_instance.expects(:call).with() do |env|
191
+ assert env.has_key?(:key)
192
+ true
193
+ end
194
+
195
+ env = Vagrant::Action::Environment.new(nil)
196
+ env[:key] = :value
197
+
198
+ @instance.use(mw)
199
+ @instance.call(env)
200
+ end
201
+ end
202
+ end
203
+ end