vagrant 0.3.4 → 0.4.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 (124) hide show
  1. data/Gemfile +2 -2
  2. data/README.md +2 -2
  3. data/Rakefile +1 -1
  4. data/VERSION +1 -1
  5. data/config/default.rb +13 -3
  6. data/lib/vagrant.rb +10 -13
  7. data/lib/vagrant/actions/base.rb +14 -2
  8. data/lib/vagrant/actions/box/download.rb +2 -7
  9. data/lib/vagrant/actions/box/verify.rb +1 -1
  10. data/lib/vagrant/actions/runner.rb +0 -1
  11. data/lib/vagrant/actions/vm/boot.rb +2 -6
  12. data/lib/vagrant/actions/vm/customize.rb +7 -5
  13. data/lib/vagrant/actions/vm/destroy.rb +4 -3
  14. data/lib/vagrant/actions/vm/down.rb +6 -3
  15. data/lib/vagrant/actions/vm/export.rb +2 -4
  16. data/lib/vagrant/actions/vm/forward_ports.rb +77 -16
  17. data/lib/vagrant/actions/vm/halt.rb +10 -2
  18. data/lib/vagrant/actions/vm/import.rb +2 -4
  19. data/lib/vagrant/actions/vm/move_hard_drive.rb +2 -2
  20. data/lib/vagrant/actions/vm/network.rb +120 -0
  21. data/lib/vagrant/actions/vm/package.rb +11 -7
  22. data/lib/vagrant/actions/vm/provision.rb +3 -3
  23. data/lib/vagrant/actions/vm/reload.rb +2 -9
  24. data/lib/vagrant/actions/vm/shared_folders.rb +19 -39
  25. data/lib/vagrant/actions/vm/start.rb +10 -2
  26. data/lib/vagrant/actions/vm/up.rb +5 -6
  27. data/lib/vagrant/active_list.rb +23 -13
  28. data/lib/vagrant/box.rb +2 -2
  29. data/lib/vagrant/busy.rb +3 -3
  30. data/lib/vagrant/command.rb +2 -2
  31. data/lib/vagrant/commands/base.rb +40 -20
  32. data/lib/vagrant/commands/destroy.rb +17 -3
  33. data/lib/vagrant/commands/halt.rb +23 -3
  34. data/lib/vagrant/commands/package.rb +54 -14
  35. data/lib/vagrant/commands/provision.rb +31 -0
  36. data/lib/vagrant/commands/reload.rb +16 -3
  37. data/lib/vagrant/commands/resume.rb +16 -3
  38. data/lib/vagrant/commands/ssh.rb +25 -3
  39. data/lib/vagrant/commands/ssh_config.rb +20 -5
  40. data/lib/vagrant/commands/status.rb +107 -40
  41. data/lib/vagrant/commands/suspend.rb +16 -3
  42. data/lib/vagrant/commands/up.rb +26 -7
  43. data/lib/vagrant/config.rb +82 -12
  44. data/lib/vagrant/downloaders/base.rb +8 -1
  45. data/lib/vagrant/downloaders/http.rb +31 -19
  46. data/lib/vagrant/environment.rb +146 -49
  47. data/lib/vagrant/provisioners/base.rb +19 -5
  48. data/lib/vagrant/provisioners/chef.rb +12 -4
  49. data/lib/vagrant/provisioners/chef_server.rb +13 -6
  50. data/lib/vagrant/provisioners/chef_solo.rb +7 -3
  51. data/lib/vagrant/resource_logger.rb +126 -0
  52. data/lib/vagrant/ssh.rb +109 -8
  53. data/lib/vagrant/systems/base.rb +70 -0
  54. data/lib/vagrant/systems/linux.rb +137 -0
  55. data/lib/vagrant/util.rb +1 -45
  56. data/lib/vagrant/util/error_helper.rb +13 -0
  57. data/lib/vagrant/util/glob_loader.rb +22 -0
  58. data/lib/vagrant/util/output_helper.rb +9 -0
  59. data/lib/vagrant/util/plain_logger.rb +12 -0
  60. data/lib/vagrant/util/platform.rb +7 -2
  61. data/lib/vagrant/util/template_renderer.rb +2 -2
  62. data/lib/vagrant/util/translator.rb +35 -0
  63. data/lib/vagrant/vm.rb +91 -10
  64. data/templates/crontab_entry.erb +1 -0
  65. data/templates/network_entry.erb +8 -0
  66. data/templates/ssh_config.erb +1 -0
  67. data/templates/{errors.yml → strings.yml} +111 -3
  68. data/templates/sync.erb +14 -0
  69. data/test/test_helper.rb +46 -3
  70. data/test/vagrant/actions/box/download_test.rb +0 -17
  71. data/test/vagrant/actions/vm/boot_test.rb +3 -10
  72. data/test/vagrant/actions/vm/customize_test.rb +6 -0
  73. data/test/vagrant/actions/vm/destroy_test.rb +6 -5
  74. data/test/vagrant/actions/vm/down_test.rb +5 -11
  75. data/test/vagrant/actions/vm/export_test.rb +1 -0
  76. data/test/vagrant/actions/vm/forward_ports_test.rb +92 -15
  77. data/test/vagrant/actions/vm/halt_test.rb +36 -4
  78. data/test/vagrant/actions/vm/import_test.rb +2 -0
  79. data/test/vagrant/actions/vm/network_test.rb +237 -0
  80. data/test/vagrant/actions/vm/package_test.rb +35 -5
  81. data/test/vagrant/actions/vm/provision_test.rb +3 -3
  82. data/test/vagrant/actions/vm/reload_test.rb +1 -1
  83. data/test/vagrant/actions/vm/shared_folders_test.rb +41 -74
  84. data/test/vagrant/actions/vm/start_test.rb +41 -3
  85. data/test/vagrant/actions/vm/up_test.rb +10 -21
  86. data/test/vagrant/active_list_test.rb +28 -43
  87. data/test/vagrant/commands/base_test.rb +25 -4
  88. data/test/vagrant/commands/destroy_test.rb +24 -12
  89. data/test/vagrant/commands/halt_test.rb +33 -11
  90. data/test/vagrant/commands/package_test.rb +77 -57
  91. data/test/vagrant/commands/provision_test.rb +50 -0
  92. data/test/vagrant/commands/reload_test.rb +27 -11
  93. data/test/vagrant/commands/resume_test.rb +25 -14
  94. data/test/vagrant/commands/ssh_config_test.rb +40 -17
  95. data/test/vagrant/commands/ssh_test.rb +52 -13
  96. data/test/vagrant/commands/status_test.rb +21 -1
  97. data/test/vagrant/commands/suspend_test.rb +25 -14
  98. data/test/vagrant/commands/up_test.rb +25 -19
  99. data/test/vagrant/config_test.rb +74 -18
  100. data/test/vagrant/downloaders/base_test.rb +2 -1
  101. data/test/vagrant/downloaders/http_test.rb +18 -8
  102. data/test/vagrant/environment_test.rb +245 -77
  103. data/test/vagrant/provisioners/base_test.rb +4 -4
  104. data/test/vagrant/provisioners/chef_server_test.rb +18 -7
  105. data/test/vagrant/provisioners/chef_solo_test.rb +17 -7
  106. data/test/vagrant/provisioners/chef_test.rb +22 -9
  107. data/test/vagrant/resource_logger_test.rb +144 -0
  108. data/test/vagrant/ssh_session_test.rb +46 -0
  109. data/test/vagrant/ssh_test.rb +42 -2
  110. data/test/vagrant/systems/linux_test.rb +174 -0
  111. data/test/vagrant/util/error_helper_test.rb +5 -0
  112. data/test/vagrant/util/output_helper_test.rb +5 -0
  113. data/test/vagrant/util/plain_logger_test.rb +17 -0
  114. data/test/vagrant/util/platform_test.rb +18 -0
  115. data/test/vagrant/util/{errors_test.rb → translator_test.rb} +25 -21
  116. data/test/vagrant/util_test.rb +12 -49
  117. data/test/vagrant/vm_test.rb +133 -11
  118. data/vagrant.gemspec +39 -15
  119. metadata +64 -40
  120. data/lib/vagrant/commands/down.rb +0 -16
  121. data/lib/vagrant/util/errors.rb +0 -36
  122. data/lib/vagrant/util/progress_meter.rb +0 -33
  123. data/test/vagrant/commands/down_test.rb +0 -17
  124. data/test/vagrant/util/progress_meter_test.rb +0 -33
