beaker-vagrant 0.7.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +9 -0
- data/.github/workflows/release.yml +17 -9
- data/.github/workflows/test.yml +40 -11
- data/.rubocop.yml +4 -0
- data/.rubocop_todo.yml +383 -0
- data/CHANGELOG.md +202 -0
- data/Gemfile +3 -24
- data/README.md +26 -9
- data/Rakefile +34 -120
- data/beaker-vagrant.gemspec +24 -24
- data/bin/beaker-vagrant +1 -3
- data/lib/beaker/hypervisor/vagrant/mount_folder.rb +1 -1
- data/lib/beaker/hypervisor/vagrant.rb +72 -83
- data/lib/beaker/hypervisor/vagrant_custom.rb +1 -1
- data/lib/beaker/hypervisor/vagrant_desktop.rb +9 -5
- data/lib/beaker/hypervisor/vagrant_libvirt.rb +1 -7
- data/lib/beaker/hypervisor/vagrant_parallels.rb +2 -2
- data/lib/beaker/hypervisor/vagrant_virtualbox.rb +35 -32
- data/lib/beaker/hypervisor/vagrant_workstation.rb +9 -5
- data/lib/beaker-vagrant/version.rb +1 -1
- data/spec/beaker/hypervisor/vagrant_custom_spec.rb +14 -15
- data/spec/beaker/hypervisor/vagrant_desktop_spec.rb +20 -20
- data/spec/beaker/hypervisor/vagrant_fusion_spec.rb +11 -11
- data/spec/beaker/hypervisor/vagrant_libvirt_spec.rb +23 -22
- data/spec/beaker/hypervisor/vagrant_parallels_spec.rb +15 -15
- data/spec/beaker/hypervisor/vagrant_spec.rb +301 -309
- data/spec/beaker/hypervisor/vagrant_virtualbox_spec.rb +50 -29
- data/spec/beaker/hypervisor/vagrant_workstation_spec.rb +20 -20
- data/spec/spec_helper.rb +1 -2
- metadata +69 -36
| @@ -3,414 +3,412 @@ require 'spec_helper' | |
| 3 3 |  | 
| 4 4 | 
             
            module Beaker
         | 
