(file) Return to TestWrapperStressClient.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / test / StressTestClients / WrapperStressClient

Diff for /pegasus/test/StressTestClients/WrapperStressClient/TestWrapperStressClient.cpp between version 1.1 and 1.2

version 1.1, 2006/04/18 03:37:37 version 1.2, 2006/04/27 18:47:13
Line 0 
Line 1 
   //%2006////////////////////////////////////////////////////////////////////////
   //
   // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation, The Open Group.
   // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; Symantec Corporation; The Open Group.
   //
   // Permission is hereby granted, free of charge, to any person obtaining a copy
   // of this software and associated documentation files (the "Software"), to
   // deal in the Software without restriction, including without limitation the
   // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   // sell copies of the Software, and to permit persons to whom the Software is
   // furnished to do so, subject to the following conditions:
   //
   // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
   // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
   // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
   // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
   // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
   // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
   // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
   // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   //
   //==============================================================================
   //
   // Author:  Melvin, IBM (msolomon@in.ibm.com) for PEP# 241
   //
   // Modified By:
   //
   //%/////////////////////////////////////////////////////////////////////////////
   
   #include "../TestStressTestClient.h"
   
   PEGASUS_USING_PEGASUS;
   PEGASUS_USING_STD;
   
   class TestWrapperStressClient : public TestStressTestClient
   {
   };
   
   Boolean quit = false;
   Boolean nextCheck = false;
   String errorInfo;
   char thisClient[] = "WrapperStressClient";
   
   /**
       Signal handler for SIGALARM.
       @param signum - the alarm identifier
    */
   void endTest(int signum)
   {
       cout<<"Recieved interupt signal SIGINT!\n"<<endl;
       quit = true;
   }
   
   /**
       MAIN
   */
   int main(int argc, char** argv)
   {
       OptionManager om;
       TestWrapperStressClient wc;
       pid_t clientPid = getpid();
       Uint32 validArg = 0;
       Boolean verboseTest;
   
       //
       // Varriables needed for loging and status checking.
       //
       String clientId;
       String pidFile;
       String clientLog, stopClient;
       char pid_str[15];
       int status = CLIENT_UNKNOWN;
   
       //
       // Number of times the client command succeeded.
       //
       Uint32 successCount = 0;
   
       //
       // Number of iterations after which logErrorPercentage() is called.
       //
       Uint32 iteration = 0;
   
       //
       // Total number of times the client command was executed.
       //
       Uint32 totalCount = 0;
   
       //
       // Variables needed for Command operation.
       //
       String command;
   
       String options;
       String help;
   
       try
       {
           struct OptionRow *newOptionsTable = 0;
           Uint32 newOptionsCount;
   
           struct OptionRow cOptionTable[] =
           {
               {"clientname", "", true, Option::STRING, 0, 0, "clientname",
                   "Client name" },
   
               {"options", "", true, Option::STRING, 0, 0, "options",
                   "Corresponding Client program's options" }
           };
   
           Uint32 cOptionCount = sizeof(cOptionTable) / sizeof(cOptionTable[0]);
           newOptionsCount = cOptionCount;
   
           try
           {
               //
               // Generate new option table for this client using OptionManager
               //
               newOptionsTable = wc.generateClientOptions(
                                     cOptionTable,
                                     cOptionCount,
                                     newOptionsCount);
               validArg = wc.GetOptions(
                              om,
                              argc,
                              argv,
                              newOptionsTable,
                              newOptionsCount);
           }
           catch (Exception& e)
           {
               cerr << argv[0] << ": " << e.getMessage() << endl;
               exit(1);
           }
           catch (...)
           {
               cerr << argv[0] << ": Error in Options operations "<< endl;
               exit(1);
           }
   
           verboseTest = om.isTrue("verbose");
   
           om.lookupValue("clientid", clientId);
   
           om.lookupValue("pidfile", pidFile);
   
           om.lookupValue("clientlog", clientLog);
   
           om.lookupValue("clientname", command);
   
           om.lookupValue("options", options);
   
           om.lookupValue("help", help);
       } /** end of option Try block. */
       catch (Exception& e)
       {
           cerr << argv[0] << ": " << e.getMessage() <<endl;
           exit(1);
       }
       catch (...)
       {
           cerr << argv[0] << ": Unknown Error gathering options "
                << "in Wrapper Client " << endl;
           exit(1);
       }
   
       /** Checking whether the user asked for HELP Info...
       if (om.valueEquals("help", "true"))
       {
           String header = "Usage ";
           header.append(argv[0]);
           header.append(" -parameters -clientName [clientName]
           header.append(" -options [options] -clientid [clientId] ");
           header.append(" -pidfile [pidFile] -clientlog [clientLog]");
           String trailer = "Assumes localhost:5988 if host not specified";
           trailer.append("\nHost may be of the form name or name:port");
           trailer.append("\nPort 5988 assumed if port number missing.");
           om.printOptionsHelpTxt(header, trailer);
           exit(0);
       }
       */
   
       try
       {
           if (options.getCString())
           {
               command.append(" " + options);
           }
           if (verboseTest)
           {
               errorInfo.append("client command :  ");
               errorInfo.append(command);
               wc.errorLog(clientPid, clientLog, errorInfo);
               errorInfo.clear();
           }
   
           //
           // Signal Handling - SIGINT.
           //
           signal(SIGINT, endTest);
   
           //
           // Timer Start.
           //
           wc.startTime();
   
           wc.logInfo(clientId, clientPid, status, pidFile);
           sprintf(pid_str, "%d", clientPid);
   
           stopClient = String::EMPTY;
           stopClient.append(FileSystem::extractFilePath(pidFile));
           stopClient.append("STOP_");
           stopClient.append(pid_str);
   
           //
           // This loop executes till the client gets stop signal from
           // controller.
           //
           while (!quit)
           {
               if (FileSystem::exists(stopClient))
               {
                   if (verboseTest)
                   {
                       String mes("Ending client. ");
                       wc.errorLog(clientPid, clientLog, mes);
                   }
                   break;
               }
   
                   if (!verboseTest)
                   {
   #ifdef PEGASUS_OS_TYPE_WINDOWS
                       freopen("nul","w",stdout);
   #else
                       freopen("/dev/null","w",stdout);
   #endif
                   }
   
               int i = system(command.getCString());
   
               iteration++;
               totalCount++;
               switch (i)
               {
                   case 0:
                       if (status != CLIENT_PASS)
                       {
                           status = CLIENT_PASS;
                           wc.logInfo(clientId, clientPid, status, pidFile);
                       }
                       successCount++;
                       break;
   
                   case 1:
                       status = CLIENT_UNKNOWN;
                       wc.logInfo(clientId, clientPid, status, pidFile);
                       break;
   
                   default:
                       status = CLIENT_FAIL;
                       wc.logInfo(clientId, clientPid, status, pidFile);
                       break;
               }
   
               nextCheck = wc.checkTime();
               if (nextCheck)
               {
                   wc.logInfo(clientId, clientPid, status, pidFile);
                   nextCheck = false;
               }
   
               //
               // If verbose is set, log success percentage for every 100
               // iterations.  If verbose is not set, log success percentage
               // for every 1000 iterations.
               //
               if (verboseTest)
               {
                   if (iteration == 100)
                   {
                       wc.logErrorPercentage(
                           successCount,
                           totalCount,
                           clientPid,
                           clientLog,
                           thisClient);
                       iteration = 0;
                   }
               }
               else
               {
                   if (iteration == 1000)
                   {
                       wc.logErrorPercentage(
                           successCount,
                           totalCount,
                           clientPid,
                           clientLog,
                           thisClient);
                       iteration = 0;
                   }
               }
           } /** end of while(!quit). */
       } /** end of command execution try block. */
       catch (Exception &exp)
       {
           String expStr("Exception in WrapperClient causing it to exit: ");
           expStr.append(exp.getMessage());
           wc.errorLog(clientPid, clientLog, expStr);
   
           if (verboseTest)
           {
               cerr << expStr.getCString() << endl;
           }
       }
       catch (...)
       {
           String expStr("General Exception in WrapperClient causing it to exit");
           wc.errorLog(clientPid, clientLog, expStr);
   
           if (verboseTest)
           {
               cerr << expStr.getCString() << endl;
           }
       }
   
   //
   // second delay before shutdown.
   //
   #ifndef PEGASUS_OS_TYPE_WINDOWS
       sleep(1);
   #else
       Sleep(1000);
   #endif
   
       if(FileSystem::exists(stopClient))
       {
           //
           // Remove STOP file here.
           //
           FileSystem::removeFile(stopClient);
       }
       if (verboseTest)
       {
           errorInfo.append(
               "++++ TestWrapperStressClient Terminated Normally +++++");
           wc.errorLog(clientPid, clientLog, errorInfo);
           errorInfo.clear();
       }
       return 0;
   }


Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2