/* * Copyright 2013 the original author or authors. * * 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 org.springframework.data.hadoop.test.tests; import java.util.Collections; import java.util.EnumSet; import java.util.HashSet; import java.util.Set; import org.springframework.util.StringUtils; /** * A test group used to limit when certain tests are run. * * @see Assume#group(TestGroup) * @author Phillip Webb * @author Chris Beams * @author Janne Valkealahti */ public enum TestGroup { /** * Tests that take a considerable amount of time to run. Any test lasting * longer than 10sec should be considered a candidate in order to avoid * making the overall test suite too slow to run during the normal development cycle. */ LONG_RUNNING, /** * Performance-related tests that may fail unpredictably based on CPU * profile and load. Any test using {@link Thread#sleep}, * {@link Object#wait}, Spring's {@code StopWatch}, etc. should be * considered a candidate as their successful execution is likely to be * based on events occurring within a given time window. */ PERFORMANCE, /** * Tests that should only be run with a specific kerberized environment. */ KERBEROS, /** * Tests that should only be run on the continuous integration server. */ CI; /** * Parse the specified comma separated string of groups. * * @param value the comma separated string of groups * @return a set of groups */ public static Set<TestGroup> parse(String value) { if (value == null || "".equals(value)) { return Collections.emptySet(); } if ("ALL".equalsIgnoreCase(value)) { return EnumSet.allOf(TestGroup.class); } if (value.toUpperCase().startsWith("ALL-")) { Set<TestGroup> groups = new HashSet<TestGroup>(EnumSet.allOf(TestGroup.class)); groups.removeAll(parseGroups(value.substring(4))); return groups; } return parseGroups(value); } private static Set<TestGroup> parseGroups(String value) { Set<TestGroup> groups = new HashSet<TestGroup>(); for (String group : value.split(",")) { try { groups.add(valueOf(group.trim().toUpperCase())); } catch (IllegalArgumentException e) { throw new IllegalArgumentException(String.format( "Unable to find test group '%s' when parsing testGroups value: '%s'. " + "Available groups include: [%s]", group.trim(), value, StringUtils.arrayToCommaDelimitedString(TestGroup.values()))); } } return groups; } }