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.utils;
29  
30  import java.util.Calendar;
31  import java.util.Date;
32  
33  import org.apache.hc.core5.http.HttpHeaders;
34  import org.apache.hc.core5.http.message.BasicHeader;
35  import org.apache.hc.core5.http.message.HeaderGroup;
36  import org.hamcrest.CoreMatchers;
37  import org.junit.Assert;
38  import org.junit.Test;
39  
40  /**
41   * Unit tests for {@link DateUtils}.
42   */
43  public class TestDateUtils {
44  
45      private static Date createDate(final int year, final int month, final int day) {
46          final Calendar calendar = Calendar.getInstance();
47          calendar.setTimeZone(DateUtils.GMT);
48          calendar.setTimeInMillis(0);
49          calendar.set(year, month, day);
50          return calendar.getTime();
51      }
52  
53      @Test
54      public void testBasicDateParse() throws Exception {
55          final Date date = createDate(2005, Calendar.OCTOBER, 14);
56          final String[] formats = new String[] { DateUtils.PATTERN_RFC1123 };
57          Assert.assertEquals(date, DateUtils.parseDate("Fri, 14 Oct 2005 00:00:00 GMT", formats, null));
58          Assert.assertEquals(date, DateUtils.parseDate("Fri, 14 Oct 2005 00:00:00 GMT", formats));
59          Assert.assertEquals(date, DateUtils.parseDate("Fri, 14 Oct 2005 00:00:00 GMT"));
60      }
61  
62      @Test
63      public void testDateParseMessage() throws Exception {
64          final HeaderGroup message1 = new HeaderGroup();
65          message1.setHeader(new BasicHeader(HttpHeaders.DATE, "Fri, 14 Oct 2005 00:00:00 GMT"));
66          Assert.assertEquals(createDate(2005, Calendar.OCTOBER, 14), DateUtils.parseDate(message1, HttpHeaders.DATE));
67  
68          final HeaderGroup message2 = new HeaderGroup();
69          message2.addHeader(new BasicHeader(HttpHeaders.DATE, "Fri, 14 Oct 2005 00:00:00 GMT"));
70          message2.addHeader(new BasicHeader(HttpHeaders.DATE, "Fri, 21 Oct 2005 00:00:00 GMT"));
71          Assert.assertEquals(createDate(2005, Calendar.OCTOBER, 14), DateUtils.parseDate(message2, HttpHeaders.DATE));
72      }
73  
74      @Test
75      public void testMalformedDate() {
76          Assert.assertNull(DateUtils.parseDate("Fri, 14 Oct 2005 00:00:00 GMT", new String[] {}, null));
77      }
78  
79      @Test
80      public void testInvalidInput() throws Exception {
81          try {
82              DateUtils.parseDate(null, null, null);
83              Assert.fail("NullPointerException should habe been thrown");
84          } catch (final NullPointerException ex) {
85              // expected
86          }
87          try {
88              DateUtils.formatDate(null);
89              Assert.fail("NullPointerException should habe been thrown");
90          } catch (final NullPointerException ex) {
91              // expected
92          }
93          try {
94              DateUtils.formatDate(new Date(), null);
95              Assert.fail("NullPointerException should habe been thrown");
96          } catch (final NullPointerException ex) {
97              // expected
98          }
99      }
100 
101     @Test
102     public void testTwoDigitYearDateParse() throws Exception {
103         final String[] formats = new String[] { DateUtils.PATTERN_RFC1036 };
104         Assert.assertEquals(createDate(2005, Calendar.OCTOBER, 14), DateUtils.parseDate("Friday, 14-Oct-05 00:00:00 GMT", formats, null));
105         Assert.assertEquals(createDate(1905, Calendar.OCTOBER, 14), DateUtils.parseDate("Friday, 14-Oct-05 00:00:00 GMT", formats,
106                 createDate(1900, Calendar.JANUARY, 0)));
107     }
108 
109     @Test
110     public void testParseQuotedDate() throws Exception {
111         final Date date1 = createDate(2005, Calendar.OCTOBER, 14);
112         final String[] formats = new String[] { DateUtils.PATTERN_RFC1123 };
113         final Date date2 = DateUtils.parseDate("'Fri, 14 Oct 2005 00:00:00 GMT'", formats);
114         Assert.assertEquals(date1, date2);
115     }
116 
117     @Test
118     public void testBasicDateFormat() throws Exception {
119         final Date date = createDate(2005, Calendar.OCTOBER, 14);
120         Assert.assertEquals("Fri, 14 Oct 2005 00:00:00 GMT", DateUtils.formatDate(date));
121         Assert.assertEquals("Fri, 14 Oct 2005 00:00:00 GMT", DateUtils.formatDate(date, DateUtils.PATTERN_RFC1123));
122     }
123 
124     @Test
125     public void testIsBefore() throws Exception {
126         final HeaderGroup message1 = new HeaderGroup();
127         final HeaderGroup message2 = new HeaderGroup();
128         Assert.assertThat(DateUtils.isBefore(null, null, HttpHeaders.DATE), CoreMatchers.equalTo(false));
129         Assert.assertThat(DateUtils.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
130         message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
131         message2.setHeader(new BasicHeader(HttpHeaders.DATE, "eh?"));
132         Assert.assertThat(DateUtils.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
133         message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
134         message2.setHeader(new BasicHeader(HttpHeaders.DATE, "Tuesday, 26-Dec-2017 00:00:00 GMT"));
135         Assert.assertThat(DateUtils.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
136         message1.setHeader(new BasicHeader(HttpHeaders.DATE, "Wednesday, 25-Dec-2017 00:00:00 GMT"));
137         Assert.assertThat(DateUtils.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(true));
138         message1.setHeader(new BasicHeader(HttpHeaders.DATE, "Thursday, 27-Dec-2017 00:00:00 GMT"));
139         Assert.assertThat(DateUtils.isBefore(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
140     }
141 
142     @Test
143     public void testIsAfter() throws Exception {
144         final HeaderGroup message1 = new HeaderGroup();
145         final HeaderGroup message2 = new HeaderGroup();
146         Assert.assertThat(DateUtils.isAfter(null, null, HttpHeaders.DATE), CoreMatchers.equalTo(false));
147         Assert.assertThat(DateUtils.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
148         message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
149         message2.setHeader(new BasicHeader(HttpHeaders.DATE, "eh?"));
150         Assert.assertThat(DateUtils.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
151         message1.setHeader(new BasicHeader(HttpHeaders.DATE, "huh?"));
152         message2.setHeader(new BasicHeader(HttpHeaders.DATE, "Tuesday, 26-Dec-2017 00:00:00 GMT"));
153         Assert.assertThat(DateUtils.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
154         message1.setHeader(new BasicHeader(HttpHeaders.DATE, "Thursday, 27-Dec-2017 00:00:00 GMT"));
155         Assert.assertThat(DateUtils.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(true));
156         message1.setHeader(new BasicHeader(HttpHeaders.DATE, "Wednesday, 25-Dec-2017 00:00:00 GMT"));
157         Assert.assertThat(DateUtils.isAfter(message1, message2, HttpHeaders.DATE), CoreMatchers.equalTo(false));
158     }
159 }