vagrantup 0.5.2 → 0.5.3
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.
- checksums.yaml +4 -4
- data/.gitignore +10 -0
- data/CHANGELOG.md +48 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +49 -0
- data/README.md +2 -2
- data/Rakefile +22 -0
- data/bin/.gitignore +0 -0
- data/lib/vagrant/provisioners/chef_solo.rb +1 -1
- data/lib/vagrant/util/template_renderer.rb +2 -2
- data/lib/vagrant/version.rb +1 -1
- data/templates/Vagrantfile.erb +1 -1
- data/templates/nfs/exports.erb +4 -2
- data/test/test_helper.rb +128 -0
- data/test/vagrant/action/box/destroy_test.rb +30 -0
- data/test/vagrant/action/box/download_test.rb +141 -0
- data/test/vagrant/action/box/package_test.rb +25 -0
- data/test/vagrant/action/box/unpackage_test.rb +103 -0
- data/test/vagrant/action/box/verify_test.rb +39 -0
- data/test/vagrant/action/builder_test.rb +218 -0
- data/test/vagrant/action/env/error_halt_test.rb +21 -0
- data/test/vagrant/action/env/set_test.rb +24 -0
- data/test/vagrant/action/environment_test.rb +45 -0
- data/test/vagrant/action/exception_catcher_test.rb +30 -0
- data/test/vagrant/action/general/package_test.rb +254 -0
- data/test/vagrant/action/vm/boot_test.rb +83 -0
- data/test/vagrant/action/vm/check_box_test.rb +48 -0
- data/test/vagrant/action/vm/check_guest_additions_test.rb +9 -0
- data/test/vagrant/action/vm/clean_machine_folder_test.rb +82 -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 +29 -0
- data/test/vagrant/action/vm/destroy_test.rb +26 -0
- data/test/vagrant/action/vm/destroy_unused_network_interfaces_test.rb +46 -0
- data/test/vagrant/action/vm/disable_networks_test.rb +39 -0
- data/test/vagrant/action/vm/discard_state_test.rb +36 -0
- data/test/vagrant/action/vm/export_test.rb +135 -0
- data/test/vagrant/action/vm/forward_ports_helpers_test.rb +70 -0
- data/test/vagrant/action/vm/forward_ports_test.rb +191 -0
- data/test/vagrant/action/vm/halt_test.rb +69 -0
- data/test/vagrant/action/vm/import_test.rb +50 -0
- data/test/vagrant/action/vm/match_mac_address_test.rb +28 -0
- data/test/vagrant/action/vm/network_test.rb +246 -0
- data/test/vagrant/action/vm/nfs_helpers_test.rb +23 -0
- data/test/vagrant/action/vm/nfs_test.rb +269 -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/persist_test.rb +50 -0
- data/test/vagrant/action/vm/provision_test.rb +134 -0
- data/test/vagrant/action/vm/resume_test.rb +35 -0
- data/test/vagrant/action/vm/share_folders_test.rb +215 -0
- data/test/vagrant/action/vm/suspend_test.rb +35 -0
- data/test/vagrant/action_test.rb +111 -0
- data/test/vagrant/active_list_test.rb +173 -0
- data/test/vagrant/box_test.rb +166 -0
- data/test/vagrant/command_test.rb +53 -0
- data/test/vagrant/commands/base_test.rb +139 -0
- data/test/vagrant/commands/box/add_test.rb +34 -0
- data/test/vagrant/commands/box/list_test.rb +32 -0
- data/test/vagrant/commands/box/remove_test.rb +41 -0
- data/test/vagrant/commands/box/repackage_test.rb +52 -0
- data/test/vagrant/commands/destroy_test.rb +44 -0
- data/test/vagrant/commands/halt_test.rb +50 -0
- data/test/vagrant/commands/init_test.rb +71 -0
- data/test/vagrant/commands/package_test.rb +97 -0
- data/test/vagrant/commands/provision_test.rb +60 -0
- data/test/vagrant/commands/reload_test.rb +47 -0
- data/test/vagrant/commands/resume_test.rb +44 -0
- data/test/vagrant/commands/ssh_config_test.rb +77 -0
- data/test/vagrant/commands/ssh_test.rb +129 -0
- data/test/vagrant/commands/status_test.rb +40 -0
- data/test/vagrant/commands/suspend_test.rb +44 -0
- data/test/vagrant/commands/up_test.rb +49 -0
- data/test/vagrant/config_test.rb +307 -0
- data/test/vagrant/downloaders/base_test.rb +28 -0
- data/test/vagrant/downloaders/file_test.rb +33 -0
- data/test/vagrant/downloaders/http_test.rb +70 -0
- data/test/vagrant/environment_test.rb +770 -0
- data/test/vagrant/hosts/base_test.rb +46 -0
- data/test/vagrant/hosts/bsd_test.rb +56 -0
- data/test/vagrant/hosts/linux_test.rb +56 -0
- data/test/vagrant/provisioners/base_test.rb +36 -0
- data/test/vagrant/provisioners/chef_server_test.rb +182 -0
- data/test/vagrant/provisioners/chef_solo_test.rb +197 -0
- data/test/vagrant/provisioners/chef_test.rb +178 -0
- data/test/vagrant/ssh_session_test.rb +46 -0
- data/test/vagrant/ssh_test.rb +317 -0
- data/test/vagrant/systems/linux_test.rb +179 -0
- data/test/vagrant/util/busy_test.rb +106 -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 +145 -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/util/translator_test.rb +61 -0
- data/test/vagrant/util_test.rb +27 -0
- data/test/vagrant/vm_test.rb +228 -0
- data/vagrant.gemspec +34 -0
- metadata +130 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3b89c17ea0cfe6ef7d645edc35ffcab3532b43ee
|
|
4
|
+
data.tar.gz: 2ed0c07d7ee7ac716692a9d7d2e927b42ba2873c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 136c0ee3d7c709082a9505e301c7a277d843a68bea7fe192b48e08fc33adadd521f35e6cbe4f20654e449d36aae4d300d73958d9917563a1bc6e104cb87ee11a
|
|
7
|
+
data.tar.gz: 1ead90419227ee0979022469a83952ea77296c3533ea58d2b81f9d292a2a3f5b35dae962f32b8a5ee644950b1f8e721c5e4a5311c2aaac461e422f333f8e89fd
|
data/.gitignore
ADDED
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
## 0.5.3 (August 23, 2010)
|
|
2
|
+
|
|
3
|
+
- Add erubis as a dependency since its rendering of `erb` is sane.
|
|
4
|
+
- Fixed poorly formatted Vagrantfile after `vagrant init`. [GH-142]
|
|
5
|
+
- Fixed NFS not working properly with multiple NFS folders.
|
|
6
|
+
- Fixed chef solo provision to work on Windows. It was expanding a linux
|
|
7
|
+
path which prepended a drive letter onto it.
|
|
8
|
+
|
|
9
|
+
## 0.5.2 (August 3, 2010)
|
|
10
|
+
|
|
11
|
+
- `vagrant up` can be used as a way to resume the VM as well (same as
|
|
12
|
+
`vagrant resume`). [GH-134]
|
|
13
|
+
- Sudo uses "-E" flag to preserve environment for chef provisioners.
|
|
14
|
+
This fixes issues with CentOS. [GH-133]
|
|
15
|
+
- Added "IdentitiesOnly yes" to options when `vagrant ssh` is run to
|
|
16
|
+
avoid "Too Many Authentication Failures" error. [GH-131]
|
|
17
|
+
- Fix regression with `package` not working. [GH-132]
|
|
18
|
+
- Added ability to specify box url in `init`, which populates the
|
|
19
|
+
Vagrantfile with the proper `config.vm.box_url`.
|
|
20
|
+
|
|
21
|
+
## 0.5.1 (July 31, 2010)
|
|
22
|
+
|
|
23
|
+
- Allow specifying cookbook paths which exist only on the VM in `config.chef.cookbooks_path`.
|
|
24
|
+
This is used for specifying cookbook paths when `config.chef.recipe_url` is used. [GH-130]
|
|
25
|
+
See updated chef solo documentation for more information on this.
|
|
26
|
+
- No longer show "Disabling host only networks..." if no host only networks
|
|
27
|
+
are destroyed. Quiets `destroy`, `halt`, etc output a bit.
|
|
28
|
+
- Updated getting started guide to be more up to date and generic. [GH-125]
|
|
29
|
+
- Fixed error with doing a `vagrant up` when no Vagrantfile existed. [GH-128]
|
|
30
|
+
- Fixed NFS erroring when NFS wasn't even enabled if `/etc/exports` doesn't
|
|
31
|
+
exist. [GH-126]
|
|
32
|
+
- Fixed `vagrant resume` to properly resume a suspended VM. [GH-122]
|
|
33
|
+
- Fixed `halt`, `destroy`, `reload` to where they failed if the VM was
|
|
34
|
+
in a saved state. [GH-123]
|
|
35
|
+
- Added `config.chef.recipe_url` which allows you to specify a URL to
|
|
36
|
+
a gzipped tar file for chef solo to download cookbooks. See the
|
|
37
|
+
[chef-solo docs](http://wiki.opscode.com/display/chef/Chef+Solo#ChefSolo-RunningfromaURL) for more information.
|
|
38
|
+
[GH-121]
|
|
39
|
+
- Added `vagrant box repackage` which repackages boxes which have
|
|
40
|
+
been added. This is useful in case you want to redistribute a base
|
|
41
|
+
box you have but may have lost the actual "box" file. [GH-120]
|
|
42
|
+
|
|
43
|
+
## Previous
|
|
44
|
+
|
|
45
|
+
The changelog began with version 0.5.1 so any changes prior to that
|
|
46
|
+
can be seen by checking the tagged releases and reading git commit
|
|
47
|
+
messages.
|
|
48
|
+
|
data/Gemfile
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
source "http://rubygems.org"
|
|
2
|
+
|
|
3
|
+
gem "vagrant", :path => '.'
|
|
4
|
+
|
|
5
|
+
# Use the version of virtualbox off of github
|
|
6
|
+
gem "virtualbox", :git => "git://github.com/mitchellh/virtualbox.git"
|
|
7
|
+
|
|
8
|
+
# Gems required for testing only. To install run
|
|
9
|
+
# gem bundle test
|
|
10
|
+
group :test do
|
|
11
|
+
gem "rake"
|
|
12
|
+
gem "contest", ">= 0.1.2"
|
|
13
|
+
gem "mocha"
|
|
14
|
+
gem "yard"
|
|
15
|
+
gem "ruby-debug", ">= 0.10.3" if RUBY_VERSION < '1.9'
|
|
16
|
+
end
|
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
GIT
|
|
2
|
+
remote: git://github.com/mitchellh/virtualbox.git
|
|
3
|
+
revision: 69db76b
|
|
4
|
+
specs:
|
|
5
|
+
virtualbox (0.7.5)
|
|
6
|
+
ffi (>= 0.6.3)
|
|
7
|
+
|
|
8
|
+
PATH
|
|
9
|
+
remote: .
|
|
10
|
+
specs:
|
|
11
|
+
vagrant (0.5.3)
|
|
12
|
+
archive-tar-minitar (= 0.5.2)
|
|
13
|
+
erubis (>= 2.6.6)
|
|
14
|
+
json (>= 1.4.3)
|
|
15
|
+
mario (~> 0.0.6)
|
|
16
|
+
net-scp (>= 1.0.2)
|
|
17
|
+
net-ssh (>= 2.0.19)
|
|
18
|
+
virtualbox (~> 0.7.3)
|
|
19
|
+
|
|
20
|
+
GEM
|
|
21
|
+
remote: http://rubygems.org/
|
|
22
|
+
specs:
|
|
23
|
+
abstract (1.0.0)
|
|
24
|
+
archive-tar-minitar (0.5.2)
|
|
25
|
+
contest (0.1.2)
|
|
26
|
+
erubis (2.6.6)
|
|
27
|
+
abstract (>= 1.0.0)
|
|
28
|
+
ffi (0.6.3)
|
|
29
|
+
rake (>= 0.8.7)
|
|
30
|
+
json (1.4.6)
|
|
31
|
+
mario (0.0.6)
|
|
32
|
+
mocha (0.9.8)
|
|
33
|
+
rake
|
|
34
|
+
net-scp (1.0.3)
|
|
35
|
+
net-ssh (>= 1.99.1)
|
|
36
|
+
net-ssh (2.0.23)
|
|
37
|
+
rake (0.8.7)
|
|
38
|
+
yard (0.5.8)
|
|
39
|
+
|
|
40
|
+
PLATFORMS
|
|
41
|
+
ruby
|
|
42
|
+
|
|
43
|
+
DEPENDENCIES
|
|
44
|
+
contest (>= 0.1.2)
|
|
45
|
+
mocha
|
|
46
|
+
rake
|
|
47
|
+
vagrant!
|
|
48
|
+
virtualbox!
|
|
49
|
+
yard
|
data/README.md
CHANGED
|
@@ -48,9 +48,9 @@ and you're welcome to give it a shot. The following is an example showing how to
|
|
|
48
48
|
## Contributing to Vagrant
|
|
49
49
|
|
|
50
50
|
To hack on vagrant, you'll need [bundler](http://github.com/carlhuda/bundler) which can
|
|
51
|
-
be installed with a simple `gem install bundler`. Afterwords, do the following:
|
|
51
|
+
be installed with a simple `gem install bundler --pre`. Afterwords, do the following:
|
|
52
52
|
|
|
53
53
|
bundle install
|
|
54
|
-
|
|
54
|
+
rake
|
|
55
55
|
|
|
56
56
|
This will run the test suite, which should come back all green! Then you're good to go!
|
data/Rakefile
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
require 'rake/testtask'
|
|
4
|
+
Bundler::GemHelper.install_tasks
|
|
5
|
+
|
|
6
|
+
task :default => :test
|
|
7
|
+
|
|
8
|
+
Rake::TestTask.new do |t|
|
|
9
|
+
t.libs << "test"
|
|
10
|
+
t.pattern = 'test/**/*_test.rb'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
begin
|
|
14
|
+
require 'yard'
|
|
15
|
+
YARD::Rake::YardocTask.new do |t|
|
|
16
|
+
t.options = ['--main', 'README.md', '--markup', 'markdown']
|
|
17
|
+
t.options += ['--title', 'Vagrant Developer Documentation']
|
|
18
|
+
end
|
|
19
|
+
rescue LoadError
|
|
20
|
+
puts "Yard not available. Install it with: gem install yard"
|
|
21
|
+
puts "if you wish to be able to generate developer documentation."
|
|
22
|
+
end
|
data/bin/.gitignore
ADDED
|
File without changes
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require 'ostruct'
|
|
2
|
-
require '
|
|
2
|
+
require 'erubis'
|
|
3
3
|
|
|
4
4
|
module Vagrant
|
|
5
5
|
module Util
|
|
@@ -68,7 +68,7 @@ module Vagrant
|
|
|
68
68
|
#
|
|
69
69
|
# @return [String]
|
|
70
70
|
def render_string
|
|
71
|
-
|
|
71
|
+
Erubis::Eruby.new(template, :trim => true).result(binding)
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
# Returns the full path to the template, taking into accoun the gem directory
|
data/lib/vagrant/version.rb
CHANGED
data/templates/Vagrantfile.erb
CHANGED
|
@@ -5,8 +5,8 @@ Vagrant::Config.run do |config|
|
|
|
5
5
|
|
|
6
6
|
# Every Vagrant virtual environment requires a box to build off of.
|
|
7
7
|
config.vm.box = "<%= default_box %>"
|
|
8
|
-
|
|
9
8
|
<% if !default_box_url.nil? -%>
|
|
9
|
+
|
|
10
10
|
# The url from where the 'config.vm.box' box will be fetched if it
|
|
11
11
|
# doesn't already exist on the user's system
|
|
12
12
|
config.vm.box_url = "<%= default_box_url %>"
|
data/templates/nfs/exports.erb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
# VAGRANT-BEGIN: <%= uuid %>
|
|
2
|
-
<% folders.each do |name, opts|
|
|
3
|
-
|
|
2
|
+
<% folders.each do |name, opts| %>
|
|
3
|
+
<%= opts[:hostpath] %> <%= ip %><% if opts[:map_uid] -%> -mapall=<%= [opts[:map_uid],opts[:map_gid]].compact.join(":") %><% end -%>
|
|
4
|
+
<% end %>
|
|
5
|
+
# VAGRANT-END: <%= uuid %>
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# ruby-debug, not necessary, but useful if we have it
|
|
2
|
+
begin
|
|
3
|
+
require 'ruby-debug'
|
|
4
|
+
rescue LoadError; end
|
|
5
|
+
|
|
6
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', 'vagrant')
|
|
7
|
+
require 'contest'
|
|
8
|
+
require 'mocha'
|
|
9
|
+
|
|
10
|
+
# Add this folder to the load path for "test_helper"
|
|
11
|
+
$:.unshift(File.dirname(__FILE__))
|
|
12
|
+
|
|
13
|
+
class Test::Unit::TestCase
|
|
14
|
+
# Mocks an environment, setting it up with the given config.
|
|
15
|
+
def mock_environment
|
|
16
|
+
environment = Vagrant::Environment.new
|
|
17
|
+
|
|
18
|
+
Vagrant::Config.reset!(environment)
|
|
19
|
+
|
|
20
|
+
Vagrant::Config.run do |config|
|
|
21
|
+
config.vagrant.home = '~/.home'
|
|
22
|
+
config.vagrant.dotfile_name = ".vagrant"
|
|
23
|
+
config.vagrant.log_output = nil
|
|
24
|
+
config.vagrant.host = :detect
|
|
25
|
+
|
|
26
|
+
config.ssh.username = "foo"
|
|
27
|
+
config.ssh.host = "baz"
|
|
28
|
+
config.ssh.port = 22
|
|
29
|
+
config.ssh.forwarded_port_key = "ssh"
|
|
30
|
+
config.ssh.max_tries = 10
|
|
31
|
+
config.ssh.timeout = 10
|
|
32
|
+
config.ssh.private_key_path = '~/foo'
|
|
33
|
+
|
|
34
|
+
config.vm.box = "foo"
|
|
35
|
+
config.vm.box_url = nil
|
|
36
|
+
config.vm.box_ovf = "box.ovf"
|
|
37
|
+
config.vm.base_mac = "42"
|
|
38
|
+
config.vm.disk_image_format = 'VMDK'
|
|
39
|
+
config.vm.forward_port("ssh", 22, 2222)
|
|
40
|
+
config.vm.shared_folder_uid = nil
|
|
41
|
+
config.vm.shared_folder_gid = nil
|
|
42
|
+
config.vm.system = :linux
|
|
43
|
+
config.vm.share_folder("v-root", "/vagrant", ".")
|
|
44
|
+
|
|
45
|
+
config.package.name = 'package'
|
|
46
|
+
|
|
47
|
+
# Unison
|
|
48
|
+
config.unison.folder_suffix = ".sync"
|
|
49
|
+
config.unison.log_file = "foo-%s"
|
|
50
|
+
|
|
51
|
+
# Chef
|
|
52
|
+
config.chef.chef_server_url = "http://localhost:4000"
|
|
53
|
+
config.chef.validation_key_path = "validation.pem"
|
|
54
|
+
config.chef.client_key_path = "/zoo/foo/bar.pem"
|
|
55
|
+
config.chef.node_name = "baz"
|
|
56
|
+
config.chef.recipe_url = nil
|
|
57
|
+
config.chef.cookbooks_path = "cookbooks"
|
|
58
|
+
config.chef.provisioning_path = "/tmp/vagrant-chef"
|
|
59
|
+
config.chef.log_level = :info
|
|
60
|
+
config.chef.json = {
|
|
61
|
+
:recipes => ["vagrant_main"]
|
|
62
|
+
}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
if block_given?
|
|
66
|
+
Vagrant::Config.run do |config|
|
|
67
|
+
yield config
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
config = Vagrant::Config.execute!
|
|
72
|
+
|
|
73
|
+
environment.instance_variable_set(:@config, config)
|
|
74
|
+
|
|
75
|
+
# Setup the logger. We create it then reset it so that subsequent
|
|
76
|
+
# calls will recreate it for us.
|
|
77
|
+
environment.load_logger!
|
|
78
|
+
environment.logger.class.reset_singleton_logger!
|
|
79
|
+
environment.logger.stubs(:flush_progress)
|
|
80
|
+
environment.logger.stubs(:cl_reset).returns("")
|
|
81
|
+
|
|
82
|
+
environment
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Sets up the mocks for a VM
|
|
86
|
+
def mock_vm(env=nil)
|
|
87
|
+
env ||= mock_environment
|
|
88
|
+
vm = Vagrant::VM.new
|
|
89
|
+
vm.stubs(:env).returns(env)
|
|
90
|
+
vm.stubs(:ssh).returns(Vagrant::SSH.new(vm.env))
|
|
91
|
+
vm
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def mock_action_data
|
|
95
|
+
app = lambda { |env| }
|
|
96
|
+
env = Vagrant::Action::Environment.new(mock_environment)
|
|
97
|
+
env["vagrant.test"] = true
|
|
98
|
+
[app, env]
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Returns a resource logger which is safe for tests
|
|
102
|
+
def quiet_logger(resource, env=nil)
|
|
103
|
+
logger = Vagrant::ResourceLogger.new(resource, env)
|
|
104
|
+
logger.stubs(:flush_progress)
|
|
105
|
+
logger.stubs(:cl_reset).returns("")
|
|
106
|
+
logger
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Returns a linux system
|
|
110
|
+
def linux_system(vm)
|
|
111
|
+
Vagrant::Systems::Linux.new(vm)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def stub_default_action_dependecies(mock)
|
|
115
|
+
mock.stubs(:precedes).returns([])
|
|
116
|
+
mock.stubs(:follows).returns([])
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Sets up the mocks and stubs for a downloader
|
|
120
|
+
def mock_downloader(downloader_klass)
|
|
121
|
+
tempfile = mock("tempfile")
|
|
122
|
+
tempfile.stubs(:write)
|
|
123
|
+
|
|
124
|
+
_, env = mock_action_data
|
|
125
|
+
[downloader_klass.new(env), tempfile]
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class DestroyBoxActionTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = Vagrant::Action::Box::Destroy
|
|
6
|
+
@app, @env = mock_action_data
|
|
7
|
+
|
|
8
|
+
@vm = mock("vm")
|
|
9
|
+
@env["vm"] = @vm
|
|
10
|
+
@env["box"] = Vagrant::Box.new(mock_environment, "foo")
|
|
11
|
+
|
|
12
|
+
@internal_vm = mock("internal")
|
|
13
|
+
@vm.stubs(:vm).returns(@internal_vm)
|
|
14
|
+
|
|
15
|
+
@instance = @klass.new(@app, @env)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "calling" do
|
|
19
|
+
setup do
|
|
20
|
+
@env.logger.stubs(:info)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
should "delete the box directory" do
|
|
24
|
+
seq = sequence("seq")
|
|
25
|
+
FileUtils.expects(:rm_rf).with(@env["box"].directory).in_sequence(seq)
|
|
26
|
+
@app.expects(:call).with(@env).once.in_sequence(seq)
|
|
27
|
+
@instance.call(@env)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class DownloadBoxActionTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = Vagrant::Action::Box::Download
|
|
6
|
+
@app, @env = mock_action_data
|
|
7
|
+
|
|
8
|
+
@vm = mock("vm")
|
|
9
|
+
@env["vm"] = @vm
|
|
10
|
+
@env["box"] = Vagrant::Box.new(mock_environment, "foo")
|
|
11
|
+
@env["box"].uri = "http://google.com"
|
|
12
|
+
|
|
13
|
+
@internal_vm = mock("internal")
|
|
14
|
+
@vm.stubs(:vm).returns(@internal_vm)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
context "initializing" do
|
|
18
|
+
should "initialize download classes" do
|
|
19
|
+
@klass.new(@app, @env)
|
|
20
|
+
assert_equal [Vagrant::Downloaders::HTTP, Vagrant::Downloaders::File], @env["download.classes"]
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
context "with an instance" do
|
|
25
|
+
setup do
|
|
26
|
+
@instance = @klass.new(@app, @env)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context "calling" do
|
|
30
|
+
should "call the proper methods in sequence" do
|
|
31
|
+
seq = sequence("seq")
|
|
32
|
+
@instance.expects(:instantiate_downloader).in_sequence(seq).returns(true)
|
|
33
|
+
@instance.expects(:download).in_sequence(seq)
|
|
34
|
+
@app.expects(:call).with(@env).in_sequence(seq)
|
|
35
|
+
@instance.expects(:cleanup).in_sequence(seq)
|
|
36
|
+
@instance.call(@env)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
should "halt the chain if downloader instantiation fails" do
|
|
40
|
+
seq = sequence("seq")
|
|
41
|
+
@env.error!(:foo)
|
|
42
|
+
@instance.expects(:instantiate_downloader).in_sequence(seq).returns(false)
|
|
43
|
+
@instance.expects(:download).never
|
|
44
|
+
@app.expects(:call).with(@env).never
|
|
45
|
+
@instance.expects(:cleanup).never
|
|
46
|
+
@instance.call(@env)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
context "instantiating downloader" do
|
|
51
|
+
should "instantiate the proper class" do
|
|
52
|
+
instance = mock("instance")
|
|
53
|
+
Vagrant::Downloaders::HTTP.expects(:new).with(@env).returns(instance)
|
|
54
|
+
instance.expects(:prepare).with(@env["box"].uri).once
|
|
55
|
+
assert @instance.instantiate_downloader
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
should "error environment if URI is invalid for any downloaders" do
|
|
59
|
+
@env["box"].uri = "foobar"
|
|
60
|
+
assert !@instance.instantiate_downloader
|
|
61
|
+
assert @env.error?
|
|
62
|
+
assert_equal :box_download_unknown_type, @env.error.first
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
context "downloading" do
|
|
67
|
+
setup do
|
|
68
|
+
@path = "foo"
|
|
69
|
+
|
|
70
|
+
@tempfile = mock("tempfile")
|
|
71
|
+
@tempfile.stubs(:path).returns(@path)
|
|
72
|
+
|
|
73
|
+
@instance.stubs(:with_tempfile).yields(@tempfile)
|
|
74
|
+
@instance.stubs(:download_to)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
should "make a tempfile and copy the URI contents to it" do
|
|
78
|
+
@instance.expects(:with_tempfile).yields(@tempfile)
|
|
79
|
+
@instance.expects(:download_to).with(@tempfile)
|
|
80
|
+
@instance.download
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
should "save the tempfile path" do
|
|
84
|
+
@instance.download
|
|
85
|
+
assert @env.has_key?("download.temp_path")
|
|
86
|
+
assert_equal @tempfile.path, @env["download.temp_path"]
|
|
87
|
+
assert_equal @tempfile.path, @instance.temp_path
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
context "tempfile" do
|
|
92
|
+
should "create a tempfile in the vagrant tmp directory" do
|
|
93
|
+
File.expects(:open).with { |name, bitmask|
|
|
94
|
+
name =~ /#{Vagrant::Action::Box::Download::BASENAME}/ && name =~ /#{@env.env.tmp_path}/
|
|
95
|
+
}.once
|
|
96
|
+
@instance.with_tempfile
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
should "yield the tempfile object" do
|
|
100
|
+
@tempfile = mock("tempfile")
|
|
101
|
+
File.expects(:open).yields(@tempfile)
|
|
102
|
+
|
|
103
|
+
@instance.with_tempfile do |otherfile|
|
|
104
|
+
assert @tempfile.equal?(otherfile)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context "cleaning up" do
|
|
110
|
+
setup do
|
|
111
|
+
@temp_path = "foo"
|
|
112
|
+
@instance.stubs(:temp_path).returns(@temp_path)
|
|
113
|
+
File.stubs(:exist?).returns(true)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
should "delete the temporary file if it exists" do
|
|
117
|
+
File.expects(:unlink).with(@temp_path).once
|
|
118
|
+
@instance.cleanup
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
should "not delete anything if it doesn't exist" do
|
|
122
|
+
File.stubs(:exist?).returns(false)
|
|
123
|
+
File.expects(:unlink).never
|
|
124
|
+
@instance.cleanup
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
context "downloading to" do
|
|
129
|
+
setup do
|
|
130
|
+
@downloader = mock("downloader")
|
|
131
|
+
@instance.instance_variable_set(:@downloader, @downloader)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
should "call download! on the download with the URI and tempfile" do
|
|
135
|
+
tempfile = "foo"
|
|
136
|
+
@downloader.expects(:download!).with(@env["box"].uri, tempfile)
|
|
137
|
+
@instance.download_to(tempfile)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class PackageBoxActionTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = Vagrant::Action::Box::Package
|
|
6
|
+
@app, @env = mock_action_data
|
|
7
|
+
@env["box"] = Vagrant::Box.new(mock_environment, "foo")
|
|
8
|
+
|
|
9
|
+
@instance = @klass.new(@app, @env)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
should "be a subclass of general packaging middleware" do
|
|
13
|
+
assert @instance.is_a?(Vagrant::Action::General::Package)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
should "set the package directory then call parent" do
|
|
17
|
+
@instance.expects(:general_call).once.with() do |env|
|
|
18
|
+
assert env["package.directory"]
|
|
19
|
+
assert_equal env["package.directory"], @env["box"].directory
|
|
20
|
+
true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
@instance.call(@env)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
require "test_helper"
|
|
2
|
+
|
|
3
|
+
class UnpackageBoxActionTest < Test::Unit::TestCase
|
|
4
|
+
setup do
|
|
5
|
+
@klass = Vagrant::Action::Box::Unpackage
|
|
6
|
+
@app, @env = mock_action_data
|
|
7
|
+
|
|
8
|
+
@vm = mock("vm")
|
|
9
|
+
@env["vm"] = @vm
|
|
10
|
+
@env["box"] = Vagrant::Box.new(mock_environment, "foo")
|
|
11
|
+
|
|
12
|
+
@internal_vm = mock("internal")
|
|
13
|
+
@vm.stubs(:vm).returns(@internal_vm)
|
|
14
|
+
|
|
15
|
+
@instance = @klass.new(@app, @env)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "calling" do
|
|
19
|
+
should "call the proper chain" do
|
|
20
|
+
seq = sequence("sequence")
|
|
21
|
+
@instance.expects(:setup_box_directory).in_sequence(seq).returns(true)
|
|
22
|
+
@instance.expects(:decompress).in_sequence(seq)
|
|
23
|
+
@app.expects(:call).with(@env)
|
|
24
|
+
@instance.expects(:cleanup).never
|
|
25
|
+
@instance.call(@env)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
should "halt the chain if setting up the box directory fails" do
|
|
29
|
+
@instance.expects(:setup_box_directory).returns(false)
|
|
30
|
+
@instance.expects(:decompress).never
|
|
31
|
+
@app.expects(:call).never
|
|
32
|
+
@instance.expects(:cleanup).never
|
|
33
|
+
@instance.call(@env)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
should "cleanup if there was an error" do
|
|
37
|
+
@env.error!(:foo)
|
|
38
|
+
|
|
39
|
+
seq = sequence("sequence")
|
|
40
|
+
@instance.expects(:setup_box_directory).in_sequence(seq).returns(true)
|
|
41
|
+
@instance.expects(:decompress).in_sequence(seq)
|
|
42
|
+
@app.expects(:call).with(@env)
|
|
43
|
+
@instance.expects(:cleanup).once
|
|
44
|
+
@instance.call(@env)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context "cleaning up" do
|
|
49
|
+
setup do
|
|
50
|
+
@instance.stubs(:box_directory).returns("foo")
|
|
51
|
+
File.stubs(:directory?).returns(false)
|
|
52
|
+
FileUtils.stubs(:rm_rf)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
should "do nothing if not a directory" do
|
|
56
|
+
FileUtils.expects(:rm_rf).never
|
|
57
|
+
@instance.cleanup
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
should "remove the directory if exists" do
|
|
61
|
+
File.expects(:directory?).with(@instance.box_directory).once.returns(true)
|
|
62
|
+
FileUtils.expects(:rm_rf).with(@instance.box_directory).once
|
|
63
|
+
@instance.cleanup
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context "setting up the box directory" do
|
|
68
|
+
setup do
|
|
69
|
+
File.stubs(:directory?).returns(false)
|
|
70
|
+
FileUtils.stubs(:mkdir_p)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
should "error the environment if the box already exists" do
|
|
74
|
+
File.expects(:directory?).returns(true)
|
|
75
|
+
assert !@instance.setup_box_directory
|
|
76
|
+
assert @env.error?
|
|
77
|
+
assert_equal :box_already_exists, @env.error.first
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
should "create the directory" do
|
|
81
|
+
FileUtils.expects(:mkdir_p).with(@env["box"].directory).once
|
|
82
|
+
@instance.setup_box_directory
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
context "decompressing" do
|
|
87
|
+
setup do
|
|
88
|
+
@env["download.temp_path"] = "bar"
|
|
89
|
+
|
|
90
|
+
Dir.stubs(:chdir).yields
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
should "change to the box directory" do
|
|
94
|
+
Dir.expects(:chdir).with(@env["box"].directory)
|
|
95
|
+
@instance.decompress
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
should "open the tar file within the new directory, and extract it all" do
|
|
99
|
+
Archive::Tar::Minitar.expects(:unpack).with(@env["download.temp_path"], @env["box"].directory).once
|
|
100
|
+
@instance.decompress
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|