vagrantup 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 (235) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.yardopts +1 -0
  4. data/CHANGELOG.md +56 -0
  5. data/Gemfile +14 -3
  6. data/Gemfile.lock +38 -11
  7. data/README.md +1 -1
  8. data/bin/vagrant +20 -5
  9. data/config/default.rb +6 -8
  10. data/lib/vagrant.rb +40 -13
  11. data/lib/vagrant/action.rb +56 -16
  12. data/lib/vagrant/action/box/destroy.rb +3 -1
  13. data/lib/vagrant/action/box/download.rb +8 -13
  14. data/lib/vagrant/action/box/unpackage.rb +8 -11
  15. data/lib/vagrant/action/box/verify.rb +3 -3
  16. data/lib/vagrant/action/builder.rb +3 -30
  17. data/lib/vagrant/action/builtin.rb +6 -1
  18. data/lib/vagrant/action/environment.rb +14 -62
  19. data/lib/vagrant/action/general/package.rb +29 -22
  20. data/lib/vagrant/action/vm/boot.rb +5 -12
  21. data/lib/vagrant/action/vm/check_box.rb +4 -4
  22. data/lib/vagrant/action/vm/check_guest_additions.rb +4 -6
  23. data/lib/vagrant/action/vm/clear_forwarded_ports.rb +2 -2
  24. data/lib/vagrant/action/vm/clear_nfs_exports.rb +1 -1
  25. data/lib/vagrant/action/vm/clear_shared_folders.rb +1 -1
  26. data/lib/vagrant/action/vm/customize.rb +1 -1
  27. data/lib/vagrant/action/vm/destroy.rb +1 -2
  28. data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +1 -1
  29. data/lib/vagrant/action/vm/disable_networks.rb +11 -9
  30. data/lib/vagrant/action/vm/discard_state.rb +2 -2
  31. data/lib/vagrant/action/vm/export.rb +10 -11
  32. data/lib/vagrant/action/vm/forward_ports.rb +21 -9
  33. data/lib/vagrant/action/vm/halt.rb +3 -8
  34. data/lib/vagrant/action/vm/import.rb +16 -14
  35. data/lib/vagrant/action/vm/match_mac_address.rb +1 -1
  36. data/lib/vagrant/action/vm/network.rb +9 -16
  37. data/lib/vagrant/action/vm/nfs.rb +14 -18
  38. data/lib/vagrant/action/vm/provision.rb +5 -5
  39. data/lib/vagrant/action/vm/resume.rb +1 -1
  40. data/lib/vagrant/action/vm/share_folders.rb +6 -44
  41. data/lib/vagrant/action/vm/suspend.rb +1 -1
  42. data/lib/vagrant/action/warden.rb +74 -0
  43. data/lib/vagrant/box.rb +18 -82
  44. data/lib/vagrant/box_collection.rb +47 -0
  45. data/lib/vagrant/cli.rb +55 -0
  46. data/lib/vagrant/command/base.rb +106 -0
  47. data/lib/vagrant/command/box.rb +33 -0
  48. data/lib/vagrant/command/destroy.rb +17 -0
  49. data/lib/vagrant/command/group_base.rb +99 -0
  50. data/lib/vagrant/command/halt.rb +18 -0
  51. data/lib/vagrant/command/helpers.rb +33 -0
  52. data/lib/vagrant/command/init.rb +14 -0
  53. data/lib/vagrant/command/named_base.rb +14 -0
  54. data/lib/vagrant/command/package.rb +41 -0
  55. data/lib/vagrant/command/provision.rb +17 -0
  56. data/lib/vagrant/command/reload.rb +17 -0
  57. data/lib/vagrant/command/resume.rb +17 -0
  58. data/lib/vagrant/command/ssh.rb +41 -0
  59. data/lib/vagrant/command/ssh_config.rb +21 -0
  60. data/lib/vagrant/command/status.rb +23 -0
  61. data/lib/vagrant/command/suspend.rb +17 -0
  62. data/lib/vagrant/command/up.rb +20 -0
  63. data/lib/vagrant/command/upgrade_to_060.rb +45 -0
  64. data/lib/vagrant/command/version.rb +13 -0
  65. data/lib/vagrant/config.rb +107 -189
  66. data/lib/vagrant/config/base.rb +67 -0
  67. data/lib/vagrant/config/error_recorder.rb +19 -0
  68. data/lib/vagrant/config/nfs.rb +10 -0
  69. data/lib/vagrant/config/package.rb +9 -0
  70. data/lib/vagrant/config/ssh.rb +28 -0
  71. data/lib/vagrant/config/vagrant.rb +21 -0
  72. data/lib/vagrant/config/vm.rb +111 -0
  73. data/lib/vagrant/data_store.rb +68 -0
  74. data/lib/vagrant/downloaders/file.rb +3 -3
  75. data/lib/vagrant/downloaders/http.rb +5 -5
  76. data/lib/vagrant/environment.rb +246 -243
  77. data/lib/vagrant/errors.rb +306 -0
  78. data/lib/vagrant/hosts/base.rb +1 -1
  79. data/lib/vagrant/hosts/bsd.rb +3 -9
  80. data/lib/vagrant/hosts/linux.rb +3 -9
  81. data/lib/vagrant/plugin.rb +50 -0
  82. data/lib/vagrant/provisioners/base.rb +0 -6
  83. data/lib/vagrant/provisioners/chef.rb +63 -58
  84. data/lib/vagrant/provisioners/chef_server.rb +9 -11
  85. data/lib/vagrant/provisioners/chef_solo.rb +2 -2
  86. data/lib/vagrant/ssh.rb +34 -37
  87. data/lib/vagrant/systems/base.rb +0 -13
  88. data/lib/vagrant/systems/linux.rb +10 -33
  89. data/lib/vagrant/systems/solaris.rb +59 -0
  90. data/lib/vagrant/test_helpers.rb +109 -0
  91. data/lib/vagrant/ui.rb +65 -0
  92. data/lib/vagrant/util.rb +9 -19
  93. data/lib/vagrant/util/glob_loader.rb +19 -17
  94. data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
  95. data/lib/vagrant/util/plain_logger.rb +2 -0
  96. data/lib/vagrant/util/platform.rb +2 -0
  97. data/lib/vagrant/util/resource_logger.rb +5 -70
  98. data/lib/vagrant/util/retryable.rb +25 -0
  99. data/lib/vagrant/util/template_renderer.rb +1 -1
  100. data/lib/vagrant/version.rb +1 -1
  101. data/lib/vagrant/vm.rb +27 -13
  102. data/templates/commands/init/Vagrantfile.erb +13 -0
  103. data/templates/config/validation_failed.erb +7 -0
  104. data/templates/locales/en.yml +402 -0
  105. data/templates/package_Vagrantfile.erb +1 -1
  106. data/test/locales/en.yml +8 -0
  107. data/test/test_helper.rb +19 -103
  108. data/test/vagrant/action/box/destroy_test.rb +7 -19
  109. data/test/vagrant/action/box/download_test.rb +9 -25
  110. data/test/vagrant/action/box/package_test.rb +2 -2
  111. data/test/vagrant/action/box/unpackage_test.rb +8 -34
  112. data/test/vagrant/action/box/verify_test.rb +10 -19
  113. data/test/vagrant/action/builder_test.rb +0 -15
  114. data/test/vagrant/action/env/set_test.rb +1 -1
  115. data/test/vagrant/action/environment_test.rb +8 -26
  116. data/test/vagrant/action/general/package_test.rb +53 -53
  117. data/test/vagrant/action/vm/boot_test.rb +5 -22
  118. data/test/vagrant/action/vm/check_box_test.rb +35 -25
  119. data/test/vagrant/action/vm/clean_machine_folder_test.rb +1 -1
  120. data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +1 -1
  121. data/test/vagrant/action/vm/clear_nfs_exports_test.rb +1 -1
  122. data/test/vagrant/action/vm/clear_shared_folders_test.rb +1 -1
  123. data/test/vagrant/action/vm/customize_test.rb +2 -1
  124. data/test/vagrant/action/vm/destroy_test.rb +1 -2
  125. data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +1 -1
  126. data/test/vagrant/action/vm/disable_networks_test.rb +10 -1
  127. data/test/vagrant/action/vm/discard_state_test.rb +10 -1
  128. data/test/vagrant/action/vm/export_test.rb +9 -37
  129. data/test/vagrant/action/vm/forward_ports_helpers_test.rb +2 -2
  130. data/test/vagrant/action/vm/forward_ports_test.rb +19 -16
  131. data/test/vagrant/action/vm/halt_test.rb +11 -1
  132. data/test/vagrant/action/vm/import_test.rb +37 -21
  133. data/test/vagrant/action/vm/match_mac_address_test.rb +1 -1
  134. data/test/vagrant/action/vm/network_test.rb +8 -7
  135. data/test/vagrant/action/vm/nfs_helpers_test.rb +6 -3
  136. data/test/vagrant/action/vm/nfs_test.rb +20 -45
  137. data/test/vagrant/action/vm/package_test.rb +1 -1
  138. data/test/vagrant/action/vm/package_vagrantfile_test.rb +1 -1
  139. data/test/vagrant/action/vm/provision_test.rb +10 -17
  140. data/test/vagrant/action/vm/resume_test.rb +1 -1
  141. data/test/vagrant/action/vm/share_folders_test.rb +25 -106
  142. data/test/vagrant/action/vm/suspend_test.rb +1 -1
  143. data/test/vagrant/action/warden_test.rb +105 -0
  144. data/test/vagrant/action_test.rb +5 -27
  145. data/test/vagrant/box_collection_test.rb +44 -0
  146. data/test/vagrant/box_test.rb +5 -105
  147. data/test/vagrant/cli_test.rb +35 -0
  148. data/test/vagrant/command/base_test.rb +23 -0
  149. data/test/vagrant/command/group_base_test.rb +15 -0
  150. data/test/vagrant/command/helpers_test.rb +88 -0
  151. data/test/vagrant/config/base_test.rb +52 -0
  152. data/test/vagrant/config/error_recorder_test.rb +18 -0
  153. data/test/vagrant/config/ssh_test.rb +12 -0
  154. data/test/vagrant/config/vagrant_test.rb +11 -0
  155. data/test/vagrant/config/vm_test.rb +70 -0
  156. data/test/vagrant/config_test.rb +113 -206
  157. data/test/vagrant/data_store_test.rb +68 -0
  158. data/test/vagrant/downloaders/base_test.rb +1 -1
  159. data/test/vagrant/downloaders/file_test.rb +4 -3
  160. data/test/vagrant/downloaders/http_test.rb +14 -4
  161. data/test/vagrant/environment_test.rb +290 -590
  162. data/test/vagrant/errors_test.rb +42 -0
  163. data/test/vagrant/hosts/base_test.rb +1 -1
  164. data/test/vagrant/hosts/bsd_test.rb +3 -6
  165. data/test/vagrant/hosts/linux_test.rb +3 -5
  166. data/test/vagrant/plugin_test.rb +9 -0
  167. data/test/vagrant/provisioners/base_test.rb +1 -1
  168. data/test/vagrant/provisioners/chef_server_test.rb +31 -35
  169. data/test/vagrant/provisioners/chef_solo_test.rb +1 -1
  170. data/test/vagrant/provisioners/chef_test.rb +7 -7
  171. data/test/vagrant/ssh_session_test.rb +3 -10
  172. data/test/vagrant/ssh_test.rb +25 -33
  173. data/test/vagrant/systems/linux_test.rb +6 -71
  174. data/test/vagrant/ui_test.rb +29 -0
  175. data/test/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
  176. data/test/vagrant/util/resource_logger_test.rb +14 -81
  177. data/test/vagrant/util/retryable_test.rb +38 -0
  178. data/test/vagrant/util/template_renderer_test.rb +4 -4
  179. data/test/vagrant/vm_test.rb +47 -26
  180. data/vagrant.gemspec +14 -12
  181. metadata +121 -89
  182. data/bin/.gitignore +0 -0
  183. data/lib/vagrant/action/action_exception.rb +0 -16
  184. data/lib/vagrant/action/env/error_halt.rb +0 -16
  185. data/lib/vagrant/action/exception_catcher.rb +0 -14
  186. data/lib/vagrant/action/vm/persist.rb +0 -22
  187. data/lib/vagrant/active_list.rb +0 -83
  188. data/lib/vagrant/command.rb +0 -27
  189. data/lib/vagrant/commands/base.rb +0 -181
  190. data/lib/vagrant/commands/box.rb +0 -16
  191. data/lib/vagrant/commands/box/add.rb +0 -30
  192. data/lib/vagrant/commands/box/list.rb +0 -30
  193. data/lib/vagrant/commands/box/remove.rb +0 -30
  194. data/lib/vagrant/commands/box/repackage.rb +0 -35
  195. data/lib/vagrant/commands/destroy.rb +0 -37
  196. data/lib/vagrant/commands/halt.rb +0 -43
  197. data/lib/vagrant/commands/init.rb +0 -36
  198. data/lib/vagrant/commands/package.rb +0 -81
  199. data/lib/vagrant/commands/provision.rb +0 -31
  200. data/lib/vagrant/commands/reload.rb +0 -36
  201. data/lib/vagrant/commands/resume.rb +0 -35
  202. data/lib/vagrant/commands/ssh.rb +0 -78
  203. data/lib/vagrant/commands/ssh_config.rb +0 -45
  204. data/lib/vagrant/commands/status.rb +0 -125
  205. data/lib/vagrant/commands/suspend.rb +0 -36
  206. data/lib/vagrant/commands/up.rb +0 -44
  207. data/lib/vagrant/exceptions/uncallable_action.rb +0 -17
  208. data/lib/vagrant/util/translator.rb +0 -35
  209. data/templates/strings.yml +0 -341
  210. data/templates/unison/crontab_entry.erb +0 -1
  211. data/templates/unison/script.erb +0 -71
  212. data/test/vagrant/action/env/error_halt_test.rb +0 -21
  213. data/test/vagrant/action/exception_catcher_test.rb +0 -30
  214. data/test/vagrant/action/vm/persist_test.rb +0 -50
  215. data/test/vagrant/active_list_test.rb +0 -173
  216. data/test/vagrant/command_test.rb +0 -53
  217. data/test/vagrant/commands/base_test.rb +0 -139
  218. data/test/vagrant/commands/box/add_test.rb +0 -34
  219. data/test/vagrant/commands/box/list_test.rb +0 -32
  220. data/test/vagrant/commands/box/remove_test.rb +0 -41
  221. data/test/vagrant/commands/box/repackage_test.rb +0 -52
  222. data/test/vagrant/commands/destroy_test.rb +0 -44
  223. data/test/vagrant/commands/halt_test.rb +0 -50
  224. data/test/vagrant/commands/init_test.rb +0 -71
  225. data/test/vagrant/commands/package_test.rb +0 -97
  226. data/test/vagrant/commands/provision_test.rb +0 -60
  227. data/test/vagrant/commands/reload_test.rb +0 -47
  228. data/test/vagrant/commands/resume_test.rb +0 -44
  229. data/test/vagrant/commands/ssh_config_test.rb +0 -77
  230. data/test/vagrant/commands/ssh_test.rb +0 -129
  231. data/test/vagrant/commands/status_test.rb +0 -40
  232. data/test/vagrant/commands/suspend_test.rb +0 -44
  233. data/test/vagrant/commands/up_test.rb +0 -49
  234. data/test/vagrant/util/translator_test.rb +0 -61
  235. data/test/vagrant/util_test.rb +0 -27
