| /* |
| * 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.tools.ant.taskdefs.optional.sos; |
| |
| import java.io.File; |
| |
| import org.apache.tools.ant.BuildFileTest; |
| import org.apache.tools.ant.Project; |
| import org.apache.tools.ant.types.Commandline; |
| import org.apache.tools.ant.types.Path; |
| |
| /** |
| * Testcase to ensure that command line generation and required attributes are |
| * correct. |
| * |
| */ |
| public class SOSTest extends BuildFileTest { |
| |
| private Commandline commandline; |
| |
| private static final String VSS_SERVER_PATH = "\\\\server\\vss\\srcsafe.ini"; |
| private static final String VSS_PROJECT_PATH = "/SourceRoot/Project"; |
| private static final String DS_VSS_PROJECT_PATH = "$/SourceRoot/Project"; |
| private static final String SOS_SERVER_PATH = "192.168.0.1:8888"; |
| private static final String SOS_USERNAME = "ant"; |
| private static final String SOS_PASSWORD = "rocks"; |
| private static final String LOCAL_PATH = "testdir"; |
| private static final String SRC_FILE = "Class1.java"; |
| private static final String SRC_LABEL = "label1"; |
| private static final String SRC_COMMENT = "I fixed a bug"; |
| private static final String SOS_HOME = "/home/user/.sos"; |
| private static final String VERSION = "007"; |
| |
| /** |
| * Constructor for the SOSTest object |
| * |
| * @param s Test name |
| */ |
| public SOSTest(String s) { |
| super(s); |
| } |
| |
| /** |
| * The JUnit setup method |
| * |
| * @throws Exception |
| */ |
| protected void setUp() |
| throws Exception { |
| project = new Project(); |
| project.setBasedir("."); |
| } |
| |
| /** |
| * The teardown method for JUnit |
| * |
| * @throws Exception |
| */ |
| protected void tearDown() |
| throws Exception { |
| File file = new File(project.getBaseDir(), LOCAL_PATH); |
| if (file.exists()) { |
| file.delete(); |
| } |
| } |
| |
| /** Test SOSGetFile flags & commandline generation */ |
| public void testGetFileFlags() { |
| String[] sTestCmdLine = {"soscmd", "-command", "GetFile", "-file", |
| SRC_FILE, "-revision", "007", "-server", SOS_SERVER_PATH, "-name", |
| SOS_USERNAME, "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, |
| "-project", DS_VSS_PROJECT_PATH, "-verbose", "-nocompress", |
| "-nocache", "-workdir", project.getBaseDir().getAbsolutePath() |
| + File.separator + LOCAL_PATH}; |
| |
| // Set up a SOSGet task |
| SOSGet sosGet = new SOSGet(); |
| sosGet.setProject(project); |
| sosGet.setVssServerPath(VSS_SERVER_PATH); |
| sosGet.setSosServerPath(SOS_SERVER_PATH); |
| sosGet.setProjectPath(VSS_PROJECT_PATH); |
| sosGet.setFile(SRC_FILE); |
| sosGet.setUsername(SOS_USERNAME); |
| sosGet.setPassword(SOS_PASSWORD); |
| sosGet.setVersion(VERSION); |
| sosGet.setLocalPath(new Path(project, LOCAL_PATH)); |
| sosGet.setNoCache(true); |
| sosGet.setNoCompress(true); |
| sosGet.setVerbose(true); |
| sosGet.setRecursive(true); |
| |
| commandline = sosGet.buildCmdLine(); |
| |
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); |
| } |
| |
| /** Test SOSGetProject flags & commandline generation */ |
| public void testGetProjectFlags() { |
| String[] sTestCmdLine = {"soscmd", "-command", "GetProject", "-recursive", |
| "-label", SRC_LABEL, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME, |
| "-password", "", "-database", VSS_SERVER_PATH, "-project", |
| DS_VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir", |
| project.getBaseDir().getAbsolutePath()}; |
| |
| // Set up a SOSGet task |
| SOSGet sosGet = new SOSGet(); |
| sosGet.setProject(project); |
| sosGet.setVssServerPath(VSS_SERVER_PATH); |
| sosGet.setSosServerPath(SOS_SERVER_PATH); |
| sosGet.setProjectPath(DS_VSS_PROJECT_PATH); |
| sosGet.setLabel(SRC_LABEL); |
| sosGet.setUsername(SOS_USERNAME); |
| sosGet.setSosHome(SOS_HOME); |
| sosGet.setNoCache(true); |
| sosGet.setNoCompress(false); |
| sosGet.setVerbose(false); |
| sosGet.setRecursive(true); |
| |
| commandline = sosGet.buildCmdLine(); |
| |
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); |
| } |
| |
| /** Tests SOSGet required attributes. */ |
| public void testGetExceptions() { |
| configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml"); |
| expectSpecificBuildException("sosget.1", "some cause", "sosserverpath attribute must be set!"); |
| expectSpecificBuildException("sosget.2", "some cause", "username attribute must be set!"); |
| expectSpecificBuildException("sosget.3", "some cause", "vssserverpath attribute must be set!"); |
| expectSpecificBuildException("sosget.4", "some cause", "projectpath attribute must be set!"); |
| } |
| |
| /** Test CheckInFile option flags */ |
| public void testCheckinFileFlags() { |
| String[] sTestCmdLine = {"soscmd", "-command", "CheckInFile", "-file", |
| SRC_FILE, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME, |
| "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, "-project", |
| DS_VSS_PROJECT_PATH, "-verbose", "-nocompress", "-nocache", |
| "-workdir", project.getBaseDir().getAbsolutePath() + File.separator |
| + LOCAL_PATH, "-log", SRC_COMMENT}; |
| |
| // Set up a SOSCheckin task |
| SOSCheckin sosCheckin = new SOSCheckin(); |
| sosCheckin.setProject(project); |
| sosCheckin.setVssServerPath(VSS_SERVER_PATH); |
| sosCheckin.setSosServerPath(SOS_SERVER_PATH); |
| sosCheckin.setProjectPath(VSS_PROJECT_PATH); |
| sosCheckin.setFile(SRC_FILE); |
| sosCheckin.setComment(SRC_COMMENT); |
| sosCheckin.setUsername(SOS_USERNAME); |
| sosCheckin.setPassword(SOS_PASSWORD); |
| sosCheckin.setLocalPath(new Path(project, LOCAL_PATH)); |
| sosCheckin.setNoCache(true); |
| sosCheckin.setNoCompress(true); |
| sosCheckin.setVerbose(true); |
| sosCheckin.setRecursive(true); |
| |
| commandline = sosCheckin.buildCmdLine(); |
| |
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); |
| } |
| |
| /** Test CheckInProject option flags */ |
| public void testCheckinProjectFlags() { |
| String[] sTestCmdLine = {"soscmd", "-command", "CheckInProject", |
| "-recursive", "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME, |
| "-password", "", "-database", VSS_SERVER_PATH, "-project", |
| DS_VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir", |
| project.getBaseDir().getAbsolutePath(), "-log", SRC_COMMENT,}; |
| |
| // Set up a SOSCheckin task |
| SOSCheckin sosCheckin = new SOSCheckin(); |
| sosCheckin.setProject(project); |
| sosCheckin.setVssServerPath(VSS_SERVER_PATH); |
| sosCheckin.setSosServerPath(SOS_SERVER_PATH); |
| sosCheckin.setProjectPath(DS_VSS_PROJECT_PATH); |
| sosCheckin.setComment(SRC_COMMENT); |
| sosCheckin.setUsername(SOS_USERNAME); |
| sosCheckin.setSosHome(SOS_HOME); |
| sosCheckin.setNoCache(true); |
| sosCheckin.setNoCompress(false); |
| sosCheckin.setVerbose(false); |
| sosCheckin.setRecursive(true); |
| |
| commandline = sosCheckin.buildCmdLine(); |
| |
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); |
| } |
| |
| /** Test SOSCheckIn required attributes. */ |
| public void testCheckinExceptions() { |
| configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml"); |
| expectSpecificBuildException("soscheckin.1", "some cause", "sosserverpath attribute must be set!"); |
| expectSpecificBuildException("soscheckin.2", "some cause", "username attribute must be set!"); |
| expectSpecificBuildException("soscheckin.3", "some cause", "vssserverpath attribute must be set!"); |
| expectSpecificBuildException("soscheckin.4", "some cause", "projectpath attribute must be set!"); |
| } |
| |
| /** Test CheckOutFile option flags */ |
| public void testCheckoutFileFlags() { |
| String[] sTestCmdLine = {"soscmd", "-command", "CheckOutFile", "-file", |
| SRC_FILE, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME, |
| "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, "-project", |
| DS_VSS_PROJECT_PATH, "-verbose", "-nocompress", "-nocache", |
| "-workdir", project.getBaseDir().getAbsolutePath() |
| + File.separator + LOCAL_PATH}; |
| |
| // Set up a SOSCheckout task |
| SOSCheckout sosCheckout = new SOSCheckout(); |
| sosCheckout.setProject(project); |
| sosCheckout.setVssServerPath(VSS_SERVER_PATH); |
| sosCheckout.setSosServerPath(SOS_SERVER_PATH); |
| sosCheckout.setProjectPath(DS_VSS_PROJECT_PATH); |
| sosCheckout.setFile(SRC_FILE); |
| sosCheckout.setUsername(SOS_USERNAME); |
| sosCheckout.setPassword(SOS_PASSWORD); |
| sosCheckout.setLocalPath(new Path(project, LOCAL_PATH)); |
| sosCheckout.setNoCache(true); |
| sosCheckout.setNoCompress(true); |
| sosCheckout.setVerbose(true); |
| sosCheckout.setRecursive(true); |
| |
| commandline = sosCheckout.buildCmdLine(); |
| |
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); |
| } |
| |
| /** Test CheckOutProject option flags */ |
| public void testCheckoutProjectFlags() { |
| String[] sTestCmdLine = {"soscmd", "-command", "CheckOutProject", |
| "-recursive", "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME, |
| "-password", "", "-database", VSS_SERVER_PATH, "-project", |
| DS_VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir", |
| project.getBaseDir().getAbsolutePath()}; |
| |
| // Set up a sosCheckout task |
| SOSCheckout sosCheckout = new SOSCheckout(); |
| sosCheckout.setProject(project); |
| sosCheckout.setVssServerPath(VSS_SERVER_PATH); |
| sosCheckout.setSosServerPath(SOS_SERVER_PATH); |
| sosCheckout.setProjectPath(VSS_PROJECT_PATH); |
| sosCheckout.setUsername(SOS_USERNAME); |
| sosCheckout.setSosHome(SOS_HOME); |
| sosCheckout.setNoCache(true); |
| sosCheckout.setNoCompress(false); |
| sosCheckout.setVerbose(false); |
| sosCheckout.setRecursive(true); |
| |
| commandline = sosCheckout.buildCmdLine(); |
| |
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); |
| } |
| |
| /** Test SOSCheckout required attributes. */ |
| public void testCheckoutExceptions() { |
| configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml"); |
| expectSpecificBuildException("soscheckout.1", "some cause", "sosserverpath attribute must be set!"); |
| expectSpecificBuildException("soscheckout.2", "some cause", "username attribute must be set!"); |
| expectSpecificBuildException("soscheckout.3", "some cause", "vssserverpath attribute must be set!"); |
| expectSpecificBuildException("soscheckout.4", "some cause", "projectpath attribute must be set!"); |
| } |
| |
| /** Test Label option flags */ |
| public void testLabelFlags() { |
| String[] sTestCmdLine = {"soscmd", "-command", "AddLabel", "-server", |
| SOS_SERVER_PATH, "-name", SOS_USERNAME, "-password", "", "-database", |
| VSS_SERVER_PATH, "-project", DS_VSS_PROJECT_PATH, "-label", |
| SRC_LABEL, "-verbose", "-log", SRC_COMMENT}; |
| |
| // Set up a sosCheckout task |
| SOSLabel sosLabel = new SOSLabel(); |
| sosLabel.setVssServerPath(VSS_SERVER_PATH); |
| sosLabel.setSosServerPath(SOS_SERVER_PATH); |
| sosLabel.setProjectPath(DS_VSS_PROJECT_PATH); |
| sosLabel.setUsername(SOS_USERNAME); |
| sosLabel.setSosHome(SOS_HOME); |
| sosLabel.setComment(SRC_COMMENT); |
| sosLabel.setLabel(SRC_LABEL); |
| sosLabel.setNoCache(true); |
| sosLabel.setNoCompress(false); |
| sosLabel.setVerbose(true); |
| |
| commandline = sosLabel.buildCmdLine(); |
| |
| checkCommandLines(sTestCmdLine, commandline.getCommandline()); |
| } |
| |
| /** Test SOSLabel required attributes. */ |
| public void testLabelExceptions() { |
| configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml"); |
| expectSpecificBuildException("soslabel.1", "some cause", "sosserverpath attribute must be set!"); |
| expectSpecificBuildException("soslabel.2", "some cause", "username attribute must be set!"); |
| expectSpecificBuildException("soslabel.3", "some cause", "vssserverpath attribute must be set!"); |
| expectSpecificBuildException("soslabel.4", "some cause", "projectpath attribute must be set!"); |
| expectSpecificBuildException("soslabel.5", "some cause", "label attribute must be set!"); |
| } |
| |
| /** |
| * Iterate through the generated command line comparing it to reference |
| * one. |
| * |
| * @param sTestCmdLine The reference command line; |
| * @param sGeneratedCmdLine The generated command line; |
| */ |
| private void checkCommandLines(String[] sTestCmdLine, String[] sGeneratedCmdLine) { |
| int length = sTestCmdLine.length; |
| for (int i = 0; i < length; i++) { |
| try { |
| assertEquals("arg # " + String.valueOf(i), |
| sTestCmdLine[i], |
| sGeneratedCmdLine[i]); |
| } catch (ArrayIndexOutOfBoundsException aioob) { |
| fail("missing arg " + sTestCmdLine[i]); |
| } |
| } |
| if (sGeneratedCmdLine.length > sTestCmdLine.length) { |
| // We have extra elements |
| fail("extra args"); |
| } |
| } |
| } |