1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
require 'spec_helper'
describe Specinfra::Backend::Ssh do
before(:all) do
set :backend, :ssh
end
after(:all) do
if Specinfra.configuration.instance_variable_defined?(:@ssh_options)
Specinfra.configuration.instance_variable_set(:@ssh_options, nil)
end
end
describe '#build_command' do
context 'with root user' do
before do
RSpec.configure do |c|
set :ssh_options, :user => 'root'
c.ssh = double(:ssh, Specinfra.configuration.ssh_options)
end
end
after do
RSpec.configure do |c|
c.ssh = nil
end
end
it 'should not prepend sudo' do
expect(Specinfra.backend.build_command('test -f /etc/passwd')).to eq '/bin/sh -c test\ -f\ /etc/passwd'
end
it 'should escape special characters' do
expect(Specinfra.backend.build_command('test ! -f /etc/selinux/config || (getenforce | grep -i -- disabled && grep -i -- ^SELINUX=disabled$ /etc/selinux/config)')).to eq '/bin/sh -c test\ \!\ -f\ /etc/selinux/config\ \|\|\ \(getenforce\ \|\ grep\ -i\ --\ disabled\ \&\&\ grep\ -i\ --\ \^SELINUX\=disabled\$\ /etc/selinux/config\)'
end
end
context 'with non-root user' do
before do
RSpec.configure do |c|
set :ssh_options, :user => 'foo'
c.ssh = double(:ssh, Specinfra.configuration.ssh_options)
end
end
after do
RSpec.configure do |c|
c.ssh = nil
end
end
it 'should prepend sudo' do
expect(Specinfra.backend.build_command('test -f /etc/passwd')).to eq %q{sudo -p 'Password: ' /bin/sh -c test\ -f\ /etc/passwd}
end
it 'should escape special characters' do
expect(Specinfra.backend.build_command('test ! -f /etc/selinux/config || (getenforce | grep -i -- disabled && grep -i -- ^SELINUX=disabled$ /etc/selinux/config)')).to eq %q{sudo -p 'Password: ' /bin/sh -c test\ \!\ -f\ /etc/selinux/config\ \|\|\ \(getenforce\ \|\ grep\ -i\ --\ disabled\ \&\&\ grep\ -i\ --\ \^SELINUX\=disabled\$\ /etc/selinux/config\)}
end
end
context 'with custom sudo path' do
before do
RSpec.configure do |c|
set :ssh_options, :user => 'foo'
c.ssh = double(:ssh, Specinfra.configuration.ssh_options)
c.sudo_path = '/usr/local/bin'
end
end
after do
RSpec.configure do |c|
c.ssh = nil
c.sudo_path = nil
end
end
it 'command pattern 1a' do
expect(Specinfra.backend.build_command('test -f /etc/passwd')).to eq %q{/usr/local/bin/sudo -p 'Password: ' /bin/sh -c test\ -f\ /etc/passwd}
end
it 'command pattern 2a' do
expect(Specinfra.backend.build_command('test ! -f /etc/selinux/config || (getenforce | grep -i -- disabled && grep -i -- ^SELINUX=disabled$ /etc/selinux/config)')).to eq %q{/usr/local/bin/sudo -p 'Password: ' /bin/sh -c test\ \!\ -f\ /etc/selinux/config\ \|\|\ \(getenforce\ \|\ grep\ -i\ --\ disabled\ \&\&\ grep\ -i\ --\ \^SELINUX\=disabled\$\ /etc/selinux/config\)}
end
end
context 'without sudo' do
before do
RSpec.configure do |c|
set :ssh_options, :user => 'foo'
c.ssh = double(:ssh, Specinfra.configuration.ssh_options)
c.disable_sudo = true
end
end
after do
RSpec.configure do |c|
c.ssh = nil
c.disable_sudo = false
end
end
it 'command pattern 1b' do
expect(Specinfra.backend.build_command('test -f /etc/passwd')).to eq '/bin/sh -c test\ -f\ /etc/passwd'
end
it 'command pattern 2b' do
expect(Specinfra.backend.build_command('test ! -f /etc/selinux/config || (getenforce | grep -i -- disabled && grep -i -- ^SELINUX=disabled$ /etc/selinux/config)')).to eq '/bin/sh -c test\ \!\ -f\ /etc/selinux/config\ \|\|\ \(getenforce\ \|\ grep\ -i\ --\ disabled\ \&\&\ grep\ -i\ --\ \^SELINUX\=disabled\$\ /etc/selinux/config\)'
end
end
context 'with sudo on alternative path' do
before do
RSpec.configure do |c|
set :ssh_options, :user => 'foo'
c.ssh = double(:ssh, Specinfra.configuration.ssh_options)
c.sudo_path = nil
end
end
after do
RSpec.configure do |c|
c.ssh = nil
c.sudo_options = nil
end
end
context 'command pattern 1a' do
subject { Specinfra.backend.build_command('test -f /etc/passwd') }
it { should eq %q{sudo -p 'Password: ' /bin/sh -c test\ -f\ /etc/passwd} }
end
context 'command pattern 2a' do
subject { Specinfra.backend.build_command('test ! -f /etc/selinux/config || (getenforce | grep -i -- disabled && grep -i -- ^SELINUX=disabled$ /etc/selinux/config)') }
it { should eq %q{sudo -p 'Password: ' /bin/sh -c test\ \!\ -f\ /etc/selinux/config\ \|\|\ \(getenforce\ \|\ grep\ -i\ --\ disabled\ \&\&\ grep\ -i\ --\ \^SELINUX\=disabled\$\ /etc/selinux/config\)} }
end
end
end
end
|