RegressionTests__SocketTests.st
author Claus Gittinger <cg@exept.de>
Tue, 10 Oct 2017 12:12:14 +0200
changeset 1715 247143b085d4
parent 1447 2351db93aa5b
child 1716 54d81e306117
permissions -rw-r--r--
#BUGFIX by cg class: RegressionTests::SocketTests changed: #test10_concurrentOpenClose #test11_concurrentOpenClose (send #newTCPclientToHost:port: instead of #newTCPclientToAddress:port:)

"{ Package: 'stx:goodies/regression' }"

"{ NameSpace: RegressionTests }"

TestCase subclass:#SocketTests
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'tests-Regression-Streams'
!


!SocketTests methodsFor:'tests - open-close'!

test10_concurrentOpenClose
    |p1 p2 sock host port n1 n2|

    host := 'www.exept.de'.
    port := 80.
    n1 := n2 := 0.

    p1 :=
        [
            [true] whileTrue:[
                sock := Socket newTCPclientToHost:host port:port.
                self assert:(sock notNil).
                Processor yield.
                n1 := n1 + 1.
                sock close
            ]
        ] newProcess.

    p2 :=
        [
            [true] whileTrue:[
                sock := Socket newTCPclientToHost:host port:port.
                self assert:(sock notNil).
                Processor yield.
                n2 := n2 + 1.
                sock close
            ]
        ] newProcess.

    p1 resume.
    p2 resume.

    Delay waitForSeconds:20.
    p1 terminate.
    p2 terminate.

    Transcript showCR:'n1: %1; n2: %2' with:n1 with:n2

    "Created: / 29-11-2011 / 14:43:57 / cg"
    "Modified: / 10-10-2017 / 12:07:30 / cg"
!

test11_concurrentOpenClose
    "using a non-existing host name (hoping that the connect will take longer then,
     and we can enforce concurrent execution)"

    |p1 p2 sock port n1 n2|

    port := 80.
    n1 := n2 := 0.

    p1 :=
        [
            |host|

            [true] whileTrue:[
                host := 'www.nonexisting-%1.de' bindWith:(UUID genRandomUUID).
                HostNameLookupError handle:[:ex |
                ] do:[
                    sock := Socket newTCPclientToHost:host port:port.
                    Processor yield.
                    n1 := n1 + 1.
                    sock close
                ].
            ]
        ] newProcess.

    p2 :=
        [
            |host|

            [true] whileTrue:[
                host := 'www.nonexisting-%1.de' bindWith:(UUID genRandomUUID).
                HostNameLookupError handle:[:ex |
                ] do:[
                    sock := Socket newTCPclientToHost:host port:port.
                    Processor yield.
                    n2 := n2 + 1.
                    sock close
                ]
            ]
        ] newProcess.

    p1 resume.
    p2 resume.

    Delay waitForSeconds:20.
    p1 terminate.
    p2 terminate.

    Transcript showCR:'n1: %1; n2: %2' with:n1 with:n2

    "Created: / 29-11-2011 / 18:17:04 / cg"
    "Modified: / 10-10-2017 / 12:11:21 / cg"
! !

!SocketTests methodsFor:'tests - socket address'!

test20_localAddress
    "fails on MAC-osx"

    |addr hostNameFromOS nm|

    OperatingSystem isUNIXlike ifTrue:[
	hostNameFromOS := PipeStream outputFromCommand:'hostname'.
    ].

    addr := IPSocketAddress localHost.
    self assert:(addr hostAddress = #[127 0 0 1]).

    nm := addr hostName.
    self assert:(nm notEmptyOrNil).

    addr := IPSocketAddress addressString:'127.0.0.1'.
    self assert:(addr hostAddress = #[127 0 0 1]).
    addr port:51121.
    nm := addr hostName.
    self assert:(nm notEmptyOrNil).
    self assert:(addr hostAddress = #[127 0 0 1]).
    self assert:(addr port = 51121).
! !

!SocketTests class methodsFor:'documentation'!

version
    ^ '$Header$'
!

version_CVS
    ^ '$Header$'
! !