1# 2# Licensed to the Apache Software Foundation (ASF) under one 3# or more contributor license agreements. See the NOTICE file 4# distributed with this work for additional information 5# regarding copyright ownership. The ASF licenses this file 6# to you under the Apache License, Version 2.0 (the 7# "License"); you may not use this file except in compliance 8# with the License. You may obtain a copy of the License at 9# 10# http://www.apache.org/licenses/LICENSE-2.0 11# 12# Unless required by applicable law or agreed to in writing, 13# software distributed under the License is distributed on an 14# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15# KIND, either express or implied. See the License for the 16# specific language governing permissions and limitations 17# under the License. 18# 19 20require 'spec_helper' 21require File.expand_path("#{File.dirname(__FILE__)}/socket_spec_shared") 22 23describe 'Thrift::ServerSocket' do 24 25 describe Thrift::ServerSocket do 26 before(:each) do 27 @socket = Thrift::ServerSocket.new(1234) 28 end 29 30 it "should create a handle when calling listen" do 31 expect(TCPServer).to receive(:new).with(nil, 1234) 32 @socket.listen 33 end 34 35 it "should accept an optional host argument" do 36 @socket = Thrift::ServerSocket.new('localhost', 1234) 37 expect(TCPServer).to receive(:new).with('localhost', 1234) 38 @socket.to_s == "server(localhost:1234)" 39 @socket.listen 40 end 41 42 it "should create a Thrift::Socket to wrap accepted sockets" do 43 handle = double("TCPServer") 44 expect(TCPServer).to receive(:new).with(nil, 1234).and_return(handle) 45 @socket.listen 46 sock = double("sock") 47 expect(handle).to receive(:accept).and_return(sock) 48 trans = double("Socket") 49 expect(Thrift::Socket).to receive(:new).and_return(trans) 50 expect(trans).to receive(:handle=).with(sock) 51 expect(@socket.accept).to eq(trans) 52 end 53 54 it "should close the handle when closed" do 55 handle = double("TCPServer", :closed? => false) 56 expect(TCPServer).to receive(:new).with(nil, 1234).and_return(handle) 57 @socket.listen 58 expect(handle).to receive(:close) 59 @socket.close 60 end 61 62 it "should return nil when accepting if there is no handle" do 63 expect(@socket.accept).to be_nil 64 end 65 66 it "should return true for closed? when appropriate" do 67 handle = double("TCPServer", :closed? => false) 68 allow(TCPServer).to receive(:new).and_return(handle) 69 @socket.listen 70 expect(@socket).not_to be_closed 71 allow(handle).to receive(:close) 72 @socket.close 73 expect(@socket).to be_closed 74 @socket.listen 75 expect(@socket).not_to be_closed 76 allow(handle).to receive(:closed?).and_return(true) 77 expect(@socket).to be_closed 78 end 79 80 it "should provide a reasonable to_s" do 81 expect(@socket.to_s).to eq("socket(:1234)") 82 end 83 end 84end 85