@@ -10,6 +10,8 @@ class ImportActionTest < Test::Unit::TestCase
10
10
  @runner.env.stubs(:box).returns(@box)
11
11
 
12
12
  VirtualBox::VM.stubs(:import)
13
+
14
+ @import.stubs(:complete_progress)
13
15
  end
14
16
 
15
17
  should "run in a busy block" do
@@ -0,0 +1,237 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
2
+
3
+ class NetworkTest < Test::Unit::TestCase
4
+ setup do
5
+ @runner, @vm, @action = mock_action(Vagrant::Actions::VM::Network)
6
+ @runner.stubs(:system).returns(linux_system(@vm))
7
+ end
8
+
9
+ context "before destroy" do
10
+ setup do
11
+ @network_adapters = []
12
+ @vm.stubs(:network_adapters).returns(@network_adapters)
13
+ end
14
+
15
+ def stub_interface(length=5)
16
+ interface = mock("interface")
17
+ adapter = mock("adapter")
18
+ adapter.stubs(:host_interface_object).returns(interface)
19
+ interface.stubs(:attached_vms).returns(Array.new(length))
20
+
21
+ @network_adapters << adapter
22
+ interface
23
+ end
24
+
25
+ should "destroy only the unused network interfaces" do
26
+ stub_interface(5)
27
+ stub_interface(7)
28
+ results = [stub_interface(1), stub_interface(1)]
29
+
30
+ results.each do |result|
31
+ result.expects(:destroy).once
32
+ end
33
+
34
+ @action.before_destroy
35
+ end
36
+ end
37
+
38
+ context "before boot" do
39
+ setup do
40
+ @action.stubs(:enable_network?).returns(false)
41
+ end
42
+
43
+ should "do nothing if network should not be enabled" do
44
+ @action.expects(:assign_network).never
45
+ @action.before_boot
46
+ end
47
+
48
+ should "assign the network if host only networking is enabled" do
49
+ @action.stubs(:enable_network?).returns(true)
50
+ @action.expects(:assign_network).once
51
+ @action.before_boot
52
+ end
53
+ end
54
+
55
+ context "after boot" do
56
+ setup do
57
+ @runner.env.config.vm.network("foo")
58
+ @action.stubs(:enable_network?).returns(true)
59
+ end
60
+
61
+ should "prepare the host only network, then enable them" do
62
+ run_seq = sequence("run")
63
+ @runner.system.expects(:prepare_host_only_network).once.in_sequence(run_seq)
64
+ @runner.system.expects(:enable_host_only_network).once.in_sequence(run_seq)
65
+ @action.after_boot
66
+ end
67
+
68
+ should "do nothing if network is not enabled" do
69
+ @action.stubs(:enable_network?).returns(false)
70
+ @runner.system.expects(:prepare_host_only_network).never
71
+ @action.after_boot
72
+ end
73
+ end
74
+
75
+ context "checking if network is enabled" do
76
+ should "return true if the network options are set" do
77
+ @runner.env.config.vm.network("foo")
78
+ assert @action.enable_network?
79
+ end
80
+
81
+ should "return false if the network was not set" do
82
+ assert !@action.enable_network?
83
+ end
84
+ end
85
+
86
+ context "assigning the network" do
87
+ setup do
88
+ @network_name = "foo"
89
+ @action.stubs(:network_name).returns(@network_name)
90
+
91
+ @network_adapters = []
92
+ @vm.stubs(:network_adapters).returns(@network_adapters)
93
+
94
+ @options = {
95
+ :ip => "foo",
96
+ :adapter => 7
97
+ }
98
+
99
+ @runner.env.config.vm.network(@options[:ip], @options)
100
+ end
101
+
102
+ should "setup the specified network adapter" do
103
+ adapter = mock("adapter")
104
+ @network_adapters[@options[:adapter]] = adapter
105
+
106
+ adapter.expects(:enabled=).with(true).once
107
+ adapter.expects(:attachment_type=).with(:host_only).once
108
+ adapter.expects(:host_interface=).with(@network_name).once
109
+ adapter.expects(:save).once
110
+
111
+ @action.assign_network
112
+ end
113
+ end
114
+
115
+ context "network name" do
116
+ setup do
117
+ @interfaces = []
118
+ VirtualBox::Global.global.host.stubs(:network_interfaces).returns(@interfaces)
119
+
120
+ @action.stubs(:matching_network?).returns(false)
121
+
122
+ @options = { :ip => :foo, :netmask => :bar, :name => nil }
123
+ end
124
+
125
+ should "return the network which matches" do
126
+ result = mock("result")
127
+ interface = mock("interface")
128
+ interface.stubs(:name).returns(result)
129
+ @interfaces << interface
130
+
131
+ @action.expects(:matching_network?).with(interface, @options).returns(true)
132
+ assert_equal result, @action.network_name(@options)
133
+ end
134
+
135
+ should "return the network which matches the name if given" do
136
+ @options[:name] = "foo"
137
+
138
+ interface = mock("interface")
139
+ interface.stubs(:name).returns(@options[:name])
140
+ @interfaces << interface
141
+
142
+ assert_equal @options[:name], @action.network_name(@options)
143
+ end
144
+
145
+ should "error and exit if the given network name is not found" do
146
+ @options[:name] = "foo"
147
+
148
+ @interfaces.expects(:create).never
149
+
150
+ assert_raises(Vagrant::Actions::ActionException) {
151
+ @action.network_name(@options)
152
+ }
153
+ end
154
+
155
+ should "create a network for the IP and netmask" do
156
+ result = mock("result")
157
+ interface = mock("interface")
158
+ network_ip = :foo
159
+ @interfaces.expects(:create).returns(interface)
160
+ @action.expects(:network_ip).with(@options[:ip], @options[:netmask]).once.returns(network_ip)
161
+ interface.expects(:enable_static).with(network_ip, @options[:netmask])
162
+ interface.expects(:name).returns(result)
163
+
164
+ assert_equal result, @action.network_name(@options)
165
+ end
166
+ end
167
+
168
+ context "checking for a matching network" do
169
+ setup do
170
+ @interface = mock("interface")
171
+ @interface.stubs(:network_mask).returns("foo")
172
+ @interface.stubs(:ip_address).returns("192.168.0.1")
173
+
174
+ @options = {
175
+ :netmask => "foo",
176
+ :ip => "baz"
177
+ }
178
+ end
179
+
180
+ should "return false if the netmasks don't match" do
181
+ @options[:netmask] = "bar"
182
+ assert @interface.network_mask != @options[:netmask] # sanity
183
+ assert !@action.matching_network?(@interface, @options)
184
+ end
185
+
186
+ should "return true if the netmasks yield the same IP" do
187
+ tests = [["255.255.255.0", "192.168.0.1", "192.168.0.45"],
188
+ ["255.255.0.0", "192.168.45.1", "192.168.28.7"]]
189
+
190
+ tests.each do |netmask, interface_ip, guest_ip|
191
+ @options[:netmask] = netmask
192
+ @options[:ip] = guest_ip
193
+ @interface.stubs(:network_mask).returns(netmask)
194
+ @interface.stubs(:ip_address).returns(interface_ip)
195
+
196
+ assert @action.matching_network?(@interface, @options)
197
+ end
198
+ end
199
+ end
200
+
201
+ context "applying the netmask" do
202
+ should "return the proper result" do
203
+ tests = {
204
+ ["192.168.0.1","255.255.255.0"] => [192,168,0,0],
205
+ ["192.168.45.10","255.255.255.0"] => [192,168,45,0]
206
+ }
207
+
208
+ tests.each do |k,v|
209
+ assert_equal v, @action.apply_netmask(*k)
210
+ end
211
+ end
212
+ end
213
+
214
+ context "splitting an IP" do
215
+ should "return the proper result" do
216
+ tests = {
217
+ "192.168.0.1" => [192,168,0,1]
218
+ }
219
+
220
+ tests.each do |k,v|
221
+ assert_equal v, @action.split_ip(k)
222
+ end
223
+ end
224
+ end
225
+
226
+ context "network IP" do
227
+ should "return the proper result" do
228
+ tests = {
229
+ ["192.168.0.45", "255.255.255.0"] => "192.168.0.1"
230
+ }
231
+
232
+ tests.each do |args, result|
233
+ assert_equal result, @action.network_ip(*args)
234
+ end
235
+ end
236
+ end
237
+ end
@@ -2,12 +2,15 @@ require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
2
2
 
