| // Copyright 2015 The Bazel Authors. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| package com.google.devtools.build.lib.packages; |
| |
| import static com.google.common.truth.Truth.assertThat; |
| import static com.google.common.truth.Truth.assertWithMessage; |
| import static com.google.devtools.build.lib.packages.TestTimeout.ETERNAL; |
| import static com.google.devtools.build.lib.packages.TestTimeout.LONG; |
| import static com.google.devtools.build.lib.packages.TestTimeout.MODERATE; |
| import static com.google.devtools.build.lib.packages.TestTimeout.SHORT; |
| import static com.google.devtools.build.lib.packages.TestTimeout.getSuggestedTestTimeout; |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.List; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.JUnit4; |
| |
| /** |
| * Tests the various methods of {@link TestTimeout} |
| */ |
| @RunWith(JUnit4.class) |
| public class TestTimeoutTest { |
| |
| @Test |
| public void testBasicConversion() throws Exception { |
| assertThat(TestTimeout.valueOf("SHORT")).isSameInstanceAs(SHORT); |
| assertThat(TestTimeout.valueOf("MODERATE")).isSameInstanceAs(MODERATE); |
| assertThat(TestTimeout.valueOf("LONG")).isSameInstanceAs(LONG); |
| assertThat(TestTimeout.valueOf("ETERNAL")).isSameInstanceAs(ETERNAL); |
| } |
| |
| @Test |
| public void testSuggestedTestSize() throws Exception { |
| assertThat(getSuggestedTestTimeout(0)).isEqualTo(SHORT); |
| assertThat(getSuggestedTestTimeout(30)).isEqualTo(SHORT); |
| assertThat(getSuggestedTestTimeout(50)).isEqualTo(MODERATE); |
| assertThat(getSuggestedTestTimeout(250)).isEqualTo(LONG); |
| assertThat(getSuggestedTestTimeout(700)).isEqualTo(ETERNAL); |
| assertThat(getSuggestedTestTimeout(60 * 60 * 24 * 360)).isEqualTo(ETERNAL); |
| } |
| |
| @Test |
| public void testAllTimesHaveSuggestions() throws Exception { |
| for (int timeout = 0; timeout < ETERNAL.getTimeoutSeconds(); timeout++) { |
| TestTimeout suggested = getSuggestedTestTimeout(timeout); |
| assertWithMessage("No suggested TestTimeout found for timeout " + timeout) |
| .that(suggested) |
| .isNotNull(); |
| assertWithMessage( |
| "Suggested timeout " + suggested + " is not in the fuzzy range for " + timeout) |
| .that(suggested.isInRangeFuzzy(timeout)) |
| .isTrue(); |
| } |
| } |
| |
| @Test |
| public void testIsInRangeFuzzy() throws Exception { |
| assertThat(SHORT.isInRangeFuzzy(0)).isTrue(); |
| assertThat(SHORT.isInRangeFuzzy(30)).isTrue(); |
| assertThat(SHORT.isInRangeFuzzy(55)).isFalse(); |
| assertThat(MODERATE.isInRangeFuzzy(10)).isFalse(); |
| assertThat(MODERATE.isInRangeFuzzy(40)).isTrue(); |
| assertThat(MODERATE.isInRangeFuzzy(290)).isFalse(); |
| assertThat(LONG.isInRangeFuzzy(30)).isFalse(); |
| assertThat(LONG.isInRangeFuzzy(200)).isTrue(); |
| assertThat(LONG.isInRangeFuzzy(890)).isFalse(); |
| assertThat(ETERNAL.isInRangeFuzzy(50)).isFalse(); |
| assertThat(ETERNAL.isInRangeFuzzy(500)).isTrue(); |
| assertThat(ETERNAL.isInRangeFuzzy(3500)).isTrue(); |
| assertThat(ETERNAL.isInRangeFuzzy(60 * 60 * 24 * 360)).isTrue(); |
| } |
| |
| @Test |
| public void testAllFuzzyRangesCovered() throws Exception { |
| for (int timeout = 0; timeout < ETERNAL.getTimeoutSeconds(); timeout++) { |
| List<Boolean> truthValues = new ArrayList<>(); |
| for (TestTimeout testTimeout : Arrays.asList(SHORT, MODERATE, LONG, ETERNAL)) { |
| truthValues.add(testTimeout.isInRangeFuzzy(timeout)); |
| } |
| assertWithMessage("Timeout " + timeout + " is not in any fuzzy range.") |
| .that(truthValues) |
| .contains(true); |
| } |
| } |
| } |