vagrant-lxc 0.8.0 → 1.0.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -2
  3. data/BOXES.md +13 -21
  4. data/CHANGELOG.md +49 -0
  5. data/CONTRIBUTING.md +5 -2
  6. data/Gemfile +12 -13
  7. data/Gemfile.lock +66 -51
  8. data/README.md +39 -25
  9. data/development/Vagrantfile +0 -2
  10. data/lib/vagrant-backports/README.md +12 -0
  11. data/lib/vagrant-backports/action/handle_box.rb +1 -0
  12. data/lib/vagrant-backports/action/is_state.rb +34 -0
  13. data/lib/vagrant-backports/action/message.rb +20 -0
  14. data/lib/{vagrant-lxc → vagrant-backports}/action/wait_for_communicator.rb +6 -5
  15. data/lib/vagrant-backports/ui.rb +12 -0
  16. data/lib/vagrant-backports/utils.rb +27 -0
  17. data/lib/vagrant-lxc.rb +8 -0
  18. data/lib/vagrant-lxc/action.rb +81 -48
  19. data/lib/vagrant-lxc/action/boot.rb +2 -1
  20. data/lib/vagrant-lxc/action/fetch_ip_from_dnsmasq_leases.rb +1 -0
  21. data/lib/vagrant-lxc/action/handle_box_metadata.rb +36 -14
  22. data/lib/vagrant-lxc/action/message.rb +0 -23
  23. data/lib/vagrant-lxc/action/prepare_nfs_settings.rb +64 -0
  24. data/lib/vagrant-lxc/action/prepare_nfs_valid_ids.rb +19 -0
  25. data/lib/vagrant-lxc/action/setup_package_files.rb +6 -2
  26. data/lib/vagrant-lxc/{action → backports/action}/share_folders.rb +0 -0
  27. data/lib/vagrant-lxc/command/root.rb +58 -0
  28. data/lib/vagrant-lxc/command/sudoers.rb +87 -0
  29. data/lib/vagrant-lxc/driver.rb +21 -11
  30. data/lib/vagrant-lxc/plugin.rb +23 -5
  31. data/lib/vagrant-lxc/provider/cap/public_address.rb +17 -0
  32. data/lib/vagrant-lxc/synced_folder.rb +42 -0
  33. data/lib/vagrant-lxc/version.rb +1 -1
  34. data/locales/en.yml +6 -5
  35. data/scripts/lxc-template +165 -0
  36. data/spec/spec_helper.rb +9 -13
  37. data/spec/unit/action/clear_forwarded_ports_spec.rb +3 -3
  38. data/spec/unit/action/compress_rootfs_spec.rb +7 -5
  39. data/spec/unit/action/forward_ports_spec.rb +8 -8
  40. data/spec/unit/action/handle_box_metadata_spec.rb +71 -15
  41. data/spec/unit/action/setup_package_files_spec.rb +32 -8
  42. data/spec/unit/driver/cli_spec.rb +31 -30
  43. data/spec/unit/driver_spec.rb +35 -27
  44. data/spec/unit/support/unit_example_group.rb +6 -6
  45. data/spec/unit_helper.rb +4 -2
  46. data/tasks/spec.rake +18 -11
  47. data/vagrant-lxc.gemspec +7 -0
  48. data/vagrant-spec.config.rb +24 -0
  49. metadata +24 -36
  50. data/boxes/build-all.sh +0 -22
  51. data/boxes/build-debian-box.sh +0 -167
  52. data/boxes/build-openmandriva-box.sh +0 -159
  53. data/boxes/build-ubuntu-box.sh +0 -151
  54. data/boxes/common/cleanup +0 -7
  55. data/boxes/common/install-babushka +0 -16
  56. data/boxes/common/install-chef +0 -15
  57. data/boxes/common/install-puppet +0 -13
  58. data/boxes/common/install-salt +0 -12
  59. data/boxes/common/install-salt-debian +0 -28
  60. data/boxes/common/lxc-template +0 -226
  61. data/boxes/common/lxc-template-openmandriva +0 -225
  62. data/boxes/common/lxc.conf +0 -49
  63. data/boxes/common/metadata.json +0 -5
  64. data/lib/vagrant-lxc/action/check_created.rb +0 -21
  65. data/lib/vagrant-lxc/action/check_running.rb +0 -21
  66. data/lib/vagrant-lxc/action/created.rb +0 -20
  67. data/lib/vagrant-lxc/action/disconnect.rb +0 -18
  68. data/lib/vagrant-lxc/action/is_running.rb +0 -19
  69. data/spec/acceptance/sanity_check_spec.rb +0 -111
  70. data/spec/acceptance/support/acceptance_example_group.rb +0 -76
  71. data/spec/acceptance/support/machine_ext.rb +0 -12
  72. data/spec/acceptance/support/test_ui.rb +0 -22
  73. data/spec/acceptance_helper.rb +0 -21
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
2
  module LXC