3
3
  class PackageActionTest < Test::Unit::TestCase
4
4
  setup do
5
- @runner, @vm, @action = mock_action(Vagrant::Actions::VM::Package, "bing", [])
5
+ @runner, @vm, @action = mock_action(Vagrant::Actions::VM::Package)
6
6
  end
7
7
 
8
8
  context "initialization" do
9
- def get_action(*args)
10
- runner, vm, action = mock_action(Vagrant::Actions::VM::Package, *args)
9
+ def get_action(output, include_files)
10
+ runner, vm, action = mock_action(Vagrant::Actions::VM::Package, {
11
+ :output => output,
12
+ :include => include_files
13
+ })
11
14
  return action
12
15
  end
13
16
 
@@ -35,6 +38,31 @@ class PackageActionTest < Test::Unit::TestCase
35
38
  end
36
39
  end
37
40
 
41
+ context "out path" do
42
+ should "be the specified output file if given" do
43
+ result = mock("result")
44
+ @action.options[:output] = result
45
+ assert_equal result, @action.out_path
46
+ end
47
+
48
+ should "default to 'package'" do
49
+ @action.options[:output] = nil
50
+ assert_equal "package", @action.out_path
51
+ end
52
+ end
53
+
54
+ context "include files" do
55
+ should "specified array if given" do
56
+ @action.options[:include] = [1,2,3]
57
+ assert_equal @action.options[:include], @action.include_files
58
+ end
59
+
60
+ should "be an empty array by default" do
61
+ @action.options[:include] = nil
62
+ assert_equal [], @action.include_files
63
+ end
64
+ end
65
+
38
66
  context "tar path" do
