1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.client5.http.impl.cache;
28
29 import java.time.Instant;
30
31 import org.apache.hc.client5.http.ClientProtocolException;
32 import org.apache.hc.client5.http.classic.methods.HttpGet;
33 import org.apache.hc.client5.http.utils.DateUtils;
34 import org.apache.hc.core5.http.HttpRequest;
35 import org.apache.hc.core5.http.HttpResponse;
36 import org.apache.hc.core5.http.HttpStatus;
37 import org.apache.hc.core5.http.message.BasicHttpResponse;
38 import org.apache.hc.core5.http.support.BasicRequestBuilder;
39 import org.junit.jupiter.api.Assertions;
40 import org.junit.jupiter.api.BeforeEach;
41 import org.junit.jupiter.api.Test;
42
43 public class TestResponseProtocolCompliance {
44
45 private ResponseProtocolCompliance impl;
46
47 @BeforeEach
48 public void setUp() {
49 impl = new ResponseProtocolCompliance();
50 }
51
52 private void setMinimalResponseHeaders(final HttpResponse resp) {
53 resp.setHeader("Date", DateUtils.formatStandardDate(Instant.now()));
54 resp.setHeader("Server", "MyServer/1.0");
55 }
56
57 private HttpResponse makePartialResponse(final int nbytes) {
58 final HttpResponse resp = new BasicHttpResponse(HttpStatus.SC_PARTIAL_CONTENT, "Partial Content");
59 setMinimalResponseHeaders(resp);
60 resp.setHeader("Content-Length","" + nbytes);
61 resp.setHeader("Content-Range","0-127/256");
62 return resp;
63 }
64
65 @Test
66 public void throwsExceptionIfOriginReturnsPartialResponseWhenNotRequested() throws Exception {
67 final HttpGet req = new HttpGet("http://foo.example.com/");
68 final HttpRequest wrapper = BasicRequestBuilder.copy(req).build();
69 final int nbytes = 128;
70 final HttpResponse resp = makePartialResponse(nbytes);
71
72 Assertions.assertThrows(ClientProtocolException.class, () ->
73 impl.ensureProtocolCompliance(wrapper, req, resp));
74 }
75
76 }