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,29 @@
1
+ require "test_helper"
2
+
3
+ class ShellUITest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::UI::Shell
6
+ @shell = mock("shell")
7
+ @instance = @klass.new(vagrant_env, @shell)
8
+ end
9
+
10
+ context "prefixing with resource" do
11
+ should "prefix message with environment resource" do
12
+ @shell.expects(:say).with() do |message, color|
13
+ assert message =~ /\[#{@instance.env.resource}\]/
14
+ true
15
+ end
16
+
17
+ @instance.info("vagrant.errors.test_key")
18
+ end
19
+
20
+ should "not prefix the message if given false" do
21
+ @shell.expects(:say).with() do |message, color|
22
+ assert message !~ /\[#{@instance.env.resource}\]/
23
+ true
24
+ end
25
+
26
+ @instance.info("vagrant.errors.test_key", :prefix => false)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,106 @@
1
+ require "test_helper"
2
+
3
+ class BusyUtilTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Util::Busy
6
+ end
7
+
8
+ context "registering" do
9
+ setup do
10
+ @callback = lambda { puts "FOO" }
11
+ Signal.stubs(:trap)
12
+ end
13
+
14
+ teardown do
15
+ @klass.registered.clear
16
+ end
17
+
18
+ should "trap the signal on the first registration" do
19
+ Signal.expects(:trap).with("INT").once
20
+ @klass.register(@callback)
21
+ @klass.register(lambda { puts "BAR" })
22
+ end
23
+
24
+ should "not register the same callback multiple times" do
25
+ @klass.register(@callback)
26
+ @klass.register(@callback)
27
+ @klass.register(@callback)
28
+ assert_equal 1, @klass.registered.length
29
+ assert_equal @callback, @klass.registered.first
30
+ end
31
+ end
32
+
33
+ context "unregistering" do
34
+ setup do
35
+ Signal.stubs(:trap)
36
+
37
+ @callback = lambda { puts "FOO" }
38
+ end
39
+
40
+ teardown do
41
+ @klass.registered.clear
42
+ end
43
+
44
+ should "remove the callback and set the trap to DEFAULT when removing final" do
45
+ @klass.register(@callback)
46
+ Signal.expects(:trap).with("INT", "DEFAULT").once
47
+ @klass.unregister(@callback)
48
+ assert @klass.registered.empty?
49
+ end
50
+
51
+ should "not reset signal trap if not final callback" do
52
+ @klass.register(@callback)
53
+ @klass.register(lambda { puts "BAR" })
54
+ Signal.expects(:trap).never
55
+ @klass.unregister(@callback)
56
+ end
57
+ end
58
+
59
+ context "marking for busy" do
60
+ setup do
61
+ @callback = lambda { "foo" }
62
+ end
63
+
64
+ should "register, call the block, then unregister" do
65
+ waiter = mock("waiting")
66
+ proc = lambda { waiter.ping! }
67
+
68
+ seq = sequence('seq')
69
+ @klass.expects(:register).with(@callback).in_sequence(seq)
70
+ waiter.expects(:ping!).in_sequence(seq)
71
+ @klass.expects(:unregister).with(@callback).in_sequence(seq)
72
+
73
+ @klass.busy(@callback, &proc)
74
+ end
75
+
76
+ should "unregister callback even if block raises exception" do
77
+ waiter = mock("waiting")
78
+ proc = lambda { waiter.ping! }
79
+
80
+ seq = sequence('seq')
81
+ @klass.expects(:register).with(@callback).in_sequence(seq)
82
+ waiter.expects(:ping!).raises(Exception.new("uh oh!")).in_sequence(seq)
83
+ @klass.expects(:unregister).with(@callback).in_sequence(seq)
84
+
85
+ assert_raises(Exception) { @klass.busy(@callback, &proc) }
86
+ end
87
+ end
88
+
89
+ context "firing callbacks" do
90
+ setup do
91
+ Signal.stubs(:trap)
92
+ end
93
+
94
+ teardown do
95
+ @klass.registered.clear
96
+ end
97
+
98
+ should "just call the registered callbacks" do
99
+ waiting = mock("waiting")
100
+ waiting.expects(:ping!).once
101
+
102
+ @klass.register(lambda { waiting.ping! })
103
+ @klass.fire_callbacks
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,29 @@
1
+ require "test_helper"
2
+
3
+ class CounterUtilTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Class.new do
6
+ extend Vagrant::Util::Counter
7
+ end
8
+ end
9
+
10
+ context "basic counter" do
11
+ should "get and update the counter" do
12
+ assert_equal 1, @klass.get_and_update_counter
13
+ assert_equal 2, @klass.get_and_update_counter
14
+ end
15
+ end
16
+
17
+ context "multiple classes with a counter" do
18
+ setup do
19
+ @klass2 = Class.new do
20
+ extend Vagrant::Util::Counter
21
+ end
22
+ end
23
+
24
+ should "not affect other classes" do
25
+ assert_equal 1, @klass.get_and_update_counter
26
+ assert_equal 1, @klass2.get_and_update_counter
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,39 @@
1
+ require "test_helper"
2
+
3
+ class HashWithIndifferentAccessUtilTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::Util::HashWithIndifferentAccess
6
+ @instance = @klass.new
7
+ end
8
+
9
+ should "be a hash" do
10
+ assert @instance.is_a?(Hash)
11
+ end
12
+
13
+ should "allow indifferent access when setting with a string" do
14
+ @instance["foo"] = "bar"
15
+ assert_equal "bar", @instance[:foo]
16
+ end
17
+
18
+ should "allow indifferent access when setting with a symbol" do
19
+ @instance[:foo] = "bar"
20
+ assert_equal "bar", @instance["foo"]
21
+ end
22
+
23
+ should "allow indifferent key lookup" do
24
+ @instance["foo"] = "bar"
25
+ assert @instance.key?(:foo)
26
+ assert @instance.has_key?(:foo)
27
+ assert @instance.include?(:foo)
28
+ assert @instance.member?(:foo)
29
+ end
30
+
31
+ should "forward up block to Hash if given to initializer" do
32
+ instance = @klass.new do |h,k|
33
+ h[k] = "foo"
34
+ end
35
+
36
+ assert_equal "foo", instance[:foo]
37
+ assert_equal "foo", instance["foo"]
38
+ end
39
+ end
@@ -0,0 +1,18 @@
1
+ require "test_helper"
2
+
3
+ class PlatformTest < Test::Unit::TestCase
4
+ context "file options" do
5
+ should "include add binary bit to options on windows platform" do
6
+ # This constant is not defined on non-windows platforms, so define it here
7
+ File::BINARY = 4096 unless defined?(File::BINARY)
8
+
9
+ Vagrant::Util::Platform.stubs(:windows?).returns(true)
10
+ assert_equal Vagrant::Util::Platform.tar_file_options, File::CREAT|File::EXCL|File::WRONLY|File::BINARY
11
+ end
12
+
13
+ should "not include binary bit on other platforms" do
14
+ Vagrant::Util::Platform.stubs(:windows?).returns(false)
15
+ assert_equal Vagrant::Util::Platform.tar_file_options, File::CREAT|File::EXCL|File::WRONLY
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,50 @@
1
+ require "test_helper"
2
+
3
+ class RetryableUtilTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Class.new do
6
+ extend Vagrant::Util::Retryable
7
+ end
8
+ end
9
+
10
+ should "retry specified number of times if exception is raised" do
11
+ proc = mock("proc")
12
+ proc.expects(:call).twice
13
+
14
+ assert_raises(RuntimeError) {
15
+ @klass.retryable(:tries => 2, :on => RuntimeError) do
16
+ proc.call
17
+ raise "An error"
18
+ end
19
+ }
20
+ end
21
+
22
+ should "only retry on specified exception" do
23
+ proc = mock("proc")
24
+ proc.expects(:call).once
25
+
26
+ assert_raises(StandardError) {
27
+ @klass.retryable(:tries => 5, :on => RuntimeError) do
28
+ proc.call
29
+ raise StandardError.new
30
+ end
31
+ }
32
+ end
33
+
34
+ should "retry on multiple exceptions given" do
35
+ proc = mock("proc")
36
+ proc.expects(:call).twice
37
+
38
+ assert_raises(StandardError) {
39
+ @klass.retryable(:tries => 2, :on => [StandardError, RuntimeError]) do
40
+ proc.call
41
+ raise StandardError
42
+ end
43
+ }
44
+ end
45
+
46
+ should "return the value of the block" do
47
+ result = @klass.retryable { 7 }
48
+ assert_equal 7, result
49
+ end
50
+ end
@@ -0,0 +1,43 @@
1
+ require "test_helper"
2
+
3
+ class StackedProcRunnerUtilTest < Test::Unit::TestCase
4
+ class TestClass
5
+ include Vagrant::Util::StackedProcRunner
6
+ end
7
+
8
+ setup do
9
+ @instance = TestClass.new
10
+ @instance.proc_stack.clear
11
+ end
12
+
13
+ should "not run the procs right away" do
14
+ obj = mock("obj")
15
+ obj.expects(:foo).never
16
+ @instance.push_proc { |config| obj.foo }
17
+ @instance.push_proc { |config| obj.foo }
18
+ @instance.push_proc { |config| obj.foo }
19
+ end
20
+
21
+ should "run the blocks when run_procs! is ran" do
22
+ obj = mock("obj")
23
+ obj.expects(:foo).times(2)
24
+ @instance.push_proc { obj.foo }
25
+ @instance.push_proc { obj.foo }
26
+ @instance.run_procs!
27
+ end
28
+
29
+ should "run the blocks with the same arguments" do
30
+ passed_config = mock("config")
31
+ @instance.push_proc { |config| assert passed_config.equal?(config) }
32
+ @instance.push_proc { |config| assert passed_config.equal?(config) }
33
+ @instance.run_procs!(passed_config)
34
+ end
35
+
36
+ should "not clear the blocks after running" do
37
+ obj = mock("obj")
38
+ obj.expects(:foo).times(2)
39
+ @instance.push_proc { obj.foo }
40
+ @instance.run_procs!
41
+ @instance.run_procs!
42
+ end
43
+ end
@@ -0,0 +1,145 @@
1
+ require "test_helper"
2
+
3
+ class TemplateRendererUtilTest < Test::Unit::TestCase
4
+ context "initializing" do
5
+ should "set the template to the given argument" do
6
+ r = Vagrant::Util::TemplateRenderer.new("foo")
7
+ assert_equal "foo", r.template
8
+ end
9
+
10
+ should "set any additional variables" do
11
+ r = Vagrant::Util::TemplateRenderer.new("foo", {:bar => :baz})
12
+ assert_equal :baz, r.bar
13
+ end
14
+ end
15
+
16
+ context "rendering" do
17
+ setup do
18
+ @template = "foo"
19
+ @r = Vagrant::Util::TemplateRenderer.new(@template)
20
+ @r.stubs(:full_template_path).returns(@template + "!")
21
+
22
+ @contents = "bar"
23
+
24
+ @file = mock("file")
25
+ @file.stubs(:read).returns(@contents)
26
+ File.stubs(:open).yields(@file)
27
+ end
28
+
29
+ should "open the template file for reading" do
30
+ File.expects(:open).with(@r.full_template_path, 'r').once
31
+ @r.render
32
+ end
33
+
34
+ should "set the template to the file contents, render, then set it back" do
35
+ result = "bar"
36
+
37
+ template_seq = sequence("template_seq")
38
+ @r.expects(:template=).with(@file.read).in_sequence(template_seq)
39
+ @r.expects(:render_string).returns(result).in_sequence(template_seq)
40
+ @r.expects(:template=).with(@template).in_sequence(template_seq)
41
+ assert_equal result, @r.render
42
+ end
43
+
44
+ should "render the ERB file in the context of the renderer" do
45
+ result = "bar"
46
+ template = "<%= foo %>"
47
+ @r.foo = result
48
+ @file.expects(:read).returns(template)
49
+ assert_equal result, @r.render
50
+ end
51
+ end
52
+
53
+ context "rendering as string" do
54
+ setup do
55
+ @result = "foo"
56
+ @erb = mock("erb")
57
+ @erb.stubs(:result).returns(@result)
58
+
59
+ @r = Vagrant::Util::TemplateRenderer.new("foo")
60
+ end
61
+
62
+ should "simply render the template as a string" do
63
+ Erubis::Eruby.expects(:new).with(@r.template, :trim => true).returns(@erb)
64
+ @erb.expects(:result).returns(@result)
65
+ assert_equal @result, @r.render_string
66
+ end
67
+ end
68
+
69
+ context "the full template path" do
70
+ setup do
71
+ @template = "foo"
72
+ @r = Vagrant::Util::TemplateRenderer.new(@template)
73
+ end
74
+
75
+ should "be the ERB file in the templates directory" do
76
+ result = Vagrant.source_root.join("templates", "#{@template}.erb")
77
+ assert_equal result.to_s, @r.full_template_path
78
+ end
79
+
80
+ should "remove duplicate path separators" do
81
+ @r.template = "foo///bar"
82
+ result = Vagrant.source_root.join("templates", "foo", "bar.erb")
83
+ assert_equal result.to_s, @r.full_template_path
84
+ end
85
+ end
86
+
87
+ context "class methods" do
88
+ context "render_with method" do
89
+ setup do
90
+ @template = "foo"
91
+ @r = Vagrant::Util::TemplateRenderer.new(@template)
92
+ @r.stubs(:render)
93
+
94
+ @method = :rawr
95
+
96
+ Vagrant::Util::TemplateRenderer.stubs(:new).with(@template, {}).returns(@r)
97
+ end
98
+
99
+ should "use the second argument as the template" do
100
+ Vagrant::Util::TemplateRenderer.expects(:new).with(@template, {}).returns(@r)
101
+ Vagrant::Util::TemplateRenderer.render_with(@method, @template)
102
+ end
103
+
104
+ should "send in additional argument to the renderer" do
105
+ data = {:hey => :foo}
106
+ Vagrant::Util::TemplateRenderer.expects(:new).with(@template, data).returns(@r)
107
+ Vagrant::Util::TemplateRenderer.render_with(@method, @template, data)
108
+ end
109
+
110
+ should "yield a block if given with the renderer as the argument" do
111
+ @r.expects(:yielded=).with(true).once
112
+ Vagrant::Util::TemplateRenderer.render_with(@method, @template) do |r|
113
+ r.yielded = true
114
+ end
115
+ end
116
+
117
+ should "render the result using the given method" do
118
+ result = mock('result')
119
+ @r.expects(@method).returns(result)
120
+ assert_equal result, Vagrant::Util::TemplateRenderer.render_with(@method, @template)
121
+ end
122
+
123
+ should "convert the given method to a sym prior to calling" do
124
+ @r.expects(@method.to_sym).returns(nil)
125
+ Vagrant::Util::TemplateRenderer.render_with(@method.to_s, @template)
126
+ end
127
+ end
128
+
129
+ context "render method" do
130
+ should "call render_with the render! method" do
131
+ args = ["foo", "bar", "baz"]
132
+ Vagrant::Util::TemplateRenderer.expects(:render_with).with(:render, *args)
133
+ Vagrant::Util::TemplateRenderer.render(*args)
134
+ end
135
+ end
136
+
137
+ context "render_string method" do
138
+ should "call render_with the render! method" do
139
+ args = ["foo", "bar", "baz"]
140
+ Vagrant::Util::TemplateRenderer.expects(:render_with).with(:render_string, *args)
141
+ Vagrant::Util::TemplateRenderer.render_string(*args)
142
+ end
143
+ end
144
+ end
145
+ end