RegressionTests__ProcessTest.st
author Claus Gittinger <cg@exept.de>
Tue, 09 Jul 2019 18:53:03 +0200
changeset 2327 bf482d49aeaf
parent 2170 b3a0090f56bb
permissions -rw-r--r--
#QUALITY by exept class: RegressionTests::StringTests added: #test82c_expanding
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1447
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
     1
"{ Package: 'stx:goodies/regression' }"
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     2
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     3
"{ NameSpace: RegressionTests }"
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     4
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     5
TestCase subclass:#ProcessTest
168
1743d1e0c0ab checkin from browser
penk
parents: 167
diff changeset
     6
	instanceVariableNames:'subProcesses'
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     7
	classVariableNames:''
9eaba93b7441 initial checkin
penk
parents:
diff changeset
     8
	poolDictionaries:''
2048
e181a41f5238 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 1447
diff changeset
     9
	category:'tests-Regression-Processes'
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    10
!
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    11
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    12
2170
b3a0090f56bb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    13
!ProcessTest methodsFor:'initialize / release'!
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    14
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    15
tearDown
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    16
1447
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    17
    subProcesses notEmptyOrNil ifTrue:[
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    18
	subProcesses do:[:aProcess|
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    19
	    aProcess terminate.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    20
	].
167
9eaba93b7441 initial checkin
penk
parents:
diff changeset
    21
    ].
1197
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    22
643aed971b66 class: RegressionTests::ProcessTest
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 673
diff changeset
    23
    "Modified: / 19-09-2014 / 13:27:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
2170
b3a0090f56bb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    24
! !
b3a0090f56bb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    25
b3a0090f56bb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 2048
diff changeset
    26
!ProcessTest methodsFor:'test'!
1197
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
1447
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    34
    self
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    35
	skipIf: Processor maxProcessId > 500000
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    36
	description: 'Processor maxProcessId is huge, would take really a long time'.
1198
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:[
1447
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    44
	[ lastId := Processor activeProcess id. blocker signal ] fork.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    45
	blocker wait.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    46
	iters := iters + 1.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    47
	iters > maxId ifTrue:[
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    48
	    "/ OK, we tried long enough. The system is probably already
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    49
	    "/ reusing Process id's so it may never reach maxId.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    50
	    ^ self.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    51
	].
1197
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.
1447
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    69
    block := [
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    70
	1 to:10 do:[:index|
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    71
	    |subTask|
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    72
	    subTask := [[true] whileTrue:[]] newProcess.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    73
	    subTask name:'TestTask no:', index asString.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    74
	    subTask priority:4.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    75
	    subProcesses add:subTask.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    76
	    subTask resume.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    77
	].
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
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.
1447
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
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|
1447
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    95
	self should:((allProcesses includes:aProcess) not).
167
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