rvagrant 0.8.7.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 (251) hide show
  1. data/.gitignore +25 -0
  2. data/.yardopts +1 -0
  3. data/CHANGELOG.md +386 -0
  4. data/Gemfile +21 -0
  5. data/LICENSE +21 -0
  6. data/README.md +61 -0
  7. data/Rakefile +11 -0
  8. data/bin/vagrant +28 -0
  9. data/config/default.rb +38 -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 +44 -0
  18. data/lib/vagrant/action.rb +138 -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 +108 -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 +113 -0
  32. data/lib/vagrant/action/general/validate.rb +19 -0
  33. data/lib/vagrant/action/vm.rb +34 -0
  34. data/lib/vagrant/action/vm/boot.rb +48 -0
  35. data/lib/vagrant/action/vm/check_accessible.rb +23 -0
  36. data/lib/vagrant/action/vm/check_box.rb +28 -0
  37. data/lib/vagrant/action/vm/check_guest_additions.rb +35 -0
  38. data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
  39. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +26 -0
  40. data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
  41. data/lib/vagrant/action/vm/clear_shared_folders.rb +27 -0
  42. data/lib/vagrant/action/vm/customize.rb +26 -0
  43. data/lib/vagrant/action/vm/destroy.rb +19 -0
  44. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +30 -0
  45. data/lib/vagrant/action/vm/discard_state.rb +22 -0
  46. data/lib/vagrant/action/vm/export.rb +52 -0
  47. data/lib/vagrant/action/vm/forward_ports.rb +133 -0
  48. data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
  49. data/lib/vagrant/action/vm/halt.rb +29 -0
  50. data/lib/vagrant/action/vm/host_name.rb +21 -0
  51. data/lib/vagrant/action/vm/import.rb +40 -0
  52. data/lib/vagrant/action/vm/match_mac_address.rb +26 -0
  53. data/lib/vagrant/action/vm/modify.rb +37 -0
  54. data/lib/vagrant/action/vm/network.rb +146 -0
  55. data/lib/vagrant/action/vm/nfs.rb +160 -0
  56. data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
  57. data/lib/vagrant/action/vm/package.rb +23 -0
  58. data/lib/vagrant/action/vm/package_vagrantfile.rb +33 -0
  59. data/lib/vagrant/action/vm/provision.rb +34 -0
  60. data/lib/vagrant/action/vm/provisioner_cleanup.rb +26 -0
  61. data/lib/vagrant/action/vm/resume.rb +20 -0
  62. data/lib/vagrant/action/vm/share_folders.rb +78 -0
  63. data/lib/vagrant/action/vm/suspend.rb +20 -0
  64. data/lib/vagrant/action/warden.rb +85 -0
  65. data/lib/vagrant/box.rb +90 -0
  66. data/lib/vagrant/box_collection.rb +53 -0
  67. data/lib/vagrant/cli.rb +55 -0
  68. data/lib/vagrant/command.rb +25 -0
  69. data/lib/vagrant/command/base.rb +106 -0
  70. data/lib/vagrant/command/box.rb +33 -0
  71. data/lib/vagrant/command/destroy.rb +17 -0
  72. data/lib/vagrant/command/group_base.rb +107 -0
  73. data/lib/vagrant/command/halt.rb +18 -0
  74. data/lib/vagrant/command/helpers.rb +33 -0
  75. data/lib/vagrant/command/init.rb +14 -0
  76. data/lib/vagrant/command/named_base.rb +14 -0
  77. data/lib/vagrant/command/package.rb +41 -0
  78. data/lib/vagrant/command/provision.rb +23 -0
  79. data/lib/vagrant/command/reload.rb +17 -0
  80. data/lib/vagrant/command/resume.rb +17 -0
  81. data/lib/vagrant/command/ssh.rb +49 -0
  82. data/lib/vagrant/command/ssh_config.rb +29 -0
  83. data/lib/vagrant/command/status.rb +31 -0
  84. data/lib/vagrant/command/suspend.rb +17 -0
  85. data/lib/vagrant/command/up.rb +19 -0
  86. data/lib/vagrant/command/upgrade_to_060.rb +45 -0
  87. data/lib/vagrant/command/version.rb +13 -0
  88. data/lib/vagrant/config.rb +123 -0
  89. data/lib/vagrant/config/base.rb +85 -0
  90. data/lib/vagrant/config/error_recorder.rb +19 -0
  91. data/lib/vagrant/config/nfs.rb +10 -0
  92. data/lib/vagrant/config/package.rb +9 -0
  93. data/lib/vagrant/config/ssh.rb +38 -0
  94. data/lib/vagrant/config/top.rb +61 -0
  95. data/lib/vagrant/config/vagrant.rb +17 -0
  96. data/lib/vagrant/config/vm.rb +148 -0
  97. data/lib/vagrant/config/vm/provisioner.rb +56 -0
  98. data/lib/vagrant/config/vm/sub_vm.rb +17 -0
  99. data/lib/vagrant/data_store.rb +70 -0
  100. data/lib/vagrant/downloaders.rb +7 -0
  101. data/lib/vagrant/downloaders/base.rb +23 -0
  102. data/lib/vagrant/downloaders/file.rb +22 -0
  103. data/lib/vagrant/downloaders/http.rb +70 -0
  104. data/lib/vagrant/environment.rb +516 -0
  105. data/lib/vagrant/errors.rb +352 -0
  106. data/lib/vagrant/hosts.rb +9 -0
  107. data/lib/vagrant/hosts/arch.rb +27 -0
  108. data/lib/vagrant/hosts/base.rb +76 -0
  109. data/lib/vagrant/hosts/bsd.rb +58 -0
  110. data/lib/vagrant/hosts/fedora.rb +11 -0
  111. data/lib/vagrant/hosts/linux.rb +69 -0
  112. data/lib/vagrant/plugin.rb +79 -0
  113. data/lib/vagrant/provisioners.rb +9 -0
  114. data/lib/vagrant/provisioners/base.rb +67 -0
  115. data/lib/vagrant/provisioners/chef.rb +155 -0
  116. data/lib/vagrant/provisioners/chef_client.rb +120 -0
  117. data/lib/vagrant/provisioners/chef_solo.rb +135 -0
  118. data/lib/vagrant/provisioners/puppet.rb +137 -0
  119. data/lib/vagrant/provisioners/puppet_server.rb +55 -0
  120. data/lib/vagrant/provisioners/shell.rb +96 -0
  121. data/lib/vagrant/ssh.rb +224 -0
  122. data/lib/vagrant/ssh/session.rb +136 -0
  123. data/lib/vagrant/systems.rb +13 -0
  124. data/lib/vagrant/systems/arch.rb +34 -0
  125. data/lib/vagrant/systems/base.rb +87 -0
  126. data/lib/vagrant/systems/debian.rb +36 -0
  127. data/lib/vagrant/systems/freebsd.rb +84 -0
  128. data/lib/vagrant/systems/gentoo.rb +27 -0
  129. data/lib/vagrant/systems/linux.rb +82 -0
  130. data/lib/vagrant/systems/linux/config.rb +21 -0
  131. data/lib/vagrant/systems/linux/error.rb +9 -0
  132. data/lib/vagrant/systems/redhat.rb +48 -0
  133. data/lib/vagrant/systems/solaris.rb +67 -0
  134. data/lib/vagrant/systems/suse.rb +9 -0
  135. data/lib/vagrant/systems/ubuntu.rb +17 -0
  136. data/lib/vagrant/test_helpers.rb +128 -0
  137. data/lib/vagrant/ui.rb +81 -0
  138. data/lib/vagrant/util.rb +13 -0
  139. data/lib/vagrant/util/busy.rb +59 -0
  140. data/lib/vagrant/util/counter.rb +24 -0
  141. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  142. data/lib/vagrant/util/platform.rb +57 -0
  143. data/lib/vagrant/util/retryable.rb +25 -0
  144. data/lib/vagrant/util/safe_exec.rb +35 -0
  145. data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
  146. data/lib/vagrant/util/template_renderer.rb +83 -0
  147. data/lib/vagrant/version.rb +6 -0
  148. data/lib/vagrant/vm.rb +181 -0
  149. data/templates/chef_server_client.erb +32 -0
  150. data/templates/chef_solo_solo.erb +23 -0
  151. data/templates/commands/init/Vagrantfile.erb +86 -0
  152. data/templates/config/validation_failed.erb +7 -0
  153. data/templates/locales/en.yml +556 -0
  154. data/templates/network_entry_arch.erb +9 -0
  155. data/templates/network_entry_debian.erb +8 -0
  156. data/templates/network_entry_gentoo.erb +5 -0
  157. data/templates/network_entry_redhat.erb +9 -0
  158. data/templates/nfs/exports.erb +5 -0
  159. data/templates/nfs/exports_linux.erb +5 -0
  160. data/templates/package_Vagrantfile.erb +11 -0
  161. data/templates/ssh_config.erb +15 -0
  162. data/test/unit/locales/en.yml +8 -0
  163. data/test/unit/test_helper.rb +28 -0
  164. data/test/unit/vagrant/action/box/destroy_test.rb +18 -0
  165. data/test/unit/vagrant/action/box/download_test.rb +125 -0
  166. data/test/unit/vagrant/action/box/package_test.rb +25 -0
  167. data/test/unit/vagrant/action/box/unpackage_test.rb +84 -0
  168. data/test/unit/vagrant/action/box/verify_test.rb +30 -0
  169. data/test/unit/vagrant/action/builder_test.rb +207 -0
  170. data/test/unit/vagrant/action/env/set_test.rb +24 -0
  171. data/test/unit/vagrant/action/environment_test.rb +27 -0
  172. data/test/unit/vagrant/action/general/package_test.rb +268 -0
  173. data/test/unit/vagrant/action/general/validate_test.rb +31 -0
  174. data/test/unit/vagrant/action/vm/boot_test.rb +66 -0
  175. data/test/unit/vagrant/action/vm/check_accessible_test.rb +61 -0
  176. data/test/unit/vagrant/action/vm/check_box_test.rb +56 -0
  177. data/test/unit/vagrant/action/vm/check_guest_additions_test.rb +9 -0
  178. data/test/unit/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
  179. data/test/unit/vagrant/action/vm/clear_forwarded_ports_test.rb +52 -0
  180. data/test/unit/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
  181. data/test/unit/vagrant/action/vm/clear_shared_folders_test.rb +40 -0
  182. data/test/unit/vagrant/action/vm/customize_test.rb +37 -0
  183. data/test/unit/vagrant/action/vm/destroy_test.rb +25 -0
  184. data/test/unit/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
  185. data/test/unit/vagrant/action/vm/discard_state_test.rb +45 -0
  186. data/test/unit/vagrant/action/vm/export_test.rb +107 -0
  187. data/test/unit/vagrant/action/vm/forward_ports_helpers_test.rb +77 -0
  188. data/test/unit/vagrant/action/vm/forward_ports_test.rb +213 -0
  189. data/test/unit/vagrant/action/vm/halt_test.rb +79 -0
  190. data/test/unit/vagrant/action/vm/host_name_test.rb +36 -0
  191. data/test/unit/vagrant/action/vm/import_test.rb +66 -0
  192. data/test/unit/vagrant/action/vm/match_mac_address_test.rb +40 -0
  193. data/test/unit/vagrant/action/vm/modify_test.rb +38 -0
  194. data/test/unit/vagrant/action/vm/network_test.rb +286 -0
  195. data/test/unit/vagrant/action/vm/nfs_helpers_test.rb +26 -0
  196. data/test/unit/vagrant/action/vm/nfs_test.rb +260 -0
  197. data/test/unit/vagrant/action/vm/package_test.rb +25 -0
  198. data/test/unit/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
  199. data/test/unit/vagrant/action/vm/provision_test.rb +65 -0
  200. data/test/unit/vagrant/action/vm/provisioner_cleanup_test.rb +56 -0
  201. data/test/unit/vagrant/action/vm/resume_test.rb +35 -0
  202. data/test/unit/vagrant/action/vm/share_folders_test.rb +144 -0
  203. data/test/unit/vagrant/action/vm/suspend_test.rb +35 -0
  204. data/test/unit/vagrant/action/warden_test.rb +125 -0
  205. data/test/unit/vagrant/action_test.rb +89 -0
  206. data/test/unit/vagrant/box_collection_test.rb +45 -0
  207. data/test/unit/vagrant/box_test.rb +74 -0
  208. data/test/unit/vagrant/cli_test.rb +35 -0
  209. data/test/unit/vagrant/command/base_test.rb +23 -0
  210. data/test/unit/vagrant/command/group_base_test.rb +15 -0
  211. data/test/unit/vagrant/command/helpers_test.rb +88 -0
  212. data/test/unit/vagrant/command/package_test.rb +27 -0
  213. data/test/unit/vagrant/config/base_test.rb +52 -0
  214. data/test/unit/vagrant/config/error_recorder_test.rb +18 -0
  215. data/test/unit/vagrant/config/ssh_test.rb +12 -0
  216. data/test/unit/vagrant/config/vagrant_test.rb +35 -0
  217. data/test/unit/vagrant/config/vm/provisioner_test.rb +92 -0
  218. data/test/unit/vagrant/config/vm_test.rb +56 -0
  219. data/test/unit/vagrant/config_test.rb +162 -0
  220. data/test/unit/vagrant/data_store_test.rb +77 -0
  221. data/test/unit/vagrant/downloaders/base_test.rb +28 -0
  222. data/test/unit/vagrant/downloaders/file_test.rb +48 -0
  223. data/test/unit/vagrant/downloaders/http_test.rb +82 -0
  224. data/test/unit/vagrant/environment_test.rb +598 -0
  225. data/test/unit/vagrant/errors_test.rb +42 -0
  226. data/test/unit/vagrant/hosts/base_test.rb +46 -0
  227. data/test/unit/vagrant/hosts/bsd_test.rb +53 -0
  228. data/test/unit/vagrant/hosts/linux_test.rb +54 -0
  229. data/test/unit/vagrant/plugin_test.rb +9 -0
  230. data/test/unit/vagrant/provisioners/base_test.rb +63 -0
  231. data/test/unit/vagrant/provisioners/chef_client_test.rb +190 -0
  232. data/test/unit/vagrant/provisioners/chef_solo_test.rb +114 -0
  233. data/test/unit/vagrant/provisioners/chef_test.rb +202 -0
  234. data/test/unit/vagrant/provisioners/puppet_server_test.rb +68 -0
  235. data/test/unit/vagrant/provisioners/puppet_test.rb +182 -0
  236. data/test/unit/vagrant/provisioners/shell_test.rb +79 -0
  237. data/test/unit/vagrant/ssh/session_test.rb +40 -0
  238. data/test/unit/vagrant/ssh_test.rb +307 -0
  239. data/test/unit/vagrant/systems/base_test.rb +18 -0
  240. data/test/unit/vagrant/systems/linux_test.rb +104 -0
  241. data/test/unit/vagrant/ui_test.rb +29 -0
  242. data/test/unit/vagrant/util/busy_test.rb +106 -0
  243. data/test/unit/vagrant/util/counter_test.rb +29 -0
  244. data/test/unit/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
  245. data/test/unit/vagrant/util/platform_test.rb +18 -0
  246. data/test/unit/vagrant/util/retryable_test.rb +50 -0
  247. data/test/unit/vagrant/util/stacked_proc_runner_test.rb +43 -0
  248. data/test/unit/vagrant/util/template_renderer_test.rb +145 -0
  249. data/test/unit/vagrant/vm_test.rb +300 -0
  250. data/vagrant.gemspec +35 -0
  251. metadata +431 -0