@@ -0,0 +1,68 @@
1
+ require "test_helper"
2
+
3
+ class DataStoreTest < Test::Unit::TestCase
4
+ setup do
5
+ @klass = Vagrant::DataStore
6
+ @initial_data = { "foo" => "bar" }
7
+ @db_file = File.join(tmp_path, "data_store_test")
8
+ File.open(@db_file, "w") { |f| f.write(@initial_data.to_json) }
9
+
10
+ @instance = @klass.new(@db_file)
11
+ end
12
+
13
+ teardown do
14
+ File.delete(@db_file) if File.file?(@db_file)
15
+ end
16
+
17
+ should "be a hash with indifferent access" do
18
+ assert @instance.is_a?(Vagrant::Util::HashWithIndifferentAccess)
19
+ end
20
+
21
+ should "just be an empty hash if file doesn't exist" do
22
+ assert @klass.new("NEvERNENVENRNE").empty?
23
+ end
24
+
25
+ should "read the data" do
26
+ assert_equal @initial_data["foo"], @instance[:foo]
27
+ end
28
+
29
+ should "read the data by stringifying keys" do
30
+ @instance[:bar] = { "baz" => "yay" }
31
+ @instance.commit
32
+ @instance = @klass.new(@db_file)
33
+ assert_equal "yay", @instance[:bar]["baz"]
34
+ end
35
+
36
+ should "write the data, but not save it right away" do
37
+ @instance[:foo] = "changed"
38
+ assert_equal "changed", @instance[:foo]
39
+ assert_equal @initial_data["foo"], @klass.new(@db_file)["foo"]
40
+ end
41
+
42
+ should "write the data if commit is called" do
43
+ @instance[:foo] = "changed"
44
+ @instance.commit
45
+
46
+ assert_equal "changed", @klass.new(@db_file)[:foo]
47
+ end
48
+
49
+ should "delete the data store file if the hash is empty" do
50
+ @instance[:foo] = :bar
51
+ @instance.commit
52
+ assert File.exist?(@db_file)
53
+
54
+ @instance.clear
55
+ assert @instance.empty?
56
+ @instance.commit
57
+ assert !File.exist?(@db_file)
58
+ end
59
+
60
+ should "clean nil and empties if commit is called" do
61
+ @instance[:foo] = { :bar => nil }
62
+ @instance[:bar] = {}
63
+ @instance.commit
64
+
65
+ assert !@instance.has_key?(:foo)
66
+ assert !@instance.has_key?(:bar)
67
+ end
68
+ end
@@ -7,7 +7,7 @@ class BaseDownloaderTest < Test::Unit::TestCase
7
7
 
