fixed-vagrant 0.7.4.dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +15 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +272 -0
- data/Gemfile +21 -0
- data/LICENSE +21 -0
- data/README.md +75 -0
- data/Rakefile +22 -0
- data/bin/vagrant +22 -0
- data/config/default.rb +39 -0
- data/contrib/README.md +12 -0
- data/contrib/emacs/vagrant.el +8 -0
- data/contrib/vim/vagrantfile.vim +9 -0
- data/keys/README.md +17 -0
- data/keys/vagrant +27 -0
- data/keys/vagrant.ppk +26 -0
- data/keys/vagrant.pub +1 -0
- data/lib/vagrant.rb +42 -0
- data/lib/vagrant/action.rb +134 -0
- data/lib/vagrant/action/box.rb +11 -0
- data/lib/vagrant/action/box/destroy.rb +21 -0
- data/lib/vagrant/action/box/download.rb +72 -0
- data/lib/vagrant/action/box/package.rb +19 -0
- data/lib/vagrant/action/box/unpackage.rb +55 -0
- data/lib/vagrant/action/box/verify.rb +23 -0
- data/lib/vagrant/action/builder.rb +124 -0
- data/lib/vagrant/action/builtin.rb +104 -0
- data/lib/vagrant/action/env.rb +7 -0
- data/lib/vagrant/action/env/set.rb +18 -0
- data/lib/vagrant/action/environment.rb +50 -0
- data/lib/vagrant/action/general.rb +8 -0
- data/lib/vagrant/action/general/package.rb +109 -0
- data/lib/vagrant/action/general/validate.rb +19 -0
- data/lib/vagrant/action/vm.rb +31 -0
- data/lib/vagrant/action/vm/boot.rb +48 -0
- data/lib/vagrant/action/vm/check_box.rb +28 -0
- data/lib/vagrant/action/vm/check_guest_additions.rb +30 -0
- data/lib/vagrant/action/vm/clean_machine_folder.rb +43 -0
- data/lib/vagrant/action/vm/clear_forwarded_ports.rb +39 -0
- data/lib/vagrant/action/vm/clear_nfs_exports.rb +20 -0
- data/lib/vagrant/action/vm/clear_shared_folders.rb +32 -0
- data/lib/vagrant/action/vm/customize.rb +21 -0
- data/lib/vagrant/action/vm/destroy.rb +19 -0
- data/lib/vagrant/action/vm/destroy_unused_network_interfaces.rb +30 -0
- data/lib/vagrant/action/vm/discard_state.rb +22 -0
- data/lib/vagrant/action/vm/export.rb +52 -0
- data/lib/vagrant/action/vm/forward_ports.rb +134 -0
- data/lib/vagrant/action/vm/forward_ports_helpers.rb +28 -0
- data/lib/vagrant/action/vm/halt.rb +29 -0
- data/lib/vagrant/action/vm/host_name.rb +21 -0
- data/lib/vagrant/action/vm/import.rb +35 -0
- data/lib/vagrant/action/vm/match_mac_address.rb +21 -0
- data/lib/vagrant/action/vm/network.rb +139 -0
- data/lib/vagrant/action/vm/nfs.rb +159 -0
- data/lib/vagrant/action/vm/nfs_helpers.rb +11 -0
- data/lib/vagrant/action/vm/package.rb +23 -0
- data/lib/vagrant/action/vm/package_vagrantfile.rb +33 -0
- data/lib/vagrant/action/vm/provision.rb +41 -0
- data/lib/vagrant/action/vm/resume.rb +20 -0
- data/lib/vagrant/action/vm/share_folders.rb +70 -0
- data/lib/vagrant/action/vm/suspend.rb +20 -0
- data/lib/vagrant/action/warden.rb +79 -0
- data/lib/vagrant/box.rb +90 -0
- data/lib/vagrant/box_collection.rb +53 -0
- data/lib/vagrant/cli.rb +55 -0
- data/lib/vagrant/command.rb +25 -0
- data/lib/vagrant/command/base.rb +106 -0
- data/lib/vagrant/command/box.rb +33 -0
- data/lib/vagrant/command/destroy.rb +17 -0
- data/lib/vagrant/command/group_base.rb +107 -0
- data/lib/vagrant/command/halt.rb +18 -0
- data/lib/vagrant/command/helpers.rb +33 -0
- data/lib/vagrant/command/init.rb +14 -0
- data/lib/vagrant/command/named_base.rb +14 -0
- data/lib/vagrant/command/package.rb +41 -0
- data/lib/vagrant/command/provision.rb +17 -0
- data/lib/vagrant/command/reload.rb +17 -0
- data/lib/vagrant/command/resume.rb +17 -0
- data/lib/vagrant/command/ssh.rb +42 -0
- data/lib/vagrant/command/ssh_config.rb +26 -0
- data/lib/vagrant/command/status.rb +22 -0
- data/lib/vagrant/command/suspend.rb +17 -0
- data/lib/vagrant/command/up.rb +19 -0
- data/lib/vagrant/command/upgrade_to_060.rb +45 -0
- data/lib/vagrant/command/version.rb +13 -0
- data/lib/vagrant/config.rb +123 -0
- data/lib/vagrant/config/base.rb +85 -0
- data/lib/vagrant/config/error_recorder.rb +19 -0
- data/lib/vagrant/config/nfs.rb +10 -0
- data/lib/vagrant/config/package.rb +9 -0
- data/lib/vagrant/config/ssh.rb +33 -0
- data/lib/vagrant/config/top.rb +61 -0
- data/lib/vagrant/config/vagrant.rb +16 -0
- data/lib/vagrant/config/vm.rb +137 -0
- data/lib/vagrant/config/vm/provisioner.rb +56 -0
- data/lib/vagrant/config/vm/sub_vm.rb +17 -0
- data/lib/vagrant/data_store.rb +70 -0
- data/lib/vagrant/downloaders.rb +7 -0
- data/lib/vagrant/downloaders/base.rb +23 -0
- data/lib/vagrant/downloaders/file.rb +22 -0
- data/lib/vagrant/downloaders/http.rb +64 -0
- data/lib/vagrant/environment.rb +392 -0
- data/lib/vagrant/errors.rb +332 -0
- data/lib/vagrant/hosts.rb +8 -0
- data/lib/vagrant/hosts/arch.rb +27 -0
- data/lib/vagrant/hosts/base.rb +78 -0
- data/lib/vagrant/hosts/bsd.rb +52 -0
- data/lib/vagrant/hosts/linux.rb +47 -0
- data/lib/vagrant/plugin.rb +57 -0
- data/lib/vagrant/provisioners.rb +9 -0
- data/lib/vagrant/provisioners/base.rb +63 -0
- data/lib/vagrant/provisioners/chef.rb +130 -0
- data/lib/vagrant/provisioners/chef_server.rb +103 -0
- data/lib/vagrant/provisioners/chef_solo.rb +142 -0
- data/lib/vagrant/provisioners/puppet.rb +137 -0
- data/lib/vagrant/provisioners/puppet_server.rb +55 -0
- data/lib/vagrant/provisioners/shell.rb +52 -0
- data/lib/vagrant/ssh.rb +173 -0
- data/lib/vagrant/ssh/session.rb +125 -0
- data/lib/vagrant/systems.rb +11 -0
- data/lib/vagrant/systems/base.rb +87 -0
- data/lib/vagrant/systems/debian.rb +36 -0
- data/lib/vagrant/systems/freebsd.rb +84 -0
- data/lib/vagrant/systems/gentoo.rb +27 -0
- data/lib/vagrant/systems/linux.rb +83 -0
- data/lib/vagrant/systems/linux/config.rb +21 -0
- data/lib/vagrant/systems/linux/error.rb +9 -0
- data/lib/vagrant/systems/redhat.rb +39 -0
- data/lib/vagrant/systems/solaris.rb +62 -0
- data/lib/vagrant/systems/ubuntu.rb +17 -0
- data/lib/vagrant/test_helpers.rb +128 -0
- data/lib/vagrant/ui.rb +69 -0
- data/lib/vagrant/util.rb +13 -0
- data/lib/vagrant/util/busy.rb +59 -0
- data/lib/vagrant/util/hash_with_indifferent_access.rb +63 -0
- data/lib/vagrant/util/plain_logger.rb +25 -0
- data/lib/vagrant/util/platform.rb +65 -0
- data/lib/vagrant/util/resource_logger.rb +63 -0
- data/lib/vagrant/util/retryable.rb +25 -0
- data/lib/vagrant/util/stacked_proc_runner.rb +35 -0
- data/lib/vagrant/util/template_renderer.rb +83 -0
- data/lib/vagrant/version.rb +6 -0
- data/lib/vagrant/vm.rb +177 -0
- data/templates/chef_server_client.erb +18 -0
- data/templates/chef_solo_solo.erb +19 -0
- data/templates/commands/init/Vagrantfile.erb +82 -0
- data/templates/config/validation_failed.erb +7 -0
- data/templates/locales/en.yml +535 -0
- data/templates/network_entry_debian.erb +8 -0
- data/templates/network_entry_gentoo.erb +5 -0
- data/templates/network_entry_redhat.erb +8 -0
- data/templates/nfs/exports.erb +5 -0
- data/templates/nfs/exports_linux.erb +5 -0
- data/templates/package_Vagrantfile.erb +11 -0
- data/templates/ssh_config.erb +9 -0
- data/test/locales/en.yml +8 -0
- data/test/test_helper.rb +26 -0
- data/test/vagrant/action/box/destroy_test.rb +18 -0
- data/test/vagrant/action/box/download_test.rb +125 -0
- data/test/vagrant/action/box/package_test.rb +25 -0
- data/test/vagrant/action/box/unpackage_test.rb +84 -0
- data/test/vagrant/action/box/verify_test.rb +30 -0
- data/test/vagrant/action/builder_test.rb +203 -0
- data/test/vagrant/action/env/set_test.rb +24 -0
- data/test/vagrant/action/environment_test.rb +27 -0
- data/test/vagrant/action/general/package_test.rb +268 -0
- data/test/vagrant/action/general/validate_test.rb +31 -0
- data/test/vagrant/action/vm/boot_test.rb +66 -0
- data/test/vagrant/action/vm/check_box_test.rb +56 -0
- data/test/vagrant/action/vm/check_guest_additions_test.rb +9 -0
- data/test/vagrant/action/vm/clean_machine_folder_test.rb +84 -0
- data/test/vagrant/action/vm/clear_forwarded_ports_test.rb +72 -0
- data/test/vagrant/action/vm/clear_nfs_exports_test.rb +22 -0
- data/test/vagrant/action/vm/clear_shared_folders_test.rb +49 -0
- data/test/vagrant/action/vm/customize_test.rb +30 -0
- data/test/vagrant/action/vm/destroy_test.rb +25 -0
- data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +49 -0
- data/test/vagrant/action/vm/discard_state_test.rb +45 -0
- data/test/vagrant/action/vm/export_test.rb +107 -0
- data/test/vagrant/action/vm/forward_ports_helpers_test.rb +70 -0
- data/test/vagrant/action/vm/forward_ports_test.rb +194 -0
- data/test/vagrant/action/vm/halt_test.rb +79 -0
- data/test/vagrant/action/vm/host_name_test.rb +36 -0
- data/test/vagrant/action/vm/import_test.rb +66 -0
- data/test/vagrant/action/vm/match_mac_address_test.rb +36 -0
- data/test/vagrant/action/vm/network_test.rb +286 -0
- data/test/vagrant/action/vm/nfs_helpers_test.rb +26 -0
- data/test/vagrant/action/vm/nfs_test.rb +260 -0
- data/test/vagrant/action/vm/package_test.rb +25 -0
- data/test/vagrant/action/vm/package_vagrantfile_test.rb +46 -0
- data/test/vagrant/action/vm/provision_test.rb +90 -0
- data/test/vagrant/action/vm/resume_test.rb +35 -0
- data/test/vagrant/action/vm/share_folders_test.rb +139 -0
- data/test/vagrant/action/vm/suspend_test.rb +35 -0
- data/test/vagrant/action/warden_test.rb +119 -0
- data/test/vagrant/action_test.rb +89 -0
- data/test/vagrant/box_collection_test.rb +45 -0
- data/test/vagrant/box_test.rb +74 -0
- data/test/vagrant/cli_test.rb +35 -0
- data/test/vagrant/command/base_test.rb +23 -0
- data/test/vagrant/command/group_base_test.rb +15 -0
- data/test/vagrant/command/helpers_test.rb +88 -0
- data/test/vagrant/command/package_test.rb +27 -0
- data/test/vagrant/config/base_test.rb +52 -0
- data/test/vagrant/config/error_recorder_test.rb +18 -0
- data/test/vagrant/config/ssh_test.rb +12 -0
- data/test/vagrant/config/vagrant_test.rb +35 -0
- data/test/vagrant/config/vm/provisioner_test.rb +92 -0
- data/test/vagrant/config/vm_test.rb +86 -0
- data/test/vagrant/config_test.rb +162 -0
- data/test/vagrant/data_store_test.rb +77 -0
- data/test/vagrant/downloaders/base_test.rb +28 -0
- data/test/vagrant/downloaders/file_test.rb +48 -0
- data/test/vagrant/downloaders/http_test.rb +80 -0
- data/test/vagrant/environment_test.rb +508 -0
- data/test/vagrant/errors_test.rb +42 -0
- data/test/vagrant/hosts/base_test.rb +46 -0
- data/test/vagrant/hosts/bsd_test.rb +53 -0
- data/test/vagrant/hosts/linux_test.rb +54 -0
- data/test/vagrant/plugin_test.rb +9 -0
- data/test/vagrant/provisioners/base_test.rb +63 -0
- data/test/vagrant/provisioners/chef_server_test.rb +188 -0
- data/test/vagrant/provisioners/chef_solo_test.rb +219 -0
- data/test/vagrant/provisioners/chef_test.rb +179 -0
- data/test/vagrant/provisioners/puppet_server_test.rb +68 -0
- data/test/vagrant/provisioners/puppet_test.rb +182 -0
- data/test/vagrant/provisioners/shell_test.rb +68 -0
- data/test/vagrant/ssh/session_test.rb +40 -0
- data/test/vagrant/ssh_test.rb +342 -0
- data/test/vagrant/systems/base_test.rb +18 -0
- data/test/vagrant/systems/linux_test.rb +114 -0
- data/test/vagrant/ui_test.rb +29 -0
- data/test/vagrant/util/busy_test.rb +106 -0
- data/test/vagrant/util/hash_with_indifferent_access_test.rb +39 -0
- data/test/vagrant/util/plain_logger_test.rb +17 -0
- data/test/vagrant/util/platform_test.rb +18 -0
- data/test/vagrant/util/resource_logger_test.rb +78 -0
- data/test/vagrant/util/retryable_test.rb +50 -0
- data/test/vagrant/util/stacked_proc_runner_test.rb +43 -0
- data/test/vagrant/util/template_renderer_test.rb +145 -0
- data/test/vagrant/vm_test.rb +291 -0
- data/vagrant.gemspec +36 -0
- metadata +514 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class BaseSystemTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = Vagrant::Systems::Base
|
|
6
|
+
|
|
7
|
+
@vm = mock("vm")
|
|
8
|
+
@instance = @klass.new(@vm)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
should "provide access to the VM" do
|
|
12
|
+
assert_equal @vm, @instance.vm
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
should "error on preparing host only network" do
|
|
16
|
+
assert_raises(@klass::BaseError) { @instance.prepare_host_only_network }
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class LinuxSystemTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = Vagrant::Systems::Linux
|
|
6
|
+
@ssh = mock("ssh")
|
|
7
|
+
@mock_env = vagrant_env
|
|
8
|
+
@vm = mock("vm")
|
|
9
|
+
@vm.stubs(:env).returns(@mock_env)
|
|
10
|
+
@instance = @klass.new(@vm)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
context "halting" do
|
|
14
|
+
setup do
|
|
15
|
+
@ssh_session = mock("ssh_session")
|
|
16
|
+
@ssh.stubs(:execute).yields(@ssh_session)
|
|
17
|
+
@vm.stubs(:ssh).returns(@ssh)
|
|
18
|
+
|
|
19
|
+
@real_vm = mock("real_vm")
|
|
20
|
+
@real_vm.stubs(:state).returns(:powered_off)
|
|
21
|
+
@vm.stubs(:vm).returns(@real_vm)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
should "execute halt via SSH" do
|
|
25
|
+
@ssh_session.expects(:exec!).with("sudo halt").once
|
|
26
|
+
@instance.halt
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context "mounting shared folders" do
|
|
31
|
+
setup do
|
|
32
|
+
@name = "foo"
|
|
33
|
+
@guestpath = "/bar"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
should "create the dir, mount the folder, then set permissions" do
|
|
37
|
+
mount_seq = sequence("mount_seq")
|
|
38
|
+
@ssh.expects(:exec!).with("sudo mkdir -p #{@guestpath}").in_sequence(mount_seq)
|
|
39
|
+
@instance.expects(:mount_folder).with(@ssh, @name, @guestpath).in_sequence(mount_seq)
|
|
40
|
+
@ssh.expects(:exec!).with("sudo chown #{@vm.env.config.ssh.username} #{@guestpath}").in_sequence(mount_seq)
|
|
41
|
+
|
|
42
|
+
@instance.mount_shared_folder(@ssh, @name, @guestpath)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
#-------------------------------------------------------------------
|
|
47
|
+
# "Private" methods tests
|
|
48
|
+
#-------------------------------------------------------------------
|
|
49
|
+
context "mounting the main folder" do
|
|
50
|
+
setup do
|
|
51
|
+
@name = "foo"
|
|
52
|
+
@guestpath = "bar"
|
|
53
|
+
@sleeptime = 0
|
|
54
|
+
@limit = 10
|
|
55
|
+
|
|
56
|
+
@success_return = false
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def mount_folder
|
|
60
|
+
@instance.mount_folder(@ssh, @name, @guestpath, @sleeptime)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
should "execute the proper mount command" do
|
|
64
|
+
@ssh.expects(:exec!).with("sudo mount -t vboxsf -o uid=`id -u #{@vm.env.config.ssh.username}`,gid=`id -g #{@vm.env.config.ssh.username}` #{@name} #{@guestpath}").returns(@success_return)
|
|
65
|
+
mount_folder
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
should "test type of text and text string to detect error" do
|
|
69
|
+
data = mock("data")
|
|
70
|
+
data.expects(:[]=).with(:result, !@success_return)
|
|
71
|
+
|
|
72
|
+
@ssh.expects(:exec!).yields(data, :stderr, "No such device").returns(@success_return)
|
|
73
|
+
mount_folder
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
should "test type of text and test string to detect success" do
|
|
77
|
+
data = mock("data")
|
|
78
|
+
data.expects(:[]=).with(:result, @success_return)
|
|
79
|
+
|
|
80
|
+
@ssh.expects(:exec!).yields(data, :stdout, "Nothing such device").returns(@success_return)
|
|
81
|
+
mount_folder
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
should "raise an ActionException if the command fails constantly" do
|
|
85
|
+
@ssh.expects(:exec!).times(@limit).returns(!@success_return)
|
|
86
|
+
|
|
87
|
+
assert_raises(Vagrant::Systems::Linux::LinuxError) {
|
|
88
|
+
mount_folder
|
|
89
|
+
}
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
should "not raise any exception if the command succeeded" do
|
|
93
|
+
@ssh.expects(:exec!).once.returns(@success_return)
|
|
94
|
+
|
|
95
|
+
assert_nothing_raised {
|
|
96
|
+
mount_folder
|
|
97
|
+
}
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
should "add uid AND gid to mount" do
|
|
101
|
+
uid = "foo"
|
|
102
|
+
gid = "bar"
|
|
103
|
+
env = vagrant_env(vagrantfile(<<-vf))
|
|
104
|
+
config.vm.shared_folder_uid = "#{uid}"
|
|
105
|
+
config.vm.shared_folder_gid = "#{gid}"
|
|
106
|
+
vf
|
|
107
|
+
|
|
108
|
+
@vm.stubs(:env).returns(env)
|
|
109
|
+
|
|
110
|
+
@ssh.expects(:exec!).with("sudo mount -t vboxsf -o uid=`id -u #{uid}`,gid=`id -g #{gid}` #{@name} #{@guestpath}").returns(@success_return)
|
|
111
|
+
mount_folder
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -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,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,17 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class PlainLoggerUtilTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = Vagrant::Util::PlainLogger
|
|
6
|
+
@instance = @klass.new(nil)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
should "inherit from the standard logger" do
|
|
10
|
+
assert @instance.is_a?(::Logger)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
should "just add a newline to the message" do
|
|
14
|
+
msg = "foo bar baz"
|
|
15
|
+
assert_equal "#{msg}\n", @instance.format_message("1", "2", "3", msg)
|
|
16
|
+
end
|
|
17
|
+
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
|
+
Mario::Platform.expects(: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
|
+
Mario::Platform.expects(: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,78 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class ResourceLoggerUtilTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = Vagrant::Util::ResourceLogger
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "singleton logger" do
|
|
9
|
+
setup do
|
|
10
|
+
@klass.reset_singleton_logger!
|
|
11
|
+
|
|
12
|
+
@result = mock("result")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
should "return a nil plain logger if the environment is not loaded" do
|
|
16
|
+
env = vagrant_env
|
|
17
|
+
env.stubs(:loaded?).returns(false)
|
|
18
|
+
|
|
19
|
+
Vagrant::Util::PlainLogger.expects(:new).with(nil).returns(@result)
|
|
20
|
+
assert_equal @result, @klass.singleton_logger(env)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
should "return a logger with the output file set if environment is ready" do
|
|
24
|
+
env = vagrant_env
|
|
25
|
+
|
|
26
|
+
Vagrant::Util::PlainLogger.expects(:new).returns(@result).with() do |path|
|
|
27
|
+
assert path.to_s =~ /logs/
|
|
28
|
+
true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
assert_equal @result, @klass.singleton_logger(env)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
should "only load the logger once" do
|
|
35
|
+
env = vagrant_env
|
|
36
|
+
|
|
37
|
+
Vagrant::Util::PlainLogger.expects(:new).with(anything).returns(@result)
|
|
38
|
+
assert_equal @result, @klass.singleton_logger(env)
|
|
39
|
+
assert_equal @result, @klass.singleton_logger(env)
|
|
40
|
+
assert_equal @result, @klass.singleton_logger(env)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "initialization" do
|
|
45
|
+
should "setup the logger and attributes" do
|
|
46
|
+
env = vagrant_env
|
|
47
|
+
resource = mock("resource")
|
|
48
|
+
result = mock("result")
|
|
49
|
+
|
|
50
|
+
@klass.expects(:singleton_logger).with(env).returns(result)
|
|
51
|
+
instance = @klass.new(resource, env)
|
|
52
|
+
assert_equal resource, instance.resource
|
|
53
|
+
assert_equal env, instance.env
|
|
54
|
+
assert_equal result, instance.logger
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context "with an instance" do
|
|
59
|
+
setup do
|
|
60
|
+
@resource = "foo"
|
|
61
|
+
@env = vagrant_env
|
|
62
|
+
@logger = mock("logger")
|
|
63
|
+
|
|
64
|
+
@klass.stubs(:singleton_logger).returns(@logger)
|
|
65
|
+
@instance = @klass.new(@resource, @env)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
context "logging methods" do
|
|
69
|
+
[:debug, :info, :error, :fatal].each do |method|
|
|
70
|
+
should "log with the proper format on #{method}" do
|
|
71
|
+
message = "bar"
|
|
72
|
+
@logger.expects(method).with("[#{@resource}] #{message}").once
|
|
73
|
+
@instance.send(method, message)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
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
|