From d5882218ea782dae7ec76b41be3299ae0d693ef3 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Fri, 20 Jan 2017 18:50:36 -0700 Subject: [PATCH] Fix AfterRoutePredicate --- .../predicate/AfterRoutePredicate.java | 23 +++------ .../predicate/AfterRoutePredicateTests.java | 51 +++++++++---------- src/test/resources/application.yml | 1 + 3 files changed, 32 insertions(+), 43 deletions(-) diff --git a/src/main/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicate.java b/src/main/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicate.java index f53a1d23..6a22868b 100644 --- a/src/main/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicate.java +++ b/src/main/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicate.java @@ -5,6 +5,8 @@ import java.util.function.Predicate; import org.springframework.web.server.ServerWebExchange; +import static org.springframework.cloud.gateway.handler.predicate.BetweenRoutePredicate.parseZonedDateTime; + /** * @author Spencer Gibb */ @@ -12,22 +14,11 @@ public class AfterRoutePredicate implements RoutePredicate { @Override public Predicate apply(String dateString, String[] args) { - //TODO: is ZonedDateTime the right thing to use? - try { - final long epoch = Long.parseLong(dateString); + final ZonedDateTime dateTime = parseZonedDateTime(dateString); - return exchange -> { - final long now = System.currentTimeMillis(); - return epoch >= now; - }; - } catch (NumberFormatException e) { - // try ZonedDateTime instead - final ZonedDateTime dateTime = ZonedDateTime.parse(dateString); - - return exchange -> { - final ZonedDateTime now = ZonedDateTime.now(); - return dateTime.isAfter(now); - }; - } + return exchange -> { + final ZonedDateTime now = ZonedDateTime.now(); + return now.isAfter(dateTime); + }; } } diff --git a/src/test/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateTests.java b/src/test/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateTests.java index 27917415..480c206f 100644 --- a/src/test/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateTests.java +++ b/src/test/java/org/springframework/cloud/gateway/handler/predicate/AfterRoutePredicateTests.java @@ -1,15 +1,13 @@ package org.springframework.cloud.gateway.handler.predicate; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - import org.junit.Test; -import org.springframework.mock.http.server.reactive.MockServerHttpRequest; -import org.springframework.mock.http.server.reactive.MockServerHttpResponse; -import org.springframework.web.server.ServerWebExchange; -import org.springframework.web.server.adapter.DefaultServerWebExchange; import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.cloud.gateway.handler.predicate.BetweenRoutePredicateTests.getExchange; +import static org.springframework.cloud.gateway.handler.predicate.BetweenRoutePredicateTests.minusHours; +import static org.springframework.cloud.gateway.handler.predicate.BetweenRoutePredicateTests.minusHoursMillis; +import static org.springframework.cloud.gateway.handler.predicate.BetweenRoutePredicateTests.plusHours; +import static org.springframework.cloud.gateway.handler.predicate.BetweenRoutePredicateTests.plusHoursMillis; /** * @author Spencer Gibb @@ -18,42 +16,41 @@ public class AfterRoutePredicateTests { @Test public void beforeStringWorks() { - String dateString = ZonedDateTime.now().minusHours(1).format(DateTimeFormatter.ISO_ZONED_DATE_TIME); + String dateString = minusHours(1); - final boolean result = new AfterRoutePredicate().apply(dateString, null).test(getExchange()); + final boolean result = runPredicate(dateString); - assertThat(result).isFalse(); + assertThat(result).isTrue(); } @Test public void afterStringWorks() { - String dateString = ZonedDateTime.now().plusHours(1).format(DateTimeFormatter.ISO_ZONED_DATE_TIME); + String dateString = plusHours(1); - final boolean result = new AfterRoutePredicate().apply(dateString, null).test(getExchange()); - - assertThat(result).isTrue(); - } - - @Test - public void beforeEpochWorks() { - String dateString = String.valueOf(System.currentTimeMillis()-(1000*60*60)); - - final boolean result = new AfterRoutePredicate().apply(dateString, null).test(getExchange()); + final boolean result = runPredicate(dateString); assertThat(result).isFalse(); } @Test - public void afterEpochWorks() { - String dateString = String.valueOf(System.currentTimeMillis()+(1000*60*60)); + public void beforeEpochWorks() { + String dateString = minusHoursMillis(1); - final boolean result = new AfterRoutePredicate().apply(dateString, null).test(getExchange()); + final boolean result = runPredicate(dateString); assertThat(result).isTrue(); } - private ServerWebExchange getExchange() { - final MockServerHttpRequest request = MockServerHttpRequest.get("http://example.com").build(); - return new DefaultServerWebExchange(request, new MockServerHttpResponse()); + @Test + public void afterEpochWorks() { + String dateString = plusHoursMillis(1); + + final boolean result = runPredicate(dateString); + + assertThat(result).isFalse(); + } + + private boolean runPredicate(String dateString) { + return new AfterRoutePredicate().apply(dateString, null).test(getExchange()); } } diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index e9b59078..f8513bc5 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -17,6 +17,7 @@ spring: - Query=foo, ba. - Query=baz - Cookie=chocolate, ch.p + - After=1900-01-20T17:42:47.789-07:00[America/Denver] filters: - AddResponseHeader=X-Response-Foo, Bar