8
8
  context "base instance" do
9
9
  setup do
10
- @env = mock_environment
10
+ @env = vagrant_env
11
11
  @base = Vagrant::Downloaders::Base.new(@env)
12
12
  end
13
13
 
@@ -9,9 +9,10 @@ class FileDownloaderTest < Test::Unit::TestCase
9
9
  context "preparing" do
10
10
  should "raise an exception if the file does not exist" do
11
11
  File.expects(:file?).with(@uri).returns(false)
12
- @downloader.prepare(@uri)
13
- assert @downloader.env.error?
14
- assert_equal :downloader_file_doesnt_exist, @downloader.env.error.first
12
+
13
+ assert_raises(Vagrant::Errors::DownloaderFileDoesntExist) {
14
+ @downloader.prepare(@uri)
15
+ }
15
16
  end
16
17
  end
17
18
 
@@ -10,6 +10,8 @@ class HttpDownloaderTest < Test::Unit::TestCase
10
10
 
11
11
  context "downloading" do
12
12
  setup do
13
+ ENV["http_proxy"] = nil
14
+
13
15
  @parsed_uri = URI.parse(@uri)
14
16
  @http = Net::HTTP.new(@parsed_uri.host, @parsed_uri.port)
15
17
  Net::HTTP.stubs(:new).returns(@http)
@@ -17,7 +19,15 @@ class HttpDownloaderTest < Test::Unit::TestCase
17
19
  end
18
20
 
19
21
  should "create a proper net/http object" do
20
- Net::HTTP.expects(:new).with(@parsed_uri.host, @parsed_uri.port).once.returns(@http)
22
+ Net::HTTP.expects(:new).with(@parsed_uri.host, @parsed_uri.port, nil, nil, nil, nil).once.returns(@http)
23
+ @http.expects(:start)
24
+ @downloader.download!(@uri, @tempfile)
25
+ end
26
+
27
+ should "create a proper net/http object with a proxy" do
28
+ ENV["http_proxy"] = "http://user:foo@google.com"
29
+ @proxy = URI.parse(ENV["http_proxy"])
30
+ Net::HTTP.expects(:new).with(@parsed_uri.host, @parsed_uri.port, @proxy.host, @proxy.port, @proxy.user, @proxy.password).once.returns(@http)
21
31
  @http.expects(:start)
22
32
  @downloader.download!(@uri, @tempfile)
23
33
  end
@@ -45,10 +55,10 @@ class HttpDownloaderTest < Test::Unit::TestCase
45
55
 
46
56
  should "error environment if invalid URL given" do
47
57
  Net::HTTP.expects(:new).raises(SocketError.new)
48
- @downloader.download!(@uri, @tempfile)
49
58
 
50
- assert @downloader.env.error?
51
- assert_equal :box_download_http_socket_error, @downloader.env.error.first
59
+ assert_raises(Vagrant::Errors::DownloaderHTTPSocketError) {
60
+ @downloader.download!(@uri, @tempfile)
61
+ }
52
62
  end
53
63
  end
54
64
 
@@ -1,6 +1,11 @@
1
1
  require "test_helper"
2
+ require "pathname"
2
3
 
3
4
  class EnvironmentTest < Test::Unit::TestCase
5
+ setup do
6
+ @klass = Vagrant::Environment
7
+ end
8
+
4
9
  context "class method check virtualbox version" do
5
10
  setup do
6
11
  VirtualBox.stubs(:version).returns("3.1.4")
@@ -8,424 +13,409 @@ class EnvironmentTest < Test::Unit::TestCase
8
13
 
9
14
  should "not error and exit if everything is good" do
10
15
  VirtualBox.expects(:version).returns("3.2.4")
11
- Vagrant::Environment.expects(:error_and_exit).never
12
- Vagrant::Environment.check_virtualbox!
16
+ assert_nothing_raised { @klass.check_virtualbox! }
13
17
  end
14
18
 
15
19
  should "error and exit if VirtualBox is not installed or detected" do
16
- Vagrant::Environment.expects(:error_and_exit).with(:virtualbox_not_detected).once
17
20
  VirtualBox.expects(:version).returns(nil)
18
- Vagrant::Environment.check_virtualbox!
21
+ assert_raises(Vagrant::Errors::VirtualBoxNotDetected) { @klass.check_virtualbox! }
19
22
  end
20
23
 
21
24
  should "error and exit if VirtualBox is lower than version 3.2" do
22
25
  version = "3.1.12r1041"
