blob: 674c35ba1ece9c57cd0fe09d90757018e56d7a2f [file]
# Copyright 2015 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'spec_helper'
require 'grpc/core/credentials_helper'
describe GRPC::Core::CallCredentialsHelper do
before(:each) do
skip 'pure Ruby path only: set GRPC_EXPERIMENTS=pure_ruby_call_credentials' \
unless GRPC::PURE_RUBY_CALL_CREDENTIALS_ENABLED
end
describe '.resolve' do
it 'returns nil if both are nil' do
expect(GRPC::Core::CallCredentialsHelper.resolve(nil, nil)).to eq(nil)
end
it 'returns channel creds if call creds are nil' do
creds = double('creds')
expect(GRPC::Core::CallCredentialsHelper.resolve(creds, nil)).to eq(creds)
end
it 'returns call creds if channel creds are nil' do
creds = double('creds')
expect(GRPC::Core::CallCredentialsHelper.resolve(nil, creds)).to eq(creds)
end
it 'composes if both are present' do
creds1 = double('creds1')
creds2 = double('creds2')
expect(creds1).to receive(:compose).with(creds2).and_return('composite')
expect(GRPC::Core::CallCredentialsHelper.resolve(creds1, creds2)).to eq('composite')
end
end
describe '.apply' do
let(:metadata) { {} }
let(:creds) { double('creds') }
it 'does nothing if creds are nil' do
GRPC::Core::CallCredentialsHelper.apply(nil, metadata, 'host', 'channel_creds')
expect(metadata).to eq({})
end
it 'does nothing if channel is insecure' do
GRPC::Core::CallCredentialsHelper.apply(creds, metadata, 'host', :this_channel_is_insecure)
expect(metadata).to eq({})
end
it 'applies metadata if valid' do
expect(creds).to receive(:get_metadata).and_return({ 'foo' => 'bar' })
GRPC::Core::CallCredentialsHelper.apply(creds, metadata, 'host', 'secure_channel_creds')
expect(metadata).to eq({ 'foo' => 'bar' })
end
it 'handles exceptions' do
expect(creds).to receive(:get_metadata).and_raise('error')
expect do
GRPC::Core::CallCredentialsHelper.apply(creds, metadata, 'host', 'secure_channel_creds')
end.to raise_error(GRPC::BadStatus)
end
it 'converts keys and values to strings' do
expect(creds).to receive(:get_metadata).and_return({ foo: :bar })
GRPC::Core::CallCredentialsHelper.apply(creds, metadata, 'host', 'secure_channel_creds')
expect(metadata).to eq({ 'foo' => 'bar' })
end
end
end