test_event.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include "NDBT_Test.hpp"
  14. #include "NDBT_ReturnCodes.h"
  15. #include "HugoTransactions.hpp"
  16. #include "UtilTransactions.hpp"
  17. #include "TestNdbEventOperation.hpp"
  18. #define GETNDB(ps) ((NDBT_NdbApiStep*)ps)->getNdb()
  19. int runCreateEvent(NDBT_Context* ctx, NDBT_Step* step)
  20. {
  21.   HugoTransactions hugoTrans(*ctx->getTab());
  22.   if (hugoTrans.createEvent(GETNDB(step)) != 0){
  23.     return NDBT_FAILED;
  24.   }
  25.   return NDBT_OK;
  26. }
  27. int theThreadIdCounter = 0;
  28. int runEventOperation(NDBT_Context* ctx, NDBT_Step* step)
  29. {
  30.   int tId = theThreadIdCounter++;
  31.   int loops = ctx->getNumLoops();
  32.   int records = ctx->getNumRecords();
  33.   HugoTransactions hugoTrans(*ctx->getTab());
  34.   EventOperationStats stats;
  35.   g_info << "***** Id " << tId << endl;
  36.   //  sleep(tId);
  37.   if (hugoTrans.eventOperation(GETNDB(step), (void*)&stats, 3*records) != 0){
  38.     return NDBT_FAILED;
  39.   }
  40.   int ret;
  41.   if (stats.n_inserts     == records &&
  42.       stats.n_deletes     == records &&
  43.       stats.n_updates     == records &&
  44.       stats.n_consecutive == 3 &&
  45.       stats.n_duplicates  == 0)
  46.     ret = NDBT_OK;
  47.   else
  48.     ret = NDBT_FAILED;
  49.   if (ret == NDBT_FAILED) {
  50.     ndbout << "n_inserts =           " << stats.n_inserts << endl;
  51.     ndbout << "n_deletes =           " << stats.n_deletes << endl;
  52.     ndbout << "n_updates =           " << stats.n_updates << endl;
  53.     ndbout << "n_consecutive =       " << stats.n_consecutive << endl;
  54.     ndbout << "n_duplicates =        " << stats.n_duplicates << endl;
  55.     ndbout << "n_inconsistent_gcis = " << stats.n_inconsistent_gcis << endl;
  56.   }
  57.   return ret;
  58. }
  59. int runEventLoad(NDBT_Context* ctx, NDBT_Step* step)
  60. {
  61.   int loops = ctx->getNumLoops();
  62.   int records = ctx->getNumRecords();
  63.   HugoTransactions hugoTrans(*ctx->getTab());
  64.   sleep(5);
  65.   sleep(theThreadIdCounter);
  66.   if (hugoTrans.loadTable(GETNDB(step), records, 1, true, loops) != 0){
  67.     return NDBT_FAILED;
  68.   }
  69.   if (hugoTrans.pkUpdateRecords(GETNDB(step), records, 1, loops) != 0){
  70.     return NDBT_FAILED;
  71.   }
  72.   if (hugoTrans.pkDelRecords(GETNDB(step),  records, 1, true, loops) != 0){
  73.     return NDBT_FAILED;
  74.   }
  75.   return NDBT_OK;
  76. }
  77. int runDropEvent(NDBT_Context* ctx, NDBT_Step* step)
  78. {
  79.   HugoTransactions hugoTrans(*ctx->getTab());
  80.   theThreadIdCounter = 0;
  81.   //  if (hugoTrans.createEvent(GETNDB(step)) != 0){
  82.   //    return NDBT_FAILED;
  83.   //  }
  84.   return NDBT_OK;
  85. }
  86. //  INITIALIZER(runInsert);
  87. //  STEP(runPkRead);
  88. //  VERIFIER(runVerifyInsert);
  89. //  FINALIZER(runClearTable);
  90. NDBT_TESTSUITE(test_event);
  91. TESTCASE("BasicEventOperation", 
  92.  "Verify that we can listen to Events"
  93.  "NOTE! No errors are allowed!" ){
  94.   INITIALIZER(runCreateEvent);
  95.   STEP(runEventOperation);
  96.   STEP(runEventOperation);
  97.   STEP(runEventOperation);
  98.   STEP(runEventOperation);
  99.   STEP(runEventLoad);
  100.   FINALIZER(runDropEvent);
  101. }
  102. NDBT_TESTSUITE_END(test_event);
  103. #if 0
  104. NDBT_TESTSUITE(test_event);
  105. TESTCASE("ParallellEventOperation", 
  106.  "Verify that we can listen to Events in Parallell"
  107.  "NOTE! No errors are allowed!" ){
  108.   INITIALIZER(runCreateAllEvent);
  109.   STEP(runEventOperation);
  110.   FINALIZER(runDropEvent);
  111. }
  112. NDBT_TESTSUITE_END(test_event);
  113. #endif
  114. int main(int argc, const char** argv){
  115.   ndb_init();
  116.   return test_event.execute(argc, argv);
  117. }