23
- Vagrant::Environment.expects(:error_and_exit).with(:virtualbox_invalid_version, :version => version.to_s).once
24
26
  VirtualBox.expects(:version).returns(version)
25
- Vagrant::Environment.check_virtualbox!
27
+ assert_raises(Vagrant::Errors::VirtualBoxInvalidVersion) { @klass.check_virtualbox! }
26
28
  end
27
29
 
28
30
  should "error and exit for OSE VirtualBox" do
29
31
  version = "3.2.6_OSE"
30
- Vagrant::Environment.expects(:error_and_exit).with(:virtualbox_invalid_ose, :version => version.to_s).once
31
32
  VirtualBox.expects(:version).returns(version)
32
- Vagrant::Environment.check_virtualbox!
33
- end
34
- end
35
-
36
- context "class method load!" do
37
- setup do
38
- @cwd = mock('cwd')
39
-
40
- @env = mock('env')
41
- @env.stubs(:load!).returns(@env)
42
- end
43
-
44
- should "create the environment with given cwd, load it, and return it" do
45
- Vagrant::Environment.expects(:new).with(:cwd => @cwd).once.returns(@env)
46
- @env.expects(:load!).returns(@env)
47
- assert_equal @env, Vagrant::Environment.load!(@cwd)
48
- end
49
-
50
- should "work without a given cwd" do
51
- Vagrant::Environment.expects(:new).with(:cwd => nil).returns(@env)
52
-
53
- assert_nothing_raised {
54
- env = Vagrant::Environment.load!
55
- assert_equal env, @env
56
- }
33
+ assert_raises(Vagrant::Errors::VirtualBoxInvalidOSE) { @klass.check_virtualbox! }
57
34
  end
58
35
  end
59
36
 
60
37
  context "initialization" do
61
38
  should "set the cwd if given" do
62
39
  cwd = "foobarbaz"
63
- env = Vagrant::Environment.new(:cwd => cwd)
64
- assert_equal cwd, env.cwd
40
+ env = @klass.new(:cwd => cwd)
41
+ assert_equal Pathname.new(cwd), env.cwd
65
42
  end
66
43
 
67
44
  should "default to pwd if cwd is nil" do
68
- env = Vagrant::Environment.new
69
- assert_equal Dir.pwd, env.cwd
45
+ env = @klass.new
46
+ assert_equal Pathname.new(Dir.pwd), env.cwd
70
47
  end
71
48
  end
72
49
 
73
50
  context "paths" do
74
51
  setup do
75
- @env = mock_environment
76
- end
77
-
78
- context "cwd" do
79
- should "default to Dir.pwd" do
80
- assert_equal Dir.pwd, @env.cwd
81
- end
82
-
83
- should "return cwd if set" do
84
- @env.cwd = "foo"
85
- assert_equal "foo", @env.cwd
86
- end
52
+ @env = vagrant_env
87
53
  end
88
54
 
89
55
  context "dotfile path" do
90
- setup do
91
- @env.stubs(:root_path).returns("foo")
92
- end
93
-
94
56
  should "build up the dotfile out of the root path and the dotfile name" do
95
- assert_equal File.join(@env.root_path, @env.config.vagrant.dotfile_name), @env.dotfile_path
57
+ assert_equal @env.root_path.join(@env.config.vagrant.dotfile_name), @env.dotfile_path
96
58
  end
97
59
  end
98
60
 
99
61
  context "home path" do
100
- should "return nil if config is not yet loaded" do
101
- @env.stubs(:config).returns(nil)
102
- assert_nil @env.home_path
103
- end
104
-
105
62
  should "return the home path if it loaded" do
106
- assert_equal @env.config.vagrant.home, @env.home_path
63
+ expected = Pathname.new(File.expand_path(@env.config.vagrant.home, @env.root_path))
64
+ assert_equal expected, @env.home_path
107
65
  end
108
66
  end
109
67
 
110
68
  context "temp path" do
111
69
  should "return the home path joined with 'tmp'" do
112
- home_path = "foo"
113
- @env.stubs(:home_path).returns(home_path)
114
- assert_equal File.join("foo", "tmp"), @env.tmp_path
70
+ assert_equal @env.home_path.join("tmp"), @env.tmp_path
115
71
  end
116
72
  end
117
73
 
118
74
  context "boxes path" do
119
75
  should "return the home path joined with 'tmp'" do
120
- home_path = "foo"
121
- @env.stubs(:home_path).returns(home_path)
122
- assert_equal File.join("foo", "boxes"), @env.boxes_path
76
+ assert_equal @env.home_path.join("boxes"), @env.boxes_path
123
77
  end
124
78
  end
125
79
  end
126
80
 
127
- context "primary VM helper" do
81
+ context "resource" do
128
82
  setup do
129
- @env = mock_environment
130
- @env.stubs(:multivm?).returns(true)
83
+ @env = vagrant_env
131
84
  end
132
85
 
133
- should "return the first VM if not multivm" do
134
- result = mock("result")
86
+ should "return 'vagrant' as a default" do
87
+ assert_equal 'vagrant', @env.resource
88
+ end
135
89
 
136
- @env.stubs(:multivm?).returns(false)
137
- @env.stubs(:vms).returns({:default => result})
90
+ should "return the VM name if it is specified" do
91
+ @env.stubs(:vm).returns(mock("vm", :name => "foo"))
92
+ assert_equal "foo", @env.resource
93
+ end
94
+ end
138
95
 
139
- assert_equal result, @env.primary_vm
96
+ context "primary VM helper" do
97
+ should "return the first VM if not multivm" do
98
+ env = vagrant_env
99
+ assert_equal env.vms[@klass::DEFAULT_VM], env.primary_vm
140
100
  end
141
101
 
142
102
  should "call and return the primary VM from the parent if has one" do
143
- result = mock("result")
144
- parent = mock("parent")
145
- parent.expects(:primary_vm).returns(result)
103
+ env = vagrant_env(vagrantfile(<<-vf))
104
+ config.vm.define(:web, :primary => true) do; end
105
+ config.vm.define :db do; end
106
+ vf
146
107
 
147
- @env.stubs(:parent).returns(parent)
148
- assert_equal result, @env.primary_vm
108
+ assert_equal :web, env.primary_vm.name
149
109
  end
150
110
 
151
111
  should "return nil if no VM is marked as primary" do
152
- @env.config.vm.define(:foo)
153
- @env.config.vm.define(:bar)
154
- @env.config.vm.define(:baz)
112
+ env = vagrant_env(vagrantfile(<<-vf))
113
+ config.vm.define :web
114
+ config.vm.define :db
115
+ config.vm.define :utility
116
+ vf
155
117
 
156
- assert @env.primary_vm.nil?
118
+ assert env.primary_vm.nil?
157
119
  end
120
+ end
158
121
 
159
- should "return the primary VM" do
160
- @env.config.vm.define(:foo)
161
- @env.config.vm.define(:bar, :primary => true)
162
- @env.config.vm.define(:baz)
122
+ context "multivm? helper" do
123
+ should "return true if VM length greater than 1" do
124
+ env = vagrant_env(vagrantfile(<<-vf))
125
+ config.vm.define :web
126
+ config.vm.define :db
127
+ vf
163
128
 
164
- result = mock("result")
165
- vms = {
166
- :foo => :foo,
167
- :bar => result,
168
- :baz => :baz
169
- }
170
- @env.stubs(:vms).returns(vms)
129
+ assert env.multivm?
130
+ end
131
+
132
+ should "return false if VM length is 1" do
133
+ env = vagrant_env(vagrantfile(<<-vf))
134
+ config.vm.define :web
135
+ vf
171
136
 
