Nicolas,

#fork in a test?  Do you mean like the code below?  The thread running the test 
waits on something signaled toward the end of the forked thread.  

If you want a watchdog timer, you could fork another thread that waits on a 
delay, sets an error flag (best to use a shared queue or a mutex to avoid 
weirdness) and then signals the test semaphore.  You might also want to use 
#ifCurtailed: to set an error flag and wrap that with #ensure: to signal the 
semaphore.  You don't necessarily need to be perfect about signaling the 
semaphore because failure to do so is not much different from your test going 
into an infinite loop (actually more benign because the stack isn't growing); 
you'll realize it, break, and figure out what didn't happen or at least "that 
it didn't" and try again forewarned.  

Does that help?

Bill


testLocalServerAndClient
        "11-09 - try a server and a client in the same image."

                | server port client serverSocket serverSocketStream text 
thread done read |

        port := 4900.
        done := Semaphore new.

        "11-09 - gag the prompter below"
        serverSocket := nil.

        server := ConnectionQueue portNumber:port queueLength:5.
        [
                client := SocketStream openConnectionToHostNamed:'localhost' 
port:port.
                [ serverSocket isNil ] whileTrue:[
                        serverSocket := server getConnectionOrNil.
                ].

                serverSocketStream := SocketStream on:serverSocket.
                text := 'Long live Tux!'.
                serverSocketStream nextPutAll:text; flush.

                "11-09 - this hung up w/o the thread.
                11-09 - as you were; the problem was a lack of #flush on the 
send side, so there was
                nothing for the client side to read."
                thread := [
                        read := client nextMany:text size.
                        done signal.
                ] forkAt:Processor userBackgroundPriority.
                thread name:'READ'.

                done wait.
                self should:[ read = text ].
                Transcript nextPutAll:'Just to make the point, we read: '; 
nextPutAll:read; cr; flush.

        ] ensure:[
                server destroy.
                serverSocketStream close.
                client close.
        ].

        "11-09 - no prompts"
        serverSocket := serverSocket.
        client := client.
        serverSocketStream := serverSocketStream.
        thread := thread.

        "
                NetworkSmokeTestCase prod:#testLocalServerAndClient.
        "



________________________________________
From: [email protected] 
[[email protected]] On Behalf Of Nicolas Cellier 
[[email protected]]
Sent: Sunday, October 10, 2010 7:05 AM
To: The general-purpose Squeak developers list
Cc: Pharo Development
Subject: Re: [Pharo-project] [squeak-dev] Xtreams : first embryonary port on    
Squeak

2010/10/10 Levente Uzonyi <[email protected]>:
> On Sun, 10 Oct 2010, Nicolas Cellier wrote:
>
>>
>> THE STATUS OF TESTS:
>>
>> Tests do not all pass. There seems to be a bug in Squeak
>> #replace:from:to:with: when the replacement is the collection itself,
>> moved to the right (this is with a COG VM).
>
> #replace:from:to:with: is not supposed to work for moves. IIRC the primitive
> version uses memcpy (or strncpy), so moving to the left works just because
> the undelying C function supports it. I used to (ab)use this feature though.
>
>
> Levente
>

OK, since we use memcpy rather than memmove in Squeak VM, I
implemented the trivial work around - move through a motionBuffer
temporary copy.

I now have a single test failing,
XTCollectionWriteStream>>#testReadWriteLargeAmount and this must be
due to my #after:do: simplistic implementation.
Messing with #fork in SUnit TestCase is tricky, and I need help on this point.

Nicolas

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to