Skip to content

Commit 0d6cde7

Browse files
committed
Add cleanup of screen processes in unit tests
1 parent 680cee1 commit 0d6cde7

3 files changed

Lines changed: 39 additions & 4 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,6 @@ jobs:
101101
tools: infection
102102
- uses: ramsey/composer-install@v3
103103
- run: |
104-
infection --min-msi=32 --min-covered-msi=59 "--threads=$(nproc)"
104+
infection --min-msi=33 --min-covered-msi=59 "--threads=$(nproc)"
105105
env:
106106
STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }}

src/Manager/ScreenManager.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public function start(ScreenInterface|string $nameOrScreen): bool
8787
return $process->isSuccessful();
8888
}
8989

90-
protected function resolveScreen(ScreenInterface|string $nameOrScreen): ScreenInterface
90+
public function resolveScreen(ScreenInterface|string $nameOrScreen): ScreenInterface
9191
{
9292
if (\is_string($nameOrScreen)) {
9393
if (!$this->provider->has($nameOrScreen)) {
@@ -115,7 +115,7 @@ public function isRunning(ScreenInterface|string $nameOrScreen): bool
115115
return str_contains($process->getOutput(), $screenName);
116116
}
117117

118-
private function generateScreenName(ScreenInterface $screen): string
118+
public function generateScreenName(ScreenInterface $screen): string
119119
{
120120
return hash('sha256', \sprintf('%s%s%s', $this->getBaseDirectory(), $screen->getName(), implode('', $screen->getCommand())));
121121
}

tests/Manager/ScreenManagerTest.php

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,21 @@
88
use SoureCode\Bundle\Screen\Factory\ScreenFactory;
99
use SoureCode\Bundle\Screen\Manager\ScreenManager;
1010
use SoureCode\Bundle\Screen\Model\Screen;
11+
use SoureCode\Bundle\Screen\Model\ScreenInterface;
1112
use SoureCode\Bundle\Screen\Provider\ArrayScreenProvider;
1213
use Symfony\Component\Filesystem\Filesystem;
14+
use Symfony\Component\Process\Process;
1315

1416
class ScreenManagerTest extends TestCase
1517
{
1618
private const int TIMEOUT_SECONDS = 5;
1719
private const int SLEEP_MICROSECONDS = 100;
1820

21+
/**
22+
* @var string[] $screenNames
23+
*/
24+
private array $screenNames = [];
25+
1926
private function getScreenManager(string $randomEcho, int $randomSleep): ScreenManager
2027
{
2128
$factory = new ScreenFactory(Screen::class);
@@ -31,13 +38,41 @@ private function getScreenManager(string $randomEcho, int $randomSleep): ScreenM
3138
$filesystem = new Filesystem();
3239
$logger = new NullLogger();
3340

34-
return new ScreenManager(
41+
$screenManager = new ScreenManager(
3542
realpath(__DIR__.'/../app'),
3643
'test',
3744
$filesystem,
3845
$screenProvider,
3946
$logger,
4047
);
48+
49+
/**
50+
* @var ScreenInterface[] $screens
51+
*/
52+
$screens = [];
53+
$screens[] = $screenManager->resolveScreen('echoTest');
54+
$screens[] = $screenManager->resolveScreen('daemonTest');
55+
56+
foreach ($screens as $screen) {
57+
$this->screenNames[] = $screenManager->generateScreenName($screen);
58+
}
59+
60+
return $screenManager;
61+
}
62+
63+
private function clearScreens(): void
64+
{
65+
foreach ($this->screenNames as $screenName) {
66+
$killProcess = new Process(['screen', '-S', $screenName, '-X', 'quit']);
67+
$killProcess->run();
68+
}
69+
70+
$this->screenNames = [];
71+
}
72+
73+
protected function tearDown(): void
74+
{
75+
$this->clearScreens();
4176
}
4277

4378
public function testStartAndLogs(): void

0 commit comments

Comments
 (0)