172
- assert_equal result, @env.primary_vm
137
+ assert !env.multivm?
173
138
  end
174
139
  end
175
140
 
176
- context "multivm? helper" do
177
- setup do
178
- @env = mock_environment
141
+ context "local data" do
142
+ should "lazy load the data store only once" do
143
+ result = { :foo => :bar }
144
+ Vagrant::DataStore.expects(:new).returns(result).once
145
+ env = vagrant_env
146
+ assert_equal result, env.local_data
147
+ assert_equal result, env.local_data
148
+ assert_equal result, env.local_data
179
149
  end
180
150
 
181
- context "with a parent" do
182
- setup do
183
- @parent = mock('parent')
184
- @env.stubs(:parent).returns(@parent)
185
- end
151
+ should "return the parent's local data if a parent exists" do
152
+ env = vagrant_env(vagrantfile(<<-vf))
153
+ config.vm.define :web
154
+ config.vm.define :db
155
+ vf
186
156
 
187
- should "return the value of multivm? from the parent" do
188
- result = mock("result")
189
- @parent.stubs(:multivm?).returns(result)
190
- assert_equal result, @env.multivm?
191
- end
157
+ env.local_data[:foo] = :bar
158
+
159
+ Vagrant::DataStore.expects(:new).never
160
+ assert_equal :bar, env.vms[:web].env.local_data[:foo]
192
161
  end
162
+ end
193
163
 
194
- context "without a parent" do
195
- setup do
196
- @env.stubs(:parent).returns(nil)
197
- end
164
+ context "accessing host" do
165
+ should "load the host once" do
166
+ env = @klass.new(:cwd => vagrantfile)
167
+ result = mock("result")
168
+ Vagrant::Hosts::Base.expects(:load).with(env, env.config.vagrant.host).once.returns(result)
169
+ assert_equal result, env.host
170
+ assert_equal result, env.host
171
+ assert_equal result, env.host
172
+ end
173
+ end
198
174
 
199
- should "return true if VM length greater than 1" do
200
- @env.stubs(:vms).returns([1,2,3])
201
- assert @env.multivm?
202
- end
175
+ context "accessing actions" do
176
+ should "initialize the Action object with the given environment" do
177
+ env = @klass.new(:cwd => vagrant_app)
178
+ result = mock("result")
179
+ Vagrant::Action.expects(:new).with(env).returns(result).once
180
+ assert_equal result, env.actions
181
+ assert_equal result, env.actions
182
+ assert_equal result, env.actions
183
+ end
184
+ end
203
185
 
204
- should "return false if VM length is 1" do
205
- @env.stubs(:vms).returns([1])
206
- assert !@env.multivm?
207
- end
186
+ context "global data" do
187
+ should "lazy load the data store only once" do
188
+ env = vagrant_env
189
+ store = env.global_data
190
+
191
+ assert env.global_data.equal?(store)
192
+ assert env.global_data.equal?(store)
193
+ assert env.global_data.equal?(store)
194
+ end
195
+
196
+ should "return the parent's global data if a parent exists" do
197
+ env = vagrant_env(vagrantfile(<<-vf))
198
+ config.vm.define :web
199
+ config.vm.define :db
200
+ vf
201
+
202
+ result = env.global_data
203
+ assert env.vms[:web].env.global_data.equal?(result)
208
204
  end
209
205
  end
210
206
 
211
- context "loading" do
212
- setup do
213
- @env = mock_environment
207
+ context "loading logger" do
208
+ should "lazy load the logger only once" do
209
+ result = Vagrant::Util::ResourceLogger.new("vagrant", vagrant_env)
210
+ Vagrant::Util::ResourceLogger.expects(:new).returns(result).once
211
+ env = vagrant_env
212
+ assert_equal result, env.logger
213
+ assert_equal result, env.logger
214
+ assert_equal result, env.logger
214
215
  end
215
216
 
216
- context "overall load method" do
217
- should "load! should call proper sequence and return itself" do
218
- call_seq = sequence("call_sequence")
219
- @env.expects(:load_logger!).once.in_sequence(call_seq)
220
- @env.expects(:load_root_path!).once.in_sequence(call_seq)
221
- @env.expects(:load_config!).once.in_sequence(call_seq)
222
- @env.expects(:load_home_directory!).once.in_sequence(call_seq)
223
- @env.expects(:load_host!).once.in_sequence(call_seq)
224
- @env.expects(:load_box!).once.in_sequence(call_seq)
225
- @env.expects(:load_config!).once.in_sequence(call_seq)
226
- Vagrant::Environment.expects(:check_virtualbox!).once.in_sequence(call_seq)
227
- @env.expects(:load_vm!).once.in_sequence(call_seq)
228
- @env.expects(:load_active_list!).once.in_sequence(call_seq)
229
- @env.expects(:load_commands!).once.in_sequence(call_seq)
230
- @env.expects(:load_actions!).once.in_sequence(call_seq)
231
- assert_equal @env, @env.load!
232
- end
217
+ should "return the parent's logger if a parent exists" do
218
+ env = vagrant_env(vagrantfile(<<-vf))
219
+ config.vm.define :web
220
+ config.vm.define :db
221
+ vf
222
+
223
+ result = env.logger
224
+
225
+ Vagrant::Util::ResourceLogger.expects(:new).never
226
+ assert env.vms[:web].env.logger.equal?(result)
233
227
  end
228
+ end
234
229
 
235
- context "loading the root path" do
236
- setup do
237
- @env.cwd = "/foo"
238
- end
230
+ context "loading the root path" do
231
+ should "should walk the parent directories looking for rootfile" do
232
+ paths = [Pathname.new("/foo/bar/baz"),
233
+ Pathname.new("/foo/bar"),
234
+ Pathname.new("/foo"),
235
+ Pathname.new("/")
236
+ ]
239
237
 
240
- should "default the path to the cwd instance var if nil" do
241
- @path = mock("path")
242
- @path.stubs(:root?).returns(true)
243
- File.expects(:expand_path).with(@env.cwd).returns(@env.cwd)
244
- Pathname.expects(:new).with(@env.cwd).returns(@path)
245
- @env.load_root_path!(nil)
238
+ search_seq = sequence("search_seq")
239
+ paths.each do |path|
240
+ File.expects(:exist?).with(path.join(@klass::ROOTFILE_NAME).to_s).returns(false).in_sequence(search_seq)
246
241
  end
247
242
 
248
- should "not default the path to pwd if its not nil" do
249
- @path = mock("path")
250
- @path.stubs(:to_s).returns("/")
251
- File.expects(:expand_path).with(@path).returns("/")
252
- Pathname.expects(:new).with("/").returns(@path)
253
- @path.stubs(:root?).returns(true)
254
- @env.load_root_path!(@path)
255
- end
243
+ assert !@klass.new(:cwd => paths.first).root_path
244
+ end
256
245
 
257
- should "should walk the parent directories looking for rootfile" do
258
- paths = [
259
- Pathname.new("/foo/bar/baz"),
260
- Pathname.new("/foo/bar"),
261
- Pathname.new("/foo")
262
- ]
263
-
264
- search_seq = sequence("search_seq")
265
- paths.each do |path|
266
- # NOTE File.expect(:expand_path) causes tests to hang in windows below is the interim solution
267
- File.expects(:exist?).with("#{File.expand_path(path)}/#{Vagrant::Environment::ROOTFILE_NAME}").returns(false).in_sequence(search_seq)
268
- end
246
+ should "should set the path for the rootfile" do
247
+ path = Pathname.new(File.expand_path("/foo"))
248
+ File.expects(:exist?).with(path.join(@klass::ROOTFILE_NAME).to_s).returns(true)
269
249
 