39
67
  should "be the temporary directory with the name and extension attached" do
40
68
  pwd = "foo"
@@ -138,7 +166,7 @@ class PackageActionTest < Test::Unit::TestCase
138
166
  end
139
167
 
140
168
  should "open the tar file with the tar path properly" do
141
- File.expects(:open).with(@tar_path, File::CREAT | File::WRONLY, 0644).once
169
+ File.expects(:open).with(@tar_path, Vagrant::Util::Platform.tar_file_options).once
142
170
  @action.compress
143
171
  end
144
172
 
@@ -185,7 +213,9 @@ class PackageActionTest < Test::Unit::TestCase
185
213
  context "checking include files" do
186
214
  setup do
187
215
  @include_files = ['fooiest', 'booiest']
188
- @runner, @vm, @action = mock_action(Vagrant::Actions::VM::Package, "bing", @include_files)
216
+ @runner, @vm, @action = mock_action(Vagrant::Actions::VM::Package, {
217
+ :include => @include_files
218
+ })
189
219
  @runner.stubs(:find_action).returns("foo")
190
220
  end
191
221
 
@@ -44,13 +44,13 @@ class ProvisionActionTest < Test::Unit::TestCase
44
44
  @instance.stubs(:prepare)
45
45
  @klass = mock("klass")
