blob: 6531598d8f66e648bb2fad59f9e68e579036efe0 [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
#include "fw_dunit.hpp"
#include "ThinClientHelper.hpp"
#define CLIENT1 s1p1
#define CLIENT2 s1p2
#define SERVER1 s2p1
using namespace gemfire;
using namespace test;
class MyCacheWriter : public CacheWriter {
uint32_t m_clear;
public:
MyCacheWriter():
m_clear(0)
{
}
bool beforeRegionClear(const RegionEvent& ev)
{
LOG("beforeRegionClear called");
m_clear++;
return true;
}
uint32_t getClearCnt()
{
return m_clear;
}
};
class MyCacheListener : public CacheListener {
uint32_t m_clear;
public:
MyCacheListener():
m_clear(0)
{
}
void afterRegionClear(const RegionEvent& ev)
{
LOG("afterRegionClear called");
m_clear++;
}
uint32_t getClearCnt()
{
return m_clear;
}
};
bool isLocalServer = true;
const char * endPoint = CacheHelper::getTcrEndpoints( isLocalServer, 1 );
DUNIT_TASK(SERVER1, StartServer)
{
if ( isLocalServer )
CacheHelper::initServer( 1 , "cacheserver_notify_subscription.xml");
LOG("SERVER started");
}
END_TASK(StartServer)
DUNIT_TASK(CLIENT1, SetupClient1)
{
initClient(true);
createRegion( regionNames[0], false, endPoint, true);
RegionPtr regPtr = getHelper()->getRegion( regionNames[0] );
AttributesMutatorPtr mtor = regPtr->getAttributesMutator();
CacheListenerPtr lster(new MyCacheListener());
CacheWriterPtr wter(new MyCacheWriter());
mtor->setCacheListener(lster);
mtor->setCacheWriter(wter);
regPtr->registerAllKeys();
}
END_TASK(SetupClient1)
DUNIT_TASK(CLIENT2, SetupClient2)
{
initClient(true);
createRegion( regionNames[0], false, endPoint, true);
RegionPtr regPtr = getHelper()->getRegion( regionNames[0] );
regPtr->registerAllKeys();
CacheableKeyPtr keyPtr = CacheableKey::create( (const char*) "key01" );
CacheableBytesPtr valPtr = CacheableBytes::create((uint8_t*)"value01", 7);
regPtr->put(keyPtr, valPtr);
ASSERT(regPtr->size()==1, "size incorrect");
}
END_TASK(SetupClient2)
DUNIT_TASK(CLIENT1, clear)
{
RegionPtr regPtr = getHelper()->getRegion( regionNames[0] );
ASSERT(regPtr->size()==1, "size incorrect");
regPtr->clear( );
ASSERT(regPtr->size()==0, "size incorrect");
}
END_TASK(clear)
DUNIT_TASK(CLIENT2, VerifyClear)
{
RegionPtr regPtr = getHelper()->getRegion( regionNames[0] );
ASSERT(regPtr->size()==0, "size incorrect");
CacheableKeyPtr keyPtr = CacheableKey::create( (const char*) "key02" );
CacheableBytesPtr valPtr = CacheableBytes::create((uint8_t*)"value02", 7);
regPtr->put(keyPtr, valPtr);
ASSERT(regPtr->size()==1, "size incorrect");
regPtr->localClear( );
ASSERT(regPtr->size()==0, "size incorrect");
ASSERT(regPtr->containsKeyOnServer(keyPtr), "key should be there");
}
END_TASK(VerifyClear)
DUNIT_TASK(CLIENT1, VerifyClear1)
{
RegionPtr regPtr = getHelper()->getRegion( regionNames[0] );
ASSERT(regPtr->size()==1, "size incorrect");
regPtr->localClear( );
ASSERT(regPtr->size()==0, "size incorrect");
CacheableKeyPtr keyPtr = CacheableKey::create( (const char*) "key02" );
ASSERT(regPtr->containsKeyOnServer(keyPtr), "key should be there");
RegionAttributesPtr attr = regPtr->getAttributes();
CacheListenerPtr clp = attr->getCacheListener();
MyCacheListener* mcl = dynamic_cast<MyCacheListener*>(clp.ptr());
char buf[1024];
sprintf(buf, "listener clear count=%d", mcl->getClearCnt());
LOG(buf);
ASSERT(mcl->getClearCnt()==2, buf);
CacheWriterPtr cwp = attr->getCacheWriter();
MyCacheWriter* mcw = dynamic_cast<MyCacheWriter*>(cwp.ptr());
sprintf(buf, "writer clear count=%d", mcw->getClearCnt());
LOG(buf);
ASSERT(mcw->getClearCnt()==2, buf);
}
END_TASK(VerifyClear1)
DUNIT_TASK(SERVER1, StopServer)
{
if ( isLocalServer )
CacheHelper::closeServer( 1 );
LOG("SERVER stopped");
}
END_TASK(StopServer)
DUNIT_TASK(CLIENT1,CloseCache1)
{
cleanProc();
}
END_TASK(CloseCache1)
DUNIT_TASK(CLIENT2,CloseCache2)
{
cleanProc();
}
END_TASK(CloseCache2)