/* * _RUNCASE.CMD - V1.0 C.Langanke 2008 * * This is an external command processor for testcase.cmd * and executes the testcases defined in it. */ /* The first comment is used as online help text */ /* ***** BEGIN LICENSE BLOCK ***** * Version: CDDL 1.0 * * The contents of this file are subject to the COMMON DEVELOPMENT AND * DISTRIBUTION LICENSE (CDDL) Version 1.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.sun.com/cddl/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is * "netlabs.org Open Source Archive Administrator/Client" * * The Original Distribution Package is named * "netlabs.org Open Source Archive Administrator/Client" * and maintained and distributed by the Initial Developer * and/or netlabs.org only. * * In addition to the CDDL the following applies: * If you modify the Original Code, you may distribute it only * as a part of a distribution package where * - the name of the package, created directories or * OS2.INI entries do not contain any of the terms * - "netlabs.org Open Source Archive" * - "NOSA" * - "NOSAC" * - "NOSAADM" * - neither netlabs.org nor the Initial Developer is stated as * the vendor or originator of the resulting Distribution Package, * which contains the Modified Code. * * The Initial Developer of the Original Code is * netlabs.org: Christian Langanke . * Portions created by the Initial Developer are Copyright (C) 1999-2008 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** */ SIGNAL ON HALT TitleLine = STRIP(SUBSTR(SourceLine(2), 3)); PARSE VAR TitleLine CmdName'.CMD 'Info Title = CmdName Info env = 'OS2ENVIRONMENT'; TRUE = (1 = 1); FALSE = (0 = 1); CrLf = '0d0a'x; Redirection = '> NUL 2>&1'; '@ECHO OFF' /* OS/2 Error codes */ ERROR.NO_ERROR = 0; ERROR.INVALID_FUNCTION = 1; ERROR.FILE_NOT_FOUND = 2; ERROR.PATH_NOT_FOUND = 3; ERROR.ACCESS_DENIED = 5; ERROR.NOT_ENOUGH_MEMORY = 8; ERROR.INVALID_FORMAT = 11; ERROR.INVALID_DATA = 13; ERROR.NO_MORE_FILES = 18; ERROR.WRITE_FAULT = 29; ERROR.READ_FAULT = 30; ERROR.GEN_FAILURE = 31; ERROR.INVALID_PARAMETER = 87; ERROR.OPEN_FAILED = 110; ERROR.ENVVAR_NOT_FOUND = 203; GlobalVars = 'Title CmdName CrLf env TRUE FALSE Redirection ERROR.'; SAY; /* eventually show help */ ARG Parm . IF ((Parm = '') | (POS('?', Parm) > 0)) THEN DO rc = ShowHelp(); EXIT(ERROR.INVALID_PARAMETER); END; /* dafault values */ GlobalVars = GlobalVars ''; rc = ERROR.NO_ERROR; fExpectedSuccess = FALSE; ExecFile = '..\..\..\debug\cvssec.exe'; ExecDebug = 'icsdebug'; ValidResults = 'SUCCEED FAIL'; DO 1 /* determine basepath of SVN testarchive */ BasePath = VALUE( 'BASEPATH',,env); IF (BasePath = '') THEN BasePath = 'testarchive'; /* check for ACL file */ AclFile = BasePath'\cvsroot\writeinfo'; IF (\FileExist( AclFile)) THEN DO SAY CmdName': ACL file not found:' AclFile; rc = ERROR.FILE_NOT_FOUND; LEAVE; END; /* check for program file */ FullFileName = STREAM( ExecFile, 'C', 'QUERY EXISTS'); IF (\FileExist( FullFileName)) THEN DO SAY CmdName': program file not found:' ExecFile; rc = ERROR.FILE_NOT_FOUND; LEAVE; END; ExecFile = FullFileName; /* in debug case, prepend name of the debugger */ IF (VALUE( 'TESTCASE_DEBUG',,env) \= '') THEN ExecFile = ExecDebug ExecFile; /* read script file */ PARSE ARG ScriptFile TestcaseList; ScriptFile = STRIP( ScriptFile); IF (ScriptFile = '') THEN DO SAY CmdName': script file not specified.'; rc = ERROR.INVALID_PARAMETER; LEAVE; END; FullFileName = STREAM( ScriptFile, 'C', 'QUERY EXISTS'); IF (FullFileName = '') THEN DO SAY CmdName': script file not found:' ScriptFile; rc = ERROR.FILE_NOT_FOUND; LEAVE; END; /* --------------------------------------------------------------*/ /* read scriptfile */ IF (STREAM( ScriptFile, 'C', 'OPEN READ') \= 'READY:') THEN DO SAY CmdName': cannot read script file:' ScriptFile; rc = ERROR.OPEN_FAILED; LEAVE; END; LineNo = 0; AvailableTestcases = ''; Testcase. = ''; DO WHILE (LINES( ScriptFile) > 0) /* read testcase lines */ Thisline = LINEIN( ScriptFile); LineNo = LineNo + 1; IF ((ThisLine = '') |, (TRANSLATE( WORD( ThisLine, 1)) = 'EXTPROC') |, (LEFT( ThisLine, 1) = ':')) THEN ITERATE; /* check for definition */ PARSE VAR ThisLine CaseId ResultType UserId '"'CaseTitle'"' CaseCommand; IF (CaseCommand = '') THEN DO SAY ScriptFile'('LineNo'): incomplete testcase definition'; ITERATE; END; CaseId = TRANSLATE( STRIP( CaseId)); ResultType = TRANSLATE( STRIP( ResultType)); UserId = STRIP( UserId); CaseTitle = STRIP( CaseTitle); CaseCommand = STRIP( CaseCommand); ResultTypeId = WORDPOS( ResultType, ValidResults); IF (ResultTypeId = 0) THEN DO SAY ScriptFile'('LineNo'): invalid result type specified, must be one of:' ValidResults); ITERATE; END; /* testcase already defined ? */ IF (WORDPOS( CaseId, AvailableTestcases) > 0) THEN DO SAY ScriptFile'('LineNo'): testcase already defined:' CaseId; ITERATE; END; /* store testcase */ AvailableTestcases = AvailableTestcases CaseId; Testcase.CaseId._ResultTypeId = ResultTypeId Testcase.CaseId._UserId = UserId; Testcase.CaseId._Title = CaseTitle; Testcase.CaseId._Command = CaseCommand; END; rcx = STREAM( ScriptFile, 'C', 'CLOSE'); /* --------------------------------------------------------------*/ /* perform all or requested testcases */ IF (STRIP( TestcaseList) = '') THEN TestcaseList = AvailableTestcases; TestcaseList = SPACE( TRANSLATE( TestcaseList)); DO WHILE (TestcaseList \= '') PARSE VAR TestcaseList CaseId TestcaseList; CaseIndex = WORDPOS( CaseId, AvailableTestcases); IF (CaseIndex = 0) THEN DO SAY 'error: case id not found:' CaseId; SAY; ITERATE; END; fMustSucceed = (Testcase.CaseId._ResultTypeId = 1); rc = ExecuteTestcase( BasePath,, ExecFile,, CaseId,, fMustSucceed,, Testcase.CaseId._UserId,, Testcase.CaseId._Title,, Testcase.CaseId._Command); END; END; RETURN( rc); END; EXIT( rc); /* ------------------------------------------------------------------------- */ HALT: SAY 'Abbruch durch Benutzer.'; EXIT(ERROR.GEN_FAILURE); /* ------------------------------------------------------------------------- */ ShowHelp: PROCEDURE EXPOSE (GlobalVars) /* show title */ SAY Title; SAY; PARSE SOURCE . . ThisFile /* skip header */ DO i = 1 TO 3 rc = LINEIN(ThisFile); END; /* show help text */ ThisLine = LINEIN(Thisfile); DO WHILE (ThisLine \= ' */') SAY SUBSTR(ThisLine, 7); ThisLine = LINEIN(Thisfile); END; /* close file */ rc = LINEOUT(Thisfile); RETURN(''); /* ------------------------------------------------------------------------- */ FileExist: PROCEDURE PARSE ARG FileName RETURN(STREAM(Filename, 'C', 'QUERY EXISTS') > ''); /* ========================================================================= */ ExecuteTestcase: PROCEDURE EXPOSE (GlobalVars) PARSE ARG BasePath, ExecFile, CaseId, fMustSucceed, UserId, CaseTitle, CaseCommand; DO 1 IF (fMustSucceed) THEN TitleSuccess = 'must succeed'; ELSE TitleSuccess = 'must fail'; ThisCaseTitle = CaseTitle '-' TitleSuccess; /* preserve and set environment */ rcx = SETLOCAL(); rcx = VALUE( 'USER', UserId, env); rcx = VALUE( 'BASEPATH', BasePath, env); rcx = VALUE( 'CVSROOT', ':local:'BasePath, env); SAY; SAY 'Testcase' CaseId '- user' UserId; SAY ThisCaseTitle SAY COPIES( '-', LENGTH( ThisCaseTitle)); '' ExecFile CaseCommand; /* don't handl errors when debugger is called */ IF (VALUE( 'TESTCASE_DEBUG',,env) = '') THEN DO rc = 0; LEAVE; END; /* handle unexpcected results */ IF ((fMustSucceed) & (rc <> 0)) THEN DO SAY 'error in testcase' CaseId '- no error expected'; 'PAUSE'; rc = 1; LEAVE; END; IF ((\fMustSucceed) & (rc = 0)) THEN DO SAY 'error in testcase' CaseId '- error expected'; 'PAUSE'; rc = 1; LEAVE; END; rc = 0; LEAVE; END; RETURN( rc);