RegressionTests__ProcessTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 29 Jun 2016 21:40:53 +0100
branchjv
changeset 1499 26a16a04219b
parent 1292 2c3259f8a35d
child 1500 d406a10b2965
permissions -rw-r--r--
Package renamed from exept:regression to stx:goodies/regression. Hooray!
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1292
2c3259f8a35d changed:
Claus Gittinger <cg@exept.de>
parents: 1198
diff changeset
     1
"{ Encoding: utf8 }"
2c3259f8a35d changed:
Claus Gittinger <cg@exept.de>
parents: 1198
diff changeset
     2
1499
26a16a04219b Package renamed from exept:regression to stx:goodies/regression. Hooray!
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1292
diff changeset
     3
"{ Package: 'stx:goodies/regression' }"
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     4
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     5
"{ NameSpace: RegressionTests }"
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     6
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     7
TestCase subclass:#ProcessTest
168
1743d1e0c0ab checkin from browser
penk
parents: 167
diff changeset
     8
	instanceVariableNames:'subProcesses'
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     9
	classVariableNames:''
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    10
	poolDictionaries:''
181
a56517005229 category change
Claus Gittinger <cg@exept.de>
parents: 169
diff changeset
    11
	category:'tests-Regression'
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    12
!
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    13
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    14
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    15
!ProcessTest methodsFor:'test'!
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    16
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    17
tearDown
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    18
1197
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    19
    subProcesses notEmptyOrNil ifTrue:[ 
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    20
        subProcesses do:[:aProcess|
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    21
            aProcess terminate.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    22
        ].
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    23
    ].
1197
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    24
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    25
    "Modified: / 19-09-2014 / 13:27:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    26
!
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    27
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    28
testMaxProcessId
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    29
    "This test makes sure a process id never exeeds MaxProcessId."
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    30
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    31
    | blocker lastId maxId iters |
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    32
1198
513228267cb7 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1197
diff changeset
    33
513228267cb7 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1197
diff changeset
    34
    self 
1292
2c3259f8a35d changed:
Claus Gittinger <cg@exept.de>
parents: 1198
diff changeset
    35
        skipIf: Processor maxProcessId > 500000
1198
513228267cb7 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1197
diff changeset
    36
        description: 'Processor maxProcessId is huge, would take really a long time'.
513228267cb7 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1197
diff changeset
    37
1197
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    38
    blocker := Semaphore new.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    39
    lastId := Processor activeProcess id.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    40
    maxId := Processor maxProcessId.
1198
513228267cb7 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1197
diff changeset
    41
1197
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    42
    iters := 0.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    43
    [ lastId ~~ maxId ] whileTrue:[
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    44
        [ lastId := Processor activeProcess id. blocker signal ] fork.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    45
        blocker wait.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    46
        iters := iters + 1.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    47
        iters > maxId ifTrue:[ 
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    48
            "/ OK, we tried long enough. The system is probably already
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    49
            "/ reusing Process id's so it may never reach maxId.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    50
            ^ self.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    51
        ].
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    52
    ].
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    53
    "/ OK, we reached the limit. Try once again to spawn a new
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    54
    "/ thread and assert its id is smaller then the limit.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    55
    [ lastId := Processor activeProcess id. blocker signal ] fork.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    56
    blocker wait.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    57
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    58
    self assert: lastId < maxId.
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    59
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    60
    "Created: / 19-09-2014 / 12:50:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
1198
513228267cb7 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1197
diff changeset
    61
    "Modified (format): / 19-09-2014 / 14:06:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    62
!
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    63
168
1743d1e0c0ab checkin from browser
penk
parents: 167
diff changeset
    64
testTerminateWithAllSubProcesses
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    65
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    66
    | block masterTask allProcesses|
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    67
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    68
    subProcesses := OrderedCollection new.
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    69
    block := [ 
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    70
        1 to:10 do:[:index|
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    71
            |subTask|
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    72
            subTask := [[true] whileTrue:[]] newProcess.
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    73
            subTask name:'TestTask no:', index asString.
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    74
            subTask priority:4.
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    75
            subProcesses add:subTask.
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    76
            subTask resume.
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    77
        ].
169
392f64656cd0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 168
diff changeset
    78
        [true] whileTrue:[Delay waitForSeconds:10].
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    79
    ].
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    80
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    81
    masterTask := block newProcess.
169
392f64656cd0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 168
diff changeset
    82
    masterTask beGroupLeader.
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    83
    masterTask priority:8.
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    84
    masterTask name:'masterTask'.
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    85
    masterTask resume.
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    86
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    87
    Delay waitForSeconds:0.5.
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    88
673
77426f9a7124 changed: #testTerminateWithAllSubProcesses
Stefan Vogel <sv@exept.de>
parents: 181
diff changeset
    89
    masterTask terminateWithAllSubprocessesInGroup.
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    90
    masterTask waitUntilTerminated.          
169
392f64656cd0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 168
diff changeset
    91
392f64656cd0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 168
diff changeset
    92
    Delay waitForSeconds:1.
392f64656cd0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 168
diff changeset
    93
    allProcesses := ProcessorScheduler knownProcesses asOrderedCollection select:[:p | p isDead not].
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    94
    subProcesses do:[:aProcess|
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    95
        self should:((allProcesses includes:aProcess) not).
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    96
    ].
169
392f64656cd0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 168
diff changeset
    97
392f64656cd0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 168
diff changeset
    98
    "
392f64656cd0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 168
diff changeset
    99
     self new testTerminateWithAllSubProcesses
392f64656cd0 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 168
diff changeset
   100
    "
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
   101
! !
9eaba93b7441 initial checkin
penk
parents:
diff changeset
   102
9eaba93b7441 initial checkin
penk
parents:
diff changeset
   103
!ProcessTest class methodsFor:'documentation'!
9eaba93b7441 initial checkin
penk
parents:
diff changeset
   104
9eaba93b7441 initial checkin
penk
parents:
diff changeset
   105
version
9eaba93b7441 initial checkin
penk
parents:
diff changeset
   106
    ^ '$Header$'
9eaba93b7441 initial checkin
penk
parents:
diff changeset
   107
! !
1197
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
   108