Terminplaner: Zaehler je IP getrennt und Abgelaufene zuerst, Notantwort beim Schreiben, Pruefung aller Antworten auf interne IDs
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
2b0c05b8e9
commit
ae1886c030
4 files changed
+226
-31
No files matched your search
@@ -167,3 +167,55 @@ test('darfG01: 5 je Adresse und Funktion und Tag; die Zaehler der Arten stoeren
|
||||
assert.equal(darfG01('f1', 'max@example.com', plus(TAG)), true, 'am naechsten Tag wieder')
|
||||
assert.equal(darfG08('f1', 'max@example.com', T0), true, 'G08 zaehlt getrennt von G01')
|
||||
})
|
||||
|
||||
// ---------------------------------------------------------------- Speicher: IP-Zaehler getrennt, Abgelaufene zuerst
|
||||
|
||||
/** Eindeutige IPv4-Adresse Nr. i (10.a.b.c). */
|
||||
const ipNr = (i) => `10.${(i >> 16) & 255}.${(i >> 8) & 255}.${i & 255}`
|
||||
|
||||
test('Speicher: 10 000 und mehr verschiedene IPs verdraengen keinen laufenden Zaehler je Adresse, Funktion oder siteKey', () => {
|
||||
// G01 einer Adresse ausgeschoepft, eine Haltungsgrenze angebrochen
|
||||
for (let i = 0; i < 5; i += 1) assert.equal(darfG01('f1', 'opfer@example.com', T0), true)
|
||||
assert.equal(darfG01('f1', 'opfer@example.com', T0), false)
|
||||
for (let i = 0; i < 60; i += 1) assert.equal(darfHaltung('abcdefghijklmnop', T0), true)
|
||||
assert.equal(darfG08('f1', 'opfer@example.com', T0), true)
|
||||
|
||||
// ueber 10 000 verschiedene Quelladressen: alle drei IP-Arten
|
||||
for (let i = 0; i < 10500; i += 1) darfAnfrage(ipNr(i), T0)
|
||||
for (let i = 0; i < 10500; i += 1) darfBuchungsversuch(ipNr(i), plus(1000))
|
||||
for (let i = 0; i < 10500; i += 1) darfWiderrufsversuch(ipNr(i), plus(2000))
|
||||
|
||||
assert.equal(darfG01('f1', 'opfer@example.com', plus(3000)), false, 'die G01-Grenze der Adresse gilt weiter')
|
||||
assert.equal(darfHaltung('abcdefghijklmnop', plus(3000)), false, 'die Haltungsgrenze gilt weiter')
|
||||
assert.equal(darfG08('f1', 'opfer@example.com', plus(3000)), true, 'G08 zaehlt weiter ab 1 (2 von 3 frei)')
|
||||
assert.equal(darfG08('f1', 'opfer@example.com', plus(3000)), true)
|
||||
assert.equal(darfG08('f1', 'opfer@example.com', plus(3000)), false, 'und die dritte war die letzte')
|
||||
})
|
||||
|
||||
test('Speicher: eine volle Map raeumt zuerst Abgelaufene ab - ein laufender Zaehler bleibt, auch der aelteste', () => {
|
||||
// der aelteste Zaehler laeuft eine Stunde; danach fuellen Minuten-Zaehler die IP-Map
|
||||
for (let i = 0; i < 10; i += 1) assert.equal(darfWiderrufsversuch('203.0.113.7', T0), true)
|
||||
assert.equal(darfWiderrufsversuch('203.0.113.7', T0), false)
|
||||
for (let i = 0; i < 9999; i += 1) darfAnfrage(ipNr(i), T0) // Map voll (10 000 Schluessel)
|
||||
// zwei Minuten spaeter sind alle Minuten-Zaehler abgelaufen: neue Schluessel schaffen Platz, ohne den laufenden zu verdraengen
|
||||
for (let i = 0; i < 300; i += 1) darfAnfrage(ipNr(20000 + i), plus(2 * MINUTE))
|
||||
assert.equal(darfWiderrufsversuch('203.0.113.7', plus(2 * MINUTE)), false, 'der Stunden-Zaehler ueberlebt')
|
||||
assert.equal(darfAnfrage(ipNr(5), plus(2 * MINUTE)), true, 'abgelaufene Zaehler zaehlen neu')
|
||||
|
||||
// dasselbe in der Map fuer alle anderen Zaehler
|
||||
resetTermineLimitsForTests()
|
||||
assert.equal(zaehle('alt', 1, TAG, T0), true)
|
||||
for (let i = 0; i < 9999; i += 1) zaehle(`k${i}`, 1, MINUTE, T0)
|
||||
for (let i = 0; i < 300; i += 1) zaehle(`neu${i}`, 1, MINUTE, plus(2 * MINUTE))
|
||||
assert.equal(zaehle('alt', 1, TAG, plus(2 * MINUTE)), false, 'der Tages-Zaehler ueberlebt')
|
||||
})
|
||||
|
||||
test('Speicher: sind alle Zaehler noch am Laufen, faellt wie bisher der aelteste weg (Obergrenze gilt je Map)', () => {
|
||||
assert.equal(zaehle('aeltester', 1, TAG, T0), true)
|
||||
for (let i = 0; i < 9999; i += 1) zaehle(`k${i}`, 1, TAG, plus(1000))
|
||||
for (let i = 0; i < 10000; i += 1) darfAnfrage(ipNr(i), plus(1000)) // die IP-Map ist eine andere
|
||||
assert.equal(zaehle('aeltester', 1, TAG, plus(2000)), false, 'durch die IP-Zaehler nicht verdraengt')
|
||||
zaehle('neu', 1, TAG, plus(3000)) // 10 001. Schluessel der Map: der aelteste faellt weg
|
||||
assert.equal(zaehle('aeltester', 1, TAG, plus(4000)), true)
|
||||
assert.equal(zaehle('neu', 1, TAG, plus(4000)), false)
|
||||
})
|
||||
Reference in new issue
Block a user