// Tests der Laufwerks-Gesundheit (kern/laufwerk/ereignisse.ts, 5.4.0) — // an der ECHTEN wevtutil-Ausgabe dieses PCs (01.09.2026): cdrom 7 // (fehlerhafter Block, der Spartacus-Defekt), cdrom 11 (Controllerfehler, // der USB-Aussetzer). import { describe, expect, it } from 'vitest' import { beurteilen, buildWevtutilArgs, ereignisseAusXml, xpathFuer } from '../src/kern/laufwerk/ereignisse' /** Drei Ereignisse, so wie wevtutil /f:xml sie schreibt — ohne Zeilenumbrüche. */ const XML = "702135751SystemTobisNicerPC\\Device\\CdRom00300" + "7System\\Device\\CdRom0" + "11System\\Device\\CdRom0" describe('ereignisseAusXml', () => { it('liest Provider, ID, Zeit und Gerät je Ereignis', () => { const e = ereignisseAusXml(XML) expect(e).toHaveLength(3) expect(e[0]).toEqual({ zeit: '2026-09-01T18:32:42.3868580Z', provider: 'cdrom', id: 7, geraet: '\\Device\\CdRom0' }) expect(e[2].id).toBe(11) }) it('leere Ausgabe = keine Ereignisse', () => { expect(ereignisseAusXml('')).toEqual([]) expect(ereignisseAusXml('\r\n')).toEqual([]) }) }) describe('beurteilen — Disc oder Hardware?', () => { const alle = ereignisseAusXml(XML) it('ein Controllerfehler dabei: Hardware — Port am Mainboard probieren', () => { const b = beurteilen(alle, 24) expect(b.urteil).toBe('hardware') expect(b.controllerfehler).toBe(1) expect(b.fehlerhafteBloecke).toBe(2) expect(b.text).toContain('Mainboard') expect(b.letzte).toHaveLength(3) expect(b.letzte[0]).toContain('fehlerhafter Block') }) it('nur fehlerhafte Blöcke: die Disc', () => { const b = beurteilen(alle.filter((e) => e.id === 7), 24) expect(b.urteil).toBe('disc') expect(b.text).toContain('DISC') }) it('nichts: ruhig', () => { const b = beurteilen([], 24) expect(b.urteil).toBe('ruhig') expect(b.text).toContain('nichts') }) it('seit einem Zeitpunkt: nur die jüngeren zählen', () => { const b = beurteilen(alle, 24, new Date('2026-09-01T18:30:00Z')) expect(b.controllerfehler).toBe(0) expect(b.urteil).toBe('disc') }) }) describe('die wevtutil-Argumente (Regel D: so gemessen)', () => { it('XPath auf cdrom/disk mit Zeitfenster, XML, neueste zuerst', () => { expect(xpathFuer(24)).toBe("*[System[Provider[@Name='cdrom' or @Name='disk'] and TimeCreated[timediff(@SystemTime) <= 86400000]]]") const args = buildWevtutilArgs(24, 50) expect(args[0]).toBe('qe') expect(args[1]).toBe('System') expect(args[2]).toBe(`/q:${xpathFuer(24)}`) expect(args).toContain('/f:xml') expect(args).toContain('/c:50') expect(args).toContain('/rd:true') }) })