54 lines
1.7 KiB
Java
54 lines
1.7 KiB
Java
package dev.coph.nextusweb.server.ratelimit;
|
|
|
|
import io.netty.handler.codec.http.DefaultHttpRequest;
|
|
import io.netty.handler.codec.http.HttpMethod;
|
|
import io.netty.handler.codec.http.HttpRequest;
|
|
import io.netty.handler.codec.http.HttpVersion;
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
import static org.junit.jupiter.api.Assertions.*;
|
|
|
|
class KeyResolverTest {
|
|
|
|
private HttpRequest req(String header, String value) {
|
|
HttpRequest r = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/");
|
|
if (header != null) r.headers().set(header, value);
|
|
return r;
|
|
}
|
|
|
|
@Test
|
|
void clientIpUsesRemoteWhenNoForwardedHeader() {
|
|
assertEquals("10.0.0.1", KeyResolver.clientIp().resolve(req(null, null), "10.0.0.1"));
|
|
}
|
|
|
|
@Test
|
|
void clientIpUsesForwardedHeaderFirstValue() {
|
|
HttpRequest r = req("X-Forwarded-For", "1.1.1.1, 2.2.2.2");
|
|
assertEquals("1.1.1.1", KeyResolver.clientIp().resolve(r, "10.0.0.1"));
|
|
}
|
|
|
|
@Test
|
|
void clientIpHandlesSingleForwardedValue() {
|
|
HttpRequest r = req("X-Forwarded-For", "3.3.3.3");
|
|
assertEquals("3.3.3.3", KeyResolver.clientIp().resolve(r, "10.0.0.1"));
|
|
}
|
|
|
|
@Test
|
|
void userOrIpReturnsBearerToken() {
|
|
HttpRequest r = req("Authorization", "Bearer abc123");
|
|
assertEquals("u:abc123", KeyResolver.userOrIp().resolve(r, "10.0.0.1"));
|
|
}
|
|
|
|
@Test
|
|
void userOrIpFallsBackToClientIp() {
|
|
HttpRequest r = req(null, null);
|
|
assertEquals("ip:10.0.0.1", KeyResolver.userOrIp().resolve(r, "10.0.0.1"));
|
|
}
|
|
|
|
@Test
|
|
void userOrIpIgnoresNonBearerAuth() {
|
|
HttpRequest r = req("Authorization", "Basic xyz");
|
|
assertEquals("ip:10.0.0.1", KeyResolver.userOrIp().resolve(r, "10.0.0.1"));
|
|
}
|
|
}
|