270
- assert !@env.load_root_path!(paths.first)
271
- end
250
+ assert_equal path, @klass.new(:cwd => path).root_path
251
+ end
272
252
 
273
- should "return false if not found" do
274
- path = Pathname.new("/")
275
- assert !@env.load_root_path!(path)
276
- end
253
+ should "only load the root path once" do
254
+ env = @klass.new
255
+ File.expects(:exist?).with(env.cwd.join(@klass::ROOTFILE_NAME).to_s).returns(true).once
277
256
 
278
- should "return false if not found on windows-style root" do
279
- # TODO: Is there _any_ way to test this on unix machines? The
280
- # expand path doesn't work [properly for the test] on unix machines.
281
- if RUBY_PLATFORM.downcase.include?("mswin")
282
- # Note the escaped back slash
283
- path = Pathname.new("C:\\")
284
- assert !@env.load_root_path!(path)
285
- end
286
- end
257
+ assert_equal env.cwd, env.root_path
258
+ assert_equal env.cwd, env.root_path
259
+ assert_equal env.cwd, env.root_path
260
+ end
287
261
 
288
- should "should set the path for the rootfile" do
289
- # NOTE File.expect(:expand_path) causes tests to hang in windows below is the interim solution
290
- path = File.expand_path("/foo")
291
- File.expects(:exist?).with("#{path}/#{Vagrant::Environment::ROOTFILE_NAME}").returns(true)
262
+ should "only load the root path once even if nil" do
263
+ File.stubs(:exist?).returns(false)
292
264
 
293
- assert @env.load_root_path!(Pathname.new(path))
294
- assert_equal path, @env.root_path
295
- end
265
+ env = @klass.new
266
+ assert env.root_path.nil?
267
+ assert env.root_path.nil?
268
+ assert env.root_path.nil?
296
269
  end
270
+ end
297
271
 
298
- context "loading config" do
299
- setup do
300
- @root_path = "/foo"
301
- @home_path = "/bar"
302
- @env.stubs(:root_path).returns(@root_path)
303
- @env.stubs(:home_path).returns(@home_path)
304
- @env.stubs(:load_logger!)
272
+ context "accessing the configuration" do
273
+ should "load the environment if its not already loaded" do
274
+ env = @klass.new(:cwd => vagrantfile)
275
+ env.expects(:load!).once
276
+ env.config
277
+ end
305
278
 
306
- @parent_env = mock_environment
279
+ should "not load the environment if its already loaded" do
280
+ env = vagrant_env
281
+ env.expects(:load!).never
282
+ env.config
283
+ end
284
+ end
307
285
 
308
- File.stubs(:exist?).returns(false)
309
- end
286
+ context "accessing the box collection" do
287
+ should "create a box collection representing the environment" do
288
+ env = vagrant_env
289
+ assert env.boxes.is_a?(Vagrant::BoxCollection)
290
+ assert_equal env, env.boxes.env
291
+ end
310
292
 
311
- should "reset the configuration object" do
312
- Vagrant::Config.expects(:reset!).with(@env).once
313
- @env.load_config!
314
- end
293
+ should "not load the environment if its already loaded" do
294
+ env = vagrant_env
295
+ env.expects(:load!).never
296
+ env.boxes
297
+ end
315
298
 
316
- should "load from the project root" do
317
- File.expects(:exist?).with(File.join(PROJECT_ROOT, "config", "default.rb")).once
318
- @env.load_config!
319
- end
299
+ should "return the parent's box collection if it has one" do
300
+ env = vagrant_env(vagrantfile(<<-vf))
301
+ config.vm.define :web
302
+ config.vm.define :db
303
+ vf
320
304
 
321
- should "load from the root path" do
322
- File.expects(:exist?).with(File.join(@root_path, Vagrant::Environment::ROOTFILE_NAME)).once
323
- @env.load_config!
324
- end
305
+ assert env.vms[:web].env.boxes.equal?(env.boxes)
306
+ end
307
+ end
325
308
 
326
- should "not load from the root path if nil" do
327
- @env.stubs(:root_path).returns(nil)
328
- File.expects(:exist?).with(File.join(@root_path, Vagrant::Environment::ROOTFILE_NAME)).never
329
- @env.load_config!
330
- end
309
+ context "accessing the current box" do
310
+ should "return the box that is specified in the config" do
311
+ vagrant_box("foo")
312
+ env = vagrant_env(vagrantfile(<<-vf))
313
+ config.vm.box = "foo"
314
+ vf
331
315
 
332
- should "load from the home directory" do
333
- File.expects(:exist?).with(File.join(@env.home_path, Vagrant::Environment::ROOTFILE_NAME)).once
334
- @env.load_config!
335
- end
316
+ assert env.box
317
+ assert_equal "foo", env.box.name
318
+ end
319
+ end
336
320
 
337
- should "not load from the home directory if the config is nil" do
338
- @env.stubs(:home_path).returns(nil)
339
- File.expects(:exist?).twice.returns(false)
340
- @env.load_config!
341
- end
321
+ context "accessing the VMs hash" do
322
+ should "load the environment if its not already loaded" do
323
+ env = @klass.new(:cwd => vagrantfile)
324
+ assert !env.loaded?
325
+ env.vms
326
+ assert env.loaded?
327
+ end
342
328
 
343
- should "not load from the box directory if it is nil" do
344
- @env.expects(:box).once.returns(nil)
345
- File.expects(:exist?).twice.returns(false)
346
- @env.load_config!
347
- end
329
+ should "not load the environment if its already loaded" do
330
+ env = vagrant_env
331
+ env.expects(:load!).never
332
+ env.vms
333
+ end
348
334
 
349
- should "load from the box directory if it is not nil" do
350
- dir = "foo"
351
- box = mock("box")
352
- box.stubs(:directory).returns(dir)
353
- @env.expects(:box).twice.returns(box)
354
- File.expects(:exist?).with(File.join(dir, Vagrant::Environment::ROOTFILE_NAME)).once
355
- @env.load_config!
356
- end
335
+ should "return the parent's VMs hash if it has one" do
336
+ env = vagrant_env(vagrantfile(<<-vf))
337
+ config.vm.define :web
338
+ config.vm.define :db
339
+ vf
357
340
 
358
- should "load a sub-VM configuration if specified" do
359
- vm_name = :foo
360
- sub_box = :YO
361
- @parent_env.config.vm.box = :NO
362
- @parent_env.config.vm.define(vm_name) do |config|
363
- config.vm.box = sub_box
364
- end
341
+ assert env.vms[:web].env.vms.equal?(env.vms)
342
+ end
343
+ end
365
344
 
366
- # Sanity
367
- assert_equal :NO, @parent_env.config.vm.box
345
+ context "loading" do
346
+ context "overall load method" do
347
+ should "load! should call proper sequence and return itself" do
348
+ env = @klass.new(:cwd => vagrantfile)
349
+ call_seq = sequence("call_sequence")
350
+ @klass.expects(:check_virtualbox!).once.in_sequence(call_seq)
351
+ env.expects(:load_config!).once.in_sequence(call_seq)
352
+ env.actions.expects(:run).with(:environment_load).once.in_sequence(call_seq)
353
+ assert_equal env, env.load!
354
+ end
355
+ end
368
356
 
369
- @env.stubs(:vm_name).returns(vm_name)
370
- @env.stubs(:parent).returns(@parent_env)
357
+ context "loading config" do
358
+ setup do
359
+ clean_paths
360
+ @env = @klass.new(:cwd => vagrantfile)
361
+ end
371
362
 