46
46
  @klass.stubs(:is_a?).with(Class).returns(true)
47
- @klass.stubs(:new).with(@runner.env).returns(@instance)
47
+ @klass.stubs(:new).with(@runner).returns(@instance)
48
48
 
49
49
  @runner.env.config.vm.provisioner = @klass
50
50
  end
51
51
 
52
52
  should "set the provisioner to an instantiation of the class" do
53
- @klass.expects(:new).with(@runner.env).once.returns(@instance)
53
+ @klass.expects(:new).with(@runner).once.returns(@instance)
54
54
  assert_nothing_raised { @action.prepare }
55
55
  assert_equal @instance, @action.provisioner
56
56
  end
@@ -74,7 +74,7 @@ class ProvisionActionTest < Test::Unit::TestCase
74
74
 
75
75
  instance = mock("instance")
76
76
  instance.expects(:prepare).once
77
- provisioner.expects(:new).with(@runner.env).returns(instance)
77
+ provisioner.expects(:new).with(@runner).returns(instance)
78
78
  assert_nothing_raised { @action.prepare }
79
79
  assert_equal instance, @action.provisioner
80
80
  end
@@ -7,7 +7,7 @@ class ReloadActionTest < Test::Unit::TestCase
7
7
 
8
8
  context "sub-actions" do
