OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

RemoteMessageTest.php

2 KB
<?php

declare(strict_types=1);

use OpenNIT\Core\RemoteMessage;

/**
 * Antwortet ein angebundenes System mit einer Fehlerseite statt mit Daten,
 * steht deren Text in der Oberfläche. Er muss lesbar sein – und darf nicht
 * das Stylesheet der fremden Seite mitbringen.
 */
return static function (): void {

    $tomcat = <<<'HTML'
<!doctype html><html><head><title>HTTP Status 500 – Internal Server Error</title>
<style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;}
h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;}</style></head>
<body><h1>HTTP Status 500 – Internal Server Error</h1><hr/><p><b>Type</b> Exception Report</p></body></html>
HTML;

    test('Stil- und Skriptblöcke verschwinden samt ihrem Inhalt', function () use ($tomcat) {
        $text = RemoteMessage::lesbar($tomcat);

        assertFalse(str_contains($text, 'font-family'), 'CSS steht noch in der Meldung');
        assertFalse(str_contains($text, '#525D76'), 'Farbwerte stehen noch in der Meldung');
        assertFalse(str_contains($text, '<'), 'Markup steht noch in der Meldung');
        assertTrue(str_contains($text, 'HTTP Status 500'), 'Die eigentliche Aussage fehlt');
    });

    test('Mehrfacher Leerraum wird zusammengezogen, die Länge begrenzt', function () {
        assertSame('a b c', RemoteMessage::lesbar("a \n\n  b\tc"));
        assertSame(12, mb_strlen(RemoteMessage::lesbar(str_repeat('x', 500), 12)));
        assertSame('', RemoteMessage::lesbar('   '));
    });

    test('Entitäten werden aufgelöst', function () {
        assertSame('Fehler: Zugriff verweigert („gesperrt“)', RemoteMessage::lesbar('Fehler: Zugriff verweigert (&bdquo;gesperrt&ldquo;)'));
    });

    test('Jede Stelle, die eine fremde Antwort anzeigt, nutzt den Helfer', function () {
        $wurzel = dirname(__DIR__);
        foreach (['src/Services/RelutionSyncService.php', 'src/Xdr/DefenderProvider.php', 'src/Xdr/TrendVisionProvider.php'] as $datei) {
            $quelle = (string)file_get_contents($wurzel . '/' . $datei);
            assertTrue(str_contains($quelle, 'RemoteMessage::lesbar'), $datei . ' schneidet die Antwort selbst zu');
            assertFalse(str_contains($quelle, 'substr(strip_tags((string)$raw)'), $datei . ' nutzt noch den alten Weg');
        }
    });
};