rundlauf(); $this->ungueltigeDatei(); } private function rundlauf(): void { Database::execute("INSERT INTO einstellungen (schluessel, wert, bereich) VALUES ('sicherungstest', 'a', 'test')"); $vorher = (int)Database::fetchValue('SELECT COUNT(*) FROM einstellungen'); $sicherung = Datenbanksicherung::erzeugen(); $this->assert(strlen($sicherung) > 0, 'Sicherung ist nicht leer'); Database::execute("DELETE FROM einstellungen WHERE schluessel = 'sicherungstest'"); Database::execute("INSERT INTO einstellungen (schluessel, wert, bereich) VALUES ('nach_sicherung', 'b', 'test')"); $anzahl = Datenbanksicherung::wiederherstellen($sicherung); $this->assertEquals($vorher, $anzahl['einstellungen'], 'Zeilenzahl der Tabelle einstellungen'); $this->assertEquals(1, (int)Database::fetchValue("SELECT COUNT(*) FROM einstellungen WHERE schluessel = 'sicherungstest'"), 'Gesicherte Zeile ist wieder da'); $this->assertEquals(0, (int)Database::fetchValue("SELECT COUNT(*) FROM einstellungen WHERE schluessel = 'nach_sicherung'"), 'Zeile nach der Sicherung ist verschwunden'); } private function ungueltigeDatei(): void { $vorher = (int)Database::fetchValue('SELECT COUNT(*) FROM einstellungen'); foreach (['kein gzip', gzencode('kein json'), gzencode('{"kennung":"fremd"}')] as $inhalt) { $geworfen = false; try { Datenbanksicherung::wiederherstellen($inhalt); } catch (\RuntimeException) { $geworfen = true; } $this->assert($geworfen, 'Ungültige Datei wird abgelehnt'); } $this->assertEquals($vorher, (int)Database::fetchValue('SELECT COUNT(*) FROM einstellungen'), 'Bestand nach abgelehnter Datei unverändert'); } }