spec/transport_spec.rb in winrm-1.7.3 vs spec/transport_spec.rb in winrm-1.8.0

- old
+ new

@@ -1,124 +1,139 @@ -# encoding: UTF-8 -require 'rubyntlm' -require 'winrm/http/transport' - -describe WinRM::HTTP::HttpNegotiate, unit: true do - describe '#init' do - let(:endpoint) { 'some_endpoint' } - let(:domain) { 'some_domain' } - let(:user) { 'some_user' } - let(:password) { 'some_password' } - let(:options) { {} } - - context 'user is not domain prefixed' do - it 'does not pass a domain to the NTLM client' do - expect(Net::NTLM::Client).to receive(:new).with(user, password, options) - WinRM::HTTP::HttpNegotiate.new(endpoint, user, password, options) - end - end - - context 'user is domain prefixed' do - it 'passes prefixed domain to the NTLM client' do - expect(Net::NTLM::Client).to receive(:new) do |passed_user, passed_password, passed_options| - expect(passed_user).to eq user - expect(passed_password).to eq password - expect(passed_options[:domain]).to eq domain - end - WinRM::HTTP::HttpNegotiate.new(endpoint, "#{domain}\\#{user}", password, options) - end - end - - context 'option is passed with a domain' do - let(:options) { { domain: domain } } - - it 'passes domain option to the NTLM client' do - expect(Net::NTLM::Client).to receive(:new) do |passed_user, passed_password, passed_options| - expect(passed_user).to eq user - expect(passed_password).to eq password - expect(passed_options[:domain]).to eq domain - end - WinRM::HTTP::HttpNegotiate.new(endpoint, user, password, options) - end - end - end -end - -describe 'WinRM connection', integration: true do - let(:winrm_connection) do - endpoint = config[:endpoint].dup - if auth_type == :ssl - endpoint.sub!('5985', '5986') - endpoint.sub!('http', 'https') - end - winrm = WinRM::WinRMWebService.new( - endpoint, auth_type, options) - winrm.logger.level = :error - winrm - end - let(:options) do - opts = {} - opts[:user] = config[:options][:user] - opts[:pass] = config[:options][:pass] - opts[:basic_auth_only] = basic_auth_only - opts[:no_ssl_peer_verification] = no_ssl_peer_verification - opts[:ssl_peer_fingerprint] = ssl_peer_fingerprint - opts - end - let(:basic_auth_only) { false } - let(:no_ssl_peer_verification) { false } - let(:ssl_peer_fingerprint) { nil } - - subject(:output) do - executor = winrm_connection.create_executor - executor.run_cmd('ipconfig') - end - - shared_examples 'a valid_connection' do - it 'has a 0 exit code' do - expect(subject).to have_exit_code 0 - end - - it 'includes command output' do - expect(subject).to have_stdout_match(/Windows IP Configuration/) - end - - it 'has no errors' do - expect(subject).to have_no_stderr - end - end - - context 'HttpPlaintext' do - let(:basic_auth_only) { true } - let(:auth_type) { :plaintext } - - it_behaves_like 'a valid_connection' - end - - context 'HttpNegotiate' do - let(:auth_type) { :negotiate } - - it_behaves_like 'a valid_connection' - end - - context 'BasicAuthSSL', skip: ENV['winrm_cert'].nil? do - let(:basic_auth_only) { true } - let(:auth_type) { :ssl } - let(:no_ssl_peer_verification) { true } - - it_behaves_like 'a valid_connection' - end - - context 'Negotiate over SSL', skip: ENV['winrm_cert'].nil? do - let(:auth_type) { :ssl } - let(:no_ssl_peer_verification) { true } - - it_behaves_like 'a valid_connection' - end - - context 'SSL fingerprint', skip: ENV['winrm_cert'].nil? do - let(:auth_type) { :ssl } - let(:ssl_peer_fingerprint) { ENV['winrm_cert'] } - - it_behaves_like 'a valid_connection' - end -end +# encoding: UTF-8 +require 'rubyntlm' +require 'winrm/http/transport' + +describe WinRM::HTTP::HttpNegotiate, unit: true do + describe '#init' do + let(:endpoint) { 'some_endpoint' } + let(:domain) { 'some_domain' } + let(:user) { 'some_user' } + let(:password) { 'some_password' } + let(:options) { {} } + + context 'user is not domain prefixed' do + it 'does not pass a domain to the NTLM client' do + expect(Net::NTLM::Client).to receive(:new).with(user, password, options) + WinRM::HTTP::HttpNegotiate.new(endpoint, user, password, options) + end + end + + context 'user is domain prefixed' do + it 'passes prefixed domain to the NTLM client' do + expect(Net::NTLM::Client).to receive(:new) do |passed_user, passed_password, passed_options| + expect(passed_user).to eq user + expect(passed_password).to eq password + expect(passed_options[:domain]).to eq domain + end + WinRM::HTTP::HttpNegotiate.new(endpoint, "#{domain}\\#{user}", password, options) + end + end + + context 'option is passed with a domain' do + let(:options) { { domain: domain } } + + it 'passes domain option to the NTLM client' do + expect(Net::NTLM::Client).to receive(:new) do |passed_user, passed_password, passed_options| + expect(passed_user).to eq user + expect(passed_password).to eq password + expect(passed_options[:domain]).to eq domain + end + WinRM::HTTP::HttpNegotiate.new(endpoint, user, password, options) + end + end + end +end + +describe 'WinRM connection', integration: true do + let(:winrm_connection) do + endpoint = config[:endpoint].dup + if auth_type == :ssl + endpoint.sub!('5985', '5986') + endpoint.sub!('http', 'https') + end + winrm = WinRM::WinRMWebService.new( + endpoint, auth_type, options) + winrm.logger.level = :error + winrm + end + let(:options) do + opts = {} + opts[:user] = config[:options][:user] + opts[:pass] = config[:options][:pass] + opts[:basic_auth_only] = basic_auth_only + opts[:no_ssl_peer_verification] = no_ssl_peer_verification + opts[:ssl_peer_fingerprint] = ssl_peer_fingerprint + opts[:client_cert] = user_cert + opts[:client_key] = user_key + opts + end + let(:basic_auth_only) { false } + let(:no_ssl_peer_verification) { false } + let(:ssl_peer_fingerprint) { nil } + let(:user_cert) { nil } + let(:user_key) { nil } + + subject(:output) do + executor = winrm_connection.create_executor + executor.run_cmd('ipconfig') + end + + shared_examples 'a valid_connection' do + it 'has a 0 exit code' do + expect(subject).to have_exit_code 0 + end + + it 'includes command output' do + expect(subject).to have_stdout_match(/Windows IP Configuration/) + end + + it 'has no errors' do + expect(subject).to have_no_stderr + end + end + + context 'HttpPlaintext' do + let(:basic_auth_only) { true } + let(:auth_type) { :plaintext } + + it_behaves_like 'a valid_connection' + end + + context 'HttpNegotiate' do + let(:auth_type) { :negotiate } + + it_behaves_like 'a valid_connection' + end + + context 'BasicAuthSSL', skip: ENV['winrm_cert'].nil? do + let(:basic_auth_only) { true } + let(:auth_type) { :ssl } + let(:no_ssl_peer_verification) { true } + + it_behaves_like 'a valid_connection' + end + + context 'ClientCertAuthSSL', skip: ENV['user_cert'].nil? do + let(:auth_type) { :ssl } + let(:no_ssl_peer_verification) { true } + let(:user_cert) { ENV['user_cert'] } + let(:user_key) { ENV['user_key'] } + + before { options[:pass] = nil } + + it_behaves_like 'a valid_connection' + end + + context 'Negotiate over SSL', skip: ENV['winrm_cert'].nil? do + let(:auth_type) { :ssl } + let(:no_ssl_peer_verification) { true } + + it_behaves_like 'a valid_connection' + end + + context 'SSL fingerprint', skip: ENV['winrm_cert'].nil? do + let(:auth_type) { :ssl } + let(:ssl_peer_fingerprint) { ENV['winrm_cert'] } + + it_behaves_like 'a valid_connection' + end +end