terminals/tests/Xtreams__SocketReadingWritingTest.st
author Martin Kobetic
Sun, 17 Nov 2013 00:21:39 -0500
changeset 141 263190106319
parent 112 b6b3d8435bb7
permissions -rw-r--r--
merging

"{ 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$'
! !