3
- VERSION = "0.8.0"
3
+ VERSION = "1.0.0.alpha.1"
4
4
  end
5
5
  end
data/locales/en.yml CHANGED
@@ -12,15 +12,16 @@ en:
12
12
  Starting container...
13
13
  force_shutdown: |-
14
14
  Forcing shutdown of container...
15
- # TODO: Remove the following keys after we drop support for vagrant < 1.3
16
- waiting_for_start: |-
17
- Waiting for container to start. This should not take long.
18
- container_ready: |-
19
- Container started and ready for use!
20
15
  warn_networks: |-
21
16
  Warning! The LXC provider doesn't support any of the Vagrant public / private
22
17
  network configurations (ex: `config.vm.network :private_network, ip: "some-ip"`).
23
18
  They will be silently ignored.
19
+ warn_group: |-
20
+ Warning! The LXC provider doesn't support the :group parameter for synced
21
+ folders. It will be silently ignored.
22
+ warn_owner: |-
23
+ Warning! The LXC provider doesn't support the :owner parameter for synced
24
+ folders. It will be silently ignored.
24
25
 
25
26
  vagrant:
26
27
  commands:
@@ -0,0 +1,165 @@
1
+ #!/bin/bash
2
+
3
+ # This is a modified version of /usr/share/lxc/templates/lxc-download
4
+ # that comes with ubuntu-lxc 1.0.0 stable from ppa changed to suit vagrant-lxc needs
5
+ #
6
+ # Copyright © 2014 Stéphane Graber <stgraber@ubuntu.com>
7
+ # Copyright © 2014 Fábio Rehm <fgrehm@gmail.com>
8
+ #
9
+ # This library is free software; you can redistribute it and/or
10
+ # modify it under the terms of the GNU Lesser General Public
11
+ # License as published by the Free Software Foundation; either
12
+ # version 2.1 of the License, or (at your option) any later version.
13
+
14
+ # This library is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ # Lesser General Public License for more details.
18
+
19
+ # You should have received a copy of the GNU Lesser General Public
20
+ # License along with this library; if not, write to the Free Software
21
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
22
+ # USA
23
+
24
+ set -eu
25
+
26
+ LXC_HOOK_DIR="/usr/share/lxc/hooks"
27
+ LXC_TEMPLATE_CONFIG="/usr/share/lxc/config"
28
+
29
+ LXC_MAPPED_GID=
30
+ LXC_MAPPED_UID=
31
+ LXC_NAME=
32
+ LXC_PATH=
33
+ LXC_ROOTFS=
34
+ LXC_TARBALL=
35
+ LXC_CONFIG=
36
+
37
+ usage() {
38
+ cat <<EOF
39
+ vagrant-lxc default template
40
+
41
+ Required arguments:
42
+ [ --tarball <path> ]: The full path of the rootfs tarball
43
+
44
+ Optional arguments:
45
+ [ --config ]: Configuration file to be used when building the container
46
+ [ -h | --help ]: This help message
47
+
48
+ LXC internal arguments (do not pass manually!):
49
+ [ --name <name> ]: The container name
50
+ [ --path <path> ]: The path to the container
51
+ [ --rootfs <rootfs> ]: The path to the container's rootfs
52
+ [ --mapped-uid <map> ]: A uid map (user namespaces)
53
+ [ --mapped-gid <map> ]: A gid map (user namespaces)
54
+ EOF
55
+ return 0
56
+ }
57
+
58
+ options=$(getopt -o h -l tarball:,config:,help:,name:,path:,rootfs:,mapped-uid:,mapped-gid: -- "$@")SS
59
+
60
+ if [ $? -ne 0 ]; then
61
+ usage $(basename $0)
62
+ exit 1
63
+ fi
64
+ eval set -- "$options"
65
+
66
+ while true
67
+ do
68
+ case "$1" in
69
+ -h|--help) usage $0 && exit 0;;
70
+ --config) LXC_CONFIG=$2; shift 2;;
71
+ --tarball) LXC_TARBALL=$2; shift 2;;
72
+ --name) LXC_NAME=$2; shift 2;;
73
+ --path) LXC_PATH=$2; shift 2;;
74
+ --rootfs) LXC_ROOTFS=$2; shift 2;;
75
+ --mapped-uid) LXC_MAPPED_UID=$2; shift 2;;
76
+ --mapped-gid) LXC_MAPPED_GID=$2; shift 2;;
77
+ *) break;;
78
+ esac
79
+ done
80
+
81
+ if [ -z "${LXC_NAME}" ]; then
82
+ echo "'name' parameter is required"
83
+ exit 1
84
+ fi
85
+
86
+ if [ -z "${LXC_TARBALL}" ]; then
87
+ echo "'tarball' parameter is required"
88
+ exit 1
89
+ fi
90
+
91
+ if [ -z "${LXC_ROOTFS}" ]; then
92
+ echo "'rootfs' parameter is required"
93
+ exit 1
94
+ fi
95
+
96
+ if [ -z "${LXC_CONFIG}" ]; then
97
+ echo "'config' parameter is required"
98
+ exit 1
99
+ fi
100
+
101
+ if [ -z "${LXC_PATH}" ]; then
102
+ echo "'path' parameter is required"
103
+ exit 1
104
+ fi
105
+
106
+ # Unpack the rootfs
107
+ echo "Unpacking the rootfs"
108
+
109
+ mkdir -p /var/lock/subsys
110
+ (
111
+ flock -x 200
112
+ if [ $? -ne 0 ]; then
113
+ echo "Cache repository is busy."
114
+ exit 1
115
+ fi
116
+
117
+ mkdir -p ${LXC_ROOTFS}
118
+ (cd ${LXC_ROOTFS} && tar xfz ${LXC_TARBALL} --strip-components=2)
119
+ if [ $? -ne 0 ]; then
120
+ echo "Failed to extract rootfs"
121
+ exit 1
122
+ fi
123
+
124
+ ) 200>/var/lock/subsys/lxc
125
+
126
+ mkdir -p ${LXC_ROOTFS}/dev/pts/
127
+
128
+ ## Extract all the network config entries
129
+ sed -i -e "/lxc.network/{w ${LXC_PATH}/config-network" -e "d}" \
130
+ ${LXC_PATH}/config
131
+
132
+ ## Extract any other config entry
133
+ sed -i -e "/lxc./{w ${LXC_PATH}/config-auto" -e "d}" ${LXC_PATH}/config
134
+
135
+ ## Add the container-specific config
136
+ echo "" >> ${LXC_PATH}/config
137
+ echo "##############################################" >> ${LXC_PATH}/config
138
+ echo "# Container specific configuration (automatically set)" >> ${LXC_PATH}/config
139
+ if [ -e "${LXC_PATH}/config-auto" ]; then
140
+ cat ${LXC_PATH}/config-auto >> ${LXC_PATH}/config
141
+ rm ${LXC_PATH}/config-auto
142
+ fi
143
+ echo "lxc.utsname = ${LXC_NAME}" >> ${LXC_PATH}/config
144
+
145
+ ## Re-add the previously removed network config
146
+ if [ -e "${LXC_PATH}/config-network" ]; then
147
+ echo "" >> ${LXC_PATH}/config
148
+ echo "##############################################" >> ${LXC_PATH}/config
149
+ echo "# Network configuration (automatically set)" >> ${LXC_PATH}/config
150
+ cat ${LXC_PATH}/config-network >> ${LXC_PATH}/config
151
+ rm ${LXC_PATH}/config-network
152
+ fi
153
+
154
+ ## Append the defaults
155
+ echo "" >> ${LXC_PATH}/config
156
+ echo "##############################################" >> ${LXC_PATH}/config
157
+ echo "# vagrant-lxc base box specific configuration" >> ${LXC_PATH}/config
158
+ cat ${LXC_CONFIG} >> ${LXC_PATH}/config
159
+
160
+ # Empty section for lxc.customize calls from vagrantfile
161
+ echo "" >> ${LXC_PATH}/config
162
+ echo "##############################################" >> ${LXC_PATH}/config
163
+ echo "# vagrant-lxc container specific configuration" >> ${LXC_PATH}/config
164
+
165
+ exit 0
data/spec/spec_helper.rb CHANGED
@@ -10,22 +10,10 @@ require 'bundler/setup'
10
10
 
