(file) Return to testSnmpHandler.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Handler / snmpIndicationHandler / tests / testclient

Diff for /pegasus/src/Pegasus/Handler/snmpIndicationHandler/tests/testclient/testSnmpHandler.cpp between version 1.10.2.1 and 1.17

version 1.10.2.1, 2007/11/13 18:53:26 version 1.17, 2008/12/01 17:50:39
Line 1 
Line 1 
 //%2006////////////////////////////////////////////////////////////////////////  //%LICENSE////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development  // Licensed to The Open Group (TOG) under one or more contributor license
 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.  // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;  // this work for additional information regarding copyright ownership.
 // IBM Corp.; EMC Corporation, The Open Group.  // Each contributor licenses this file to you under the OpenPegasus Open
 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;  // Source License; you may not use this file except in compliance with the
 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.  // License.
 // 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  // Permission is hereby granted, free of charge, to any person obtaining a
 // of this software and associated documentation files (the "Software"), to  // copy of this software and associated documentation files (the "Software"),
 // deal in the Software without restriction, including without limitation the  // to deal in the Software without restriction, including without limitation
 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or  // the rights to use, copy, modify, merge, publish, distribute, sublicense,
 // sell copies of the Software, and to permit persons to whom the Software is  // and/or sell copies of the Software, and to permit persons to whom the
 // furnished to do so, subject to the following conditions:  // Software is furnished to do so, subject to the following conditions:
 // //
 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN  // The above copyright notice and this permission notice shall be included
 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED  // in all copies or substantial portions of the Software.
 // "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.  
 // //
 //==============================================================================  // 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.
   //
   //////////////////////////////////////////////////////////////////////////
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
Line 51 
Line 49 
 const String SNMPV1_HANDLER_NAME = "SNMPHandler01"; const String SNMPV1_HANDLER_NAME = "SNMPHandler01";
 const String SNMPV2C_HANDLER_NAME = "SNMPHandler02"; const String SNMPV2C_HANDLER_NAME = "SNMPHandler02";
 const String SNMPV2C_IPV6_HANDLER_NAME = "SNMPHandler03"; const String SNMPV2C_IPV6_HANDLER_NAME = "SNMPHandler03";
 const String FILTER_NAME = "IPFilter01";  const String FILTER_NAME = "SNMPIPFilter01";
  
 enum SNMPVersion {_SNMPV1_TRAP = 2, _SNMPV2C_TRAP = 3}; enum SNMPVersion {_SNMPV1_TRAP = 2, _SNMPV2C_TRAP = 3};
 enum TargetHostFormat {_HOST_NAME = 2, _IPV4_ADDRESS = 3, _IPV6_ADDRESS = 4}; enum TargetHostFormat {_HOST_NAME = 2, _IPV4_ADDRESS = 3, _IPV6_ADDRESS = 4};
Line 69 
Line 67 
 class T_Parms class T_Parms
 { {
 public: public:
     AutoPtr<CIMClient> client;      CIMClient* client;
     Uint32 indicationSendCount;     Uint32 indicationSendCount;
     Uint32 uniqueID;     Uint32 uniqueID;
 }; };
