label()); self::assertSame('203.0.113.10', $event->getIpAddress()); self::assertSame(101, $event->getRequestCount()); self::assertSame(60, $event->getWindowSeconds()); self::assertSame('/login', $event->getEndpoint()); self::assertSame('/login', $event->getRequestPath()); self::assertSame('tenant-a', $event->tenantIdentifier()); self::assertSame('101 requests in 60 seconds', $event->getReason()); self::assertSame(SecurityEventSeverity::ERROR, $event->getSeverity()); } #[Test] #[TestDox('Rate-limit detection rejects invalid measurements')] public function rejectsInvalidMeasurements(): void { foreach ([ ['', 101, 60, '/login'], ['203.0.113.10', 0, 60, '/login'], ['203.0.113.10', 101, 0, '/login'], ['203.0.113.10', 101, 60, ''], ] as $arguments) { try { new RateLimitExceededEvent(...$arguments); self::fail('Invalid rate-limit measurements were accepted.'); } catch (\InvalidArgumentException) { $this->addToAssertionCount(1); } } } }