11
11
  require 'i18n'
12
12
 
13
- require 'rspec-spies'
13
+ require 'vagrant-lxc'
14
14
 
15
15
  Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| require f }
16
16
 
17
- # If we should verify constant names, eager loads
18
- if ENV['VERIFY_CONSTANT_NAMES']
19
- require 'vagrant-lxc/plugin'
20
- require 'vagrant-lxc/provider'
21
- require 'vagrant-lxc/config'
22
- end
23
-
24
- require 'rspec/fire'
25
- RSpec::Fire.configure do |config|
26
- config.verify_constant_names = ENV['VERIFY_CONSTANT_NAMES'] == '1'
27
- end
28
-
29
17
  RSpec.configure do |config|
30
18
  config.treat_symbols_as_metadata_keys_with_true_values = true
31
19
  config.run_all_when_everything_filtered = true
@@ -36,4 +24,12 @@ RSpec.configure do |config|
36
24
  # the seed, which is printed after each run.
37
25
  # --seed 1234
38
26
  config.order = 'random'
27
+
28
+ config.mock_with :rspec do |c|
29
+ c.yield_receiver_to_any_instance_implementation_blocks = true
30
+ end
31
+ config.expect_with :rspec do |c|
32
+ c.syntax = :expect
33
+ end
34
+ config.raise_errors_for_deprecations!
39
35
  end
