"{ Package: 'stx:goodies/xtreams/terminals/tests' }"
"{ NameSpace: Xtreams }"
FiniteReadingWritingTests subclass:#SocketReadingWritingTest
instanceVariableNames:''
classVariableNames:''
poolDictionaries:'XtreamsPool'
category:'Xtreams-Terminals-Tests'
!
!SocketReadingWritingTest methodsFor:'initialize-release'!
setUp
|listener|
listener := Socket newTCP: 0.
[ [ listener listenFor: 1.
input := Socket newTCPclientToHost: #[127 0 0 1] port: listener port.
output := listener accept
] ifCurtailed: [
input notNil ifTrue: [ input close ].
output notNil ifTrue: [ output close ] ].
] ensure: [ listener close ].
input := input reading.
output := output writing.
! !
!SocketReadingWritingTest methodsFor:'utilities'!
timeout: timeoutDuration server: serverBlock client: clientBlock
"For tests that must be able to write and read at the same time, where they may block on each.
Sockets, Pipes have an operating system buffer which dictates its bandwidth."
| timeout
serverSuccess serverProcess serverLock
clientSuccess clientProcess clientLock|
timeout := false.
serverLock := Semaphore new.
clientLock := Semaphore new.
serverSuccess := clientSuccess := false.
serverProcess := [serverSuccess := serverBlock value. serverLock signal] fork.
clientProcess := [clientSuccess := clientBlock value. clientLock signal] fork.
serverLock wait.
clientLock wait.
self assert: serverSuccess.
self assert: clientSuccess.
self deny: timeout
! !
!SocketReadingWritingTest class methodsFor:'documentation'!
version_HG
^ '$Changeset: <not expanded> $'
!
version_SVN
^ '$Id$'
! !