spec/beaker/hypervisor/vagrant_spec.rb in beaker-vagrant-0.7.1 vs spec/beaker/hypervisor/vagrant_spec.rb in beaker-vagrant-1.0.0

- old
+ new

@@ -1,418 +1,416 @@ require 'beaker/platform' require 'spec_helper' module Beaker describe Vagrant do - - let( :options ) { + let(:options) do make_opts.merge({ - 'logger' => double().as_null_object, - :hosts_file => 'sample.cfg', - :forward_ssh_agent => true, - }) - } + 'logger' => double.as_null_object, + :hosts_file => 'sample.cfg', + :forward_ssh_agent => true, + }) + end - let( :vagrant ) { Beaker::Vagrant.new( @hosts, options ) } + let(:vagrant) { Beaker::Vagrant.new(@hosts, options) } before :each do @hosts = make_hosts({ - :mount_folders => { - :test_temp => {:from => './', :to => '/temp'}, - :test_tmp => {:from => '../', :to => '/tmp'} - }, - :forwarded_ports => { - :http => {:from => 10080, :to => 80}, - :ssl => {:from => 4443, :to => 443}, - :tomcat => {:from => 8080, :to => 8080} - }, - :platform => Beaker::Platform.new('centos-8-x86_64') - }) + mount_folders: { + test_temp: { from: './', to: '/temp' }, + test_tmp: { from: '../', to: '/tmp' } + }, + forwarded_ports: { + http: { from: 10_080, to: 80 }, + ssl: { from: 4443, to: 443 }, + tomcat: { from: 8080, to: 8080 } + }, + platform: Beaker::Platform.new('centos-8-x86_64') + }) end - it "stores the vagrant file in $WORKINGDIR/.vagrant/beaker_vagrant_files/beaker_sample.cfg" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'stores the vagrant file in $WORKINGDIR/.vagrant/beaker_vagrant_files/beaker_sample.cfg' do + path = vagrant.instance_variable_get(:@vagrant_path) - expect( path ).to be === File.join(Dir.pwd, '.vagrant', 'beaker_vagrant_files', 'beaker_sample.cfg') - + expect(path).to be === File.join(Dir.pwd, '.vagrant', 'beaker_vagrant_files', 'beaker_sample.cfg') end - it "can make a Vagrantfile for a set of hosts" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'can make a Vagrantfile for a set of hosts' do + path = vagrant.instance_variable_get(:@vagrant_path) - vagrant.make_vfile( @hosts ) + vagrant.make_vfile(@hosts) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) puts "file is #{path}\n" - expect( vagrantfile ).to be === <<-EOF -Vagrant.configure("2") do |c| - c.ssh.insert_key = false - c.vm.define 'vm1' do |v| - v.vm.hostname = 'vm1' - v.vm.box = 'vm2vm1_of_my_box' - v.vm.box_url = 'http://address.for.my.box.vm1' - v.vm.box_check_update = 'true' - v.vm.network :private_network, ip: "ip.address.for.vm1", :netmask => "255.255.0.0" - v.vm.synced_folder './', '/temp', create: true - v.vm.synced_folder '../', '/tmp', create: true - v.vm.network :forwarded_port, guest: 80, host: 10080 - v.vm.network :forwarded_port, guest: 443, host: 4443 - v.vm.network :forwarded_port, guest: 8080, host: 8080 - v.vm.provider :virtualbox do |vb| - vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none'] + expect(vagrantfile).to be === <<~EOF + Vagrant.configure("2") do |c| + c.ssh.insert_key = false + c.vm.define 'vm1' do |v| + v.vm.hostname = 'vm1' + v.vm.box = 'vm2vm1_of_my_box' + v.vm.box_url = 'http://address.for.my.box.vm1' + v.vm.box_check_update = 'true' + v.vm.network :private_network, ip: "ip.address.for.vm1", :netmask => "255.255.0.0" + v.vm.synced_folder './', '/temp', create: true + v.vm.synced_folder '../', '/tmp', create: true + v.vm.network :forwarded_port, guest: 80, host: 10080 + v.vm.network :forwarded_port, guest: 443, host: 4443 + v.vm.network :forwarded_port, guest: 8080, host: 8080 + v.vm.provider :virtualbox do |vb| + vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none'] + end + end + c.vm.define 'vm2' do |v| + v.vm.hostname = 'vm2' + v.vm.box = 'vm2vm2_of_my_box' + v.vm.box_url = 'http://address.for.my.box.vm2' + v.vm.box_check_update = 'true' + v.vm.network :private_network, ip: "ip.address.for.vm2", :netmask => "255.255.0.0" + v.vm.synced_folder './', '/temp', create: true + v.vm.synced_folder '../', '/tmp', create: true + v.vm.network :forwarded_port, guest: 80, host: 10080 + v.vm.network :forwarded_port, guest: 443, host: 4443 + v.vm.network :forwarded_port, guest: 8080, host: 8080 + v.vm.provider :virtualbox do |vb| + vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none'] + end + end + c.vm.define 'vm3' do |v| + v.vm.hostname = 'vm3' + v.vm.box = 'vm2vm3_of_my_box' + v.vm.box_url = 'http://address.for.my.box.vm3' + v.vm.box_check_update = 'true' + v.vm.network :private_network, ip: "ip.address.for.vm3", :netmask => "255.255.0.0" + v.vm.synced_folder './', '/temp', create: true + v.vm.synced_folder '../', '/tmp', create: true + v.vm.network :forwarded_port, guest: 80, host: 10080 + v.vm.network :forwarded_port, guest: 443, host: 4443 + v.vm.network :forwarded_port, guest: 8080, host: 8080 + v.vm.provider :virtualbox do |vb| + vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none'] + end + end + end + EOF end - end - c.vm.define 'vm2' do |v| - v.vm.hostname = 'vm2' - v.vm.box = 'vm2vm2_of_my_box' - v.vm.box_url = 'http://address.for.my.box.vm2' - v.vm.box_check_update = 'true' - v.vm.network :private_network, ip: "ip.address.for.vm2", :netmask => "255.255.0.0" - v.vm.synced_folder './', '/temp', create: true - v.vm.synced_folder '../', '/tmp', create: true - v.vm.network :forwarded_port, guest: 80, host: 10080 - v.vm.network :forwarded_port, guest: 443, host: 4443 - v.vm.network :forwarded_port, guest: 8080, host: 8080 - v.vm.provider :virtualbox do |vb| - vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none'] - end - end - c.vm.define 'vm3' do |v| - v.vm.hostname = 'vm3' - v.vm.box = 'vm2vm3_of_my_box' - v.vm.box_url = 'http://address.for.my.box.vm3' - v.vm.box_check_update = 'true' - v.vm.network :private_network, ip: "ip.address.for.vm3", :netmask => "255.255.0.0" - v.vm.synced_folder './', '/temp', create: true - v.vm.synced_folder '../', '/tmp', create: true - v.vm.network :forwarded_port, guest: 80, host: 10080 - v.vm.network :forwarded_port, guest: 443, host: 4443 - v.vm.network :forwarded_port, guest: 8080, host: 8080 - v.vm.provider :virtualbox do |vb| - vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none'] - end - end -end -EOF - end - it "can make a Vagrantfile with ssh agent forwarding enabled" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'can make a Vagrantfile with ssh agent forwarding enabled' do + path = vagrant.instance_variable_get(:@vagrant_path) - hosts = make_hosts({},1) - vagrant.make_vfile( hosts, options ) + hosts = make_hosts({}, 1) + vagrant.make_vfile(hosts, options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) - expect( vagrantfile ).to match(/(ssh.forward_agent = true)/) + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) + expect(vagrantfile).to match(/(ssh.forward_agent = true)/) end - it "can replace underscores in host.name with hypens" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'can replace underscores in host.name with hypens' do + path = vagrant.instance_variable_get(:@vagrant_path) - host = make_host( 'name-with_underscore', {} ) - vagrant.make_vfile( [host,], options ) + host = make_host('name-with_underscore', {}) + vagrant.make_vfile([host,], options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) - expect( vagrantfile ).to match(/v.vm.hostname = .*name-with-underscore/) - + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) + expect(vagrantfile).to match(/v.vm.hostname = .*name-with-underscore/) end - it "can make a Vagrantfile with synced_folder disabled" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'can make a Vagrantfile with synced_folder disabled' do + path = vagrant.instance_variable_get(:@vagrant_path) - hosts = make_hosts({:synced_folder => 'disabled'},1) - vagrant.make_vfile( hosts, options ) + hosts = make_hosts({ synced_folder: 'disabled' }, 1) + vagrant.make_vfile(hosts, options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) - expect( vagrantfile ).to match(/v.vm.synced_folder .* disabled: true/) + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) + expect(vagrantfile).to match(/v.vm.synced_folder .* disabled: true/) end - it "can make a Vagrantfile with network mac specified" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'can make a Vagrantfile with network mac specified' do + path = vagrant.instance_variable_get(:@vagrant_path) - hosts = make_hosts({:network_mac => 'b6:33:ae:19:48:f9'},1) - vagrant.make_vfile( hosts, options ) + hosts = make_hosts({ network_mac: 'b6:33:ae:19:48:f9' }, 1) + vagrant.make_vfile(hosts, options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) - expect( vagrantfile ).to match(/v.vm.network :private_network, ip: "ip.address.for.vm1", :netmask => "255.255.0.0", :mac => "b6:33:ae:19:48:f9/) + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) + expect(vagrantfile).to match(/v.vm.network :private_network, ip: "ip.address.for.vm1", :netmask => "255.255.0.0", :mac => "b6:33:ae:19:48:f9/) end - it "can make a Vagrantfile with improper keys for synced folders" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'can make a Vagrantfile with improper keys for synced folders' do + path = vagrant.instance_variable_get(:@vagrant_path) - hosts = make_hosts({:mount_folders => { - :test_invalid1 => {:host_path => '/invalid1', :container_path => '/invalid1'}, - :test_invalid2 => {:from => '/invalid2', :container_path => '/invalid2'}, - :test_invalid3 => {:host_path => '/invalid3', :to => '/invalid3'}, - :test_valid => {:from => '/valid', :to => '/valid'} - }},1) - vagrant.make_vfile( hosts, options ) + hosts = make_hosts({ mount_folders: { + test_invalid1: { host_path: '/invalid1', container_path: '/invalid1' }, + test_invalid2: { from: '/invalid2', container_path: '/invalid2' }, + test_invalid3: { host_path: '/invalid3', to: '/invalid3' }, + test_valid: { from: '/valid', to: '/valid' } + } }, 1) + vagrant.make_vfile(hosts, options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) - expect( vagrantfile ).not_to match(/v.vm.synced_folder '', '', create: true/) - expect( vagrantfile ).not_to match(/v.vm.synced_folder '\/invalid2', '', create: true/) - expect( vagrantfile ).not_to match(/v.vm.synced_folder '', '\/invalid3', create: true/) - expect( vagrantfile ).to match(/v.vm.synced_folder '\/valid', '\/valid', create: true/) + expect(vagrantfile).not_to match(/v.vm.synced_folder '', '', create: true/) + expect(vagrantfile).not_to match(%r{v.vm.synced_folder '/invalid2', '', create: true}) + expect(vagrantfile).not_to match(%r{v.vm.synced_folder '', '/invalid3', create: true}) + expect(vagrantfile).to match(%r{v.vm.synced_folder '/valid', '/valid', create: true}) end - it "can make a Vagrantfile with optional shell provisioner" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'can make a Vagrantfile with optional shell provisioner' do + path = vagrant.instance_variable_get(:@vagrant_path) shell_path = '/path/to/shell/script' hosts = make_hosts({ - :shell_provisioner => { - :path => shell_path - } - }, 1) - vagrant.make_vfile( hosts, options ) + shell_provisioner: { + path: shell_path + } + }, 1) + vagrant.make_vfile(hosts, options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) - expect( vagrantfile ).to match(/v.vm.provision 'shell', :path => '#{shell_path}'/) + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) + expect(vagrantfile).to match(/v.vm.provision 'shell', :path => '#{shell_path}'/) end - it "can make a Vagrantfile with optional shell provisioner with args" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'can make a Vagrantfile with optional shell provisioner with args' do + path = vagrant.instance_variable_get(:@vagrant_path) shell_path = '/path/to/shell/script.sh' shell_args = 'arg1 arg2' hosts = make_hosts({ - :shell_provisioner => { - :path => shell_path, - :args => shell_args - } - }, 1) - vagrant.make_vfile( hosts, options ) + shell_provisioner: { + path: shell_path, + args: shell_args + } + }, 1) + vagrant.make_vfile(hosts, options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) - expect( vagrantfile ).to match(/v.vm.provision 'shell', :path => '#{shell_path}', :args => '#{shell_args}'/) + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) + expect(vagrantfile).to match(/v.vm.provision 'shell', :path => '#{shell_path}', :args => '#{shell_args}'/) end - it "raises an error if path is not set on shell_provisioner" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'raises an error if path is not set on shell_provisioner' do + path = vagrant.instance_variable_get(:@vagrant_path) - hosts = make_hosts({:shell_provisioner => {}}, 1) - expect{ vagrant.make_vfile( hosts, options ) }.to raise_error RuntimeError, /No path defined for shell_provisioner or path empty/ + hosts = make_hosts({ shell_provisioner: {} }, 1) + expect do + vagrant.make_vfile(hosts, options) + end.to raise_error RuntimeError, /No path defined for shell_provisioner or path empty/ end - it "raises an error if path is EMPTY on shell_provisioner" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'raises an error if path is EMPTY on shell_provisioner' do + path = vagrant.instance_variable_get(:@vagrant_path) empty_shell_path = '' hosts = make_hosts({ - :shell_provisioner => { - :path => empty_shell_path - } - }, 1) - expect{ vagrant.make_vfile( hosts, options ) }.to raise_error RuntimeError, /No path defined for shell_provisioner or path empty/ + shell_provisioner: { + path: empty_shell_path + } + }, 1) + expect do + vagrant.make_vfile(hosts, options) + end.to raise_error RuntimeError, /No path defined for shell_provisioner or path empty/ end - context "when generating a windows config" do + context 'when generating a windows config' do before do - path = vagrant.instance_variable_get( :@vagrant_path ) + path = vagrant.instance_variable_get(:@vagrant_path) @hosts[0][:platform] = 'windows' - vagrant.make_vfile( @hosts ) + vagrant.make_vfile(@hosts) - @generated_file = File.read( File.expand_path( File.join( path, "Vagrantfile") ) ) + @generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) end it 'has the proper port forwarding for RDP' do - expect( @generated_file ).to match /v.vm.network :forwarded_port, guest: 3389, host: 3389, id: 'rdp', auto_correct: true/ + expect(@generated_file).to match /v.vm.network :forwarded_port, guest: 3389, host: 3389, id: 'rdp', auto_correct: true/ end it 'has the proper port forwarding for WinRM' do - expect( @generated_file ).to match /v.vm.network :forwarded_port, guest: 5985, host: 5985, id: 'winrm', auto_correct: true/ + expect(@generated_file).to match /v.vm.network :forwarded_port, guest: 5985, host: 5985, id: 'winrm', auto_correct: true/ end it 'configures the guest type to windows' do - expect( @generated_file ).to match /v.vm.guest = :windows/ + expect(@generated_file).to match /v.vm.guest = :windows/ end it 'configures the guest type to use winrm' do - expect( @generated_file ).to match /v.vm.communicator = 'winrm'/ + expect(@generated_file).to match /v.vm.communicator = 'winrm'/ end it 'sets a non-default memsize' do - expect( @generated_file ).to match /'--memory', '2048',/ + expect(@generated_file).to match /'--memory', '2048',/ end end context 'when generating a freebsd config' do before do - path = vagrant.instance_variable_get( :@vagrant_path ) + path = vagrant.instance_variable_get(:@vagrant_path) @hosts[0][:platform] = 'freebsd' - vagrant.make_vfile( @hosts ) + vagrant.make_vfile(@hosts) - @generated_file = File.read( File.expand_path( File.join( path, "Vagrantfile") ) ) + @generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) end it 'has the proper ssh shell' do - expect( @generated_file ).to match /v.ssh.shell = 'sh'\n/ + expect(@generated_file).to match /v.ssh.shell = 'sh'\n/ end it 'has the proper guest setting' do - expect( @generated_file ).to match /v.vm.guest = :freebsd\n/ + expect(@generated_file).to match /v.vm.guest = :freebsd\n/ end end - it "uses the memsize defined per vagrant host" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'uses the memsize defined per vagrant host' do + path = vagrant.instance_variable_get(:@vagrant_path) - vagrant.make_vfile( @hosts, {'vagrant_memsize' => 'hello!'} ) + vagrant.make_vfile(@hosts, { 'vagrant_memsize' => 'hello!' }) - generated_file = File.read( File.expand_path( File.join( path, "Vagrantfile") ) ) + generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) match = generated_file.match(/vb.customize \['modifyvm', :id, '--memory', 'hello!', '--cpus', '1', '--audio', 'none'\]/) - expect( match ).to_not be nil - + expect(match).to_not be nil end - it "uses the cpus defined per vagrant host" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'uses the cpus defined per vagrant host' do + path = vagrant.instance_variable_get(:@vagrant_path) - vagrant.make_vfile( @hosts, {'vagrant_cpus' => 'goodbye!'} ) + vagrant.make_vfile(@hosts, { 'vagrant_cpus' => 'goodbye!' }) - generated_file = File.read( File.expand_path( File.join( path, "Vagrantfile") ) ) + generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) match = generated_file.match(/vb.customize \['modifyvm', :id, '--memory', '1024', '--cpus', 'goodbye!', '--audio', 'none'\]/) - expect( match ).to_not be nil - + expect(match).to_not be nil end - context "port forwarding rules" do - it "supports all Vagrant parameters" do - path = vagrant.instance_variable_get( :@vagrant_path ) + context 'port forwarding rules' do + it 'supports all Vagrant parameters' do + path = vagrant.instance_variable_get(:@vagrant_path) hosts = make_hosts( { - :forwarded_ports => { - :http => { - :from => 10080, - :from_ip => '127.0.0.1', - :to => 80, - :to_ip => '0.0.0.0', - :protocol => 'udp' + forwarded_ports: { + http: { + from: 10_080, + from_ip: '127.0.0.1', + to: 80, + to_ip: '0.0.0.0', + protocol: 'udp' } } - },1) - vagrant.make_vfile( hosts, options ) + }, 1 + ) + vagrant.make_vfile(hosts, options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) - expect( vagrantfile ).to match(/v.vm.network :forwarded_port, protocol: 'udp', guest_ip: '0.0.0.0', guest: 80, host_ip: '127.0.0.1', host: 10080/) + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) + expect(vagrantfile).to match(/v.vm.network :forwarded_port, protocol: 'udp', guest_ip: '0.0.0.0', guest: 80, host_ip: '127.0.0.1', host: 10080/) end - it "supports supports from_ip" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'supports supports from_ip' do + path = vagrant.instance_variable_get(:@vagrant_path) hosts = make_hosts( - { - :forwarded_ports => { - :http => { - :from => 10080, - :from_ip => '127.0.0.1', - :to => 80, - } - } - },1) - vagrant.make_vfile( hosts, options ) + { + forwarded_ports: { + http: { + from: 10_080, + from_ip: '127.0.0.1', + to: 80, + } + } + }, 1 + ) + vagrant.make_vfile(hosts, options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) - expect( vagrantfile ).to match(/v.vm.network :forwarded_port, guest: 80, host_ip: '127.0.0.1', host: 10080/) + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) + expect(vagrantfile).to match(/v.vm.network :forwarded_port, guest: 80, host_ip: '127.0.0.1', host: 10080/) end - it "supports all to_ip" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'supports all to_ip' do + path = vagrant.instance_variable_get(:@vagrant_path) hosts = make_hosts( - { - :forwarded_ports => { - :http => { - :from => 10080, - :to => 80, - :to_ip => '0.0.0.0', - } - } - },1) - vagrant.make_vfile( hosts, options ) + { + forwarded_ports: { + http: { + from: 10_080, + to: 80, + to_ip: '0.0.0.0', + } + } + }, 1 + ) + vagrant.make_vfile(hosts, options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) - expect( vagrantfile ).to match(/v.vm.network :forwarded_port, guest_ip: '0.0.0.0', guest: 80, host: 10080/) + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) + expect(vagrantfile).to match(/v.vm.network :forwarded_port, guest_ip: '0.0.0.0', guest: 80, host: 10080/) end - it "supports all protocol" do - path = vagrant.instance_variable_get( :@vagrant_path ) + it 'supports all protocol' do + path = vagrant.instance_variable_get(:@vagrant_path) hosts = make_hosts( - { - :forwarded_ports => { - :http => { - :from => 10080, - :to => 80, - :protocol => 'udp' - } - } - },1) - vagrant.make_vfile( hosts, options ) + { + forwarded_ports: { + http: { + from: 10_080, + to: 80, + protocol: 'udp' + } + } + }, 1 + ) + vagrant.make_vfile(hosts, options) - vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile"))) - expect( vagrantfile ).to match(/v.vm.network :forwarded_port, protocol: 'udp', guest: 80, host: 10080/) - + vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile'))) + expect(vagrantfile).to match(/v.vm.network :forwarded_port, protocol: 'udp', guest: 80, host: 10080/) end end - it "can generate a new /etc/hosts file referencing each host" do - + it 'can generate a new /etc/hosts file referencing each host' do @hosts.each do |host| - expect( vagrant ).to receive( :get_domain_name ).with( host ).and_return( 'labs.lan' ) - expect( vagrant ).to receive( :set_etc_hosts ).with( host, "127.0.0.1\tlocalhost localhost.localdomain\nip.address.for.vm1\tvm1.labs.lan vm1\nip.address.for.vm2\tvm2.labs.lan vm2\nip.address.for.vm3\tvm3.labs.lan vm3\n" ).once + expect(vagrant).to receive(:get_domain_name).with(host).and_return('labs.lan') + expect(vagrant).to receive(:set_etc_hosts).with(host, + "127.0.0.1\tlocalhost localhost.localdomain\nip.address.for.vm1\tvm1.labs.lan vm1\nip.address.for.vm2\tvm2.labs.lan vm2\nip.address.for.vm3\tvm3.labs.lan vm3\n").once end - vagrant.hack_etc_hosts( @hosts, options ) - + vagrant.hack_etc_hosts(@hosts, options) end context "can copy vagrant's key to root .ssh on each host" do - - it "can copy to root on unix" do + it 'can copy to root on unix' do host = @hosts[0] host[:platform] = 'unix' - expect( Command ).to receive( :new ).with("sudo su -c \"cp -r .ssh /root/.\"").once - expect( Command ).to receive( :new ).with("sudo fixfiles restore /root").once - expect( Command ).to receive( :new ).with("sudo selinuxenabled").once + expect(Command).to receive(:new).with('sudo su -c "cp -r .ssh /root/."').once + expect(Command).to receive(:new).with('sudo fixfiles restore /root').once + expect(Command).to receive(:new).with('sudo selinuxenabled').once - vagrant.copy_ssh_to_root( host, options ) - + vagrant.copy_ssh_to_root(host, options) end - it "can copy to Administrator on windows" do + it 'can copy to Administrator on windows' do host = @hosts[0] host[:platform] = 'windows' - expect( host ).to receive( :is_cygwin? ).and_return(true) + expect(host).to receive(:is_cygwin?).and_return(true) - expect( Command ).to_not receive( :new ).with("sudo fixfiles restore /root") - expect( Command ).to receive( :new ).with("cp -r .ssh /cygdrive/c/Users/Administrator/.").once - expect( Command ).to receive( :new ).with("chown -R Administrator /cygdrive/c/Users/Administrator/.ssh").once + expect(Command).to_not receive(:new).with('sudo fixfiles restore /root') + expect(Command).to receive(:new).with('cp -r .ssh /cygdrive/c/Users/Administrator/.').once + expect(Command).to receive(:new).with('chown -R Administrator /cygdrive/c/Users/Administrator/.ssh').once # This is checked on all platforms since Linux isn't called out specifically in the code # If this fails, nothing further is activated result = Beaker::Result.new(host, '') result.exit_code = 1 - expect( Command ).to receive( :new ).with("sudo selinuxenabled") - allow( host ).to receive(:exec).and_return(result) + expect(Command).to receive(:new).with('sudo selinuxenabled') + allow(host).to receive(:exec).and_return(result) - vagrant.copy_ssh_to_root( host, options ) - + vagrant.copy_ssh_to_root(host, options) end end - describe "set_ssh_config" do - let( :out ) do + describe 'set_ssh_config' do + let(:out) do <<-CONFIG Host #{name} HostName 127.0.0.1 User vagrant Port 2222 @@ -421,25 +419,26 @@ PasswordAuthentication no IdentityFile /home/root/.vagrant.d/insecure_private_key IdentitiesOnly yes CONFIG end - let( :host ) { @hosts[0] } - let( :name ) { host.name } - let( :override_options ) { {} } + let(:host) { @hosts[0] } + let(:name) { host.name } + let(:override_options) { {} } before :each do # FakeFS is just broken with Tempfile FakeFS.deactivate! Dir.mktmpdir do |dir| vagrant.instance_variable_get(:@options).merge!(override_options) vagrant.instance_variable_set(:@vagrant_path, dir) - state = double( 'state' ) - allow( state ).to receive( :success? ).and_return( true ) - allow( Open3 ).to receive( :capture3 ).with( {"RUBYLIB"=>"", "RUBYOPT"=>""}, 'vagrant', 'ssh-config', name ).and_return( [ out, "", state ]) + state = double('state') + allow(state).to receive(:success?).and_return(true) + allow(Open3).to receive(:capture3).with({ 'RUBYLIB' => '', 'RUBYOPT' => '' }, 'vagrant', 'ssh-config', + name).and_return([out, '', state]) - vagrant.set_ssh_config( host, 'root' ) + vagrant.set_ssh_config(host, 'root') end end it 'sets the user to root' do expect(host['user']).to be === 'root' @@ -452,17 +451,17 @@ # This is because forward_ssh_agent is true by default it 'sets IdentitiesOnly to no' do expect(host['ssh'][:keys_only]).to be === false end - context "when :forward_ssh_agent is false" do + context 'when :forward_ssh_agent is false' do let(:override_options) do - {forward_ssh_agent: false} + { forward_ssh_agent: false } end - it "should keep IdentitiesOnly to yes" do - expect( host['ssh'][:keys_only]).to be === true + it 'should keep IdentitiesOnly to yes' do + expect(host['ssh'][:keys_only]).to be === true end end end context 'with options[:provision] = false' do @@ -515,89 +514,82 @@ expect(vagrant).to receive(:hack_etc_hosts).with(@hosts, options) vagrant.set_all_ssh_config end end - describe "provisioning and cleanup" do - + describe 'provisioning and cleanup' do before :each do - expect( vagrant ).to receive( :vagrant_cmd ).with( "up" ).once + expect(vagrant).to receive(:vagrant_cmd).with('up').once @hosts.each do |host| host_prev_name = host['user'] - expect( vagrant ).to receive( :set_ssh_config ).with( host, 'vagrant' ).once - expect( vagrant ).to receive( :copy_ssh_to_root ).with( host, options ).once - expect( vagrant ).to receive( :set_ssh_config ).with( host, host_prev_name ).once + expect(vagrant).to receive(:set_ssh_config).with(host, 'vagrant').once + expect(vagrant).to receive(:copy_ssh_to_root).with(host, options).once + expect(vagrant).to receive(:set_ssh_config).with(host, host_prev_name).once end - expect( vagrant ).to receive( :hack_etc_hosts ).with( @hosts, options ).once + expect(vagrant).to receive(:hack_etc_hosts).with(@hosts, options).once end - it "can provision a set of hosts" do - options = vagrant.instance_variable_get( :@options ) - expect( vagrant ).to receive( :make_vfile ).with( @hosts, options ).once - expect( vagrant ).to receive( :vagrant_cmd ).with( "destroy --force" ).never + it 'can provision a set of hosts' do + options = vagrant.instance_variable_get(:@options) + expect(vagrant).to receive(:make_vfile).with(@hosts, options).once + expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').never vagrant.provision end - it "destroys an existing set of hosts before provisioning" do - vagrant.make_vfile( @hosts ) - expect( vagrant ).to receive( :vagrant_cmd ).with( "destroy --force" ).once + it 'destroys an existing set of hosts before provisioning' do + vagrant.make_vfile(@hosts) + expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once vagrant.provision end - it "notifies user of failed provision" do + it 'notifies user of failed provision' do vagrant.provision - expect( vagrant ).to receive( :vagrant_cmd ).with( "destroy --force" ).and_raise( RuntimeError ) - expect( options['logger'] ).to receive( :debug ).with( /Vagrantfile/ ) - expect{ vagrant.provision }.to raise_error( RuntimeError ) + expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').and_raise(RuntimeError) + expect(options['logger']).to receive(:debug).with(/Vagrantfile/) + expect { vagrant.provision }.to raise_error(RuntimeError) end - it "can cleanup" do - expect( vagrant ).to receive( :vagrant_cmd ).with( "destroy --force" ).once - expect( FileUtils ).to receive( :rm_rf ).once + it 'can cleanup' do + expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once + expect(FileUtils).to receive(:rm_rf).once vagrant.provision vagrant.cleanup - end - end - describe "provisioning and cleanup on windows" do + describe 'provisioning and cleanup on windows' do before :each do - expect( vagrant ).to receive( :vagrant_cmd ).with( "up" ).once + expect(vagrant).to receive(:vagrant_cmd).with('up').once @hosts.each do |host| host[:platform] = 'windows' host_prev_name = host['user'] - expect( vagrant ).not_to receive( :set_ssh_config ).with( host, 'vagrant' ) - expect( vagrant ).not_to receive( :copy_ssh_to_root ).with( host, options ) - expect( vagrant ).to receive( :set_ssh_config ).with( host, host_prev_name ).once + expect(vagrant).not_to receive(:set_ssh_config).with(host, 'vagrant') + expect(vagrant).not_to receive(:copy_ssh_to_root).with(host, options) + expect(vagrant).to receive(:set_ssh_config).with(host, host_prev_name).once end - expect( vagrant ).to receive( :hack_etc_hosts ).with( @hosts, options ).once + expect(vagrant).to receive(:hack_etc_hosts).with(@hosts, options).once end - it "can provision a set of hosts" do - options = vagrant.instance_variable_get( :@options ) - expect( vagrant ).to receive( :make_vfile ).with( @hosts, options ).once - expect( vagrant ).to receive( :vagrant_cmd ).with( "destroy --force" ).never + it 'can provision a set of hosts' do + options = vagrant.instance_variable_get(:@options) + expect(vagrant).to receive(:make_vfile).with(@hosts, options).once + expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').never vagrant.provision end - it "destroys an existing set of hosts before provisioning" do - vagrant.make_vfile( @hosts ) - expect( vagrant ).to receive( :vagrant_cmd ).with( "destroy --force" ).once + it 'destroys an existing set of hosts before provisioning' do + vagrant.make_vfile(@hosts) + expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once vagrant.provision end - it "can cleanup" do - expect( vagrant ).to receive( :vagrant_cmd ).with( "destroy --force" ).once - expect( FileUtils ).to receive( :rm_rf ).once + it 'can cleanup' do + expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once + expect(FileUtils).to receive(:rm_rf).once vagrant.provision vagrant.cleanup - end - end - end - end