@@ -24,12 +24,12 @@ describe Vagrant::LXC::Action::ClearForwardedPorts do
24
24
  after { FileUtils.rm_rf data_dir.to_s }
25
25
 
26
26
  it 'removes all files under pid directory' do
27
- Dir[pids_dir.to_s + "/redir_*.pid"].should be_empty
27
+ expect(Dir[pids_dir.to_s + "/redir_*.pid"]).to be_empty
28
28
  end
29
29
 
30
30
  context 'with a valid redir pid' do
31
31
  it 'kills known processes' do
32
- subject.should have_received(:system).with("pkill -TERM -P #{pid}")
32
+ expect(subject).to have_received(:system).with("pkill -TERM -P #{pid}")
33
33
  end
34
34
  end
35
35
 
@@ -37,7 +37,7 @@ describe Vagrant::LXC::Action::ClearForwardedPorts do
37
37
  let(:pid_cmd) { 'sudo ls' }
38
38
 
39
39
  it 'does not kill the process' do
40
- subject.should_not have_received(:system).with("pkill -TERM -P #{pid}")
40
+ expect(subject).not_to have_received(:system).with("pkill -TERM -P #{pid}")
41
41
  end
42
42
  end
43
43
  end
@@ -1,13 +1,15 @@
1
1
  require 'unit_helper'
