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.core5.util;
29  
30  import java.text.ParseException;
31  import java.time.Duration;
32  import java.util.concurrent.TimeUnit;
33  
34  import org.junit.jupiter.api.Assertions;
35  import org.junit.jupiter.api.Test;
36  
37  public class TestTimeout {
38  
39      private void checkToDays(final long value, final TimeUnit timeUnit) {
40          Assertions.assertEquals(timeUnit.toDays(value), Timeout.of(value, timeUnit).toDays());
41      }
42  
43      private void checkToHours(final long value, final TimeUnit timeUnit) {
44          Assertions.assertEquals(timeUnit.toHours(value), Timeout.of(value, timeUnit).toHours());
45      }
46  
47      private void checkToMicroseconds(final long value, final TimeUnit timeUnit) {
48          Assertions.assertEquals(timeUnit.toMicros(value), Timeout.of(value, timeUnit).toMicroseconds());
49      }
50  
51      private void checkToMilliseconds(final long value, final TimeUnit timeUnit) {
52          Assertions.assertEquals(timeUnit.toMillis(value), Timeout.of(value, timeUnit).toMilliseconds());
53      }
54  
55      private void checkToMinutes(final long value, final TimeUnit timeUnit) {
56          Assertions.assertEquals(timeUnit.toMinutes(value), Timeout.of(value, timeUnit).toMinutes());
57      }
58  
59      private void checkToNanoseconds(final long value, final TimeUnit timeUnit) {
60          Assertions.assertEquals(timeUnit.toNanos(value), Timeout.of(value, timeUnit).toNanoseconds());
61      }
62  
63      private void checkToSeconds(final long value, final TimeUnit timeUnit) {
64          Assertions.assertEquals(timeUnit.toSeconds(value), Timeout.of(value, timeUnit).toSeconds());
65      }
66  
67      private void test(final long value) {
68          for (final TimeUnit timeUnit : TimeUnit.values()) {
69              checkToDays(value, timeUnit);
70              checkToHours(value, timeUnit);
71              checkToMinutes(value, timeUnit);
72              checkToSeconds(value, timeUnit);
73              checkToMilliseconds(value, timeUnit);
74              checkToMicroseconds(value, timeUnit);
75              checkToNanoseconds(value, timeUnit);
76          }
77      }
78  
79      @Test
80      public void test0() {
81          test(0);
82      }
83  
84      @Test
85      public void test1() {
86          test(1);
87      }
88  
89      @Test
90      public void testDisabled() {
91          Assertions.assertTrue(Timeout.DISABLED.isDisabled());
92          Assertions.assertFalse(Timeout.DISABLED.isEnabled());
93      }
94  
95      private void testFactory(final TimeUnit timeUnit) {
96          Assertions.assertEquals(timeUnit, Timeout.of(1, timeUnit).getTimeUnit());
97      }
98  
99      @Test
100     public void testFactoryForDays() {
101         testFactory(TimeUnit.DAYS);
102     }
103 
104     @Test
105     public void testFactoryForDuration() {
106         assertConvertion(Duration.ZERO);
107         assertConvertion(Duration.ofDays(1));
108         assertConvertion(Duration.ofHours(1));
109         assertConvertion(Duration.ofMillis(1));
110         assertConvertion(Duration.ofNanos(1));
111         assertConvertion(Duration.ofSeconds(1));
112         assertConvertion(Duration.ofSeconds(1, 1));
113     }
114 
115     private void assertConvertion(final Duration duration) {
116         Assertions.assertEquals(duration, Timeout.of(duration).toDuration());
117     }
118 
119     @Test
120     public void testFactoryForHours() {
121         testFactory(TimeUnit.HOURS);
122     }
123 
124     @Test
125     public void testFactoryForMicroseconds() {
126         testFactory(TimeUnit.MICROSECONDS);
127     }
128 
129     @Test
130     public void testFactoryForMillisseconds() {
131         testFactory(TimeUnit.MILLISECONDS);
132     }
133 
134     @Test
135     public void testFactoryForMinutes() {
136         testFactory(TimeUnit.MINUTES);
137     }
138 
139     @Test
140     public void testFactoryForNanoseconds() {
141         testFactory(TimeUnit.NANOSECONDS);
142     }
143 
144     @Test
145     public void testFactoryForSeconds() {
146         testFactory(TimeUnit.SECONDS);
147     }
148 
149     @Test
150     public void testMaxInt() {
151         test(Integer.MAX_VALUE);
152     }
153 
154     @Test
155     public void testMaxLong() {
156         test(Long.MAX_VALUE);
157     }
158 
159     @Test
160     public void testNegative1() {
161         Assertions.assertThrows(IllegalArgumentException.class, () ->
162                 test(-1));
163     }
164 
165     @Test
166     public void testToString() {
167         Assertions.assertEquals("9223372036854775807 SECONDS", Timeout.ofSeconds(Long.MAX_VALUE).toString());
168         Assertions.assertEquals("0 MILLISECONDS", Timeout.ZERO_MILLISECONDS.toString());
169     }
170 
171     @Test
172     public void testFromString() throws ParseException {
173         Assertions.assertEquals(Timeout.ofSeconds(Long.MAX_VALUE), Timeout.parse("9223372036854775807 SECONDS"));
174         Assertions.assertEquals(Timeout.ofSeconds(Long.MAX_VALUE), Timeout.parse("9223372036854775807 Seconds"));
175         Assertions.assertEquals(Timeout.ofSeconds(Long.MAX_VALUE), Timeout.parse("9223372036854775807  Seconds"));
176         Assertions.assertEquals(Timeout.ofSeconds(Long.MAX_VALUE), Timeout.parse("9223372036854775807\tSeconds"));
177         Assertions.assertEquals(Timeout.ZERO_MILLISECONDS, Timeout.parse("0 MILLISECONDS"));
178     }
179 
180 }