9
9
  setup do
10
- @default_order = [Vagrant::Actions::VM::Customize, Vagrant::Actions::VM::ForwardPorts, Vagrant::Actions::VM::SharedFolders, Vagrant::Actions::VM::Boot]
10
+ @default_order = [Vagrant::Actions::VM::Customize, Vagrant::Actions::VM::ForwardPorts, Vagrant::Actions::VM::SharedFolders, Vagrant::Actions::VM::Network, Vagrant::Actions::VM::Boot]
11
11
  @vm.stubs(:running?).returns(false)
12
12
  end
13
13
 
@@ -3,6 +3,7 @@ require File.join(File.dirname(__FILE__), '..', '..', '..', 'test_helper')
3
3
  class SharedFoldersActionTest < Test::Unit::TestCase
4
4
  setup do
5
5
  @runner, @vm, @action = mock_action(Vagrant::Actions::VM::SharedFolders)
6
+ @runner.stubs(:system).returns(linux_system(@vm))
6
7
  end
7
8
 
8
9
  def stub_shared_folders
@@ -26,19 +27,14 @@ class SharedFoldersActionTest < Test::Unit::TestCase
26
27
  end
27
28
 
28
29
  should "convert the vagrant config values into an array" do
29
- env = mock_environment do |config|
30
- config.vm.shared_folders.clear
31
- config.vm.share_folder("foo", "bar", "baz")
32
- end
33
-
34
- @runner.expects(:env).returns(env)
30
+ mock_env_shared_folders
35
31
 
36
32
  result = [["foo", "baz", "bar"]]
37
33
  assert_equal result, @action.shared_folders
38
34
  end
39
35
 
40
36
  should "expand the path of the host folder" do
41
- File.expects(:expand_path).with("baz").once.returns("expanded_baz")
37
+ File.expects(:expand_path).with("baz", @runner.env.root_path).once.returns("expanded_baz")
42
38
 
43
39
  env = mock_environment do |config|
44
40
  config.vm.shared_folders.clear
@@ -50,6 +46,23 @@ class SharedFoldersActionTest < Test::Unit::TestCase
50
46
  result = [["foo", "expanded_baz", "bar"]]
51
47
  assert_equal result, @action.shared_folders
52
48
  end
49
+
50
+ context "with sync" do
51
+ should "append the sync value to the other config values" do
52
+ mock_env_shared_folders(:sync => true)
53
+
54
+ assert_equal [["foo", "baz", "bar-sync", "bar"]], @action.shared_folders
55
+ end
56
+ end
57
+
58
+ def mock_env_shared_folders(opts={})
59
+ env = mock_environment do |config|
60
+ config.vm.shared_folders.clear
61
+ config.vm.share_folder("foo", "bar", "baz", opts)
62
+ end
63
+
64
+ @runner.expects(:env).returns(env)
65
+ end
53
66
  end
54
67
 
55
68
  context "clearing shared folders" do
@@ -68,6 +81,12 @@ class SharedFoldersActionTest < Test::Unit::TestCase
68
81
  @runner.expects(:reload!).once.in_sequence(destroy_seq)
69
82
  @action.clear_shared_folders
70
83
  end
84
+
85
+ should "do nothing if no shared folders existed" do
86
+ @shared_folders.clear
87
+ @runner.expects(:reload!).never
88
+ @action.clear_shared_folders
89
+ end
71
90
  end
72
91
 
73
92
  context "setting up shared folder metadata" do
@@ -90,86 +109,34 @@ class SharedFoldersActionTest < Test::Unit::TestCase
90
109
  context "mounting the shared folders" do
91
110
  setup do
