Wrap text
Report abuse
From 511e43aa89d0bac73081be70bbb013b9934beec3 Mon Sep 17 00:00:00 2001
From: Mark Somerville
Date: Wed, 14 May 2008 11:20:10 +0100
Subject: [PATCH] Copied over TCPServer#accept spec to UNIXServer#accept
---
1.8/library/socket/fixtures/classes.rb | 3 +
1.8/library/socket/unixserver/accept_spec.rb | 65 ++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 0 deletions(-)
diff --git a/1.8/library/socket/fixtures/classes.rb b/1.8/library/socket/fixtures/classes.rb
index 3c55328..0dec25d 100644
--- a/1.8/library/socket/fixtures/classes.rb
+++ b/1.8/library/socket/fixtures/classes.rb
@@ -9,4 +9,7 @@ module SocketSpecs
Socket::SockAddr_In.new(Socket.sockaddr_in(port, host))
end
+ def self.socket_path
+ "#{File.dirname(__FILE__)}/unix_server_spec.socket"
+ end
end
diff --git a/1.8/library/socket/unixserver/accept_spec.rb b/1.8/library/socket/unixserver/accept_spec.rb
index 63bcd9b..7db60c6 100644
--- a/1.8/library/socket/unixserver/accept_spec.rb
+++ b/1.8/library/socket/unixserver/accept_spec.rb
@@ -1,2 +1,67 @@
require File.dirname(__FILE__) + '/../../../spec_helper'
require File.dirname(__FILE__) + '/../fixtures/classes'
+
+describe "UNIXServer#accept" do
+ before :each do
+ FileUtils.rm(SocketSpecs.socket_path, :force => true)
+ end
+
+ after :all do
+ FileUtils.rm(SocketSpecs.socket_path, :force => true)
+ end
+
+ it "accepts what is written by the client" do
+ server = UNIXServer.open(SocketSpecs.socket_path)
+ server.listen 5
+ data = nil
+ t = Thread.new do
+ client = server.accept
+ data = client.read(5)
+ client << "goodbye"
+ client.close
+ end
+ Thread.pass until t.status == "sleep"
+
+ socket = UNIXSocket.open(SocketSpecs.socket_path)
+ socket.write('hello')
+ socket.read.should == 'goodbye'
+ t.join
+ data.should == 'hello'
+ server.close
+ socket.close
+ FileUtils.rm(SocketSpecs.socket_path, :force => true)
+ end
+
+ it "can be interrupted by Thread#kill" do
+ server = UNIXServer.new(SocketSpecs.socket_path)
+ t = Thread.new {
+ server.accept
+ }
+ Thread.pass until t.status == "sleep"
+
+ # kill thread, ensure it dies in a reasonable amount of time
+ t.kill
+ a = 1
+ while a < 1000
+ break unless t.alive?
+ Thread.pass
+ a += 1
+ end
+ a.should < 1000
+ server.close
+ end
+
+ it "can be interrupted by Thread#raise" do
+ server = UNIXServer.new(SocketSpecs.socket_path)
+ t = Thread.new {
+ server.accept
+ }
+ Thread.pass until t.status == "sleep"
+
+ # raise in thread, ensure the raise happens
+ ex = Exception.new
+ t.raise ex
+ lambda { t.join }.should raise_error(Exception)
+ server.close
+ end
+end
--
1.5.4.1