beaker 2.3.0 → 2.4.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 +8 -8
- data/HISTORY.md +366 -2
- data/ext/completion/beaker-completion.bash +1 -1
- data/lib/beaker.rb +1 -1
- data/lib/beaker/answers.rb +3 -1
- data/lib/beaker/answers/version40.rb +42 -0
- data/lib/beaker/cli.rb +0 -2
- data/lib/beaker/command.rb +10 -2
- data/lib/beaker/dsl/ezbake_utils.rb +195 -157
- data/lib/beaker/dsl/helpers.rb +9 -6
- data/lib/beaker/dsl/install_utils.rb +22 -8
- data/lib/beaker/dsl/structure.rb +67 -0
- data/lib/beaker/host.rb +14 -4
- data/lib/beaker/host/mac.rb +4 -0
- data/lib/beaker/host/pswindows.rb +79 -0
- data/lib/beaker/host/pswindows/exec.rb +29 -0
- data/lib/beaker/host/pswindows/file.rb +15 -0
- data/lib/beaker/host/pswindows/group.rb +36 -0
- data/lib/beaker/host/pswindows/pkg.rb +47 -0
- data/lib/beaker/host/pswindows/user.rb +32 -0
- data/lib/beaker/host/unix.rb +16 -6
- data/lib/beaker/host/windows.rb +6 -2
- data/lib/beaker/host_prebuilt_steps.rb +2 -0
- data/lib/beaker/hypervisor.rb +3 -1
- data/lib/beaker/hypervisor/aws_sdk.rb +6 -1
- data/lib/beaker/hypervisor/docker.rb +6 -1
- data/lib/beaker/hypervisor/vagrant.rb +1 -1
- data/lib/beaker/hypervisor/vagrant_parallels.rb +18 -0
- data/lib/beaker/logger.rb +8 -1
- data/lib/beaker/logger_junit.rb +157 -0
- data/lib/beaker/network_manager.rb +28 -0
- data/lib/beaker/options/presets.rb +6 -0
- data/lib/beaker/test_suite.rb +65 -136
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/answers_spec.rb +74 -0
- data/spec/beaker/dsl/ezbake_utils_spec.rb +167 -126
- data/spec/beaker/dsl/install_utils_spec.rb +5 -4
- data/spec/beaker/dsl/structure_spec.rb +28 -1
- data/spec/beaker/host_prebuilt_steps_spec.rb +2 -1
- data/spec/beaker/host_spec.rb +1 -7
- data/spec/beaker/hypervisor/docker_spec.rb +19 -1
- data/spec/beaker/hypervisor/vagrant_parallels_spec.rb +44 -0
- data/spec/beaker/logger_junit_spec.rb +93 -0
- data/spec/beaker/network_manager_spec.rb +52 -0
- metadata +14 -2
| @@ -547,14 +547,15 @@ describe ClassMixedWithDSLInstallUtils do | |
| 547 547 | 
             
                  let(:platform) { "windows-2008r2-i386" }
         | 
| 548 548 | 
             
                  it 'installs specific version of puppet when passed :version' do
         | 
| 549 549 | 
             
                    allow(subject).to receive(:link_exists?).and_return( true )
         | 
| 550 | 
            -
                    expect(subject).to receive(:on).with(hosts[0], 'curl -O http://downloads.puppetlabs.com/windows/puppet-3000.msi')
         | 