2
2
 
3
+ require 'vagrant-lxc/plugin'
4
+ require 'vagrant-lxc/provider'
3
5
  require 'vagrant-lxc/action/compress_rootfs'
4
6
 
5
7
  describe Vagrant::LXC::Action::CompressRootFS do
6
8
  let(:app) { double(:app, call: true) }
7
9
  let(:env) { {machine: machine, ui: double(info: true)} }
8
- let(:machine) { instance_double('Vagrant::Machine', provider: provider) }
9
- let(:provider) { instance_double('Vagrant::LXC::Provider', driver: driver) }
10
- let(:driver) { instance_double('Vagrant::LXC::Driver', compress_rootfs: compressed_rootfs_path) }
10
+ let(:machine) { double(Vagrant::Machine, provider: provider) }
11
+ let(:provider) { double(Vagrant::LXC::Provider, driver: driver) }
12
+ let(:driver) { double(Vagrant::LXC::Driver, compress_rootfs: compressed_rootfs_path) }
11
13
  let(:compressed_rootfs_path) { '/path/to/rootfs.tar.gz' }
12
14
 
13
15
  subject { described_class.new(app, env) }
@@ -18,10 +20,10 @@ describe Vagrant::LXC::Action::CompressRootFS do
18
20
  end
19
21
 
20
22
  it "asks the driver to compress container's rootfs" do
21
- driver.should have_received(:compress_rootfs)
23
+ expect(driver).to have_received(:compress_rootfs)
22
24
  end
23
25
 
24
26
  it 'sets export.temp_dir on action env' do
25
- env['package.rootfs'].should == compressed_rootfs_path
27
+ expect(env['package.rootfs']).to eq(compressed_rootfs_path)
26
28
  end
27
29
  end
@@ -1,7 +1,7 @@
1
1
  require 'unit_helper'
2
2
 
3
3
  require 'tmpdir'
4
- require 'vagrant-lxc/errors'
4
+ require 'vagrant-lxc/provider'
5
5
  require 'vagrant-lxc/action/forward_ports'
6
6
 
7
7
  describe Vagrant::LXC::Action::ForwardPorts do
@@ -9,7 +9,7 @@ describe Vagrant::LXC::Action::ForwardPorts do
9
9
  let(:env) { {machine: machine, ui: double(info: true)} }
10
10
  let(:machine) { double(:machine) }
11
11
  let!(:data_dir) { Pathname.new(Dir.mktmpdir) }
12
- let(:provider) { instance_double('Vagrant::LXC::Provider', ssh_info: {host: container_ip}) }
12
+ let(:provider) { double(Vagrant::LXC::Provider, ssh_info: {host: container_ip}) }
13
13
  let(:host_ip) { '127.0.0.1' }
14
14
  let(:host_port) { 8080 }
15
15
  let(:guest_port) { 80 }
@@ -33,7 +33,7 @@ describe Vagrant::LXC::Action::ForwardPorts do
33
33
  it 'forwards ports using redir' do
34
34
  subject.stub(system: true)
35
35
  subject.call(env)
