View Javadoc
1   /*
2    * ====================================================================
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   * ====================================================================
20   *
21   * This software consists of voluntary contributions made by many
22   * individuals on behalf of the Apache Software Foundation.  For more
23   * information on the Apache Software Foundation, please see
24   * <http://www.apache.org/>.
25   *
26   */
27  
28  package org.apache.hc.client5.http.impl.cache;
29  
30  import static org.hamcrest.MatcherAssert.assertThat;
31  
32  import java.time.Instant;
33  import java.time.LocalDate;
34  import java.time.Month;
35  import java.time.ZoneId;
36  
37  import org.apache.hc.client5.http.utils.DateUtils;
38  import org.apache.hc.core5.http.HttpHeaders;
39  import org.apache.hc.core5.http.message.BasicHeader;
40  import org.apache.hc.core5.http.message.HeaderGroup;
41  import org.hamcrest.CoreMatchers;
42  import org.junit.jupiter.api.Test;
43  
44  /**
45   * Unit tests for {@link DateSupport}.
46   */
47  public class TestDateSupport {
48  
49      private static Instant createInstant(final int year, final Month month, final int day) {
50          return LocalDate.of(year, month, day).atStartOfDay(ZoneId.of("GMT")).toInstant();
51      }
52  
53      @Test
54      public void testIsBefore() throws Exception {
55          final HeaderGroup message1 = new HeaderGroup();
56          final HeaderGroup message2 = new HeaderGroup();
57          assertThat(DateSupport.isBefore(null, null, HttpHeaders.DATE), CoreMatchers.equalTo(false));
58          assertThat(DateSupport.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
59  
60          message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
61          message2.setHeader(new BasicHeader(HttpHeaders.DATE, "eh?"));
62          assertThat(DateSupport.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
63  
64          message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
65          message2.setHeader(new BasicHeader(HttpHeaders.DATE, DateUtils.formatStandardDate(createInstant(2017, Month.DECEMBER, 26))));
66          assertThat(DateSupport.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
67  
68          message1.setHeader(new BasicHeader(HttpHeaders.DATE, DateUtils.formatStandardDate(createInstant(2017, Month.DECEMBER, 25))));
69          message2.setHeader(new BasicHeader(HttpHeaders.DATE, DateUtils.formatStandardDate(createInstant(2017, Month.DECEMBER, 26))));
70          assertThat(DateSupport.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(true));
71  
72          message1.setHeader(new BasicHeader(HttpHeaders.DATE, DateUtils.formatStandardDate(createInstant(2017, Month.DECEMBER, 27))));
73          message2.setHeader(new BasicHeader(HttpHeaders.DATE, DateUtils.formatStandardDate(createInstant(2017, Month.DECEMBER, 26))));
74          assertThat(DateSupport.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
75      }
76  
77      @Test
78      public void testIsAfter() throws Exception {
79          final HeaderGroup message1 = new HeaderGroup();
80          final HeaderGroup message2 = new HeaderGroup();
81          assertThat(DateSupport.isAfter(null, null, HttpHeaders.DATE), CoreMatchers.equalTo(false));
82          assertThat(DateSupport.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
83  
84          message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
85          message2.setHeader(new BasicHeader(HttpHeaders.DATE, "eh?"));
86          assertThat(DateSupport.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
87  
88          message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
89          message2.setHeader(new BasicHeader(HttpHeaders.DATE, DateUtils.formatStandardDate(createInstant(2017, Month.DECEMBER, 26))));
90          assertThat(DateSupport.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
91  
92          message1.setHeader(new BasicHeader(HttpHeaders.DATE, DateUtils.formatStandardDate(createInstant(2017, Month.DECEMBER, 27))));
93          message2.setHeader(new BasicHeader(HttpHeaders.DATE, DateUtils.formatStandardDate(createInstant(2017, Month.DECEMBER, 26))));
94          assertThat(DateSupport.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(true));
95  
96          message1.setHeader(new BasicHeader(HttpHeaders.DATE, DateUtils.formatStandardDate(createInstant(2017, Month.DECEMBER, 25))));
97          message2.setHeader(new BasicHeader(HttpHeaders.DATE, DateUtils.formatStandardDate(createInstant(2017, Month.DECEMBER, 26))));
98          assertThat(DateSupport.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
99      }
100 
101 }