372
- @env.load_config!
363
+ def create_box_vagrantfile
364
+ vagrantfile(vagrant_box("box"), 'config.package.name = "box.box"')
365
+ end
373
366
 
374
- assert_equal sub_box, @env.config.vm.box
367
+ def create_home_vagrantfile
368
+ vagrantfile(home_path, 'config.package.name = "home.box"')
375
369
  end
376
370
 
377
- should "load the files only if exist? returns true" do
378
- File.expects(:exist?).once.returns(true)
379
- @env.expects(:load).once
380
- @env.load_config!
371
+ def create_root_vagrantfile
372
+ vagrantfile(@env.root_path, 'config.package.name = "root.box"')
381
373
  end
382
374
 
383
- should "not load the files if exist? returns false" do
384
- @env.expects(:load).never
385
- @env.load_config!
375
+ should "load from the project root" do
376
+ assert_equal "package.box", @env.config.package.name
386
377
  end
387
378
 
388
- should "execute after loading and set result to environment config" do
389
- result = mock("result")
390
- File.expects(:exist?).once.returns(true)
391
- @env.expects(:load).once
392
- Vagrant::Config.expects(:execute!).once.returns(result)
393
- @env.load_config!
394
- assert_equal result, @env.config
379
+ should "load from box if specified" do
380
+ create_box_vagrantfile
381
+ vagrantfile(@env.root_path, "config.vm.box = 'box'")
382
+
383
+ assert_equal "box.box", @env.config.package.name
395
384
  end
396
385
 
397
- should "reload the logger after executing" do
398
- load_seq = sequence("load_seq")
399
- Vagrant::Config.expects(:execute!).once.returns(nil).in_sequence(load_seq)
400
- @env.expects(:load_logger!).once.in_sequence(load_seq)
401
- @env.load_config!
386
+ should "load from home path if exists" do
387
+ create_home_vagrantfile
388
+ assert_equal "home.box", @env.config.package.name
402
389
  end
403
- end
404
390
 
405
- context "loading logger" do
406
- setup do
407
- @env = mock_environment
408
- @env.stubs(:vm_name).returns(nil)
391
+ should "load from root path" do
392
+ create_home_vagrantfile
393
+ create_root_vagrantfile
394
+ assert_equal "root.box", @env.config.package.name
409
395
  end
410
396
 
411
- should "use 'vagrant' by default" do
412
- assert @env.vm_name.nil? # sanity
413
- @env.load_logger!
414
- assert_equal "vagrant", @env.logger.resource
397
+ should "load from a sub-vm configuration if environment represents a VM" do
398
+ create_home_vagrantfile
399
+ vagrantfile(@env.root_path, <<-vf)
400
+ config.package.name = "root.box"
401
+ config.vm.define :web do |web|
402
+ web.package.name = "web.box"
403
+ end
404
+ vf
405
+
406
+ assert_equal "root.box", @env.config.package.name
407
+ assert_equal "web.box", @env.vms[:web].env.config.package.name
415
408
  end
416
409
 
417
- should "use the vm name if available" do
418
- name = "foo"
419
- @env.stubs(:vm_name).returns(name)
420
- @env.load_logger!
421
- assert_equal name, @env.logger.resource
410
+ should "reload the logger after executing" do
411
+ @env.load_config!
412
+ assert @env.instance_variable_get(:@logger).nil?
422
413
  end
423
414
  end
424
415
 
425
416
  context "loading home directory" do
426
417
  setup do
427
- @env = mock_environment
428
- @home_dir = File.expand_path(@env.config.vagrant.home)
418
+ @env = vagrant_env
429
419
 
430
420
  File.stubs(:directory?).returns(true)
431
421
  FileUtils.stubs(:mkdir_p)
@@ -434,8 +424,8 @@ class EnvironmentTest < Test::Unit::TestCase
434
424
  should "create each directory if it doesn't exist" do
435
425
  create_seq = sequence("create_seq")
436
426
  File.stubs(:directory?).returns(false)
437
- Vagrant::Environment::HOME_SUBDIRS.each do |subdir|
438
- FileUtils.expects(:mkdir_p).with(File.join(@home_dir, subdir)).in_sequence(create_seq)
427
+ @klass::HOME_SUBDIRS.each do |subdir|
428
+ FileUtils.expects(:mkdir_p).with(@env.home_path.join(subdir)).in_sequence(create_seq)
439
429
  end
440
430
 
441
431
  @env.load_home_directory!
@@ -448,323 +438,33 @@ class EnvironmentTest < Test::Unit::TestCase
448
438
  end
449
439
  end
450
440
 
451
- context "loading host" do
452
- setup do
453
- @env = mock_environment
454
- end
455
-
456
- should "load the host by calling the load method on Host::Base" do
457
- result = mock("result")
458
- Vagrant::Hosts::Base.expects(:load).with(@env, @env.config.vagrant.host).once.returns(result)
459
- @env.load_host!
460
- assert_equal result, @env.host
461
- end
462
- end
463
-
464
- context "loading box" do
465
- setup do
466
- @box = mock("box")
467
- @box.stubs(:env=)
468
-
469
- @env = mock_environment
470
- @env.stubs(:root_path).returns("foo")
471
- end
472
-
473
- should "do nothing if the root path is nil" do
474
- Vagrant::Box.expects(:find).never
475
- @env.stubs(:root_path).returns(nil)
476
- @env.load_box!
477
- end
478
-
479
- should "not load the box if its not set" do
480
- @env = mock_environment do |config|
481
- config.vm.box = nil
482
- end
483
-
484
- Vagrant::Box.expects(:find).never
485
- @env.load_box!
486
- end
487
-
488
- should "set the box to what is found by the Box class" do
489
- Vagrant::Box.expects(:find).with(@env, @env.config.vm.box).once.returns(@box)
490
- @env.load_box!
491
- assert @box.equal?(@env.box)
492
- end
493
- end
494
-
495
441
  context "loading the UUID out from the persisted dotfile" do
496
442
  setup do
497
- @env = mock_environment
498
- @env.stubs(:root_path).returns("foo")
499
-
500
- File.stubs(:file?).returns(true)
501
- end
502
-
503
- should "blank the VMs" do
504
- load_seq = sequence("load_seq")
505
- @env.stubs(:root_path).returns("foo")
506
- @env.expects(:load_blank_vms!).in_sequence(load_seq)
507
- File.expects(:open).in_sequence(load_seq)
508
- @env.load_vm!
509
- end
510
-
511
- should "load the UUID if the JSON parsing fails" do
512
- vm = mock("vm")
513
-
514
- filemock = mock("filemock")
515
- filemock.expects(:read).returns("foo")
516
- Vagrant::VM.expects(:find).with("foo", @env, Vagrant::Environment::DEFAULT_VM).returns(vm)
517
- File.expects(:open).with(@env.dotfile_path).once.yields(filemock)
518
- File.expects(:file?).with(@env.dotfile_path).once.returns(true)
519
- @env.load_vm!
520
-
521
- assert_equal vm, @env.vms.values.first
443
+ @env = vagrant_env
522
444
  end
523
445
 
524
446
  should "load all the VMs from the dotfile" do
525
- vms = { :foo => "bar", :bar => "baz" }
526
- results = {}
527
-
528
- filemock = mock("filemock")
529
- filemock.expects(:read).returns(vms.to_json)
530
- File.expects(:open).with(@env.dotfile_path).once.yields(filemock)
531
- File.expects(:file?).with(@env.dotfile_path).once.returns(true)
447
+ @env.local_data[:active] = { "foo" => "bar", "bar" => "baz" }
532
448
 