92
111
  @folders = stub_shared_folders
112
+ @ssh = mock("ssh")
113
+ @runner.ssh.stubs(:execute).yields(@ssh)
114
+ @runner.system.stubs(:mount_shared_folder)
93
115
  end
94
116
 
95
117
  should "mount all shared folders to the VM" do
96
118
  mount_seq = sequence("mount_seq")
97
- ssh = mock("ssh")
98
119
  @folders.each do |name, hostpath, guestpath|
99
- ssh.expects(:exec!).with("sudo mkdir -p #{guestpath}").in_sequence(mount_seq)
100
- @action.expects(:mount_folder).with(ssh, name, guestpath).in_sequence(mount_seq)
101
- ssh.expects(:exec!).with("sudo chown #{@runner.env.config.ssh.username} #{guestpath}").in_sequence(mount_seq)
120
+ @runner.system.expects(:mount_shared_folder).with(@ssh, name, guestpath).in_sequence(mount_seq)
102
121
  end
103
- @runner.env.ssh.expects(:execute).yields(ssh)
104
122
 
105
123
  @action.after_boot
106
124
  end
107
- end
108
125
 
109
- context "mounting the main folder" do
110
- setup do
111
- @ssh = mock("ssh")
112
- @name = "foo"
113
- @guestpath = "bar"
114
- @sleeptime = 0
115
- @limit = 10
116
-
117
- @success_return = false
118
- end
119
-
120
- def mount_folder
121
- @action.mount_folder(@ssh, @name, @guestpath, @sleeptime)
122
- end
123
-
124
- should "execute the proper mount command" do
125
- @ssh.expects(:exec!).with("sudo mount -t vboxsf -o uid=#{@runner.env.config.ssh.username},gid=#{@runner.env.config.ssh.username} #{@name} #{@guestpath}").returns(@success_return)
126
- mount_folder
127
- end
128
-
129
- should "test type of text and text string to detect error" do
130
- data = mock("data")
131
- data.expects(:[]=).with(:result, !@success_return)
132
-
133
- @ssh.expects(:exec!).yields(data, :stderr, "No such device").returns(@success_return)
134
- mount_folder
135
- end
136
-
137
- should "test type of text and test string to detect success" do
138
- data = mock("data")
139
- data.expects(:[]=).with(:result, @success_return)
140
-
141
- @ssh.expects(:exec!).yields(data, :stdout, "Nothing such device").returns(@success_return)
142
- mount_folder
143
- end
144
-
145
- should "raise an ActionException if the command fails constantly" do
146
- @ssh.expects(:exec!).times(@limit).returns(!@success_return)
147
-
148
- assert_raises(Vagrant::Actions::ActionException) {
149
- mount_folder
150
- }
151
- end
152
-
153
- should "not raise any exception if the command succeeded" do
154
- @ssh.expects(:exec!).once.returns(@success_return)
155
-
156
- assert_nothing_raised {
157
- mount_folder
158
- }
159
- end
160
-
161
- should "add uid AND gid to mount" do
162
- uid = "foo"
163
- gid = "bar"
164
- env = mock_environment do |config|
165
- config.vm.shared_folder_uid = uid
166
- config.vm.shared_folder_gid = gid
126
+ should "execute the necessary rysnc commands for each sync folder" do
127
+ @folders.map { |f| f << 'sync' }
128
+ @folders.each do |name, hostpath, guestpath, syncd|
129
+ @runner.system.expects(:create_sync).with(@ssh, :syncpath => syncd, :guestpath => guestpath)
167
130
  end
131
+ @runner.ssh.expects(:execute).yields(@ssh)
168
132
 
169
- @runner.expects(:env).twice.returns(env)
133
+ @action.after_boot
134
+ end
135
+ end
170
136
 
171
- @ssh.expects(:exec!).with("sudo mount -t vboxsf -o uid=#{uid},gid=#{gid} #{@name} #{@guestpath}").returns(@success_return)
172
- mount_folder
137
+ context "with syncd folders" do
138
+ # TODO prevented by odd configuration swapping when stubbing ssh.execute
139
+ should "prepare the system for sync if necessary" do
173
140
  end
174
141
  end
175
142
  end