RegressionTests__ProcessTest.st
author sr
Wed, 15 Nov 2017 16:41:47 +0100
changeset 1890 9367c7639c2d
parent 1447 2351db93aa5b
child 1500 d406a10b2965
child 2048 e181a41f5238
permissions -rw-r--r--
removed not existing Class from project definition
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
1447
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
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
1447
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    19
    subProcesses notEmptyOrNil ifTrue:[
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    20
	subProcesses do:[:aProcess|
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
diff changeset
    21
	    aProcess terminate.
2351db93aa5b package changes
Claus Gittinger <cg@exept.de>
parents: 1292
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
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