36
- subject.should have_received(:spawn).with(
36
+ expect(subject).to have_received(:spawn).with(
37
37
  "redir --laddr=#{host_ip} --lport=#{host_port} --caddr=#{container_ip} --cport=#{guest_port} 2>/dev/null"
38
38
  )
39
39
  end
@@ -42,7 +42,7 @@ describe Vagrant::LXC::Action::ForwardPorts do
42
42
  forward_conf.delete(:host_ip)
43
43
  subject.stub(system: true)
44
44
  subject.call(env)
45
- subject.should have_received(:spawn).with(
45
+ expect(subject).to have_received(:spawn).with(
46
46
  "redir --lport=#{host_port} --caddr=#{container_ip} --cport=#{guest_port} 2>/dev/null"
47
47
  )
48
48
  end
@@ -51,7 +51,7 @@ describe Vagrant::LXC::Action::ForwardPorts do
51
51
  forward_conf[:host_ip] = ' '
52
52
  subject.stub(system: true)
53
53
  subject.call(env)
54
- subject.should have_received(:spawn).with(
54
+ expect(subject).to have_received(:spawn).with(
55
55
  "redir --lport=#{host_port} --caddr=#{container_ip} --cport=#{guest_port} 2>/dev/null"
56
56
  )
57
57
  end
@@ -60,18 +60,18 @@ describe Vagrant::LXC::Action::ForwardPorts do
60
60
  subject.stub(system: true)
61
61
  subject.call(env)
62
62
  pid_file = data_dir.join('pids', "redir_#{host_port}.pid").read
63
- pid_file.should == pid
63
+ expect(pid_file).to eq(pid)
64
64
  end
65
65
 
66
66
  it 'allows disabling a previously forwarded port' do
67
67
  forward_conf[:disabled] = true
68
68
  subject.stub(system: true)
69
69
  subject.call(env)
70
- subject.should_not have_received(:spawn)
70
+ expect(subject).not_to have_received(:spawn)
71
71
  end
72
72
 
73
73
  it 'raises RedirNotInstalled error if `redir` is not installed' do
74
74
  subject.stub(system: false)
75
- lambda { subject.call(env) }.should raise_error(Vagrant::LXC::Errors::RedirNotInstalled)
75
+ expect { subject.call(env) }.to raise_error(Vagrant::LXC::Errors::RedirNotInstalled)
76
76
  end
77
77
  end
@@ -6,7 +6,7 @@ require 'vagrant-lxc/action/handle_box_metadata'
6
6
 
7
7
  describe Vagrant::LXC::Action::HandleBoxMetadata do
8
8
  let(:app) { double(:app, call: true) }
9
- let(:env) { {machine: machine, ui: double(info: true)} }
9
+ let(:env) { {machine: machine, ui: double(info: true, warn: true)} }
10
10
  let(:machine) { double(:machine, box: box) }
11
11
  let(:box) { double(:box, name: 'box-name', metadata: metadata, directory: box_directory) }
12
12
  let(:box_directory) { Pathname.new('/path/to/box') }
@@ -16,55 +16,111 @@ describe Vagrant::LXC::Action::HandleBoxMetadata do
16
16
 
17
17
  subject { described_class.new(app, env) }
18
18
 
19
- context 'with valid contents' do
19
+ context 'with 1.0.0 box' do
20
+ let(:version) { '1.0.0' }
21
+
20
22
  before do
21
23
  File.stub(exists?: true)
24
+ # REFACTOR: This is pretty bad
25
+ subject.stub_chain(:template_config_file, :exist?).and_return(true)
26
+ subject.stub_chain(:template_config_file, :to_s).and_return(box_directory.join('lxc-config').to_s)
22
27
  subject.call(env)
23
28
  end
24
29
 
25
30
  it 'sets the tarball argument for the template' do
26
- env[:lxc_template_opts].should include(
31
+ expect(env[:lxc_template_opts]).to include(
32
+ '--tarball' => box_directory.join('rootfs.tar.gz').to_s
33
+ )
34
+ end
35
+
36
+ it 'sets the template --config parameter' do
37
+ expect(env[:lxc_template_opts]).to include(
38
+ '--config' => box_directory.join('lxc-config').to_s
39
+ )
40
+ end
41
+
42
+ it 'does not set the auth key argument for the template' do
43
+ expect(env[:lxc_template_opts]).not_to include(
44
+ '--auth-key' => vagrant_key
45
+ )
46
+ end
47
+
48
+ it 'sets the template options from metadata on env hash' do
49
+ expect(env[:lxc_template_opts]).to include(metadata['template-opts'])
50
+ end
51
+
52
+ xit 'sets the template source path on env hash' do
53
+ expect(env[:lxc_template_src]).to eq(box_directory.join('lxc-template').to_s)
54
+ end
55
+
56
+ it 'does not warn about deprecation' do
57
+ expect(env[:ui]).not_to have_received(:warn)
58
+ end
59
+ end
60
+
61
+ context 'with valid pre 1.0.0 box' do
62
+ before do
63
+ File.stub(exists?: true)
64
+ # REFACTOR: This is pretty bad
65
+ subject.stub_chain(:old_template_config_file, :exist?).and_return(true)
66
+ subject.stub_chain(:old_template_config_file, :to_s).and_return(box_directory.join('lxc.conf').to_s)
67
+ subject.call(env)
68
+ end
69
+
70
+ it 'sets the tarball argument for the template' do
71
+ expect(env[:lxc_template_opts]).to include(
27
72
  '--tarball' => box_directory.join('rootfs.tar.gz').to_s
28
73
  )
29
74
  end
30
75
 
31
76
  it 'sets the auth key argument for the template' do
32
- env[:lxc_template_opts].should include(
77
+ expect(env[:lxc_template_opts]).to include(
33
78
  '--auth-key' => vagrant_key
34
79
  )
35
80
  end
36
81
 
82
+ it 'sets the lxc config file parameter' do
83
+ expect(env[:lxc_template_config]).to eq(box_directory.join('lxc.conf').to_s)
84
+ end
85
+
37
86
  it 'sets the template options from metadata on env hash' do
38
- env[:lxc_template_opts].should include(metadata['template-opts'])
87
+ expect(env[:lxc_template_opts]).to include(metadata['template-opts'])
88
+ end
89
+
90
+ xit 'sets the template source path on env hash' do
91
+ expect(env[:lxc_template_src]).to eq(box_directory.join('lxc-template').to_s)
39
92
  end
40
93
 
41
- it 'sets the template source path on env hash' do
42
- env[:lxc_template_src].should == box_directory.join('lxc-template').to_s
94
+ it 'warns about deprecation' do
95
+ expect(env[:ui]).to have_received(:warn)
43
96
  end
44
97
  end
45
98
 
46
99
  describe 'with invalid contents' do
47
100
  before { File.stub(exists?: true) }
48
101
 
49
- it 'raises an error if the version is != 2' do
102
+ it 'validates box versions' do
103
+ %w( 2 3 1.0.0 ).each do |v|
104
+ metadata['version'] = v
105
+ expect { subject.call(env) }.to_not raise_error
106
+ end
107
+
50
108
  metadata['version'] = '1'
51
- expect {
52
- subject.call(env)
53
- }.to raise_error(Vagrant::LXC::Errors::IncompatibleBox)
109
+ expect { subject.call(env) }.to raise_error
54
110
  end
55
111
 
56
112
  it 'raises an error if the rootfs tarball cant be found' do
57
- File.stub(:exists?).with(box_directory.join('rootfs.tar.gz').to_s).and_return(false)
113
+ allow(File).to receive(:exists?).with(box_directory.join('rootfs.tar.gz').to_s).and_return(false)
58
114
  expect {
59
115
  subject.call(env)
60
116
  }.to raise_error(Vagrant::LXC::Errors::RootFSTarballMissing)
61
117
  end
62
118
 
63
- it 'raises an error if the lxc-template script cant be found' do
64
- File.stub(:exists?).with(box_directory.join('lxc-template').to_s).and_return(false)
119
+ it 'does not raise an error if the lxc-template script cant be found' do
120
+ allow(File).to receive(:exists?).with(box_directory.join('lxc-template').to_s).and_return(false)
65
121
  expect {
66
122
  subject.call(env)
67
- }.to raise_error(Vagrant::LXC::Errors::TemplateFileMissing)
123
+ }.to_not raise_error
68
124
  end
69
125
  end
70
126
  end