Line 552 
Line 550 
 ThreadReturnType PEGASUS_THREAD_CDECL _executeTests(void *parm) ThreadReturnType PEGASUS_THREAD_CDECL _executeTests(void *parm)
 { {
     Thread *my_thread = (Thread *)parm;     Thread *my_thread = (Thread *)parm;
     T_Parms *parms = (T_Parms *)my_thread->get_parm();      AutoPtr<T_Parms> parms((T_Parms *)my_thread->get_parm());
     CIMClient *client = parms->client.get();      CIMClient* client = parms->client;
     Uint32 indicationSendCount = parms->indicationSendCount;     Uint32 indicationSendCount = parms->indicationSendCount;
     Uint32 id = parms->uniqueID;     Uint32 id = parms->uniqueID;
     char id_[4];     char id_[4];
     memset(id_,0x00,sizeof(id_));     memset(id_,0x00,sizeof(id_));
     sprintf(id_,"%i",id);      sprintf(id_,"%u",id);
     String uniqueID = "_";     String uniqueID = "_";
     uniqueID.append(id_);     uniqueID.append(id_);
  
Line 585 
Line 583 
     {     {
         cout << e.getMessage() << endl;         cout << e.getMessage() << endl;
     }     }
     my_thread->exit_self((ThreadReturnType)1);  
     return(0);      return ThreadReturnType(0);
 } }
  
 Thread * _runTestThreads( Thread * _runTestThreads(
Line 596 
Line 594 
 { {
     // package parameters, create thread and run...     // package parameters, create thread and run...
     AutoPtr<T_Parms> parms(new T_Parms());     AutoPtr<T_Parms> parms(new T_Parms());
     parms->client.reset(client);      parms->client = client;
     parms->indicationSendCount = indicationSendCount;     parms->indicationSendCount = indicationSendCount;
     parms->uniqueID = uniqueID;     parms->uniqueID = uniqueID;
     AutoPtr<Thread> t(new Thread(_executeTests, (void*)parms.release(), false));     AutoPtr<Thread> t(new Thread(_executeTests, (void*)parms.release(), false));
Line 604 
Line 602 
     return t.release();     return t.release();
 } }
  
 String _getLogFile()  Uint32 _getReceivedTrapCount(Uint16 snmpVersion, const String& logFile)
 {  
     return("trapLogFile");  
 }  
   
 Uint32 _getReceivedTrapCount(Uint16 snmpVersion)  
 { {
     String trap1 = "Trap Info: TRAP, SNMP v1, community public";     String trap1 = "Trap Info: TRAP, SNMP v1, community public";
     String trap2 = "Trap Info: TRAP2, SNMP v2c, community public";     String trap2 = "Trap Info: TRAP2, SNMP v2c, community public";
Line 617 
Line 610 
     Uint32 receivedTrap1Count = 0;     Uint32 receivedTrap1Count = 0;
     Uint32 receivedTrap2Count = 0;     Uint32 receivedTrap2Count = 0;
  
     ifstream ifs(_getLogFile().getCString());      ifstream ifs(logFile.getCString());
     if (!ifs)     if (!ifs)
     {     {
         return (0);         return (0);
Line 660 
Line 653 
 // Stop snmptrapd process if it is running and remove // Stop snmptrapd process if it is running and remove
 // procIdFile file if it exists // procIdFile file if it exists
 // //
 void _stopSnmptrapd()  void _stopSnmptrapd(const String& processIdFile)
 { {
     String procIdFileName = "procIdFile";  
   
     Uint32 receiverPid;     Uint32 receiverPid;
     FILE *fd;     FILE *fd;
     if ((fd = fopen(procIdFileName.getCString(), "r")) != NULL)      if ((fd = fopen(processIdFile.getCString(), "r")) != NULL)
     {     {
         if (fscanf(fd, "%d\n", &receiverPid) != 1)         if (fscanf(fd, "%d\n", &receiverPid) != 1)
         {         {
Line 678 
Line 669 
         fclose(fd);         fclose(fd);
     }     }
  
     if (FileSystem::exists(procIdFileName))      if (FileSystem::exists(processIdFile))
     {     {
         FileSystem::removeFile(procIdFileName);          FileSystem::removeFile(processIdFile);
     }     }
 } }
  
 static Boolean _startSnmptrapd( static Boolean _startSnmptrapd(
     FILE **trapInfo)      FILE **trapInfo,
       const String& processIdFile,
       const String& logFile)
 { {
     String snmptrapdCmd;     String snmptrapdCmd;
  
Line 700 
Line 693 
     // Specify logging incoming traps to trapLogFile     // Specify logging incoming traps to trapLogFile
     // Save the process ID of the snmptrapd in procIdFile     // Save the process ID of the snmptrapd in procIdFile
     snmptrapdCmd.append(     snmptrapdCmd.append(
         "/usr/sbin/snmptrapd -f -Lf trapLogFile -p procIdFile");          "/usr/sbin/snmptrapd -f -Lf ");
       snmptrapdCmd.append(logFile);
       snmptrapdCmd.append(" -p ");
       snmptrapdCmd.append(processIdFile);
  
     // Specify incoming trap format     // Specify incoming trap format
     snmptrapdCmd.append( " -F \"\nTrap Info: %P\nVariable: %v\n\"");     snmptrapdCmd.append( " -F \"\nTrap Info: %P\nVariable: %v\n\"");
Line 732 
Line 728 
     while (iterations < MAX_ITERATIONS)     while (iterations < MAX_ITERATIONS)
     {     {
         iterations++;         iterations++;
         if (FileSystem::exists("procIdFile"))          if (FileSystem::exists(processIdFile))
         {         {
             return (true);             return (true);
         }         }
Line 747 
Line 743 
 } }
 #endif #endif
  
 void _removeTrapLogFile ()  void _removeTrapLogFile(const String& logFile)
 { {
     String logFile = _getLogFile();  
   
     // if trapLogFile exists, remove it     // if trapLogFile exists, remove it
     if (FileSystem::exists(logFile))     if (FileSystem::exists(logFile))
     {     {
Line 761 
Line 755 
 void _receiveExpectedTraps( void _receiveExpectedTraps(
     CIMClient& workClient,     CIMClient& workClient,
     Uint32 indicationSendCount,     Uint32 indicationSendCount,
     Uint32 runClientThreadCount)      Uint32 runClientThreadCount,
       const String& logFile)
 { {
     Uint32 indicationTrapV1SendCount = 0;     Uint32 indicationTrapV1SendCount = 0;
     Uint32 indicationTrapV2SendCount = 0;     Uint32 indicationTrapV2SendCount = 0;
Line 811 
Line 806 
     for(Uint32 i=0; i< runClientThreadCount; i++)     for(Uint32 i=0; i< runClientThreadCount; i++)
     {     {
         clientThreads[i]->join();         clientThreads[i]->join();
           delete clientThreads[i];
     }     }
  
     delete[] clientConnections;     delete[] clientConnections;
Line 854 
Line 850 
     {     {
         totalIterations++;         totalIterations++;
  
         currentReceivedTrap1Count = _getReceivedTrapCount(_SNMPV1_TRAP);          currentReceivedTrap1Count =
         currentReceivedTrap2Count = _getReceivedTrapCount(_SNMPV2C_TRAP);              _getReceivedTrapCount(_SNMPV1_TRAP, logFile);
           currentReceivedTrap2Count =
               _getReceivedTrapCount(_SNMPV2C_TRAP, logFile);
  
         if (totalIterations % COUT_TIME_INTERVAL == 1 &&         if (totalIterations % COUT_TIME_INTERVAL == 1 &&
             !(receivedTrapCountComplete))             !(receivedTrapCountComplete))
Line 927 
Line 925 
  
 int _beginTest(CIMClient& workClient, int _beginTest(CIMClient& workClient,
     Uint32 indicationSendCount,     Uint32 indicationSendCount,
     Uint32 runClientThreadCount)      Uint32 runClientThreadCount,
       const String& processIdFile,
       const String& logFile)
 { {
  
 #ifdef PEGASUS_USE_NET_SNMP #ifdef PEGASUS_USE_NET_SNMP
  
     // Stop snmptrapd process if it is running     // Stop snmptrapd process if it is running
     _stopSnmptrapd();      _stopSnmptrapd(processIdFile);
  
     // if trapLogFile exists, remove it     // if trapLogFile exists, remove it
     _removeTrapLogFile();      _removeTrapLogFile(logFile);
  
     FILE * trapInfo;     FILE * trapInfo;
  
     try     try
     {     {
         _startSnmptrapd(&trapInfo);          _startSnmptrapd(&trapInfo, processIdFile, logFile);
     }     }
     catch (Exception & e)     catch (Exception & e)
     {     {
Line 952 
Line 952 
  
     // Extended for all snmp implementation     // Extended for all snmp implementation
     _receiveExpectedTraps(workClient, indicationSendCount,     _receiveExpectedTraps(workClient, indicationSendCount,
         runClientThreadCount);          runClientThreadCount, logFile);
  
     // Stop snmptrapd process if it is running and remove procIdFile     // Stop snmptrapd process if it is running and remove procIdFile
     _stopSnmptrapd();      _stopSnmptrapd(processIdFile);
  
     pclose(trapInfo);     pclose(trapInfo);
  
Line 986 
Line 986 
     {     {
         workClient.connectLocal();         workClient.connectLocal();
  
           String processIdFile = TRAP_DIR;
           processIdFile.append("/procIdFile");
   
           String logFile = TRAP_DIR;
           logFile.append("/trapLogFile");
   
         if (argc <= 1 || argc > 4)         if (argc <= 1 || argc > 4)
         {         {
             cerr << "Invalid argument count: " << argc << endl;             cerr << "Invalid argument count: " << argc << endl;
Line 1033 
Line 1039 
             }             }
  
             int rc = _beginTest(workClient, indicationSendCount,             int rc = _beginTest(workClient, indicationSendCount,
                 runClientThreadCount);                  runClientThreadCount, processIdFile, logFile);
             return rc;             return rc;
         }         }
         else if (String::equalNoCase(argv[1], "cleanup"))         else if (String::equalNoCase(argv[1], "cleanup"))
Line 1059 
Line 1065 
                 return -1;                 return -1;
             }             }
  
             _removeTrapLogFile ();              _removeTrapLogFile(logFile);
             cout << "+++++ removelog completed successfully" << endl;             cout << "+++++ removelog completed successfully" << endl;
             return 0;             return 0;
         }         }


Legend:
Removed from v.1.10.2.1  
changed lines
  Added in v.1.17

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2