blob: f805379f3b77ea843ebb741c2f157c904f218132 [file]
# frozen_string_literal: true
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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'
describe Thrift::MultiplexedProcessor do
before(:each) do
@processor = Thrift::MultiplexedProcessor.new
@iprot = double('MockInputProtocol')
@oprot = double('MockOutputProtocol')
end
it 'dispatches multiplexed calls to the registered service processor' do
actual_processor = double('ActualProcessor')
@processor.register_processor('ThriftTest', actual_processor)
expect(@iprot).to receive(:read_message_begin).and_return(['ThriftTest:testVoid', Thrift::MessageTypes::CALL, 1])
expect(actual_processor).to receive(:process) do |stored_protocol, oprot|
expect(stored_protocol.read_message_begin).to eq(['testVoid', Thrift::MessageTypes::CALL, 1])
expect(oprot).to eq(@oprot)
true
end
expect(@processor.process(@iprot, @oprot)).to eq(true)
end
it 'dispatches non-multiplexed calls to the default processor' do
default_processor = double('DefaultProcessor')
@processor.register_default(default_processor)
expect(@iprot).to receive(:read_message_begin).and_return(['testVoid', Thrift::MessageTypes::CALL, 2])
expect(default_processor).to receive(:process) do |stored_protocol, oprot|
expect(stored_protocol.read_message_begin).to eq(['testVoid', Thrift::MessageTypes::CALL, 2])
expect(oprot).to eq(@oprot)
true
end
expect(@processor.process(@iprot, @oprot)).to eq(true)
end
it 'raises for non-multiplexed calls when no default processor is registered' do
expect(@iprot).to receive(:read_message_begin).and_return(['testVoid', Thrift::MessageTypes::CALL, 3])
expect { @processor.process(@iprot, @oprot) }.to raise_error(
Thrift::Exception,
'Service name not found in message name: testVoid. Did you forget to use a Thrift::Protocol::MultiplexedProtocol in your client?'
)
end
it 'raises for unknown multiplexed service names' do
expect(@iprot).to receive(:read_message_begin).and_return(['Missing:testVoid', Thrift::MessageTypes::CALL, 4])
expect { @processor.process(@iprot, @oprot) }.to raise_error(
Thrift::Exception,
'Service name not found: Missing. Did you forget to call Thrift::MultiplexedProcessor#register_processor?'
)
end
end