Prevent improper use of testing framework APIs

Prior to this commit, a lot of work had been done to prevent improper
use of testing Framework APIs throughout the codebase; however, there
were still some loopholes.

This commit addresses these loopholes by introducing additional
Checkstyle rules (and modifying existing rules) to prevent improper use
of testing framework APIs in production code as well as in test code.

- Checkstyle rules for banned imports have been refactored into
  multiple rules specific to JUnit 3, JUnit 4, JUnit Jupiter, and
  TestNG.
- Accidental usage of org.junit.Assume has been switched to
  org.junit.jupiter.api.Assumptions.
- All test classes now reside under org.springframework packages.
- All test classes (including abstract test classes) now conform to the
  `*Tests` naming convention.
  - As an added bonus, tests in the renamed
    ScenariosForSpringSecurityExpressionTests are now included in the
    build.
- Dead JUnit 4 parameterized code has been removed from
  DefaultServerWebExchangeCheckNotModifiedTests.

Closes gh-22962
This commit is contained in:
Sam Brannen
2019-09-12 11:15:30 +02:00
parent 92d3f7e7d7
commit 30cff46e7f
50 changed files with 163 additions and 170 deletions

View File

@@ -27,7 +27,7 @@ import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import org.springframework.core.ResolvableType;
import org.springframework.core.io.buffer.AbstractLeakCheckingTestCase;
import org.springframework.core.io.buffer.AbstractLeakCheckingTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
@@ -41,7 +41,7 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* @author Sebastien Deleuze
*/
public class FormHttpMessageReaderTests extends AbstractLeakCheckingTestCase {
public class FormHttpMessageReaderTests extends AbstractLeakCheckingTests {
private final FormHttpMessageReader reader = new FormHttpMessageReader();

View File

@@ -25,7 +25,7 @@ import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import org.springframework.core.ResolvableType;
import org.springframework.core.io.buffer.AbstractLeakCheckingTestCase;
import org.springframework.core.io.buffer.AbstractLeakCheckingTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.core.io.buffer.support.DataBufferTestUtils;
@@ -40,7 +40,7 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* @author Sebastien Deleuze
*/
public class FormHttpMessageWriterTests extends AbstractLeakCheckingTestCase {
public class FormHttpMessageWriterTests extends AbstractLeakCheckingTests {
private final FormHttpMessageWriter writer = new FormHttpMessageWriter();

View File

@@ -26,7 +26,7 @@ import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import org.springframework.core.ResolvableType;
import org.springframework.core.io.buffer.AbstractLeakCheckingTestCase;
import org.springframework.core.io.buffer.AbstractLeakCheckingTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.MediaType;
import org.springframework.http.codec.json.Jackson2JsonDecoder;
@@ -39,7 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat;
*
* @author Sebastien Deleuze
*/
public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingTestCase {
public class ServerSentEventHttpMessageReaderTests extends AbstractLeakCheckingTests {
private ServerSentEventHttpMessageReader messageReader =
new ServerSentEventHttpMessageReader(new Jackson2JsonDecoder());

View File

@@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import org.springframework.core.ResolvableType;
import org.springframework.core.codec.AbstractDecoderTestCase;
import org.springframework.core.codec.AbstractDecoderTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.codec.Pojo;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
@@ -41,7 +41,7 @@ import static org.springframework.http.MediaType.APPLICATION_JSON;
*
* @author Sebastien Deleuze
*/
public class Jackson2CborDecoderTests extends AbstractDecoderTestCase<Jackson2CborDecoder> {
public class Jackson2CborDecoderTests extends AbstractDecoderTests<Jackson2CborDecoder> {
private final static MimeType CBOR_MIME_TYPE = new MimeType("application", "cbor");

View File

@@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import org.springframework.core.ResolvableType;
import org.springframework.core.io.buffer.AbstractLeakCheckingTestCase;
import org.springframework.core.io.buffer.AbstractLeakCheckingTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.support.DataBufferTestUtils;
import org.springframework.http.codec.Pojo;
@@ -43,7 +43,7 @@ import static org.springframework.http.MediaType.APPLICATION_XML;
*
* @author Sebastien Deleuze
*/
public class Jackson2CborEncoderTests extends AbstractLeakCheckingTestCase {
public class Jackson2CborEncoderTests extends AbstractLeakCheckingTests {
private final static MimeType CBOR_MIME_TYPE = new MimeType("application", "cbor");

View File

@@ -34,7 +34,7 @@ import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import org.springframework.core.ResolvableType;
import org.springframework.core.codec.AbstractDecoderTestCase;
import org.springframework.core.codec.AbstractDecoderTests;
import org.springframework.core.codec.CodecException;
import org.springframework.core.codec.DecodingException;
import org.springframework.core.io.buffer.DataBuffer;
@@ -61,7 +61,7 @@ import static org.springframework.http.codec.json.Jackson2CodecSupport.JSON_VIEW
* @author Sebastien Deleuze
* @author Rossen Stoyanchev
*/
public class Jackson2JsonDecoderTests extends AbstractDecoderTestCase<Jackson2JsonDecoder> {
public class Jackson2JsonDecoderTests extends AbstractDecoderTests<Jackson2JsonDecoder> {
private Pojo pojo1 = new Pojo("f1", "b1");

View File

@@ -32,7 +32,7 @@ import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import org.springframework.core.ResolvableType;
import org.springframework.core.codec.AbstractEncoderTestCase;
import org.springframework.core.codec.AbstractEncoderTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.MediaType;
@@ -55,7 +55,7 @@ import static org.springframework.http.codec.json.Jackson2CodecSupport.JSON_VIEW
/**
* @author Sebastien Deleuze
*/
public class Jackson2JsonEncoderTests extends AbstractEncoderTestCase<Jackson2JsonEncoder> {
public class Jackson2JsonEncoderTests extends AbstractEncoderTests<Jackson2JsonEncoder> {
public Jackson2JsonEncoderTests() {
super(new Jackson2JsonEncoder());

View File

@@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import org.springframework.core.ResolvableType;
import org.springframework.core.codec.AbstractDecoderTestCase;
import org.springframework.core.codec.AbstractDecoderTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.codec.Pojo;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
@@ -40,7 +40,7 @@ import static org.springframework.http.MediaType.APPLICATION_JSON;
*
* @author Sebastien Deleuze
*/
public class Jackson2SmileDecoderTests extends AbstractDecoderTestCase<Jackson2SmileDecoder> {
public class Jackson2SmileDecoderTests extends AbstractDecoderTests<Jackson2SmileDecoder> {
private final static MimeType SMILE_MIME_TYPE = new MimeType("application", "x-jackson-smile");
private final static MimeType STREAM_SMILE_MIME_TYPE = new MimeType("application", "stream+x-jackson-smile");

View File

@@ -28,7 +28,7 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import org.springframework.core.ResolvableType;
import org.springframework.core.codec.AbstractEncoderTestCase;
import org.springframework.core.codec.AbstractEncoderTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.support.DataBufferTestUtils;
import org.springframework.http.codec.Pojo;
@@ -45,7 +45,7 @@ import static org.springframework.http.MediaType.APPLICATION_XML;
*
* @author Sebastien Deleuze
*/
public class Jackson2SmileEncoderTests extends AbstractEncoderTestCase<Jackson2SmileEncoder> {
public class Jackson2SmileEncoderTests extends AbstractEncoderTests<Jackson2SmileEncoder> {
private final static MimeType SMILE_MIME_TYPE = new MimeType("application", "x-jackson-smile");
private final static MimeType STREAM_SMILE_MIME_TYPE = new MimeType("application", "stream+x-jackson-smile");

View File

@@ -34,7 +34,7 @@ import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
import org.springframework.core.codec.DecodingException;
import org.springframework.core.io.buffer.AbstractLeakCheckingTestCase;
import org.springframework.core.io.buffer.AbstractLeakCheckingTests;
import org.springframework.core.io.buffer.DataBuffer;
import static java.util.Arrays.asList;
@@ -45,7 +45,7 @@ import static java.util.Collections.singletonList;
* @author Rossen Stoyanchev
* @author Juergen Hoeller
*/
public class Jackson2TokenizerTests extends AbstractLeakCheckingTestCase {
public class Jackson2TokenizerTests extends AbstractLeakCheckingTests {
private JsonFactory jsonFactory;

View File

@@ -32,7 +32,7 @@ import org.springframework.core.ResolvableType;
import org.springframework.core.codec.StringDecoder;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.buffer.AbstractLeakCheckingTestCase;
import org.springframework.core.io.buffer.AbstractLeakCheckingTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
@@ -52,7 +52,7 @@ import static org.mockito.Mockito.mock;
* @author Sebastien Deleuze
* @author Rossen Stoyanchev
*/
public class MultipartHttpMessageWriterTests extends AbstractLeakCheckingTestCase {
public class MultipartHttpMessageWriterTests extends AbstractLeakCheckingTests {
private final MultipartHttpMessageWriter writer =
new MultipartHttpMessageWriter(ClientCodecConfigurer.create().getWriters());

View File

@@ -26,7 +26,7 @@ import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import org.springframework.core.ResolvableType;
import org.springframework.core.codec.AbstractDecoderTestCase;
import org.springframework.core.codec.AbstractDecoderTests;
import org.springframework.core.codec.DecodingException;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
@@ -46,7 +46,7 @@ import static org.springframework.core.io.buffer.DataBufferUtils.release;
*
* @author Sebastien Deleuze
*/
public class ProtobufDecoderTests extends AbstractDecoderTestCase<ProtobufDecoder> {
public class ProtobufDecoderTests extends AbstractDecoderTests<ProtobufDecoder> {
private final static MimeType PROTOBUF_MIME_TYPE = new MimeType("application", "x-protobuf");

View File

@@ -25,7 +25,7 @@ import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import org.springframework.core.codec.AbstractEncoderTestCase;
import org.springframework.core.codec.AbstractEncoderTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.MediaType;
@@ -41,7 +41,7 @@ import static org.springframework.core.ResolvableType.forClass;
*
* @author Sebastien Deleuze
*/
public class ProtobufEncoderTests extends AbstractEncoderTestCase<ProtobufEncoder> {
public class ProtobufEncoderTests extends AbstractEncoderTests<ProtobufEncoder> {
private final static MimeType PROTOBUF_MIME_TYPE = new MimeType("application", "x-protobuf");

View File

@@ -29,7 +29,7 @@ import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import org.springframework.core.ResolvableType;
import org.springframework.core.io.buffer.AbstractLeakCheckingTestCase;
import org.springframework.core.io.buffer.AbstractLeakCheckingTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.MediaType;
import org.springframework.http.codec.Pojo;
@@ -45,7 +45,7 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* @author Sebastien Deleuze
*/
public class Jaxb2XmlDecoderTests extends AbstractLeakCheckingTestCase {
public class Jaxb2XmlDecoderTests extends AbstractLeakCheckingTests {
private static final String POJO_ROOT = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<pojo>" +

View File

@@ -29,7 +29,7 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import org.springframework.core.ResolvableType;
import org.springframework.core.codec.AbstractEncoderTestCase;
import org.springframework.core.codec.AbstractEncoderTests;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.http.MediaType;
import org.springframework.http.codec.Pojo;
@@ -43,7 +43,7 @@ import static org.springframework.core.io.buffer.DataBufferUtils.release;
* @author Sebastien Deleuze
* @author Arjen Poutsma
*/
public class Jaxb2XmlEncoderTests extends AbstractEncoderTestCase<Jaxb2XmlEncoder> {
public class Jaxb2XmlEncoderTests extends AbstractEncoderTests<Jaxb2XmlEncoder> {
public Jaxb2XmlEncoderTests() {
super(new Jaxb2XmlEncoder());

View File

@@ -26,7 +26,7 @@ import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import org.springframework.core.io.buffer.AbstractLeakCheckingTestCase;
import org.springframework.core.io.buffer.AbstractLeakCheckingTests;
import org.springframework.core.io.buffer.DataBuffer;
import static org.assertj.core.api.Assertions.assertThat;
@@ -34,7 +34,7 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* @author Arjen Poutsma
*/
public class XmlEventDecoderTests extends AbstractLeakCheckingTestCase {
public class XmlEventDecoderTests extends AbstractLeakCheckingTests {
private static final String XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<pojo>" +

View File

@@ -16,20 +16,15 @@
package org.springframework.web.server.adapter;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Locale;
import java.util.TimeZone;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.mock.http.server.reactive.test.MockServerHttpRequest;
import org.springframework.mock.web.test.server.MockServerWebExchange;
@@ -42,37 +37,23 @@ import static org.springframework.mock.http.server.reactive.test.MockServerHttpR
*
* @author Rossen Stoyanchev
*/
public class DefaultServerWebExchangeCheckNotModifiedTests {
class DefaultServerWebExchangeCheckNotModifiedTests {
private static final String CURRENT_TIME = "Wed, 09 Apr 2014 09:57:42 GMT";
private final Instant currentDate = Instant.now().truncatedTo(ChronoUnit.SECONDS);
private SimpleDateFormat dateFormat;
private Instant currentDate;
@Parameter
public HttpMethod method;
@Parameters(name = "{0}")
static public Iterable<Object[]> safeMethods() {
return Arrays.asList(new Object[][] {
{HttpMethod.GET},
{HttpMethod.HEAD}
});
}
private SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
@BeforeEach
public void setup() throws URISyntaxException {
this.currentDate = Instant.now().truncatedTo(ChronoUnit.SECONDS);
this.dateFormat = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
void setup() {
this.dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
}
@Test
public void checkNotModifiedNon2xxStatus() {
void checkNotModifiedNon2xxStatus() {
MockServerHttpRequest request = get("/").ifModifiedSince(this.currentDate.toEpochMilli()).build();
MockServerWebExchange exchange = MockServerWebExchange.from(request);
exchange.getResponse().setStatusCode(HttpStatus.NOT_MODIFIED);
@@ -83,7 +64,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test // SPR-14559
public void checkNotModifiedInvalidIfNoneMatchHeader() {
void checkNotModifiedInvalidIfNoneMatchHeader() {
String eTag = "\"etagvalue\"";
MockServerWebExchange exchange = MockServerWebExchange.from(get("/").ifNoneMatch("missingquotes"));
assertThat(exchange.checkNotModified(eTag)).isFalse();
@@ -92,7 +73,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedHeaderAlreadySet() {
void checkNotModifiedHeaderAlreadySet() {
MockServerHttpRequest request = get("/").ifModifiedSince(currentDate.toEpochMilli()).build();
MockServerWebExchange exchange = MockServerWebExchange.from(request);
exchange.getResponse().getHeaders().add("Last-Modified", CURRENT_TIME);
@@ -104,7 +85,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedTimestamp() throws Exception {
void checkNotModifiedTimestamp() throws Exception {
MockServerHttpRequest request = get("/").ifModifiedSince(currentDate.toEpochMilli()).build();
MockServerWebExchange exchange = MockServerWebExchange.from(request);
@@ -115,7 +96,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkModifiedTimestamp() {
void checkModifiedTimestamp() {
Instant oneMinuteAgo = currentDate.minusSeconds(60);
MockServerHttpRequest request = get("/").ifModifiedSince(oneMinuteAgo.toEpochMilli()).build();
MockServerWebExchange exchange = MockServerWebExchange.from(request);
@@ -127,7 +108,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedETag() {
void checkNotModifiedETag() {
String eTag = "\"Foo\"";
MockServerWebExchange exchange = MockServerWebExchange.from(get("/").ifNoneMatch(eTag));
@@ -138,7 +119,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedETagWithSeparatorChars() {
void checkNotModifiedETagWithSeparatorChars() {
String eTag = "\"Foo, Bar\"";
MockServerWebExchange exchange = MockServerWebExchange.from(get("/").ifNoneMatch(eTag));
@@ -148,9 +129,8 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
assertThat(exchange.getResponse().getHeaders().getETag()).isEqualTo(eTag);
}
@Test
public void checkModifiedETag() {
void checkModifiedETag() {
String currentETag = "\"Foo\"";
String oldEtag = "Bar";
MockServerWebExchange exchange = MockServerWebExchange.from(get("/").ifNoneMatch(oldEtag));
@@ -162,7 +142,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedUnpaddedETag() {
void checkNotModifiedUnpaddedETag() {
String eTag = "Foo";
String paddedEtag = String.format("\"%s\"", eTag);
MockServerWebExchange exchange = MockServerWebExchange.from(get("/").ifNoneMatch(paddedEtag));
@@ -174,7 +154,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkModifiedUnpaddedETag() {
void checkModifiedUnpaddedETag() {
String currentETag = "Foo";
String oldEtag = "Bar";
MockServerWebExchange exchange = MockServerWebExchange.from(get("/").ifNoneMatch(oldEtag));
@@ -186,7 +166,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedWildcardIsIgnored() {
void checkNotModifiedWildcardIsIgnored() {
String eTag = "\"Foo\"";
MockServerWebExchange exchange = MockServerWebExchange.from(get("/").ifNoneMatch("*"));
assertThat(exchange.checkNotModified(eTag)).isFalse();
@@ -196,7 +176,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedETagAndTimestamp() {
void checkNotModifiedETagAndTimestamp() {
String eTag = "\"Foo\"";
long time = currentDate.toEpochMilli();
MockServerHttpRequest request = get("/").ifNoneMatch(eTag).ifModifiedSince(time).build();
@@ -211,7 +191,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
// SPR-14224
@Test
public void checkNotModifiedETagAndModifiedTimestamp() {
void checkNotModifiedETagAndModifiedTimestamp() {
String eTag = "\"Foo\"";
Instant oneMinuteAgo = currentDate.minusSeconds(60);
MockServerWebExchange exchange = MockServerWebExchange.from(get("/")
@@ -227,7 +207,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkModifiedETagAndNotModifiedTimestamp() throws Exception {
void checkModifiedETagAndNotModifiedTimestamp() throws Exception {
String currentETag = "\"Foo\"";
String oldEtag = "\"Bar\"";
long time = currentDate.toEpochMilli();
@@ -242,7 +222,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedETagWeakStrong() {
void checkNotModifiedETagWeakStrong() {
String eTag = "\"Foo\"";
String weakEtag = String.format("W/%s", eTag);
MockServerWebExchange exchange = MockServerWebExchange.from(get("/").ifNoneMatch(eTag));
@@ -254,7 +234,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedETagStrongWeak() {
void checkNotModifiedETagStrongWeak() {
String eTag = "\"Foo\"";
MockServerHttpRequest request = get("/").ifNoneMatch(String.format("W/%s", eTag)).build();
MockServerWebExchange exchange = MockServerWebExchange.from(request);
@@ -266,7 +246,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedMultipleETags() {
void checkNotModifiedMultipleETags() {
String eTag = "\"Bar\"";
String multipleETags = String.format("\"Foo\", %s", eTag);
MockServerWebExchange exchange = MockServerWebExchange.from(get("/").ifNoneMatch(multipleETags));
@@ -278,7 +258,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedTimestampWithLengthPart() throws Exception {
void checkNotModifiedTimestampWithLengthPart() throws Exception {
long epochTime = dateFormat.parse(CURRENT_TIME).getTime();
String header = "Wed, 09 Apr 2014 09:57:42 GMT; length=13774";
MockServerHttpRequest request = get("/").header("If-Modified-Since", header).build();
@@ -291,7 +271,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkModifiedTimestampWithLengthPart() throws Exception {
void checkModifiedTimestampWithLengthPart() throws Exception {
long epochTime = dateFormat.parse(CURRENT_TIME).getTime();
String header = "Tue, 08 Apr 2014 09:57:42 GMT; length=13774";
MockServerHttpRequest request = get("/").header("If-Modified-Since", header).build();
@@ -304,7 +284,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedTimestampConditionalPut() throws Exception {
void checkNotModifiedTimestampConditionalPut() throws Exception {
Instant oneMinuteAgo = currentDate.minusSeconds(60);
long millis = currentDate.toEpochMilli();
MockServerHttpRequest request = MockServerHttpRequest.put("/").ifUnmodifiedSince(millis).build();
@@ -316,7 +296,7 @@ public class DefaultServerWebExchangeCheckNotModifiedTests {
}
@Test
public void checkNotModifiedTimestampConditionalPutConflict() throws Exception {
void checkNotModifiedTimestampConditionalPutConflict() throws Exception {
Instant oneMinuteAgo = currentDate.minusSeconds(60);
long millis = oneMinuteAgo.toEpochMilli();
MockServerHttpRequest request = MockServerHttpRequest.put("/").ifUnmodifiedSince(millis).build();