Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
From 511e43aa89d0bac73081be70bbb013b9934beec3 Mon Sep 17 00:00:00 2001 From: Mark Somerville <mark@scottishclimbs.com> 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
This paste will be private.
From the Design Piracy series on my blog: