spring-cloud/spring-cloud-gateway

Identical Routes are not considered equal: AsyncPredicate does not override equals()

Ouverte

#3 236 ouverte le 25 janv. 2024

 (6 commentaires) (0 réaction) (0 personne assignée)Java (3 204 forks)batch import
bughelp wanted

Métriques du dépôt

Stars
 (4 284 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

Description

Two logically equal Routes are not programmatically equal since Route's equals() compares predicates, and the AsyncPredicate class does not override equals() (hence you get a simple reference comparison). Here's a test that reproduces the issue:

class RouteEqualityTest {

    @Test
    void testTwoIdenticalRouteAreEqual() {
        assertThat(getRouteBuilderStub().build()).isEqualTo(getRouteBuilderStub().build());
    }

    private Route.AsyncBuilder getRouteBuilderStub() {
        return Route.async()
                .id("123")
                .uri("https://example.com")
                .predicate(exchange -> exchange.getRequest()
                        .getPath()
                        .value()
                        .equals("/test-path"));
    }
}

Guide contributeur