533
- vms.each do |key, value|
449
+ results = {}
450
+ @env.local_data[:active].each do |key, value|
534
451
  vm = mock("vm#{key}")
535
452
  Vagrant::VM.expects(:find).with(value, @env, key.to_sym).returns(vm)
536
- results[key] = vm
453
+ results[key.to_sym] = vm
537
454
  end
538
455
 
539
- @env.load_vm!
456
+ returned = @env.load_vms!
540
457
 
541
458
  results.each do |key, value|
542
- assert_equal value, @env.vms[key]
459
+ assert_equal value, returned[key]
543
460
  end
544
461
  end
545
462
 
546
- should "do nothing if the vm_name is set" do
547
- @env.stubs(:vm_name).returns(:foo)
548
- File.expects(:open).never
549
- @env.load_vm!
550
- end
551
-
552
- should "do nothing if the dotfile is nil" do
553
- @env.stubs(:dotfile_path).returns(nil)
554
- File.expects(:open).never
555
-
556
- assert_nothing_raised {
557
- @env.load_vm!
558
- }
559
- end
560
-
561
- should "do nothing if dotfile is not a file" do
562
- File.expects(:file?).returns(false)
563
- File.expects(:open).never
564
- @env.load_vm!
565
- end
566
-
567
- should "uuid should be nil if dotfile didn't exist" do
568
- File.expects(:open).raises(Errno::ENOENT)
569
- @env.load_vm!
463
+ should "uuid should be nil if local data contains nothing" do
464
+ assert @env.local_data.empty? # sanity
465
+ @env.load_vms!
570
466
  assert_nil @env.vm
571
467
  end
572
468
  end
573
-
574
- context "loading blank VMs" do
575
- setup do
576
- @env = mock_environment
577
- end
578
-
579
- should "blank the VMs" do
580
- @env = mock_environment do |config|
581
- config.vm.define :foo do |config|
582
- end
583
-
584
- config.vm.define :bar do |config|
585
- end
586
- end
587
-
588
- @env.load_blank_vms!
589
-
590
- assert_equal 2, @env.vms.length
591
- assert(@env.vms.all? { |name, vm| !vm.created? })
592
-
593
- sorted_vms = @env.vms.keys.sort { |a,b| a.to_s <=> b.to_s }
594
- assert_equal [:bar, :foo], sorted_vms
595
- end
596
-
597
- should "load the default VM blank if no multi-VMs are specified" do
598
- assert @env.config.vm.defined_vms.empty? # sanity
599
-
600
- @env.load_blank_vms!
601
-
602
- assert_equal 1, @env.vms.length
603
- assert !@env.vms.values.first.created?
604
- end
605
- end
606
-
607
- context "loading the active list" do
608
- setup do
609
- @env = mock_environment
610
- end
611
-
612
- should "initialize the ActiveList object with the given environment" do
613
- active_list = mock("active_list")
614
- Vagrant::ActiveList.expects(:new).with(@env).returns(active_list)
615
- @env.load_active_list!
616
- assert_equal active_list, @env.active_list
617
- end
618
- end
619
-
620
- context "loading the commands" do
621
- setup do
622
- @env = mock_environment
623
- end
624
-
625
- should "initialize the Commands object with the given environment" do
626
- commands = mock("commands")
627
- Vagrant::Command.expects(:new).with(@env).returns(commands)
628
- @env.load_commands!
629
- assert_equal commands, @env.commands
630
- end
631
- end
632
-
633
- context "loading actions" do
634
- setup do
635
- @env = mock_environment
636
- end
637
-
638
- should "initialize the Action object with the given environment" do
639
- result = mock("result")
640
- Vagrant::Action.expects(:new).with(@env).returns(result)
641
- @env.load_actions!
642
- assert_equal result, @env.actions
643
- end
644
- end
645
- end
646
-
647
- context "requiring properties" do
648
- setup do
649
- @env = mock_environment
650
- end
651
-
652
- context "requiring root_path" do
653
- should "error and exit if no root_path is set" do
654
- @env.expects(:root_path).returns(nil)
655
- @env.expects(:error_and_exit).with(:rootfile_not_found).once
656
- @env.require_root_path
657
- end
658
-
659
- should "not error and exit if root_path is set" do
660
- @env.expects(:root_path).returns("foo")
661
- @env.expects(:error_and_exit).never
662
- @env.require_root_path
663
- end
664
- end
665
-
666
- context "requiring a persisted VM" do
667
- setup do
668
- @env.stubs(:vm).returns("foo")
669
- @env.stubs(:require_root_path)
670
- end
671
-
672
- should "require a root path" do
673
- @env.expects(:require_root_path).once
674
- @env.expects(:error_and_exit).never
675
- @env.require_persisted_vm
676
- end
677
-
678
- should "error and exit if the VM is not set" do
679
- @env.expects(:vm).returns(nil)
680
- @env.expects(:error_and_exit).once
681
- @env.require_persisted_vm
682
- end
683
- end
684
- end
685
-
686
- context "managing VM" do
687
- setup do
688
- @env = mock_environment
689
-
690
- @dotfile_path = "foo"
691
- @env.stubs(:dotfile_path).returns(@dotfile_path)
692
- end
693
-
694
- def mock_vm
695
- @vm = mock("vm")
696
- @vm.stubs(:uuid).returns("foo")
697
- @env.stubs(:vm).returns(@vm)
698
- end
699
- end
700
-
701
- context "updating the dotfile" do
702
- setup do
703
- @env = mock_environment
704
- @env.stubs(:parent).returns(nil)
705
- @env.stubs(:dotfile_path).returns("foo")
706
- File.stubs(:open)
707
- File.stubs(:exist?).returns(true)
708
- end
709
-
710
- def create_vm(created)
711
- vm = mock("vm")
712
- vm.stubs(:created?).returns(created)
713
- vm.stubs(:uuid).returns("foo")
714
- vm
715
- end
716
-
717
- should "call parent if exists" do
718
- parent = mock("parent")
719
- @env.stubs(:parent).returns(parent)
720
- parent.expects(:update_dotfile).once
721
-
722
- @env.update_dotfile
723
- end
724
-
725
- should "remove the dotfile if the data is empty" do
726
- vms = {
727
- :foo => create_vm(false)
728
- }
729
-
730
- @env.stubs(:vms).returns(vms)
731
- File.expects(:delete).with(@env.dotfile_path).once
732
- @env.update_dotfile
733
- end
734
-
735
- should "not remove the dotfile if it doesn't exist" do
736
- vms = {
737
- :foo => create_vm(false)
738
- }
739
-
740
- @env.stubs(:vms).returns(vms)
741
- File.expects(:exist?).with(@env.dotfile_path).returns(false)
742
- File.expects(:delete).never
743
- assert_nothing_raised { @env.update_dotfile }
744
- end
745
-
746
- should "write the proper data to dotfile" do
747
- vms = {
748
- :foo => create_vm(false),
749
- :bar => create_vm(true),
750
- :baz => create_vm(true)
751
- }
752
-
753
- f = mock("f")
754
- @env.stubs(:vms).returns(vms)
755
- File.expects(:open).with(@env.dotfile_path, 'w+').yields(f)
756
- f.expects(:write).with() do |json|
757
- assert_nothing_raised {
758
- data = JSON.parse(json)
759
- assert_equal 2, data.length
760
- assert_equal vms[:bar].uuid, data["bar"]
761
- assert_equal vms[:baz].uuid, data["baz"]
762
- }
763
-
764
- true
765
- end
766
-
767
- @env.update_dotfile
768
- end
769
469
  end
770
470
  end