| 551 | 
            -
                    expect(subject).to receive(:on).with(hosts[0], ' | 
| 550 | 
            +
                    expect(subject).to receive(:on).with(hosts[0], 'curl -O /cygdrive/c/Windows/Temp/puppet-3000.msi http://downloads.puppetlabs.com/windows/puppet-3000.msi')
         | 
| 551 | 
            +
                    expect(subject).to receive(:on).with(hosts[0], " echo 'export PATH=$PATH:\"/cygdrive/c/Program Files (x86)/Puppet Labs/Puppet/bin\":\"/cygdrive/c/Program Files/Puppet Labs/Puppet/bin\"' > /etc/bash.bashrc ")
         | 
| 552 | 
            +
                    expect(subject).to receive(:on).with(hosts[0], 'msiexec /qn /i /cygdrive/c/Windows/Temp/puppet-3000.msi')
         | 
| 552 553 | 
             
                    subject.install_puppet(:version => '3000')
         | 
| 553 554 | 
             
                  end
         | 
| 554 555 | 
             
                  it 'installs from custom url when passed :win_download_url' do
         | 
| 555 556 | 
             
                    allow(subject).to receive(:link_exists?).and_return( true )
         | 
| 556 | 
            -
                    expect(subject).to receive(:on).with(hosts[0], 'curl -O http://nightlies.puppetlabs.com/puppet-latest/repos/windows/puppet-3000.msi')
         | 
| 557 | 
            -
                    expect(subject).to receive(:on).with(hosts[0], 'msiexec /qn /i puppet-3000.msi')
         | 
| 557 | 
            +
                    expect(subject).to receive(:on).with(hosts[0], 'curl -O /cygdrive/c/Windows/Temp/puppet-3000.msi http://nightlies.puppetlabs.com/puppet-latest/repos/windows/puppet-3000.msi')
         | 
| 558 | 
            +
                    expect(subject).to receive(:on).with(hosts[0], 'msiexec /qn /i /cygdrive/c/Windows/Temp/puppet-3000.msi')
         | 
| 558 559 | 
             
                    subject.install_puppet( :version => '3000', :win_download_url => 'http://nightlies.puppetlabs.com/puppet-latest/repos/windows' )
         | 
| 559 560 | 
             
                  end
         | 
| 560 561 | 
             
                end
         | 
| @@ -5,7 +5,8 @@ class ClassMixedWithDSLStructure | |
| 5 5 | 
             
            end
         | 
| 6 6 |  | 
| 7 7 | 
             
            describe ClassMixedWithDSLStructure do
         | 
| 8 | 
            -
               | 
| 8 | 
            +
              include Beaker::DSL::Assertions
         | 
| 9 | 
            +
              let(:logger) { double }
         | 
| 9 10 | 
             
              describe '#step' do
         | 
| 10 11 | 
             
                it 'requires a name' do
         | 
| 11 12 | 
             
                  expect { subject.step do; end }.to raise_error ArgumentError
         | 
| @@ -57,4 +58,30 @@ describe ClassMixedWithDSLStructure do | |
| 57 58 | 
             
                  subject.teardown &block
         | 
| 58 59 | 
             
                end
         | 
| 59 60 | 
             
              end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              describe '#expect_failure' do
         | 
| 63 | 
            +
                it 'passes when a MiniTest assertion is raised' do
         | 
| 64 | 
            +
                  expect( subject ).to receive( :logger ).and_return( logger )
         | 
| 65 | 
            +
                  expect( logger ).to receive( :notify )
         | 
| 66 | 
            +
                  block = lambda { assert_equal('1', '2', '1 should not equal 2') }
         | 
| 67 | 
            +
                  expect{ subject.expect_failure 'this is an expected failure', &block }.to_not raise_error
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                it 'passes when a Beaker assertion is raised' do
         | 
| 71 | 
            +
                  expect( subject ).to receive( :logger ).and_return( logger )
         | 
| 72 | 
            +
                  expect( logger ).to receive( :notify )
         | 
| 73 | 
            +
                  block = lambda { assert_no_match('1', '1', '1 and 1 should not match') }
         | 
| 74 | 
            +
                  expect{ subject.expect_failure 'this is an expected failure', &block }.to_not raise_error
         | 
| 75 | 
            +
                end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                it 'fails when a non-Beaker, non-MiniTest assertion is raised' do
         | 
| 78 | 
            +
                  block = lambda { raise 'not a Beaker or MiniTest error' }
         | 
| 79 | 
            +
                  expect{ subject.expect_failure 'this has a non-Beaker, non-MiniTest exception', &block }.to raise_error(RuntimeError, /not a Beaker or MiniTest error/)
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                it 'fails when no assertion is raised' do
         | 
| 83 | 
            +
                  block = lambda { assert_equal('1', '1', '1 should equal 1') }
         | 
| 84 | 
            +
                  expect{ subject.expect_failure 'this has no failure', &block }.to raise_error(RuntimeError, /An assertion was expected to fail, but passed/)
         | 
| 85 | 
            +
                end
         | 
| 86 | 
            +
              end
         | 
| 60 87 | 
             
            end
         | 
| @@ -513,13 +513,14 @@ describe Beaker do | |
| 513 513 | 
             
                  expect( Beaker::Command ).to receive( :new ).with( "mkdir -p #{Pathname.new(host[:ssh_env_file]).dirname}" ).once
         | 
| 514 514 | 
             
                  expect( Beaker::Command ).to receive( :new ).with( "chmod 0600 #{Pathname.new(host[:ssh_env_file]).dirname}" ).once
         | 
| 515 515 | 
             
                  expect( Beaker::Command ).to receive( :new ).with( "touch #{host[:ssh_env_file]}" ).once
         | 
| 516 | 
            +
                  expect( Beaker::Command ).to receive( :new ).with( "cat #{host[:ssh_env_file]}" ).once
         | 
| 516 517 | 
             
                  expect( host ).to receive( :add_env_var ).with( 'RUBYLIB', '$RUBYLIB' ).once
         | 
| 517 518 | 
             
                  expect( host ).to receive( :add_env_var ).with( 'PATH', '$PATH' ).once
         | 
| 518 519 | 
             
                  opts.each_pair do |key, value|
         | 
| 519 520 | 
             
                    expect( host ).to receive( :add_env_var ).with( key, value ).once
         | 
| 520 521 | 
             
                  end
         | 
| 521 522 | 
             
                  expect( host ).to receive( :add_env_var ).with( 'CYGWIN', 'nodosfilewarning' ).once if platform_name =~ /windows/
         | 
| 522 | 
            -
                  expect( host ).to receive( :exec ).exactly( host_specific_commands_array.length +  | 
| 523 | 
            +
                  expect( host ).to receive( :exec ).exactly( host_specific_commands_array.length + 4 ).times
         | 
| 523 524 |  | 
| 524 525 | 
             
                  subject.set_env(host, options.merge( opts ))
         | 
| 525 526 | 
             
                end
         | 
    
        data/spec/beaker/host_spec.rb
    CHANGED
    
    | @@ -64,16 +64,10 @@ module Beaker | |
| 64 64 | 
             
                    expect(host.is_using_passenger?).to be_falsy
         | 
| 65 65 | 
             
                  end
         | 
| 66 66 |  | 
| 67 | 
            -
                  it 'sets the paths correctly for an AIO  | 
| 67 | 
            +
                  it 'sets the paths correctly for an AIO host' do
         | 
| 68 68 | 
             
                    options['type'] = 'aio'
         | 
| 69 69 | 
             
                    expect(host['puppetvardir']).to be === Unix::Host::aio_defaults[:puppetvardir]
         | 
| 70 70 | 
             
                  end
         | 
| 71 | 
            -
             | 
| 72 | 
            -
                  it 'sets the paths correctly for an AIO non-agent host' do
         | 
| 73 | 
            -
                    options['type'] = 'aio'
         | 
| 74 | 
            -
                    options['roles'] = ['master']
         | 
| 75 | 
            -
                    expect(host['puppetvardir']).to be === Unix::Host::foss_defaults[:puppetvardir]
         | 
| 76 | 
            -
                  end
         | 
| 77 71 | 
             
                end
         | 
| 78 72 |  | 
| 79 73 | 
             
                describe "uses_passenger!" do
         | 
| @@ -67,13 +67,26 @@ module Beaker | |
| 67 67 | 
             
                  allow( ::Docker ).to receive(:options).and_return(docker_options)
         | 
| 68 68 | 
             
                  allow( ::Docker ).to receive(:options=)
         | 
| 69 69 | 
             
                  allow( ::Docker ).to receive(:logger=)
         | 
| 70 | 
            -
                  allow( ::Docker ).to receive(:validate_version!)
         | 
| 71 70 | 
             
                  allow( ::Docker::Image ).to receive(:build).and_return(image)
         | 
| 72 71 | 
             
                  allow( ::Docker::Container ).to receive(:create).and_return(container)
         | 
| 73 72 | 
             
                  allow_any_instance_of( ::Docker::Container ).to receive(:start)
         | 
| 74 73 | 
             
                end
         | 
| 75 74 |  | 
| 75 | 
            +
                describe '#initialize, failure to validate' do
         | 
| 76 | 
            +
                  before :each do
         | 
| 77 | 
            +
                    require 'excon'
         | 
| 78 | 
            +
                    allow( ::Docker ).to receive(:validate_version!).and_raise(Excon::Errors::SocketError.new( StandardError.new('oops') ))
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
                  it 'should fail when docker not present' do
         | 
| 81 | 
            +
                    expect { docker }.to raise_error(RuntimeError, /Docker instance not found/)
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
             | 
| 76 85 | 
             
                describe '#initialize' do
         | 
| 86 | 
            +
                  before :each do
         | 
| 87 | 
            +
                    allow( ::Docker ).to receive(:validate_version!)
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
             | 
| 77 90 | 
             
                  it 'should require the docker gem' do
         | 
| 78 91 | 
             
                    expect_any_instance_of( ::Beaker::Docker ).to receive(:require).with('docker').once
         | 
| 79 92 |  | 
| @@ -116,6 +129,7 @@ module Beaker | |
| 116 129 |  | 
| 117 130 | 
             
                describe '#provision' do
         | 
| 118 131 | 
             
                  before :each do
         | 
| 132 | 
            +
                    allow( ::Docker ).to receive(:validate_version!)
         | 
| 119 133 | 
             
                    allow( docker ).to receive(:dockerfile_for)
         | 
| 120 134 | 
             
                  end
         | 
| 121 135 |  | 
| @@ -195,6 +209,7 @@ module Beaker | |
| 195 209 | 
             
                describe '#cleanup' do
         | 
| 196 210 | 
             
                  before :each do
         | 
| 197 211 | 
             
                    # get into a state where there's something to clean
         | 
| 212 | 
            +
                    allow( ::Docker ).to receive(:validate_version!)
         | 
| 198 213 | 
             
                    allow( docker ).to receive(:dockerfile_for)
         | 
| 199 214 | 
             
                    docker.provision
         | 
| 200 215 | 
             
                  end
         | 
| @@ -238,6 +253,9 @@ module Beaker | |
| 238 253 | 
             
                end
         | 
| 239 254 |  | 
| 240 255 | 
             
                describe '#dockerfile_for' do
         | 
| 256 | 
            +
                  before :each do
         | 
| 257 | 
            +
                    allow( ::Docker ).to receive(:validate_version!)
         | 
| 258 | 
            +
                  end
         | 
| 241 259 | 
             
                  it 'should raise on an unsupported platform' do
         | 
| 242 260 | 
             
                    expect { docker.send(:dockerfile_for, {'platform' => 'a_sidewalk' }) }.to raise_error(/platform a_sidewalk not yet supported on docker/)
         | 
| 243 261 | 
             
                  end
         | 
| @@ -0,0 +1,44 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Beaker::VagrantParallels do
         | 
| 4 | 
            +
              let( :options ) { make_opts.merge({ :hosts_file => 'sample.cfg', 'logger' => double().as_null_object }) }
         | 
| 5 | 
            +
              let( :vagrant ) { Beaker::VagrantParallels.new( @hosts, options ) }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              before :each do
         | 
| 8 | 
            +
                @hosts = make_hosts()
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              it "uses the parallels provider for provisioning" do
         | 
| 12 | 
            +
                @hosts.each do |host|
         | 
| 13 | 
            +
                  host_prev_name = host['user']
         | 
| 14 | 
            +
                  expect( vagrant ).to receive( :set_ssh_config ).with( host, 'vagrant' ).once
         | 
| 15 | 
            +
                  expect( vagrant ).to receive( :copy_ssh_to_root ).with( host, options ).once
         | 
| 16 | 
            +
                  expect( vagrant ).to receive( :set_ssh_config ).with( host, host_prev_name ).once
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
                expect( vagrant ).to receive( :hack_etc_hosts ).with( @hosts, options ).once
         | 
| 19 | 
            +
                expect( vagrant ).to receive( :vagrant_cmd ).with( "up --provider parallels" ).once
         | 
| 20 | 
            +
                vagrant.provision
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              it "can make a Vagranfile for a set of hosts" do
         | 
| 24 | 
            +
                path = vagrant.instance_variable_get( :@vagrant_path )
         | 
| 25 | 
            +
                allow( vagrant ).to receive( :randmac ).and_return( "0123456789" )
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                vagrant.make_vfile( @hosts )
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                vagrantfile = File.read( File.expand_path( File.join( path, 'Vagrantfile' )))
         | 
| 30 | 
            +
                expect( vagrantfile ).to include( %Q{    v.vm.provider :parallels do |prl|\n      prl.optimize_power_consumption = false\n      prl.memory = '1024'\n    end})
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              it "can disable the auto-update functionality of the Parallels Guest Tools" do
         | 
| 34 | 
            +
                options.merge!({ :prl_update_guest_tools => 'disable' })
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                vfile_section = vagrant.class.provider_vfile_section( @hosts.first, options )
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                match = vfile_section.match(/prl.update_guest_tools = false/)
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                expect( match ).to_not be nil
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            end
         | 
| @@ -0,0 +1,93 @@ | |
| 1 | 
            +
            # encoding: UTF-8
         | 
| 2 | 
            +
            require 'spec_helper'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Beaker
         | 
| 5 | 
            +
              describe LoggerJunit do
         | 
| 6 | 
            +
                let( :xml_file ) { '/fake/file/location1' }
         | 
| 7 | 
            +
                let( :stylesheet ) { '/fake/file/location2' }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                describe '#is_valid_xml' do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  it 'rejects all invalid values' do
         | 
| 12 | 
            +
                    invalid_values = [0x8, 0x10, 0xB, 0x0019, 0xD800, 0xDFFF, 0xFFFE, 0x99999, 0x110000]
         | 
| 13 | 
            +
                    invalid_values.each do |value|
         | 
| 14 | 
            +
                      expect( LoggerJunit.is_valid_xml(value) ).to be === false
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  it 'accepts valid values' do
         | 
| 19 | 
            +
                    valid_values = [0x9, 0xA, 0x0020, 0xD7FF, 0xE000, 0xFFFD, 0x100000, 0x10FFFF]
         | 
| 20 | 
            +
                    valid_values.each do |value|
         | 
| 21 | 
            +
                      expect( LoggerJunit.is_valid_xml(value) ).to be === true
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                describe '#escape_invalid_xml_chars' do
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  it 'escapes invalid xml characters correctly' do
         | 
| 30 | 
            +
                    testing_string = 'pants'
         | 
| 31 | 
            +
                    testing_string << 0x8
         | 
| 32 | 
            +
                    expect( LoggerJunit.escape_invalid_xml_chars(testing_string) ).to be === 'pants\8'
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  it 'leaves a string of all valid xml characters alone' do
         | 
| 36 | 
            +
                    testing_string = 'pants man, pants!'
         | 
| 37 | 
            +
                    expect( LoggerJunit.escape_invalid_xml_chars(testing_string) ).to be === testing_string
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                describe '#copy_stylesheet_into_xml_dir' do
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  it 'copies the stylesheet into the correct location' do
         | 
| 45 | 
            +
                    allow( File ).to receive( :file? ) { false }
         | 
| 46 | 
            +
                    correct_location = File.join(File.dirname(xml_file), File.basename(stylesheet))
         | 
| 47 | 
            +
                    expect( FileUtils ).to receive( :copy ).with( stylesheet, correct_location )
         | 
| 48 | 
            +
                    LoggerJunit.copy_stylesheet_into_xml_dir(stylesheet, xml_file)
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  it 'skips action if the file doesn\'t exist' do
         | 
| 52 | 
            +
                    allow( File ).to receive( :file? ) { true }
         | 
| 53 | 
            +
                    expect( FileUtils ).not_to receive( :copy )
         | 
| 54 | 
            +
                    LoggerJunit.copy_stylesheet_into_xml_dir(stylesheet, xml_file)
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                describe '#finish' do
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  it 'opens the given file for writing, and writes the doc to it' do
         | 
| 62 | 
            +
                    mock_doc = Object.new
         | 
| 63 | 
            +
                    doc_xml = 'flibbity-floo'
         | 
| 64 | 
            +
                    allow( mock_doc ).to receive( :to_xml ) { doc_xml }
         | 
| 65 | 
            +
                    mock_file_handle = Object.new
         | 
| 66 | 
            +
                    expect( mock_file_handle ).to receive( :write ).with( doc_xml )
         | 
| 67 | 
            +
                    expect( File ).to receive( :open ).with( xml_file, 'w' ).and_yield( mock_file_handle )
         | 
| 68 | 
            +
                    LoggerJunit.finish(mock_doc, xml_file)
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                describe '#write_xml' do
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  it 'throws an error with 1-arity in the given block' do
         | 
| 76 | 
            +
                    allow( LoggerJunit ).to receive( :get_xml_contents )
         | 
| 77 | 
            +
                    expect{ LoggerJunit.write_xml(xml_file, stylesheet) do |hey| end }.to raise_error(ArgumentError)
         | 
| 78 | 
            +
                  end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                  it 'doesn\'t throw an error with 2-arity in the given block' do
         | 
| 81 | 
            +
                    allow( LoggerJunit ).to receive( :get_xml_contents )
         | 
| 82 | 
            +
                    allow( LoggerJunit ).to receive( :finish )
         | 
| 83 | 
            +
                    expect{ LoggerJunit.write_xml(xml_file, stylesheet) do |hey1, hey2| end }.not_to raise_error
         | 
| 84 | 
            +
                  end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  it 'throws an error with 3-arity in the given block' do
         | 
| 87 | 
            +
                    allow( LoggerJunit ).to receive( :get_xml_contents )
         | 
| 88 | 
            +
                    expect{ LoggerJunit.write_xml(xml_file, stylesheet) do |hey1, hey2, hey3| end }.to raise_error(ArgumentError)
         | 
| 89 | 
            +
                  end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
            end
         | 
| @@ -0,0 +1,52 @@ | |
| 1 | 
            +
            # encoding: UTF-8
         | 
| 2 | 
            +
            require 'spec_helper'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Beaker
         | 
| 5 | 
            +
              describe NetworkManager do
         | 
| 6 | 
            +
                let( :mock_provisioning_logger ) {
         | 
| 7 | 
            +
                  mock_provisioning_logger = Object.new
         | 
| 8 | 
            +
                  allow( mock_provisioning_logger ).to receive( :notify )
         | 
| 9 | 
            +
                  mock_provisioning_logger }
         | 
| 10 | 
            +
                let( :options ) { make_opts.merge({ 'logger' => double().as_null_object, :logger_sut => mock_provisioning_logger }) }
         | 
| 11 | 
            +
                let( :network_manager ) { NetworkManager.new(options, options[:logger]) }
         | 
| 12 | 
            +
                let( :hosts ) { make_hosts }
         | 
| 13 | 
            +
                let( :host ) { hosts[0] }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                describe '#log_sut_event' do
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  it 'creates the correct content for an event' do
         | 
| 18 | 
            +
                    log_line = network_manager.log_sut_event host, true
         | 
| 19 | 
            +
                    pieces = log_line.split("\t")
         | 
| 20 | 
            +
                    hypervisor_value = host['hypervisor'] ? host['hypervisor'] : ''
         | 
| 21 | 
            +
                    platform_value = host['platform'] ? host['platform'] : ''
         | 
| 22 | 
            +
                    expect( pieces[1] ).to be === '[+]'
         | 
| 23 | 
            +
                    expect( pieces[2] ).to be === hypervisor_value
         | 
| 24 | 
            +
                    expect( pieces[3] ).to be === platform_value
         | 
| 25 | 
            +
                    expect( pieces[4] ).to be === host.name
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  it 'follows the create parameter correctly' do
         | 
| 29 | 
            +
                    log_line = network_manager.log_sut_event host, true
         | 
| 30 | 
            +
                    pieces = log_line.split("\t")
         | 
| 31 | 
            +
                    expect( pieces[1] ).to be === '[+]'
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    log_line = network_manager.log_sut_event host, false
         | 
| 34 | 
            +
                    pieces = log_line.split("\t")
         | 
| 35 | 
            +
                    expect( pieces[1] ).to be === '[-]'
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  it 'sends the log line to the provisioning logger' do
         | 
| 39 | 
            +
                    nm = network_manager
         | 
| 40 | 
            +
                    options[:logger_sut] = mock_provisioning_logger
         | 
| 41 | 
            +
                    expect( mock_provisioning_logger ).to receive( :notify ).once
         | 
| 42 | 
            +
                    nm.log_sut_event host, true
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  it 'throws an error if the provisioning logger hasn\'t been created yet' do
         | 
| 46 | 
            +
                    nm = network_manager
         | 
| 47 | 
            +
                    options.delete(:logger_sut)
         | 
| 48 | 
            +
                    expect{ nm.log_sut_event(host, true) }.to raise_error(ArgumentError)
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: beaker
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Puppetlabs
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015- | 
| 11 | 
            +
            date: 2015-02-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rspec
         | 
| @@ -362,6 +362,7 @@ files: | |
| 362 362 | 
             
            - lib/beaker/answers/version30.rb
         | 
| 363 363 | 
             
            - lib/beaker/answers/version32.rb
         | 
| 364 364 | 
             
            - lib/beaker/answers/version34.rb
         | 
| 365 | 
            +
            - lib/beaker/answers/version40.rb
         | 
| 365 366 | 
             
            - lib/beaker/cli.rb
         | 
| 366 367 | 
             
            - lib/beaker/command.rb
         | 
| 367 368 | 
             
            - lib/beaker/command_factory.rb
         | 
| @@ -384,6 +385,12 @@ files: | |
| 384 385 | 
             
            - lib/beaker/host/mac.rb
         | 
| 385 386 | 
             
            - lib/beaker/host/mac/group.rb
         | 
| 386 387 | 
             
            - lib/beaker/host/mac/user.rb
         | 
| 388 | 
            +
            - lib/beaker/host/pswindows.rb
         | 
| 389 | 
            +
            - lib/beaker/host/pswindows/exec.rb
         | 
| 390 | 
            +
            - lib/beaker/host/pswindows/file.rb
         | 
| 391 | 
            +
            - lib/beaker/host/pswindows/group.rb
         | 
| 392 | 
            +
            - lib/beaker/host/pswindows/pkg.rb
         | 
| 393 | 
            +
            - lib/beaker/host/pswindows/user.rb
         | 
| 387 394 | 
             
            - lib/beaker/host/unix.rb
         | 
| 388 395 | 
             
            - lib/beaker/host/unix/exec.rb
         | 
| 389 396 | 
             
            - lib/beaker/host/unix/file.rb
         | 
| @@ -410,6 +417,7 @@ files: | |
| 410 417 | 
             
            - lib/beaker/hypervisor/vagrant.rb
         | 
| 411 418 | 
             
            - lib/beaker/hypervisor/vagrant_fusion.rb
         | 
| 412 419 | 
             
            - lib/beaker/hypervisor/vagrant_libvirt.rb
         | 
| 420 | 
            +
            - lib/beaker/hypervisor/vagrant_parallels.rb
         | 
| 413 421 | 
             
            - lib/beaker/hypervisor/vagrant_virtualbox.rb
         | 
| 414 422 | 
             
            - lib/beaker/hypervisor/vagrant_workstation.rb
         | 
| 415 423 | 
             
            - lib/beaker/hypervisor/vcloud.rb
         | 
| @@ -418,6 +426,7 @@ files: | |
| 418 426 | 
             
            - lib/beaker/hypervisor/vsphere_helper.rb
         | 
| 419 427 | 
             
            - lib/beaker/junit.xsl
         | 
| 420 428 | 
             
            - lib/beaker/logger.rb
         | 
| 429 | 
            +
            - lib/beaker/logger_junit.rb
         | 
| 421 430 | 
             
            - lib/beaker/network_manager.rb
         | 
| 422 431 | 
             
            - lib/beaker/options.rb
         | 
| 423 432 | 
             
            - lib/beaker/options/command_line_parser.rb
         | 
| @@ -468,6 +477,7 @@ files: | |
| 468 477 | 
             
            - spec/beaker/hypervisor/solaris_spec.rb
         | 
| 469 478 | 
             
            - spec/beaker/hypervisor/vagrant_fusion_spec.rb
         | 
| 470 479 | 
             
            - spec/beaker/hypervisor/vagrant_libvirt_spec.rb
         | 
| 480 | 
            +
            - spec/beaker/hypervisor/vagrant_parallels_spec.rb
         | 
| 471 481 | 
             
            - spec/beaker/hypervisor/vagrant_spec.rb
         | 
| 472 482 | 
             
            - spec/beaker/hypervisor/vagrant_virtualbox_spec.rb
         | 
| 473 483 | 
             
            - spec/beaker/hypervisor/vagrant_workstation_spec.rb
         | 
| @@ -475,7 +485,9 @@ files: | |
| 475 485 | 
             
            - spec/beaker/hypervisor/vcloud_spec.rb
         | 
| 476 486 | 
             
            - spec/beaker/hypervisor/vsphere_helper_spec.rb
         | 
| 477 487 | 
             
            - spec/beaker/hypervisor/vsphere_spec.rb
         | 
| 488 | 
            +
            - spec/beaker/logger_junit_spec.rb
         | 
| 478 489 | 
             
            - spec/beaker/logger_spec.rb
         | 
| 490 | 
            +
            - spec/beaker/network_manager_spec.rb
         | 
| 479 491 | 
             
            - spec/beaker/options/command_line_parser_spec.rb
         | 
| 480 492 | 
             
            - spec/beaker/options/data/badyaml.cfg
         | 
| 481 493 | 
             
            - spec/beaker/options/data/hosts.cfg
         |