Repository: ambari Updated Branches: refs/heads/trunk c52faea36 -> 1fbb933ef
http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java ---------------------------------------------------------------------- diff --git a/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java b/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java deleted file mode 100644 index 77c482a..0000000 --- a/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.serviceadvisor; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.commons.lang3.EnumUtils; -import org.apache.commons.lang.StringUtils; - -/** - * Class that can be called either through its jar or using its run method. - * The goal is to invoke a Service Advisor. - * Right now, it is backward compatible by invoking the python script and does not know which service is affected. - */ -public class ServiceAdvisor { - protected static Log LOG = LogFactory.getLog(ServiceAdvisor.class); - - private static String USAGE = "Usage: java -jar serviceadvisor.jar [ACTION] [HOSTS_FILE.json] [SERVICES_FILE.json] [OUTPUT.txt] [ERRORS.txt]"; - private static String PYTHON_STACK_ADVISOR_SCRIPT = "/var/lib/ambari-server/resources/scripts/stack_advisor.py"; - - /** - * Entry point for calling this class through its jar. - * @param args - */ - public static void main(String[] args) { - if (args.length != 5) { - System.err.println(String.format("Wrong number of arguments. %s", USAGE)); - System.exit(1); - } - - String action = args[0]; - String hostsFile = args[1]; - String servicesFile = args[2]; - String outputFile = args[3]; - String errorFile = args[4]; - - int exitCode = run(action, hostsFile, servicesFile, outputFile, errorFile); - System.exit(exitCode); - } - - public static int run(String action, String hostsFile, String servicesFile, String outputFile, String errorFile) { - LOG.info(String.format("ServiceAdvisor. Received arguments. Action: %s, Hosts File: %s, Services File: %s", action, hostsFile, servicesFile)); - int returnCode = -1; - - try { - ServiceAdvisorCommandType commandType = ServiceAdvisorCommandType.getEnum(action); - - // TODO, load each Service's Service Advisor at Start Time and call it instead of Python command below. - - ProcessBuilder builder = preparePythonShellCommand(commandType, hostsFile, servicesFile, outputFile, errorFile); - returnCode = launchProcess(builder); - } catch (IllegalArgumentException e) { - List<ServiceAdvisorCommandType> values = EnumUtils.getEnumList(ServiceAdvisorCommandType.class); - List<String> stringValues = new ArrayList<String>(); - for (ServiceAdvisorCommandType value : values) { - stringValues.add(value.toString()); - } - LOG.error("ServiceAdvisor. Illegal Argument. Action must be one of " + StringUtils.join(stringValues.toArray(), ", ")); - return -1; - } catch (Exception e) { - LOG.error("ServiceAdvisor. Failed with " + e.getMessage()); - return -1; - } - return returnCode; - } - - /** - * Generate a process to invoke a Python command for the old-style Stack Advisor. - * @param commandType Command Type - * @param hostsFile hosts.json file - * @param servicesFile services.json file - * @param outputFile output.txt - * @param errorFile error.txt - * @return Process that can launch. - */ - private static ProcessBuilder preparePythonShellCommand(ServiceAdvisorCommandType commandType, String hostsFile, String servicesFile, String outputFile, String errorFile) { - List<String> builderParameters = new ArrayList<String>(); - - if (System.getProperty("os.name").contains("Windows")) { - builderParameters.add("cmd"); - builderParameters.add("/c"); - } else { - builderParameters.add("sh"); - builderParameters.add("-c"); - } - - StringBuilder commandString = new StringBuilder(); - commandString.append(PYTHON_STACK_ADVISOR_SCRIPT + " "); - - commandString.append(commandType.toString()).append(" "); - commandString.append(hostsFile).append(" "); - commandString.append(servicesFile).append(" "); - commandString.append("1> "); - commandString.append(outputFile).append(" "); - commandString.append("2>"); - commandString.append(errorFile).append(" "); - - builderParameters.add(commandString.toString()); - - LOG.info("ServiceAdvisor. Python command is: " + builderParameters.toString()); - - return new ProcessBuilder(builderParameters); - } - - /** - * Launch a process, wait for it to finish, and return its exit code. - * @param builder Process Builder - * @return Exit Code - * @throws Exception - */ - private static int launchProcess(ProcessBuilder builder) throws Exception { - int exitCode = -1; - Process process = null; - try { - process = builder.start(); - exitCode = process.waitFor(); - } catch (Exception ioe) { - String message = "Error executing Service Advisor: "; - LOG.error(message, ioe); - throw new Exception(message + ioe.getMessage()); - } finally { - if (process != null) { - process.destroy(); - } - } - return exitCode; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java ---------------------------------------------------------------------- diff --git a/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java b/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java deleted file mode 100644 index f067668..0000000 --- a/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.serviceadvisor; - - -// TODO, use this class instead of org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommandType -public enum ServiceAdvisorCommandType { - - RECOMMEND_COMPONENT_LAYOUT("recommend-component-layout"), - - VALIDATE_COMPONENT_LAYOUT("validate-component-layout"), - - RECOMMEND_CONFIGURATIONS("recommend-configurations"), - - RECOMMEND_CONFIGURATION_DEPENDENCIES("recommend-configuration-dependencies"), - - VALIDATE_CONFIGURATIONS("validate-configurations"); - private final String name; - - private ServiceAdvisorCommandType(String name) { - this.name = name; - } - - public String getValue() { - return this.name.toLowerCase(); - } - - @Override - public String toString() { - return this.name; - } - - /** - * Instead of Enum.valueOf("value"), use this method instead to map the string to the correct Enum. - * @param name Name with lowercase and dashes. - * @return Enum that matches the string. - */ - public static ServiceAdvisorCommandType getEnum(String name) { - for (ServiceAdvisorCommandType v : values()) { - if (v.getValue().equalsIgnoreCase(name.replace("_", "-"))) { - return v; - } - } - throw new IllegalArgumentException(); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/checkstyle.xml ---------------------------------------------------------------------- diff --git a/utility/checkstyle.xml b/utility/checkstyle.xml deleted file mode 100644 index 2e7d6f0..0000000 --- a/utility/checkstyle.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0"?> -<!-- 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. - See accompanying LICENSE file. --> -<!DOCTYPE module PUBLIC - "-//Puppy Crawl//DTD Check Configuration 1.3//EN" - "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> -<module name="Checker"> - <module name="TreeWalker"> - <module name="FallThrough"/> - - <!-- imports --> - <module name="AvoidStarImport"/> - <module name="IllegalImport"/> - <module name="ImportOrder"> - <property name="groups" value="java,javax,org,com,*"/> - <property name="ordered" value="true"/> - <property name="separated" value="true"/> - <property name="option" value="top"/> <!-- static imports --> - <property name="sortStaticImportsAlphabetically" value="true"/> - </module> - <module name="RedundantImport"/> - <module name="UnusedImports"/> - - <!-- blocks --> - <module name="AvoidNestedBlocks"> - <property name="allowInSwitchCase" value="true"/> - </module> - <module name="EmptyBlock"> - <property name="option" value="text"/> - </module> - </module> -</module> http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/pom.xml ---------------------------------------------------------------------- diff --git a/utility/pom.xml b/utility/pom.xml deleted file mode 100644 index ac91474..0000000 --- a/utility/pom.xml +++ /dev/null @@ -1,145 +0,0 @@ -<?xml version="1.0"?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You 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. ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - - <parent> - <groupId>org.apache.ambari</groupId> - <artifactId>ambari-project</artifactId> - <version>2.0.0.0-SNAPSHOT</version> - <relativePath>../ambari-project</relativePath> - </parent> - - <artifactId>utility</artifactId> - <groupId>utility</groupId> - <version>1.0.0.0-SNAPSHOT</version> - - <dependencies> - <dependency> - <groupId>com.github.kongchen</groupId> - <artifactId>swagger-maven-plugin</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-log4j12</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>log4j</groupId> - <artifactId>log4j</artifactId> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <scope>compile</scope> <!-- has to be compile-time dependency on junit --> - </dependency> - <dependency> - <groupId>com.puppycrawl.tools</groupId> - <artifactId>checkstyle</artifactId> - </dependency> - <dependency> - <groupId>com.puppycrawl.tools</groupId> - <artifactId>checkstyle</artifactId> - <type>test-jar</type> - <version>${checkstyle.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - <version>19.0</version> <!-- required for checkstyle --> - </dependency> - <dependency> - <groupId>org.easymock</groupId> - <artifactId>easymock</artifactId> - <scope>test</scope> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.2</version> - <configuration> - <source>1.7</source> - <target>1.7</target> - <useIncrementalCompilation>false</useIncrementalCompilation> - </configuration> - </plugin> - <plugin> - <groupId>org.vafer</groupId> - <artifactId>jdeb</artifactId> - <version>1.0.1</version> - <executions> - <execution> - <!--Stub execution on direct plugin call - workaround for ambari deb build process--> - <id>stub-execution</id> - <phase>none</phase> - <goals> - <goal>jdeb</goal> - </goals> - </execution> - </executions> - <configuration> - <skip>true</skip> - <attach>false</attach> - <submodules>false</submodules> - <controlDir>${project.basedir}/../src/main/package/deb/control</controlDir> - </configuration> - </plugin> - <plugin> - <artifactId>maven-assembly-plugin</artifactId> - <configuration> - <descriptors> - <descriptor>${project.parent.basedir}/src/main/assemblies/empty.xml</descriptor> - </descriptors> - </configuration> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>rpm-maven-plugin</artifactId> - <version>2.0.1</version> - <executions> - <execution> - <!-- unbinds rpm creation from maven lifecycle --> - <phase>none</phase> - <goals> - <goal>rpm</goal> - </goals> - </execution> - </executions> - <configuration> - <copyright>2012, Apache Software Foundation</copyright> - <group>Development</group> - <disabled>true</disabled> - <description>Maven Recipe: RPM Package.</description> - <mappings/> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-checkstyle-plugin</artifactId> - </plugin> - </plugins> - </build> -</project> http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/category/AlertTest.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/category/AlertTest.java b/utility/src/main/java/category/AlertTest.java deleted file mode 100644 index b6a20ec..0000000 --- a/utility/src/main/java/category/AlertTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 category; - -/** - * Category of unit tests that can be annotated. E.g., - * {@code @Category({ category.AlertTest.class}) } - * - * A Profile can have csv of categories, in order to run the unit tests like, - * mvn clean test -P AlertTests - */ -public interface AlertTest {} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/category/AmbariUpgradeTest.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/category/AmbariUpgradeTest.java b/utility/src/main/java/category/AmbariUpgradeTest.java deleted file mode 100644 index 881107a..0000000 --- a/utility/src/main/java/category/AmbariUpgradeTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 category; - -/** - * Category of unit tests that can be annotated. E.g., - * {@code @Category({ category.AmbariUpgradeTest.class}) } - * - * A Profile can have csv of categories, in order to run the unit tests like, - * mvn clean test -P AmbariUpgradeTests - */ -public interface AmbariUpgradeTest {} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/category/BlueprintTest.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/category/BlueprintTest.java b/utility/src/main/java/category/BlueprintTest.java deleted file mode 100644 index cb7871d..0000000 --- a/utility/src/main/java/category/BlueprintTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 category; - -/** - * Category of unit tests that can be annotated. E.g., - * {@code @Category({ category.BlueprintTest.class}) } - * - * A Profile can have csv of categories, in order to run the unit tests like, - * mvn clean test -P BlueprintTests - */ -public interface BlueprintTest {} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/category/FastTest.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/category/FastTest.java b/utility/src/main/java/category/FastTest.java deleted file mode 100644 index a0abddf..0000000 --- a/utility/src/main/java/category/FastTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 category; - -/** - * Category of unit tests that can be annotated. E.g., - * {@code @Category({ category.FastTest.class}) } - * - * A Profile can have csv of categories, in order to run the unit tests like, - * mvn clean test -P FastTests - */ -public interface FastTest {} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/category/KerberosTest.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/category/KerberosTest.java b/utility/src/main/java/category/KerberosTest.java deleted file mode 100644 index f7cebdf..0000000 --- a/utility/src/main/java/category/KerberosTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 category; - -/** - * Category of unit tests that can be annotated. E.g., - * {@code @Category({ category.KerberosTest.class}) } - * - * A Profile can have csv of categories, in order to run the unit tests like, - * mvn clean test -P KerberosTests - */ -public interface KerberosTest {} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/category/MetricsTest.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/category/MetricsTest.java b/utility/src/main/java/category/MetricsTest.java deleted file mode 100644 index a352ae2..0000000 --- a/utility/src/main/java/category/MetricsTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 category; - -/** - * Category of unit tests that can be annotated. E.g., - * {@code @Category({ category.MetricsTest.class}) } - * - * A Profile can have csv of categories, in order to run the unit tests like, - * mvn clean test -P MetricsTests - */ -public interface MetricsTest {} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/category/SlowTest.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/category/SlowTest.java b/utility/src/main/java/category/SlowTest.java deleted file mode 100644 index c1025a9..0000000 --- a/utility/src/main/java/category/SlowTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 category; - -/** - * Category of unit tests that can be annotated. E.g., - * {@code @Category({ category.SlowTest.class}) } - * - * A Profile can have csv of categories, in order to run the unit tests like, - * mvn clean test -P SlowTests - */ -public interface SlowTest {} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/category/StackUpgradeTest.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/category/StackUpgradeTest.java b/utility/src/main/java/category/StackUpgradeTest.java deleted file mode 100644 index 20a1723..0000000 --- a/utility/src/main/java/category/StackUpgradeTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 category; - -/** - * Category of unit tests that can be annotated. E.g., - * {@code @Category({ category.StackUpgradeTest.class}) } - * - * A Profile can have csv of categories, in order to run the unit tests like, - * mvn clean test -P StackUpgradeTests - */ -public interface StackUpgradeTest {} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/org/apache/ambari/annotations/ApiIgnore.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/org/apache/ambari/annotations/ApiIgnore.java b/utility/src/main/java/org/apache/ambari/annotations/ApiIgnore.java deleted file mode 100644 index d50c2fd..0000000 --- a/utility/src/main/java/org/apache/ambari/annotations/ApiIgnore.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.SOURCE) -@Target({ElementType.METHOD}) -public @interface ApiIgnore { - // marker -} http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/org/apache/ambari/checkstyle/AvoidTransactionalOnPrivateMethodsCheck.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/org/apache/ambari/checkstyle/AvoidTransactionalOnPrivateMethodsCheck.java b/utility/src/main/java/org/apache/ambari/checkstyle/AvoidTransactionalOnPrivateMethodsCheck.java deleted file mode 100644 index 80da103..0000000 --- a/utility/src/main/java/org/apache/ambari/checkstyle/AvoidTransactionalOnPrivateMethodsCheck.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.checkstyle; - -import com.puppycrawl.tools.checkstyle.api.AbstractCheck; -import com.puppycrawl.tools.checkstyle.api.DetailAST; -import com.puppycrawl.tools.checkstyle.api.TokenTypes; - -/** - * Detects private methods annotated as <code>Transactional</code>. - * See https://github.com/google/guice/wiki/Transactions for why this should be - * avoided. - */ -public class AvoidTransactionalOnPrivateMethodsCheck extends AbstractCheck { - - private static final String ANNOTATION_NAME = "Transactional"; - public static final String MSG_TRANSACTIONAL_ON_PRIVATE_METHOD = "@" + ANNOTATION_NAME + " should not be used on private methods"; - - @Override - public int[] getDefaultTokens() { - return new int[] { TokenTypes.METHOD_DEF }; - } - - @Override - public void visitToken(DetailAST ast) { - DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); - if (modifiers.findFirstToken(TokenTypes.LITERAL_PRIVATE) != null) { - DetailAST annotation = modifiers.findFirstToken(TokenTypes.ANNOTATION); - while (annotation != null) { - DetailAST name = annotation.findFirstToken(TokenTypes.IDENT); - if (name != null && ANNOTATION_NAME.equals(name.getText())) { - log(ast.getLineNo(), MSG_TRANSACTIONAL_ON_PRIVATE_METHOD); - break; - } - annotation = annotation.getNextSibling(); - } - } - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/org/apache/ambari/checkstyle/UndocumentedRestApiOperationCheck.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/org/apache/ambari/checkstyle/UndocumentedRestApiOperationCheck.java b/utility/src/main/java/org/apache/ambari/checkstyle/UndocumentedRestApiOperationCheck.java deleted file mode 100644 index c6347db..0000000 --- a/utility/src/main/java/org/apache/ambari/checkstyle/UndocumentedRestApiOperationCheck.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.checkstyle; - -import java.util.Set; - -import com.google.common.collect.ImmutableSet; -import com.puppycrawl.tools.checkstyle.api.AbstractCheck; -import com.puppycrawl.tools.checkstyle.api.DetailAST; -import com.puppycrawl.tools.checkstyle.api.TokenTypes; -import com.puppycrawl.tools.checkstyle.utils.AnnotationUtility; - -/** - * REST API operations should either be documented, or marked to be ignored. - */ -public class UndocumentedRestApiOperationCheck extends AbstractCheck { - - private static final Set<String> API_ANNOTATIONS = ImmutableSet.of("DELETE", "GET", "HEAD", "OPTIONS", "PUT", "POST"); - private static final String API_OPERATION = "ApiOperation"; - private static final String API_IGNORE = "ApiIgnore"; - public static final String MESSAGE = "REST API operation should be documented"; - - @Override - public int[] getDefaultTokens() { - return new int[] { TokenTypes.METHOD_DEF }; - } - - @Override - public void visitToken(DetailAST ast) { - if (isApiOperation(ast) && !isDocumentedApiOperation(ast) && !isIgnoredApi(ast)) { - log(ast.getLineNo(), MESSAGE); - } - } - - private static boolean isApiOperation(DetailAST ast) { - DetailAST modifiers = ast.findFirstToken(TokenTypes.MODIFIERS); - if (modifiers.findFirstToken(TokenTypes.LITERAL_PRIVATE) != null) { - return false; - } - - DetailAST annotation = modifiers.findFirstToken(TokenTypes.ANNOTATION); - while (annotation != null) { - DetailAST name = annotation.findFirstToken(TokenTypes.IDENT); - if (name != null && API_ANNOTATIONS.contains(name.getText())) { - return true; - } - annotation = annotation.getNextSibling(); - } - - return false; - } - - private static boolean isDocumentedApiOperation(DetailAST ast) { - return AnnotationUtility.containsAnnotation(ast, API_OPERATION); - } - - private static boolean isIgnoredApi(DetailAST ast) { - return AnnotationUtility.containsAnnotation(ast, API_IGNORE); - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java ---------------------------------------------------------------------- diff --git a/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java b/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java deleted file mode 100644 index e258fc4..0000000 --- a/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.swagger; - -import java.lang.reflect.Method; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.ws.rs.Path; - -import org.apache.maven.plugin.logging.Log; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.annotation.AnnotationUtils; - -import com.github.kongchen.swagger.docgen.reader.JaxrsReader; -import com.google.common.base.Function; -import com.google.common.base.Predicates; -import com.google.common.collect.Collections2; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; - -import io.swagger.annotations.Api; -import io.swagger.models.Operation; -import io.swagger.models.Swagger; -import io.swagger.models.Tag; -import io.swagger.models.parameters.Parameter; -import io.swagger.models.parameters.PathParameter; - -/** - * Customized {@link com.github.kongchen.swagger.docgen.reader.ClassSwaggerReader} implementation to - * treat nested API's. - */ -public class AmbariSwaggerReader extends JaxrsReader { - - /** - * Logger instance. - */ - protected final static Logger logger = LoggerFactory.getLogger(AmbariSwaggerReader.class); - - public AmbariSwaggerReader(Swagger swagger, Log LOG) { - super(swagger, LOG); - } - - private final Map<Class<?>, NestedApiRecord> nestedAPIs = Maps.newHashMap(); - - @Override - public Swagger getSwagger() { - if (null == this.swagger) { - this.swagger = new Swagger(); - } - return this.swagger; - } - - /** - * Original method is overwritten so that to gather information about top level api - nested api relations - */ - @Override - public Swagger read(Set<Class<?>> classes) { - // scan for and register nested API classes - logger.debug("Looking for nested API's"); - for (Class<?> cls: classes) { - logger.debug("Examining API {}", cls.getSimpleName()); - for (Method method: cls.getMethods()) { - Path methodPath = AnnotationUtils.findAnnotation(method, Path.class); - if (null != methodPath) { - Class<?> returnType = method.getReturnType(); - Api nestedApi = AnnotationUtils.findAnnotation(returnType, Api.class); - Path nestedApiPath = AnnotationUtils.findAnnotation(returnType, Path.class); - logger.debug("Examinig API method {}#{}, path={}, returnType={}", cls.getSimpleName(), method.getName(), - nestedApiPath != null ? nestedApiPath.value() : null, returnType.getSimpleName()); - if (null != nestedApi) { - if (null != nestedApiPath) { - logger.info("This class exists both as top level and nested API: {}, treating it as top level API", - returnType.getName()); - } - else { - Path apiPath = AnnotationUtils.findAnnotation(cls, Path.class); - String apiPathValue; - if (null == apiPath) { - logger.warn("Parent api {} also seems to be a nested API. The current version does not support " + - "multi-level nesting."); - apiPathValue = ""; - } - else { - apiPathValue = apiPath.value(); - } - NestedApiRecord nar = new NestedApiRecord(returnType, cls, apiPathValue, method, methodPath.value()); - if (nestedAPIs.containsKey(returnType)) { - logger.warn("{} is a nested API of multiple top level API's. Ignoring top level API {}", returnType, cls); - } - else { - logger.info("Registering nested API: {}", returnType); - nestedAPIs.put(returnType, nar); - } - } - } - } - } - } - logger.info("Found {} nested API's", nestedAPIs.size()); - // With all information gathered, call superclass implementation - return super.read(classes); - } - - /** - * Original method is overwritten to handle nested api's properly - */ - @Override - protected Swagger read(Class<?> cls, String parentPath, - String parentMethod, - boolean readHidden, - String[] parentConsumes, - String[] parentProduces, - Map<String, Tag> parentTags, - List<Parameter> parentParameters) { - NestedApiRecord nestedApiRecord = nestedAPIs.get(cls); - if (null != nestedApiRecord) { - logger.info("Processing nested API: {}", nestedApiRecord); - // Get the path parameters of the parent API method. All methods of the nested API class should include these - // parameters. - Operation operation = parseMethod(nestedApiRecord.parentMethod); - List<Parameter> pathParameters = ImmutableList.copyOf( - Collections2.filter(operation.getParameters(), Predicates.instanceOf(PathParameter.class))); - logger.info("Will copy path params from parent method: {}", - Lists.transform(pathParameters, new ParameterToName())); - return super.read(cls, - joinPaths(nestedApiRecord.parentApiPath, nestedApiRecord.parentMethodPath, parentPath), - parentMethod, readHidden, - parentConsumes, parentProduces, parentTags, pathParameters); - } - else { - logger.info("Processing top level API: {}", cls.getSimpleName()); - return super.read(cls, parentPath, parentMethod, readHidden, parentConsumes, parentProduces, parentTags, parentParameters); - } - } - - /** - * Joins path elements properly with slashes avoiding duplicate slashes. - * - * @param firstPath the first path element - * @param paths optionally other path elements - * @return the joined path - */ - static String joinPaths(String firstPath, String... paths) { - StringBuilder joined = new StringBuilder(firstPath); - for(String path: paths) { - if (path.isEmpty()) { /* NOP */ } - else if (joined.length() == 0) { - joined.append(path); - } - else if (joined.charAt(joined.length() - 1) == '/') { - if (path.startsWith("/")) { - joined.append(path.substring(1, path.length())); - } - else { - joined.append(path); - } - } - else { - if (path.startsWith("/")) { - joined.append(path); - } - else { - joined.append('/').append(path); - } - - } - } - return joined.toString(); - } -} - -class ParameterToName implements Function<Parameter, String> { - public String apply(Parameter input) { - return input.getName(); - } -} - -class NestedApiRecord { - final Class<?> nestedApi; - final Class<?> parentApi; - final String parentApiPath; - final Method parentMethod; - final String parentMethodPath; - - public NestedApiRecord(Class<?> nestedApi, Class<?> parentApi, String parentApiPath, Method parentMethod, String parentMethodPath) { - this.nestedApi = nestedApi; - this.parentApi = parentApi; - this.parentApiPath = parentApiPath; - this.parentMethod = parentMethod; - this.parentMethodPath = parentMethodPath; - } - - @Override - public String toString() { - return "NestedApiRecord {" + - "nestedApi=" + nestedApi + - ", parentApi=" + parentApi + - ", parentApiPath='" + parentApiPath + '\'' + - ", parentMethod=" + parentMethod + - ", parentMethodPath='" + parentMethodPath + '\'' + - '}'; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/main/resources/checkstyle_packages.xml ---------------------------------------------------------------------- diff --git a/utility/src/main/resources/checkstyle_packages.xml b/utility/src/main/resources/checkstyle_packages.xml deleted file mode 100644 index 8cf4a44..0000000 --- a/utility/src/main/resources/checkstyle_packages.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- 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. - See accompanying LICENSE file. --> -<!DOCTYPE checkstyle-packages PUBLIC - "-//Puppy Crawl//DTD Package Names 1.0//EN" - "http://www.puppycrawl.com/dtds/packages_1_0.dtd"> -<checkstyle-packages> - <package name="org.apache.ambari.checkstyle"/> -</checkstyle-packages> http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/test/java/org/apache/ambari/checkstyle/AvoidTransactionalOnPrivateMethodsCheckTest.java ---------------------------------------------------------------------- diff --git a/utility/src/test/java/org/apache/ambari/checkstyle/AvoidTransactionalOnPrivateMethodsCheckTest.java b/utility/src/test/java/org/apache/ambari/checkstyle/AvoidTransactionalOnPrivateMethodsCheckTest.java deleted file mode 100644 index bfdbfa1..0000000 --- a/utility/src/test/java/org/apache/ambari/checkstyle/AvoidTransactionalOnPrivateMethodsCheckTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.checkstyle; - -import static org.apache.ambari.checkstyle.AvoidTransactionalOnPrivateMethodsCheck.MSG_TRANSACTIONAL_ON_PRIVATE_METHOD; - -import java.io.File; -import java.io.IOException; - -import org.junit.Test; - -import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport; -import com.puppycrawl.tools.checkstyle.DefaultConfiguration; - -public class AvoidTransactionalOnPrivateMethodsCheckTest extends BaseCheckTestSupport { - - @Override - protected String getPath(String filename) throws IOException { - return new File("src/test/resources/org/apache/ambari/checkstyle/" + filename) - .getCanonicalPath(); - } - - @Test - public void transactionalOnPrivateMethod() throws Exception { - final DefaultConfiguration config = createCheckConfig(AvoidTransactionalOnPrivateMethodsCheck.class); - final String[] expected = { - "32: " + MSG_TRANSACTIONAL_ON_PRIVATE_METHOD, - "41: " + MSG_TRANSACTIONAL_ON_PRIVATE_METHOD, - }; - - verify(config, getPath("InputTransactionalOnPrivateMethods.java"), expected); - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/test/java/org/apache/ambari/checkstyle/UndocumentedRestApiOperationCheckTest.java ---------------------------------------------------------------------- diff --git a/utility/src/test/java/org/apache/ambari/checkstyle/UndocumentedRestApiOperationCheckTest.java b/utility/src/test/java/org/apache/ambari/checkstyle/UndocumentedRestApiOperationCheckTest.java deleted file mode 100644 index 7caf3cf..0000000 --- a/utility/src/test/java/org/apache/ambari/checkstyle/UndocumentedRestApiOperationCheckTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.checkstyle; - -import static org.apache.ambari.checkstyle.UndocumentedRestApiOperationCheck.MESSAGE; - -import java.io.File; -import java.io.IOException; - -import org.junit.Test; - -import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport; -import com.puppycrawl.tools.checkstyle.DefaultConfiguration; - -public class UndocumentedRestApiOperationCheckTest extends BaseCheckTestSupport { - - @Override - protected String getPath(String filename) throws IOException { - return new File("src/test/resources/org/apache/ambari/checkstyle/" + filename) - .getCanonicalPath(); - } - - @Test - public void test() throws Exception { - final DefaultConfiguration config = createCheckConfig(UndocumentedRestApiOperationCheck.class); - final String[] expected = { - "36: " + MESSAGE, - "53: " + MESSAGE, - "70: " + MESSAGE, - "87: " + MESSAGE, - "104: " + MESSAGE, - "121: " + MESSAGE - }; - - verify(config, getPath("InputRestApiOperation.java"), expected); - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java ---------------------------------------------------------------------- diff --git a/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java b/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java deleted file mode 100644 index a102152..0000000 --- a/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.swagger; - -import static org.easymock.EasyMock.createMock; -import static org.junit.Assert.assertEquals ; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; - -import org.apache.commons.collections.set.ListOrderedSet; -import org.apache.maven.plugin.logging.Log; -import org.junit.Test; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; -import io.swagger.models.Response; -import io.swagger.models.Swagger; -import io.swagger.models.parameters.Parameter; -import io.swagger.models.parameters.PathParameter; - -public class AmbariSwaggerReaderTest { - - - /** - * Test the {@link AmbariSwaggerReader#joinPaths(String, String...)} method - */ - @Test - public void testJoinPaths() { - assertEquals("/toplevel/nested/{param}/list", - AmbariSwaggerReader.joinPaths("", "/", "/", "", "toplevel", "/nested/", "/{param}", "list")); - assertEquals("/toplevel/nested/{param}/list", - AmbariSwaggerReader.joinPaths("/", "toplevel", "", "/nested/", "/", "/{param}", "list", "")); - } - - /** - * Test the basic case: one top level API and one nested API, each with one operation - */ - @Test - public void swaggerBasicCase() { - AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class)); - Swagger swagger = asr.read(ImmutableSet.of(TopLevelAPI.class, NestedAPI.class)); - assertEquals(ImmutableSet.of("/toplevel/top", "/toplevel/{param}/nested/list"), - swagger.getPaths().keySet()); - assertPathParamsExist(swagger, "/toplevel/{param}/nested/list", "param"); - } - - /** - * Test conflicting nested API's (the same API's are returned from different top level API's). - * In this case the nested API should be associated to the first processed top level API. - */ - @Test - public void swaggerConflictingNestedApis() { - AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class)); - ListOrderedSet classes = ListOrderedSet.decorate( - Lists.newArrayList(TopLevelAPI.class, AnotherTopLevelAPI.class, NestedAPI.class)); - Swagger swagger = asr.read(classes); - assertEquals( - ImmutableSet.of("/toplevel/top", "/toplevel/{param}/nested/list", "/toplevel2/anotherTop"), - swagger.getPaths().keySet()); - assertPathParamsExist(swagger, "/toplevel/{param}/nested/list", "param"); - } - - /** - * If an API is both top level (the class has a @Path annotation) and nested (class is a return type of an - * API operation) then it should be treated as top level. - */ - @Test - public void swaggerApiThatIsBothTopLevelAndNestedIsCountedAsTopLevel() { - AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class)); - Swagger swagger = asr.read(ImmutableSet.of(YetAnotherTopLevelAPI.class, NestedAndTopLevelAPI.class)); - assertEquals(ImmutableSet.of("/toplevel3/yetAnotherTop", "/canBeReachedFromTopToo/list"), - swagger.getPaths().keySet()); - } - - - /** - * Verify that the top level API's path parameters are transferred to the nested API. - */ - private static void assertPathParamsExist(Swagger swagger, String path, String... expectedPathParams) { - List<Parameter> parameters = swagger.getPath(path).getGet().getParameters(); - assertNotNull("No path parameters for path: " + path, parameters); - Set<String> pathParamNames = new HashSet<>(); - for (Parameter param: parameters) { - if (param instanceof PathParameter) { - pathParamNames.add(param.getName()); - } - } - Set<String> missingPathParams = Sets.difference(ImmutableSet.copyOf(expectedPathParams), pathParamNames); - assertTrue("Expected path params for [" + path + "] are missing: " + missingPathParams, missingPathParams.isEmpty()); - } - -} - -@Path("/toplevel") -@Api(value = "Top Level", description = "A top level API") -abstract class TopLevelAPI { - - @GET - @Path("/top") - @ApiOperation(value = "list") - public abstract Response getList(); - - @Path("{param}/nested") - public abstract NestedAPI getNested(@ApiParam @PathParam(value = "param") String param); -} - -@Path("/toplevel2") -@Api(value = "Top Level 2", description = "Another top level API") -abstract class AnotherTopLevelAPI { - - @GET - @Path("/anotherTop") - @ApiOperation(value = "list") - public abstract Response getList(); - - @Path("{param}/anotherNested") - public abstract NestedAPI getSecondNested(@ApiParam @PathParam(value = "param") String param); - -} - -@Path("/toplevel3") -@Api(value = "Top Level 3", description = "Yet another top level API") -abstract class YetAnotherTopLevelAPI { - - @GET - @Path("/yetAnotherTop") - @ApiOperation(value = "list") - public abstract Response getList(); - - @Path("{param}/nested") - public abstract NestedAPI getFirstNested(@ApiParam @PathParam(value = "param") String param); - -} - -@Api(value = "Nested", description = "A nested API") -abstract class NestedAPI { - - @GET - @Path("/list") - @ApiOperation(value = "list") - public abstract Response getList(); - -} - -@Path("/canBeReachedFromTopToo") -@Api(value = "Nested and Top Level", description = "An API that is both nested and top level") -abstract class NestedAndTopLevelAPI { - - @GET - @Path("/list") - @ApiOperation(value = "list") - public abstract Response getList(); - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/utility/src/test/resources/log4j.properties b/utility/src/test/resources/log4j.properties deleted file mode 100644 index c088bb7..0000000 --- a/utility/src/test/resources/log4j.properties +++ /dev/null @@ -1,19 +0,0 @@ -# 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. - -# log4j configuration used during build and unit tests - -log4j.rootLogger=INFO,stdout -log4j.threshold=ALL -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2} (%F:%M(%L)) - %m%n http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/test/resources/org/apache/ambari/checkstyle/InputRestApiOperation.java ---------------------------------------------------------------------- diff --git a/utility/src/test/resources/org/apache/ambari/checkstyle/InputRestApiOperation.java b/utility/src/test/resources/org/apache/ambari/checkstyle/InputRestApiOperation.java deleted file mode 100644 index 9aa35ba..0000000 --- a/utility/src/test/resources/org/apache/ambari/checkstyle/InputRestApiOperation.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.checkstyle; - -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.OPTIONS; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; - -import io.swagger.annotations.ApiOperation; - -import org.apache.ambari.annotations.ApiIgnore; - -/** - * Input file for UndocumentedRestApiOperationCheck. - */ -public class InputRestApiOperation { - - @DELETE - public void undocumentedDELETE() { - ; - } - - @DELETE - @ApiOperation(value = "...") - public void documentedDELETE() { - ; - } - - @DELETE - @ApiIgnore - public void ignoredDELETE() { - ; - } - - @HEAD - public void undocumentedHEAD() { - ; - } - - @HEAD - @ApiOperation(value = "...") - public void documentedHEAD() { - ; - } - - @HEAD - @ApiIgnore - public void ignoredHEAD() { - ; - } - - @GET - public void undocumentedGET() { - ; - } - - @GET - @ApiOperation(value = "...") - public void documentedGET() { - ; - } - - @GET - @ApiIgnore - public void ignoredGET() { - ; - } - - @OPTIONS - public void undocumentedOPTIONS() { - ; - } - - @OPTIONS - @ApiOperation(value = "...") - public void documentedOPTIONS() { - ; - } - - @OPTIONS - @ApiIgnore - public void ignoredOPTIONS() { - ; - } - - @POST - public void undocumentedPOST() { - ; - } - - @POST - @ApiOperation(value = "...") - public void documentedPOST() { - ; - } - - @POST - @ApiIgnore - public void ignoredPOST() { - ; - } - - @PUT - public void undocumentedPUT() { - ; - } - - @PUT - @ApiOperation(value = "...") - public void documentedPUT() { - ; - } - - @PUT - @ApiIgnore - public void ignoredPUT() { - ; - } - -} http://git-wip-us.apache.org/repos/asf/ambari/blob/1fbb933e/utility/src/test/resources/org/apache/ambari/checkstyle/InputTransactionalOnPrivateMethods.java ---------------------------------------------------------------------- diff --git a/utility/src/test/resources/org/apache/ambari/checkstyle/InputTransactionalOnPrivateMethods.java b/utility/src/test/resources/org/apache/ambari/checkstyle/InputTransactionalOnPrivateMethods.java deleted file mode 100644 index 2ea5444..0000000 --- a/utility/src/test/resources/org/apache/ambari/checkstyle/InputTransactionalOnPrivateMethods.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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.apache.ambari.checkstyle; - -import com.google.inject.persist.Transactional; - -/** - * Input file for AvoidTransactionalOnPrivateMethodsCheckTest. - */ -public class InputTransactionalOnPrivateMethods { - - @Transactional - public void publicMethodWithTransactional() { - ; - } - - @Transactional - private void privateMethodWithTransactional() { - ; - } - - private void privateMethodWithoutTransactional() { - ; - } - - @Transactional - private void otherPrivateMethodWithTransactional() { - ; - } - -}