@@ -0,0 +1,9 @@
1
+
2
+ #VAGRANT-BEGIN
3
+ # The contents below are automatically generated by Vagrant.
4
+ # Please do not modify any of these contents.
5
+ interface=eth<%= net_options[:adapter] %>
6
+ address=<%= net_options[:ip]%>
7
+ netmask=<%= net_options[:netmask] %>
8
+ gateway=
9
+ #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
+ 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,9 @@
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
+ DEVICE=eth<%= net_options[:adapter] %>
9
+ #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,15 @@
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
10
+ <% if forward_agent -%>
11
+ ForwardAgent yes
12
+ <% end -%>
13
+ <% if forward_x11 -%>
14
+ ForwardX11 yes
15
+ <% end -%>
@@ -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,28 @@
1
+ # Add this folder to the load path for "test_helper"
2
+ $:.unshift(File.dirname(__FILE__))
3
+
4
+ require 'vagrant'
5
+ require 'contest'
6
+ require 'mocha'
7
+
8
+ # Try to load ruby debug since its useful if it is available.
9
+ # But not a big deal if its not available (probably on a non-MRI
10
+ # platform)
11
+ begin
12
+ require 'ruby-debug'
13
+ rescue LoadError
14
+ end
15
+
16
+ # Set the home directory to some temporary directory
17
+ ENV["HOME"] = Vagrant.source_root.join("test", "tmp", "home").to_s
18
+
19
+ # Set the log output to nothing
20
+ ENV["VAGRANT_LOG"] = "NULL"
21
+
22
+ # Add the I18n locale for tests
23
+ I18n.load_path << File.expand_path("../locales/en.yml", __FILE__)
24
+
25
+ class Test::Unit::TestCase
26
+ include Vagrant::TestHelpers
27
+ end
28
+
@@ -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,207 @@
1
+ require "test_helper"
2
+ require "logger"
3
+
4
+ class ActionBuilderTest < Test::Unit::TestCase
5
+ setup do
6
+ @klass = Vagrant::Action::Builder
7
+ end
8
+
9
+ context "initializing" do
10
+ should "setup empty middleware stack" do
11
+ builder = @klass.new
12
+ assert builder.stack.empty?
13
+ end
14
+
15
+ should "take block to setup stack" do
16
+ builder = @klass.new do
17
+ use Hash
18
+ use lambda { |i| i }
19
+ end
20
+
21
+ assert !builder.stack.empty?
22
+ assert_equal 2, builder.stack.length
23
+ end
24
+ end
25
+
26
+ context "with an instance" do
27
+ setup do
28
+ @instance = @klass.new
29
+ end
30
+
31
+ context "adding to the stack" do
32
+ should "return self" do
33
+ assert @instance.equal?(@instance.use(1))
34
+ end
35
+
36
+ should "add to the end" do
37
+ @instance.use 1
38
+ @instance.use 2
39
+ assert_equal [2, [], nil], @instance.stack.last
40
+ end
41
+
42
+ should "merge in other builder's stack" do
43
+ other = @klass.new do
44
+ use 2
45
+ use 3
46
+ end
47
+
48
+ @instance.use 1
49
+ @instance.use other
50
+ assert_equal 3, @instance.stack.length
51
+ end
52
+
53
+ should "prepend a set environment task for merging middlewares if given" do
54
+ other = @klass.new do
55
+ use 1
56
+ end
57
+
58
+ @instance.use 0
59
+ @instance.use(other, :foo => :bar)
60
+ assert_equal 3, @instance.stack.length
61
+ assert_equal Vagrant::Action::Env::Set, @instance.stack[1].first
62
+ end
63
+ end
64
+
65
+ context "flatten" do
66
+ should "return the flattened format of the builder" do
67
+ env = Vagrant::Action::Environment.new(nil)
68
+ env["logger"] = Logger.new(nil)
69
+ env.expects(:foo).once
70
+
71
+ func = lambda { |x| x.foo }
72
+ @instance.use func
73
+ proc = @instance.flatten
74
+ assert proc.respond_to?(:call)
75
+ proc.call(env)
76
+ end
77
+ end
78
+
79
+ context "inserting" do
80
+ setup do
81
+ @instance.use "1"
82
+ @instance.use "2"
83
+ end
84
+
85
+ should "insert at the proper numeric index" do
86
+ @instance.insert(1, "3")
87
+ assert_equal "3", @instance.stack[1].first
88
+ end
89
+
90
+ should "insert next to the proper object if given" do
91
+ @instance.insert("2", "3")
92
+ assert_equal "3", @instance.stack[1].first
93
+ end
94
+
95
+ should "be able to call insert_before as well" do
96
+ @instance.insert_before("1", "0")
97
+ assert_equal "0", @instance.stack.first.first
98
+ end
99
+
100
+ should "be able to insert_after" do
101
+ @instance.insert_after("1", "0")
102
+ assert_equal "0", @instance.stack[1].first
103
+ end
104
+
105
+ should "be able to insert_after using numeric index" do
106
+ @instance.insert_after(1, "0")
107
+ assert_equal "0", @instance.stack[2].first
108
+ end
109
+
110
+ should "raise an exception if invalid index" do
111
+ assert_raises(RuntimeError) {
112
+ @instance.insert_after("15", "0")
113
+ }
114
+ end
115
+ end
116
+
117
+ context "swapping" do
118
+ setup do
119
+ @instance.use "1"
120
+ @instance.use "2"
121
+ end
122
+
123
+ should "be able to swap using the object" do
124
+ @instance.swap "1", "3"
125
+ assert_equal "3", @instance.stack.first.first
126
+ end
127
+
128
+ should "be able to swap using the index" do
129
+ @instance.swap 0, "3"
130
+ assert_equal "3", @instance.stack.first.first
131
+ end
132
+ end
133
+
134
+ context "deleting" do
135
+ setup do
136
+ @instance.use "1"
137
+ end
138
+
139
+ should "delete the proper object" do
140
+ @instance.delete("1")
141
+ assert @instance.stack.empty?
142
+ end
143
+
144
+ should "delete by index if given" do
145
+ @instance.delete(0)
146
+ assert @instance.stack.empty?
147
+ end
148
+ end
149
+
150
+ context "getting an index of an object" do
151
+ should "return the proper index if it exists" do
152
+ @instance.use 1
153
+ @instance.use 2
154
+ @instance.use 3
155
+ assert_equal 1, @instance.index(2)
156
+ end
157
+ end
158
+
159
+ context "converting to an app" do
160
+ should "make non-classes lambdas" do
161
+ env = Vagrant::Action::Environment.new(nil)
162
+ env["logger"] = Logger.new(nil)
163
+ env.expects(:foo).once
164
+
165
+ func = lambda { |x| x.foo }
166
+ @instance.use func
167
+ @instance.to_app(env).call(env)
168
+ end
169
+
170
+ should "raise exception if given invalid middleware" do
171
+ @instance.use 7
172
+ assert_raises(RuntimeError) {
173
+ @instance.to_app(nil)
174
+ }
175
+ end
176
+ end
177
+
178
+ context "calling" do
179
+ def mock_middleware
180
+ middleware = Class.new do
181
+ def initialize(app, env)
182
+ @app = app
183
+ end
184
+
185
+ def call(env)
186
+ @app.call(env)
187
+ end
188
+ end
189
+ end
190
+
191
+ should "convert to an app then call with the env" do
192
+ mw = mock_middleware
193
+ mw.any_instance.expects(:call).with() do |env|
194
+ assert env.has_key?(:key)
195
+ true
196
+ end
197
+
198
+ env = Vagrant::Action::Environment.new(nil)
199
+ env["logger"] = Logger.new(nil)
200
+ env[:key] = :value
201
+
202
+ @instance.use(mw)
203
+ @instance.call(env)
204
+ end
205
+ end
206
+ end
207
+ end