| 5 5 | 
             
              describe Vagrant do
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                let( :options ) {
         | 
| 6 | 
            +
                let(:options) do
         | 
| 8 7 | 
             
                  make_opts.merge({
         | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
                 | 
| 8 | 
            +
                                    'logger' => double.as_null_object,
         | 
| 9 | 
            +
                                    :hosts_file => 'sample.cfg',
         | 
| 10 | 
            +
                                    :forward_ssh_agent => true,
         | 
| 11 | 
            +
                                  })
         | 
| 12 | 
            +
                end
         | 
| 14 13 |  | 
| 15 | 
            -
                let( | 
| 14 | 
            +
                let(:vagrant) { Beaker::Vagrant.new(@hosts, options) }
         | 
| 16 15 |  | 
| 17 16 | 
             
                before :each do
         | 
| 18 17 | 
             
                  @hosts = make_hosts({
         | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 18 | 
            +
                                        mount_folders: {
         | 
| 19 | 
            +
                                          test_temp: { from: './', to: '/temp' },
         | 
| 20 | 
            +
                                          test_tmp: { from: '../', to: '/tmp' }
         | 
| 21 | 
            +
                                        },
         | 
| 22 | 
            +
                                        forwarded_ports: {
         | 
| 23 | 
            +
                                          http: { from: 10_080, to: 80 },
         | 
| 24 | 
            +
                                          ssl: { from: 4443, to: 443 },
         | 
| 25 | 
            +
                                          tomcat: { from: 8080, to: 8080 }
         | 
| 26 | 
            +
                                        },
         | 
| 27 | 
            +
                                        platform: Beaker::Platform.new('centos-8-x86_64')
         | 
| 28 | 
            +
                                      })
         | 
| 30 29 | 
             
                end
         | 
| 31 30 |  | 
| 32 | 
            -
                it  | 
| 33 | 
            -
                  path = vagrant.instance_variable_get( | 
| 34 | 
            -
             | 
| 35 | 
            -
                  expect( path ).to be === File.join(Dir.pwd, '.vagrant', 'beaker_vagrant_files', 'beaker_sample.cfg')
         | 
| 31 | 
            +
                it 'stores the vagrant file in $WORKINGDIR/.vagrant/beaker_vagrant_files/beaker_sample.cfg' do
         | 
| 32 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 36 33 |  | 
| 34 | 
            +
                  expect(path).to be === File.join(Dir.pwd, '.vagrant', 'beaker_vagrant_files', 'beaker_sample.cfg')
         | 
| 37 35 | 
             
                end
         | 
| 38 36 |  | 
| 39 | 
            -
                it  | 
| 40 | 
            -
                  path = vagrant.instance_variable_get( | 
| 37 | 
            +
                it 'can make a Vagrantfile for a set of hosts' do
         | 
| 38 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 41 39 |  | 
| 42 | 
            -
                  vagrant.make_vfile( | 
| 40 | 
            +
                  vagrant.make_vfile(@hosts)
         | 
| 43 41 |  | 
| 44 | 
            -
                  vagrantfile = File.read( | 
| 42 | 
            +
                  vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 45 43 | 
             
                  puts "file is #{path}\n"
         | 
| 46 | 
            -
                  expect( | 
| 47 | 
            -
            Vagrant.configure("2") do |c|
         | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
            end
         | 
| 95 | 
            -
            EOF
         | 
| 44 | 
            +
                  expect(vagrantfile).to be === <<~EOF
         | 
| 45 | 
            +
                    Vagrant.configure("2") do |c|
         | 
| 46 | 
            +
                      c.ssh.insert_key = false
         | 
| 47 | 
            +
                      c.vm.define 'vm1' do |v|
         | 
| 48 | 
            +
                        v.vm.hostname = 'vm1'
         | 
| 49 | 
            +
                        v.vm.box = 'vm2vm1_of_my_box'
         | 
| 50 | 
            +
                        v.vm.box_url = 'http://address.for.my.box.vm1'
         | 
| 51 | 
            +
                        v.vm.box_check_update = 'true'
         | 
| 52 | 
            +
                        v.vm.network :private_network, ip: "ip.address.for.vm1", :netmask => "255.255.0.0"
         | 
| 53 | 
            +
                        v.vm.synced_folder './', '/temp', create: true
         | 
| 54 | 
            +
                        v.vm.synced_folder '../', '/tmp', create: true
         | 
| 55 | 
            +
                        v.vm.network :forwarded_port, guest: 80, host: 10080
         | 
| 56 | 
            +
                        v.vm.network :forwarded_port, guest: 443, host: 4443
         | 
| 57 | 
            +
                        v.vm.network :forwarded_port, guest: 8080, host: 8080
         | 
| 58 | 
            +
                        v.vm.provider :virtualbox do |vb|
         | 
| 59 | 
            +
                          vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none']
         | 
| 60 | 
            +
                        end
         | 
| 61 | 
            +
                      end
         | 
| 62 | 
            +
                      c.vm.define 'vm2' do |v|
         | 
| 63 | 
            +
                        v.vm.hostname = 'vm2'
         | 
| 64 | 
            +
                        v.vm.box = 'vm2vm2_of_my_box'
         | 
| 65 | 
            +
                        v.vm.box_url = 'http://address.for.my.box.vm2'
         | 
| 66 | 
            +
                        v.vm.box_check_update = 'true'
         | 
| 67 | 
            +
                        v.vm.network :private_network, ip: "ip.address.for.vm2", :netmask => "255.255.0.0"
         | 
| 68 | 
            +
                        v.vm.synced_folder './', '/temp', create: true
         | 
| 69 | 
            +
                        v.vm.synced_folder '../', '/tmp', create: true
         | 
| 70 | 
            +
                        v.vm.network :forwarded_port, guest: 80, host: 10080
         | 
| 71 | 
            +
                        v.vm.network :forwarded_port, guest: 443, host: 4443
         | 
| 72 | 
            +
                        v.vm.network :forwarded_port, guest: 8080, host: 8080
         | 
| 73 | 
            +
                        v.vm.provider :virtualbox do |vb|
         | 
| 74 | 
            +
                          vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none']
         | 
| 75 | 
            +
                        end
         | 
| 76 | 
            +
                      end
         | 
| 77 | 
            +
                      c.vm.define 'vm3' do |v|
         | 
| 78 | 
            +
                        v.vm.hostname = 'vm3'
         | 
| 79 | 
            +
                        v.vm.box = 'vm2vm3_of_my_box'
         | 
| 80 | 
            +
                        v.vm.box_url = 'http://address.for.my.box.vm3'
         | 
| 81 | 
            +
                        v.vm.box_check_update = 'true'
         | 
| 82 | 
            +
                        v.vm.network :private_network, ip: "ip.address.for.vm3", :netmask => "255.255.0.0"
         | 
| 83 | 
            +
                        v.vm.synced_folder './', '/temp', create: true
         | 
| 84 | 
            +
                        v.vm.synced_folder '../', '/tmp', create: true
         | 
| 85 | 
            +
                        v.vm.network :forwarded_port, guest: 80, host: 10080
         | 
| 86 | 
            +
                        v.vm.network :forwarded_port, guest: 443, host: 4443
         | 
| 87 | 
            +
                        v.vm.network :forwarded_port, guest: 8080, host: 8080
         | 
| 88 | 
            +
                        v.vm.provider :virtualbox do |vb|
         | 
| 89 | 
            +
                          vb.customize ['modifyvm', :id, '--memory', '1024', '--cpus', '1', '--audio', 'none']
         | 
| 90 | 
            +
                        end
         | 
| 91 | 
            +
                      end
         | 
| 92 | 
            +
                    end
         | 
| 93 | 
            +
                  EOF
         | 
| 96 94 | 
             
                end
         | 
| 97 95 |  | 
| 98 | 
            -
                it  | 
| 99 | 
            -
                  path = vagrant.instance_variable_get( | 
| 96 | 
            +
                it 'can make a Vagrantfile with ssh agent forwarding enabled' do
         | 
| 97 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 100 98 |  | 
| 101 | 
            -
                  hosts = make_hosts({},1)
         | 
| 102 | 
            -
                  vagrant.make_vfile( | 
| 99 | 
            +
                  hosts = make_hosts({}, 1)
         | 
| 100 | 
            +
                  vagrant.make_vfile(hosts, options)
         | 
| 103 101 |  | 
| 104 | 
            -
                  vagrantfile = File.read( | 
| 105 | 
            -
                  expect( | 
| 102 | 
            +
                  vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 103 | 
            +
                  expect(vagrantfile).to match(/(ssh.forward_agent = true)/)
         | 
| 106 104 | 
             
                end
         | 
| 107 105 |  | 
| 108 | 
            -
                it  | 
| 109 | 
            -
                  path = vagrant.instance_variable_get( | 
| 110 | 
            -
             | 
| 111 | 
            -
                  host = make_host( 'name-with_underscore', {} )
         | 
| 112 | 
            -
                  vagrant.make_vfile( [host,], options )
         | 
| 106 | 
            +
                it 'can replace underscores in host.name with hypens' do
         | 
| 107 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 113 108 |  | 
| 114 | 
            -
                   | 
| 115 | 
            -
                   | 
| 109 | 
            +
                  host = make_host('name-with_underscore', {})
         | 
| 110 | 
            +
                  vagrant.make_vfile([host,], options)
         | 
| 116 111 |  | 
| 112 | 
            +
                  vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 113 | 
            +
                  expect(vagrantfile).to match(/v.vm.hostname = .*name-with-underscore/)
         | 
| 117 114 | 
             
                end
         | 
| 118 115 |  | 
| 119 | 
            -
                it  | 
| 120 | 
            -
                  path = vagrant.instance_variable_get( | 
| 116 | 
            +
                it 'can make a Vagrantfile with synced_folder disabled' do
         | 
| 117 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 121 118 |  | 
| 122 | 
            -
                  hosts = make_hosts({: | 
| 123 | 
            -
                  vagrant.make_vfile( | 
| 119 | 
            +
                  hosts = make_hosts({ synced_folder: 'disabled' }, 1)
         | 
| 120 | 
            +
                  vagrant.make_vfile(hosts, options)
         | 
| 124 121 |  | 
| 125 | 
            -
                  vagrantfile = File.read( | 
| 126 | 
            -
                  expect( | 
| 122 | 
            +
                  vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 123 | 
            +
                  expect(vagrantfile).to match(/v.vm.synced_folder .* disabled: true/)
         | 
| 127 124 | 
             
                end
         | 
| 128 125 |  | 
| 129 | 
            -
                it  | 
| 130 | 
            -
                  path = vagrant.instance_variable_get( | 
| 126 | 
            +
                it 'can make a Vagrantfile with network mac specified' do
         | 
| 127 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 131 128 |  | 
| 132 | 
            -
                  hosts = make_hosts({: | 
| 133 | 
            -
                  vagrant.make_vfile( | 
| 129 | 
            +
                  hosts = make_hosts({ network_mac: 'b6:33:ae:19:48:f9' }, 1)
         | 
| 130 | 
            +
                  vagrant.make_vfile(hosts, options)
         | 
| 134 131 |  | 
| 135 | 
            -
                  vagrantfile = File.read( | 
| 136 | 
            -
                  expect( | 
| 132 | 
            +
                  vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 133 | 
            +
                  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/)
         | 
| 137 134 | 
             
                end
         | 
| 138 135 |  | 
| 139 | 
            -
                it  | 
| 140 | 
            -
                  path = vagrant.instance_variable_get( | 
| 136 | 
            +
                it 'can make a Vagrantfile with improper keys for synced folders' do
         | 
| 137 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 141 138 |  | 
| 142 | 
            -
                  hosts = make_hosts({: | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
                  vagrant.make_vfile( | 
| 139 | 
            +
                  hosts = make_hosts({ mount_folders: {
         | 
| 140 | 
            +
                                       test_invalid1: { host_path: '/invalid1', container_path: '/invalid1' },
         | 
| 141 | 
            +
                                       test_invalid2: { from: '/invalid2', container_path: '/invalid2' },
         | 
| 142 | 
            +
                                       test_invalid3: { host_path: '/invalid3', to: '/invalid3' },
         | 
| 143 | 
            +
                                       test_valid: { from: '/valid', to: '/valid' }
         | 
| 144 | 
            +
                                     } }, 1)
         | 
| 145 | 
            +
                  vagrant.make_vfile(hosts, options)
         | 
| 149 146 |  | 
| 150 | 
            -
                  vagrantfile = File.read( | 
| 147 | 
            +
                  vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 151 148 |  | 
| 152 | 
            -
                  expect( | 
| 153 | 
            -
                  expect( | 
| 154 | 
            -
                  expect( | 
| 155 | 
            -
                  expect( | 
| 149 | 
            +
                  expect(vagrantfile).not_to match(/v.vm.synced_folder '', '', create: true/)
         | 
| 150 | 
            +
                  expect(vagrantfile).not_to match(%r{v.vm.synced_folder '/invalid2', '', create: true})
         | 
| 151 | 
            +
                  expect(vagrantfile).not_to match(%r{v.vm.synced_folder '', '/invalid3', create: true})
         | 
| 152 | 
            +
                  expect(vagrantfile).to match(%r{v.vm.synced_folder '/valid', '/valid', create: true})
         | 
| 156 153 | 
             
                end
         | 
| 157 154 |  | 
| 158 | 
            -
                it  | 
| 159 | 
            -
                  path = vagrant.instance_variable_get( | 
| 155 | 
            +
                it 'can make a Vagrantfile with optional shell provisioner' do
         | 
| 156 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 160 157 |  | 
| 161 158 | 
             
                  shell_path = '/path/to/shell/script'
         | 
| 162 159 | 
             
                  hosts = make_hosts({
         | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
                  vagrant.make_vfile( | 
| 168 | 
            -
             | 
| 169 | 
            -
                  vagrantfile = File.read( | 
| 170 | 
            -
                  expect( | 
| 160 | 
            +
                                       shell_provisioner: {
         | 
| 161 | 
            +
                                         path: shell_path
         | 
| 162 | 
            +
                                       }
         | 
| 163 | 
            +
                                     }, 1)
         | 
| 164 | 
            +
                  vagrant.make_vfile(hosts, options)
         | 
| 165 | 
            +
             | 
| 166 | 
            +
                  vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 167 | 
            +
                  expect(vagrantfile).to match(/v.vm.provision 'shell', :path => '#{shell_path}'/)
         | 
| 171 168 | 
             
                end
         | 
| 172 169 |  | 
| 173 | 
            -
                it  | 
| 174 | 
            -
                  path = vagrant.instance_variable_get( | 
| 170 | 
            +
                it 'can make a Vagrantfile with optional shell provisioner with args' do
         | 
| 171 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 175 172 |  | 
| 176 173 | 
             
                  shell_path = '/path/to/shell/script.sh'
         | 
| 177 174 | 
             
                  shell_args = 'arg1 arg2'
         | 
| 178 175 | 
             
                  hosts = make_hosts({
         | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 183 | 
            -
             | 
| 184 | 
            -
                  vagrant.make_vfile( | 
| 185 | 
            -
             | 
| 186 | 
            -
                  vagrantfile = File.read( | 
| 187 | 
            -
                  expect( | 
| 176 | 
            +
                                       shell_provisioner: {
         | 
| 177 | 
            +
                                         path: shell_path,
         | 
| 178 | 
            +
                                         args: shell_args
         | 
| 179 | 
            +
                                       }
         | 
| 180 | 
            +
                                     }, 1)
         | 
| 181 | 
            +
                  vagrant.make_vfile(hosts, options)
         | 
| 182 | 
            +
             | 
| 183 | 
            +
                  vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 184 | 
            +
                  expect(vagrantfile).to match(/v.vm.provision 'shell', :path => '#{shell_path}', :args => '#{shell_args}'/)
         | 
| 188 185 | 
             
                end
         | 
| 189 186 |  | 
| 190 | 
            -
                it  | 
| 191 | 
            -
                  path = vagrant.instance_variable_get( | 
| 187 | 
            +
                it 'raises an error if path is not set on shell_provisioner' do
         | 
| 188 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 192 189 |  | 
| 193 | 
            -
                  hosts = make_hosts({: | 
| 194 | 
            -
                  expect | 
| 190 | 
            +
                  hosts = make_hosts({ shell_provisioner: {} }, 1)
         | 
| 191 | 
            +
                  expect do
         | 
| 192 | 
            +
                    vagrant.make_vfile(hosts, options)
         | 
| 193 | 
            +
                  end.to raise_error RuntimeError, /No path defined for shell_provisioner or path empty/
         | 
| 195 194 | 
             
                end
         | 
| 196 195 |  | 
| 197 | 
            -
                it  | 
| 198 | 
            -
                  path = vagrant.instance_variable_get( | 
| 196 | 
            +
                it 'raises an error if path is EMPTY on shell_provisioner' do
         | 
| 197 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 199 198 |  | 
| 200 199 | 
             
                  empty_shell_path = ''
         | 
| 201 200 | 
             
                  hosts = make_hosts({
         | 
| 202 | 
            -
             | 
| 203 | 
            -
             | 
| 204 | 
            -
             | 
| 205 | 
            -
             | 
| 206 | 
            -
                  expect | 
| 201 | 
            +
                                       shell_provisioner: {
         | 
| 202 | 
            +
                                         path: empty_shell_path
         | 
| 203 | 
            +
                                       }
         | 
| 204 | 
            +
                                     }, 1)
         | 
| 205 | 
            +
                  expect do
         | 
| 206 | 
            +
                    vagrant.make_vfile(hosts, options)
         | 
| 207 | 
            +
                  end.to raise_error RuntimeError, /No path defined for shell_provisioner or path empty/
         | 
| 207 208 | 
             
                end
         | 
| 208 209 |  | 
| 209 | 
            -
                context  | 
| 210 | 
            +
                context 'when generating a windows config' do
         | 
| 210 211 | 
             
                  before do
         | 
| 211 | 
            -
                    path = vagrant.instance_variable_get( | 
| 212 | 
            +
                    path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 212 213 | 
             
                    @hosts[0][:platform] = 'windows'
         | 
| 213 214 |  | 
| 214 | 
            -
                    vagrant.make_vfile( | 
| 215 | 
            +
                    vagrant.make_vfile(@hosts)
         | 
| 215 216 |  | 
| 216 | 
            -
                    @generated_file = File.read( | 
| 217 | 
            +
                    @generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 217 218 | 
             
                  end
         | 
| 218 219 |  | 
| 219 220 | 
             
                  it 'has the proper port forwarding for RDP' do
         | 
| 220 | 
            -
                    expect( | 
| 221 | 
            +
                    expect(@generated_file).to match /v.vm.network :forwarded_port, guest: 3389, host: 3389, id: 'rdp', auto_correct: true/
         | 
| 221 222 | 
             
                  end
         | 
| 222 223 |  | 
| 223 224 | 
             
                  it 'has the proper port forwarding for WinRM' do
         | 
| 224 | 
            -
                    expect( | 
| 225 | 
            +
                    expect(@generated_file).to match /v.vm.network :forwarded_port, guest: 5985, host: 5985, id: 'winrm', auto_correct: true/
         | 
| 225 226 | 
             
                  end
         | 
| 226 227 |  | 
| 227 228 | 
             
                  it 'configures the guest type to windows' do
         | 
| 228 | 
            -
                    expect( | 
| 229 | 
            +
                    expect(@generated_file).to match /v.vm.guest = :windows/
         | 
| 229 230 | 
             
                  end
         | 
| 230 231 |  | 
| 231 232 | 
             
                  it 'configures the guest type to use winrm' do
         | 
| 232 | 
            -
                    expect( | 
| 233 | 
            +
                    expect(@generated_file).to match /v.vm.communicator = 'winrm'/
         | 
| 233 234 | 
             
                  end
         | 
| 234 235 |  | 
| 235 236 | 
             
                  it 'sets a non-default memsize' do
         | 
| 236 | 
            -
                    expect( | 
| 237 | 
            +
                    expect(@generated_file).to match /'--memory', '2048',/
         | 
| 237 238 | 
             
                  end
         | 
| 238 239 | 
             
                end
         | 
| 239 240 |  | 
| 240 241 | 
             
                context 'when generating a freebsd config' do
         | 
| 241 242 | 
             
                  before do
         | 
| 242 | 
            -
                    path = vagrant.instance_variable_get( | 
| 243 | 
            +
                    path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 243 244 | 
             
                    @hosts[0][:platform] = 'freebsd'
         | 
| 244 245 |  | 
| 245 | 
            -
                    vagrant.make_vfile( | 
| 246 | 
            +
                    vagrant.make_vfile(@hosts)
         | 
| 246 247 |  | 
| 247 | 
            -
                    @generated_file = File.read( | 
| 248 | 
            +
                    @generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 248 249 | 
             
                  end
         | 
| 249 250 |  | 
| 250 251 | 
             
                  it 'has the proper ssh shell' do
         | 
| 251 | 
            -
                    expect( | 
| 252 | 
            +
                    expect(@generated_file).to match /v.ssh.shell = 'sh'\n/
         | 
| 252 253 | 
             
                  end
         | 
| 253 254 |  | 
| 254 255 | 
             
                  it 'has the proper guest setting' do
         | 
| 255 | 
            -
                    expect( | 
| 256 | 
            +
                    expect(@generated_file).to match /v.vm.guest = :freebsd\n/
         | 
| 256 257 | 
             
                  end
         | 
| 257 258 | 
             
                end
         | 
| 258 259 |  | 
| 259 | 
            -
                it  | 
| 260 | 
            -
                  path = vagrant.instance_variable_get( | 
| 260 | 
            +
                it 'uses the memsize defined per vagrant host' do
         | 
| 261 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 261 262 |  | 
| 262 | 
            -
                  vagrant.make_vfile( | 
| 263 | 
            +
                  vagrant.make_vfile(@hosts, { 'vagrant_memsize' => 'hello!' })
         | 
| 263 264 |  | 
| 264 | 
            -
                  generated_file = File.read( | 
| 265 | 
            +
                  generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 265 266 |  | 
| 266 267 | 
             
                  match = generated_file.match(/vb.customize \['modifyvm', :id, '--memory', 'hello!', '--cpus', '1', '--audio', 'none'\]/)
         | 
| 267 268 |  | 
| 268 | 
            -
                  expect( | 
| 269 | 
            -
             | 
| 269 | 
            +
                  expect(match).to_not be nil
         | 
| 270 270 | 
             
                end
         | 
| 271 271 |  | 
| 272 | 
            -
                it  | 
| 273 | 
            -
                  path = vagrant.instance_variable_get( | 
| 272 | 
            +
                it 'uses the cpus defined per vagrant host' do
         | 
| 273 | 
            +
                  path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 274 274 |  | 
| 275 | 
            -
                  vagrant.make_vfile( | 
| 275 | 
            +
                  vagrant.make_vfile(@hosts, { 'vagrant_cpus' => 'goodbye!' })
         | 
| 276 276 |  | 
| 277 | 
            -
                  generated_file = File.read( | 
| 277 | 
            +
                  generated_file = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 278 278 |  | 
| 279 279 | 
             
                  match = generated_file.match(/vb.customize \['modifyvm', :id, '--memory', '1024', '--cpus', 'goodbye!', '--audio', 'none'\]/)
         | 
| 280 280 |  | 
| 281 | 
            -
                  expect( | 
| 282 | 
            -
             | 
| 281 | 
            +
                  expect(match).to_not be nil
         | 
| 283 282 | 
             
                end
         | 
| 284 283 |  | 
| 285 | 
            -
                context  | 
| 286 | 
            -
                  it  | 
| 287 | 
            -
                    path = vagrant.instance_variable_get( | 
| 284 | 
            +
                context 'port forwarding rules' do
         | 
| 285 | 
            +
                  it 'supports all Vagrant parameters' do
         | 
| 286 | 
            +
                    path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 288 287 |  | 
| 289 288 | 
             
                    hosts = make_hosts(
         | 
| 290 289 | 
             
                      {
         | 
| 291 | 
            -
                        : | 
| 292 | 
            -
                          : | 
| 293 | 
            -
                            : | 
| 294 | 
            -
                            : | 
| 295 | 
            -
                            : | 
| 296 | 
            -
                            : | 
| 297 | 
            -
                            : | 
| 290 | 
            +
                        forwarded_ports: {
         | 
| 291 | 
            +
                          http: {
         | 
| 292 | 
            +
                            from: 10_080,
         | 
| 293 | 
            +
                            from_ip: '127.0.0.1',
         | 
| 294 | 
            +
                            to: 80,
         | 
| 295 | 
            +
                            to_ip: '0.0.0.0',
         | 
| 296 | 
            +
                            protocol: 'udp'
         | 
| 298 297 | 
             
                          }
         | 
| 299 298 | 
             
                        }
         | 
| 300 | 
            -
                      },1 | 
| 301 | 
            -
                     | 
| 299 | 
            +
                      }, 1
         | 
| 300 | 
            +
                    )
         | 
| 301 | 
            +
                    vagrant.make_vfile(hosts, options)
         | 
| 302 302 |  | 
| 303 | 
            -
                    vagrantfile = File.read( | 
| 304 | 
            -
                    expect( | 
| 303 | 
            +
                    vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 304 | 
            +
                    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/)
         | 
| 305 305 | 
             
                  end
         | 
| 306 306 |  | 
| 307 | 
            -
                  it  | 
| 308 | 
            -
                    path = vagrant.instance_variable_get( | 
| 307 | 
            +
                  it 'supports supports from_ip' do
         | 
| 308 | 
            +
                    path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 309 309 |  | 
| 310 310 | 
             
                    hosts = make_hosts(
         | 
| 311 | 
            -
             | 
| 312 | 
            -
             | 
| 313 | 
            -
             | 
| 314 | 
            -
             | 
| 315 | 
            -
             | 
| 316 | 
            -
             | 
| 317 | 
            -
             | 
| 318 | 
            -
             | 
| 319 | 
            -
             | 
| 320 | 
            -
                     | 
| 311 | 
            +
                      {
         | 
| 312 | 
            +
                        forwarded_ports: {
         | 
| 313 | 
            +
                          http: {
         | 
| 314 | 
            +
                            from: 10_080,
         | 
| 315 | 
            +
                            from_ip: '127.0.0.1',
         | 
| 316 | 
            +
                            to: 80,
         | 
| 317 | 
            +
                          }
         | 
| 318 | 
            +
                        }
         | 
| 319 | 
            +
                      }, 1
         | 
| 320 | 
            +
                    )
         | 
| 321 | 
            +
                    vagrant.make_vfile(hosts, options)
         | 
| 321 322 |  | 
| 322 | 
            -
                    vagrantfile = File.read( | 
| 323 | 
            -
                    expect( | 
| 323 | 
            +
                    vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 324 | 
            +
                    expect(vagrantfile).to match(/v.vm.network :forwarded_port, guest: 80, host_ip: '127.0.0.1', host: 10080/)
         | 
| 324 325 | 
             
                  end
         | 
| 325 326 |  | 
| 326 | 
            -
                  it  | 
| 327 | 
            -
                    path = vagrant.instance_variable_get( | 
| 327 | 
            +
                  it 'supports all to_ip' do
         | 
| 328 | 
            +
                    path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 328 329 |  | 
| 329 330 | 
             
                    hosts = make_hosts(
         | 
| 330 | 
            -
             | 
| 331 | 
            -
             | 
| 332 | 
            -
             | 
| 333 | 
            -
             | 
| 334 | 
            -
             | 
| 335 | 
            -
             | 
| 336 | 
            -
             | 
| 337 | 
            -
             | 
| 338 | 
            -
             | 
| 339 | 
            -
                     | 
| 331 | 
            +
                      {
         | 
| 332 | 
            +
                        forwarded_ports: {
         | 
| 333 | 
            +
                          http: {
         | 
| 334 | 
            +
                            from: 10_080,
         | 
| 335 | 
            +
                            to: 80,
         | 
| 336 | 
            +
                            to_ip: '0.0.0.0',
         | 
| 337 | 
            +
                          }
         | 
| 338 | 
            +
                        }
         | 
| 339 | 
            +
                      }, 1
         | 
| 340 | 
            +
                    )
         | 
| 341 | 
            +
                    vagrant.make_vfile(hosts, options)
         | 
| 340 342 |  | 
| 341 | 
            -
                    vagrantfile = File.read( | 
| 342 | 
            -
                    expect( | 
| 343 | 
            +
                    vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 344 | 
            +
                    expect(vagrantfile).to match(/v.vm.network :forwarded_port, guest_ip: '0.0.0.0', guest: 80, host: 10080/)
         | 
| 343 345 | 
             
                  end
         | 
| 344 346 |  | 
| 345 | 
            -
                  it  | 
| 346 | 
            -
                    path = vagrant.instance_variable_get( | 
| 347 | 
            +
                  it 'supports all protocol' do
         | 
| 348 | 
            +
                    path = vagrant.instance_variable_get(:@vagrant_path)
         | 
| 347 349 |  | 
| 348 350 | 
             
                    hosts = make_hosts(
         | 
| 349 | 
            -
             | 
| 350 | 
            -
             | 
| 351 | 
            -
             | 
| 352 | 
            -
             | 
| 353 | 
            -
             | 
| 354 | 
            -
             | 
| 355 | 
            -
             | 
| 356 | 
            -
             | 
| 357 | 
            -
             | 
| 358 | 
            -
                     | 
| 359 | 
            -
             | 
| 360 | 
            -
                    vagrantfile = File.read( File.expand_path( File.join( path, "Vagrantfile")))
         | 
| 361 | 
            -
                    expect( vagrantfile ).to match(/v.vm.network :forwarded_port, protocol: 'udp', guest: 80, host: 10080/)
         | 
| 351 | 
            +
                      {
         | 
| 352 | 
            +
                        forwarded_ports: {
         | 
| 353 | 
            +
                          http: {
         | 
| 354 | 
            +
                            from: 10_080,
         | 
| 355 | 
            +
                            to: 80,
         | 
| 356 | 
            +
                            protocol: 'udp'
         | 
| 357 | 
            +
                          }
         | 
| 358 | 
            +
                        }
         | 
| 359 | 
            +
                      }, 1
         | 
| 360 | 
            +
                    )
         | 
| 361 | 
            +
                    vagrant.make_vfile(hosts, options)
         | 
| 362 362 |  | 
| 363 | 
            +
                    vagrantfile = File.read(File.expand_path(File.join(path, 'Vagrantfile')))
         | 
| 364 | 
            +
                    expect(vagrantfile).to match(/v.vm.network :forwarded_port, protocol: 'udp', guest: 80, host: 10080/)
         | 
| 363 365 | 
             
                  end
         | 
| 364 366 | 
             
                end
         | 
| 365 367 |  | 
| 366 | 
            -
                it  | 
| 367 | 
            -
             | 
| 368 | 
            +
                it 'can generate a new /etc/hosts file referencing each host' do
         | 
| 368 369 | 
             
                  @hosts.each do |host|
         | 
| 369 | 
            -
                    expect( | 
| 370 | 
            -
                    expect( | 
| 370 | 
            +
                    expect(vagrant).to receive(:get_domain_name).with(host).and_return('labs.lan')
         | 
| 371 | 
            +
                    expect(vagrant).to receive(:set_etc_hosts).with(host,
         | 
| 372 | 
            +
                                                                    "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
         | 
| 371 373 | 
             
                  end
         | 
| 372 374 |  | 
| 373 | 
            -
                  vagrant.hack_etc_hosts( | 
| 374 | 
            -
             | 
| 375 | 
            +
                  vagrant.hack_etc_hosts(@hosts, options)
         | 
| 375 376 | 
             
                end
         | 
| 376 377 |  | 
| 377 378 | 
             
                context "can copy vagrant's key to root .ssh on each host" do
         | 
| 378 | 
            -
             | 
| 379 | 
            -
                  it "can copy to root on unix" do
         | 
| 379 | 
            +
                  it 'can copy to root on unix' do
         | 
| 380 380 | 
             
                    host = @hosts[0]
         | 
| 381 381 | 
             
                    host[:platform] = 'unix'
         | 
| 382 382 |  | 
| 383 | 
            -
                    expect( | 
| 384 | 
            -
                    expect( | 
| 385 | 
            -
                    expect( | 
| 386 | 
            -
             | 
| 387 | 
            -
                    vagrant.copy_ssh_to_root( host, options )
         | 
| 383 | 
            +
                    expect(Command).to receive(:new).with('sudo su -c "cp -r .ssh /root/."').once
         | 
| 384 | 
            +
                    expect(Command).to receive(:new).with('sudo fixfiles restore /root').once
         | 
| 385 | 
            +
                    expect(Command).to receive(:new).with('sudo selinuxenabled').once
         | 
| 388 386 |  | 
| 387 | 
            +
                    vagrant.copy_ssh_to_root(host, options)
         | 
| 389 388 | 
             
                  end
         | 
| 390 389 |  | 
| 391 | 
            -
                  it  | 
| 390 | 
            +
                  it 'can copy to Administrator on windows' do
         | 
| 392 391 | 
             
                    host = @hosts[0]
         | 
| 393 392 | 
             
                    host[:platform] = 'windows'
         | 
| 394 | 
            -
                    expect( | 
| 393 | 
            +
                    expect(host).to receive(:is_cygwin?).and_return(true)
         | 
| 395 394 |  | 
| 396 | 
            -
                    expect( | 
| 397 | 
            -
                    expect( | 
| 398 | 
            -
                    expect( | 
| 395 | 
            +
                    expect(Command).to_not receive(:new).with('sudo fixfiles restore /root')
         | 
| 396 | 
            +
                    expect(Command).to receive(:new).with('cp -r .ssh /cygdrive/c/Users/Administrator/.').once
         | 
| 397 | 
            +
                    expect(Command).to receive(:new).with('chown -R Administrator /cygdrive/c/Users/Administrator/.ssh').once
         | 
| 399 398 |  | 
| 400 399 | 
             
                    # This is checked on all platforms since Linux isn't called out specifically in the code
         | 
| 401 400 | 
             
                    # If this fails, nothing further is activated
         | 
| 402 401 | 
             
                    result = Beaker::Result.new(host, '')
         | 
| 403 402 | 
             
                    result.exit_code = 1
         | 
| 404 | 
            -
                    expect( | 
| 405 | 
            -
                    allow( | 
| 406 | 
            -
             | 
| 407 | 
            -
                    vagrant.copy_ssh_to_root( host, options )
         | 
| 403 | 
            +
                    expect(Command).to receive(:new).with('sudo selinuxenabled')
         | 
| 404 | 
            +
                    allow(host).to receive(:exec).and_return(result)
         | 
| 408 405 |  | 
| 406 | 
            +
                    vagrant.copy_ssh_to_root(host, options)
         | 
| 409 407 | 
             
                  end
         | 
| 410 408 | 
             
                end
         | 
| 411 409 |  | 
| 412 | 
            -
                describe  | 
| 413 | 
            -
                  let( | 
| 410 | 
            +
                describe 'set_ssh_config' do
         | 
| 411 | 
            +
                  let(:out) do
         | 
| 414 412 | 
             
                    <<-CONFIG
         | 
| 415 413 | 
             
                    Host #{name}
         | 
| 416 414 | 
             
                      HostName 127.0.0.1
         | 
| @@ -423,9 +421,9 @@ EOF | |
| 423 421 | 
             
                      IdentitiesOnly yes
         | 
| 424 422 | 
             
                    CONFIG
         | 
| 425 423 | 
             
                  end
         | 
| 426 | 
            -
                  let( | 
| 427 | 
            -
                  let( | 
| 428 | 
            -
                  let( | 
| 424 | 
            +
                  let(:host) { @hosts[0] }
         | 
| 425 | 
            +
                  let(:name) { host.name }
         | 
| 426 | 
            +
                  let(:override_options) { {} }
         | 
| 429 427 |  | 
| 430 428 | 
             
                  before :each do
         | 
| 431 429 | 
             
                    # FakeFS is just broken with Tempfile
         | 
| @@ -433,11 +431,12 @@ EOF | |
| 433 431 | 
             
                    Dir.mktmpdir do |dir|
         | 
| 434 432 | 
             
                      vagrant.instance_variable_get(:@options).merge!(override_options)
         | 
| 435 433 | 
             
                      vagrant.instance_variable_set(:@vagrant_path, dir)
         | 
| 436 | 
            -
                      state = double( | 
| 437 | 
            -
                      allow( | 
| 438 | 
            -
                      allow( | 
| 434 | 
            +
                      state = double('state')
         | 
| 435 | 
            +
                      allow(state).to receive(:success?).and_return(true)
         | 
| 436 | 
            +
                      allow(Open3).to receive(:capture3).with({ 'RUBYLIB' => '', 'RUBYOPT' => '' }, 'vagrant', 'ssh-config',
         | 
| 437 | 
            +
                                                              name).and_return([out, '', state])
         | 
| 439 438 |  | 
| 440 | 
            -
                      vagrant.set_ssh_config( | 
| 439 | 
            +
                      vagrant.set_ssh_config(host, 'root')
         | 
| 441 440 | 
             
                    end
         | 
| 442 441 | 
             
                  end
         | 
| 443 442 |  | 
| @@ -454,13 +453,13 @@ EOF | |
| 454 453 | 
             
                    expect(host['ssh'][:keys_only]).to be === false
         | 
| 455 454 | 
             
                  end
         | 
| 456 455 |  | 
| 457 | 
            -
                  context  | 
| 456 | 
            +
                  context 'when :forward_ssh_agent is false' do
         | 
| 458 457 | 
             
                    let(:override_options) do
         | 
| 459 | 
            -
                      {forward_ssh_agent: false}
         | 
| 458 | 
            +
                      { forward_ssh_agent: false }
         | 
| 460 459 | 
             
                    end
         | 
| 461 460 |  | 
| 462 | 
            -
                    it  | 
| 463 | 
            -
                      expect( | 
| 461 | 
            +
                    it 'should keep IdentitiesOnly to yes' do
         | 
| 462 | 
            +
                      expect(host['ssh'][:keys_only]).to be === true
         | 
| 464 463 | 
             
                    end
         | 
| 465 464 | 
             
                  end
         | 
| 466 465 | 
             
                end
         | 
| @@ -517,87 +516,80 @@ EOF | |
| 517 516 | 
             
                  end
         | 
| 518 517 | 
             
                end
         | 
| 519 518 |  | 
| 520 | 
            -
                describe  | 
| 521 | 
            -
             | 
| 519 | 
            +
                describe 'provisioning and cleanup' do
         | 
| 522 520 | 
             
                  before :each do
         | 
| 523 | 
            -
                    expect( | 
| 521 | 
            +
                    expect(vagrant).to receive(:vagrant_cmd).with('up').once
         | 
| 524 522 | 
             
                    @hosts.each do |host|
         | 
| 525 523 | 
             
                      host_prev_name = host['user']
         | 
| 526 | 
            -
                      expect( | 
| 527 | 
            -
                      expect( | 
| 528 | 
            -
                      expect( | 
| 524 | 
            +
                      expect(vagrant).to receive(:set_ssh_config).with(host, 'vagrant').once
         | 
| 525 | 
            +
                      expect(vagrant).to receive(:copy_ssh_to_root).with(host, options).once
         | 
| 526 | 
            +
                      expect(vagrant).to receive(:set_ssh_config).with(host, host_prev_name).once
         | 
| 529 527 | 
             
                    end
         | 
| 530 | 
            -
                    expect( | 
| 528 | 
            +
                    expect(vagrant).to receive(:hack_etc_hosts).with(@hosts, options).once
         | 
| 531 529 | 
             
                  end
         | 
| 532 530 |  | 
| 533 | 
            -
                  it  | 
| 534 | 
            -
                    options = vagrant.instance_variable_get( | 
| 535 | 
            -
                    expect( | 
| 536 | 
            -
                    expect( | 
| 531 | 
            +
                  it 'can provision a set of hosts' do
         | 
| 532 | 
            +
                    options = vagrant.instance_variable_get(:@options)
         | 
| 533 | 
            +
                    expect(vagrant).to receive(:make_vfile).with(@hosts, options).once
         | 
| 534 | 
            +
                    expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').never
         | 
| 537 535 | 
             
                    vagrant.provision
         | 
| 538 536 | 
             
                  end
         | 
| 539 537 |  | 
| 540 | 
            -
                  it  | 
| 541 | 
            -
                    vagrant.make_vfile( | 
| 542 | 
            -
                    expect( | 
| 538 | 
            +
                  it 'destroys an existing set of hosts before provisioning' do
         | 
| 539 | 
            +
                    vagrant.make_vfile(@hosts)
         | 
| 540 | 
            +
                    expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once
         | 
| 543 541 | 
             
                    vagrant.provision
         | 
| 544 542 | 
             
                  end
         | 
| 545 543 |  | 
| 546 | 
            -
                  it  | 
| 544 | 
            +
                  it 'notifies user of failed provision' do
         | 
| 547 545 | 
             
                    vagrant.provision
         | 
| 548 | 
            -
                    expect( | 
| 549 | 
            -
                    expect( | 
| 550 | 
            -
                    expect{ vagrant.provision }.to raise_error( | 
| 546 | 
            +
                    expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').and_raise(RuntimeError)
         | 
| 547 | 
            +
                    expect(options['logger']).to receive(:debug).with(/Vagrantfile/)
         | 
| 548 | 
            +
                    expect { vagrant.provision }.to raise_error(RuntimeError)
         | 
| 551 549 | 
             
                  end
         | 
| 552 550 |  | 
| 553 | 
            -
                  it  | 
| 554 | 
            -
                    expect( | 
| 555 | 
            -
                    expect( | 
| 551 | 
            +
                  it 'can cleanup' do
         | 
| 552 | 
            +
                    expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once
         | 
| 553 | 
            +
                    expect(FileUtils).to receive(:rm_rf).once
         | 
| 556 554 |  | 
| 557 555 | 
             
                    vagrant.provision
         | 
| 558 556 | 
             
                    vagrant.cleanup
         | 
| 559 | 
            -
             | 
| 560 557 | 
             
                  end
         | 
| 561 | 
            -
             | 
| 562 558 | 
             
                end
         | 
| 563 559 |  | 
| 564 | 
            -
                describe  | 
| 560 | 
            +
                describe 'provisioning and cleanup on windows' do
         | 
| 565 561 | 
             
                  before :each do
         | 
| 566 | 
            -
                    expect( | 
| 562 | 
            +
                    expect(vagrant).to receive(:vagrant_cmd).with('up').once
         | 
| 567 563 | 
             
                    @hosts.each do |host|
         | 
| 568 564 | 
             
                      host[:platform] = 'windows'
         | 
| 569 565 | 
             
                      host_prev_name = host['user']
         | 
| 570 | 
            -
                      expect( | 
| 571 | 
            -
                      expect( | 
| 572 | 
            -
                      expect( | 
| 566 | 
            +
                      expect(vagrant).not_to receive(:set_ssh_config).with(host, 'vagrant')
         | 
| 567 | 
            +
                      expect(vagrant).not_to receive(:copy_ssh_to_root).with(host, options)
         | 
| 568 | 
            +
                      expect(vagrant).to receive(:set_ssh_config).with(host, host_prev_name).once
         | 
| 573 569 | 
             
                    end
         | 
| 574 | 
            -
                    expect( | 
| 570 | 
            +
                    expect(vagrant).to receive(:hack_etc_hosts).with(@hosts, options).once
         | 
| 575 571 | 
             
                  end
         | 
| 576 572 |  | 
| 577 | 
            -
                  it  | 
| 578 | 
            -
                    options = vagrant.instance_variable_get( | 
| 579 | 
            -
                    expect( | 
| 580 | 
            -
                    expect( | 
| 573 | 
            +
                  it 'can provision a set of hosts' do
         | 
| 574 | 
            +
                    options = vagrant.instance_variable_get(:@options)
         | 
| 575 | 
            +
                    expect(vagrant).to receive(:make_vfile).with(@hosts, options).once
         | 
| 576 | 
            +
                    expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').never
         | 
| 581 577 | 
             
                    vagrant.provision
         | 
| 582 578 | 
             
                  end
         | 
| 583 579 |  | 
| 584 | 
            -
                  it  | 
| 585 | 
            -
                    vagrant.make_vfile( | 
| 586 | 
            -
                    expect( | 
| 580 | 
            +
                  it 'destroys an existing set of hosts before provisioning' do
         | 
| 581 | 
            +
                    vagrant.make_vfile(@hosts)
         | 
| 582 | 
            +
                    expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once
         | 
| 587 583 | 
             
                    vagrant.provision
         | 
| 588 584 | 
             
                  end
         | 
| 589 585 |  | 
| 590 | 
            -
                  it  | 
| 591 | 
            -
                    expect( | 
| 592 | 
            -
                    expect( | 
| 586 | 
            +
                  it 'can cleanup' do
         | 
| 587 | 
            +
                    expect(vagrant).to receive(:vagrant_cmd).with('destroy --force').once
         | 
| 588 | 
            +
                    expect(FileUtils).to receive(:rm_rf).once
         | 
| 593 589 |  | 
| 594 590 | 
             
                    vagrant.provision
         | 
| 595 591 | 
             
                    vagrant.cleanup
         | 
| 596 | 
            -
             | 
| 597 592 | 
             
                  end
         | 
| 598 | 
            -
             | 
| 599 593 | 
             
                end
         | 
| 600 | 
            -
             | 
| 601 594 | 
             
              end
         | 
| 602 | 
            -
             | 
| 603 595 | 
             
            end
         |