createServerRequest('GET', '/'); $resolver = new ClientIpResolver(); self::assertSame('0.0.0.0', $resolver->resolve($request)); } public function testResolveReturnsRemoteAddrWhenProxyNotTrusted(): void { $request = (new ServerRequestFactory())->createServerRequest('GET', '/', [ 'REMOTE_ADDR' => '10.0.0.1', 'HTTP_X_FORWARDED_FOR' => '203.0.113.10', ]); $resolver = new ClientIpResolver(['127.0.0.1']); self::assertSame('10.0.0.1', $resolver->resolve($request)); } public function testResolveReturnsForwardedIpWhenProxyTrusted(): void { $request = (new ServerRequestFactory())->createServerRequest('GET', '/', [ 'REMOTE_ADDR' => '127.0.0.1', 'HTTP_X_FORWARDED_FOR' => '203.0.113.10, 198.51.100.12', ]); $resolver = new ClientIpResolver(['127.0.0.1']); self::assertSame('203.0.113.10', $resolver->resolve($request)); } public function testResolveFallsBackToRemoteAddrWhenForwardedIpInvalid(): void { $request = (new ServerRequestFactory())->createServerRequest('GET', '/', [ 'REMOTE_ADDR' => '127.0.0.1', 'HTTP_X_FORWARDED_FOR' => 'not-an-ip', ]); $resolver = new ClientIpResolver(['*']); self::assertSame('127.0.0.1', $resolver->resolve($request)); } }