blob: c2f2b5ff7bb5e5d1bdd8faa364721de9bd04f292 [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 <gfcpp/GemfireCppCache.hpp>
#include <ace/OS.h>
#include <ace/High_Res_Timer.h>
#include <ace/Task.h>
#include <string>
#define ROOT_NAME "Notifications"
#define ROOT_SCOPE DISTRIBUTED_ACK
#include "ThinClientHelper.hpp"
#include "testobject/Portfolio.hpp"
#include "Query.hpp"
#include "QueryService.hpp"
#include "ResultSet.hpp"
#include "StructSet.hpp"
#include "SelectResultsIterator.hpp"
using namespace gemfire;
using namespace test;
using namespace testobject;
#define CLIENT1 s1p1
#define CLIENT2 s1p2
#define SERVER s2p1
#define LOCATOR s2p2
bool isLocator = false;
bool isLocalServer = false;
const char * poolNames[] = { "Pool1","Pool2","Pool3" };
const char * locHostPort = CacheHelper::getLocatorHostPort( isLocator, 1 );
const char * endPoints = CacheHelper::getTcrEndpoints(isLocalServer, 1);
const char * qRegionNames[] = { "Portfolios", "Positions" };
void clientOperations(bool pool = false, bool locators = false)
{
try {
Serializable::registerType(Position::createDeserializable);
Serializable::registerType(Portfolio::createDeserializable);
}
catch (const IllegalStateException& ) {
// ignore exception
}
initClient(true);
try {
QueryServicePtr qs = NULLPTR; //getHelper()->cachePtr->getQueryService();
if(pool){
qs = createPool2("_TESTFAILPOOL_", NULL, NULL)->getQueryService();
}else {
qs = getHelper()->cachePtr->getQueryService();
}
SelectResultsPtr results;
QueryPtr qry = qs->newQuery("select distinct * from /Portfolios");
results = qry->execute();
FAIL("Since no region has been created yet, so exception expected");
}catch(IllegalStateException & ex) {
const char * err_msg = ex.getMessage();
LOG("Good expected exception");
LOG(err_msg);
}
PoolPtr pool1 = NULLPTR;
if(!pool){
createRegion( qRegionNames[0], USE_ACK, endPoints, true);
}else if(locators){
pool1 = createPool(poolNames[0], locHostPort, NULL,NULL, 0, true );
createRegionAndAttachPool( qRegionNames[0], USE_ACK, poolNames[0]);
}else {
pool1 = createPool(poolNames[0], NULL, NULL,endPoints, 0, true );
createRegionAndAttachPool( qRegionNames[0], USE_ACK, poolNames[0]);
}
RegionPtr rptr = getHelper()->cachePtr->getRegion(qRegionNames[0]);
PortfolioPtr p1(new Portfolio(1, 100));
PortfolioPtr p2(new Portfolio(2, 100));
PortfolioPtr p3(new Portfolio(3, 100));
PortfolioPtr p4(new Portfolio(4, 100));
rptr->put("1", p1);
rptr->put("2", p2);
rptr->put("3", p3);
rptr->put("4", p4);
QueryServicePtr qs = NULLPTR;
if(pool){
qs = pool1->getQueryService();
}else {
qs = getHelper()->cachePtr->getQueryService();
}
QueryPtr qry1 = qs->newQuery("select distinct * from /Portfolios");
SelectResultsPtr results1 = qry1->execute();
ASSERT(results1->size() == 4, "Expected 4 as number of portfolio objects put were 4");
// Bring down the region
rptr->localDestroyRegion();
LOG( "StepOne complete." );
try
{
LOG( "Going to execute the query" );
QueryPtr qry2 = qs->newQuery("select distinct * from /Portfolios");
SelectResultsPtr results2 = qry2->execute();
ASSERT(results2->size()==4, "Failed verification");
}
catch(...)
{
FAIL("Got an exception!");
}
LOG( "StepTwo complete." );
}
DUNIT_TASK_DEFINITION(LOCATOR, StartLocator)
{
//starting locator 1 2
if ( isLocator ) {
CacheHelper::initLocator( 1 );
}
LOG("Locator started");
}
END_TASK_DEFINITION
DUNIT_TASK_DEFINITION(SERVER, CreateServer)
{
LOG("Starting SERVER...");
if ( isLocalServer ) CacheHelper::initServer( 1, "cacheserver_remoteoql.xml" );
LOG("SERVER started");
}
END_TASK_DEFINITION
DUNIT_TASK_DEFINITION(SERVER, CreateServerWithLocator)
{
LOG("Starting SERVER1...");
if ( isLocalServer ) CacheHelper::initServer( 1, "cacheserver_remoteoql.xml",locHostPort );
LOG("SERVER1 started");
}
END_TASK_DEFINITION
DUNIT_TASK_DEFINITION(CLIENT1, ClientOp)
{
clientOperations();
}
END_TASK_DEFINITION
DUNIT_TASK_DEFINITION(CLIENT1, ClientOpPoolEndPoint)
{
clientOperations(true);
}
END_TASK_DEFINITION
DUNIT_TASK_DEFINITION(CLIENT1, ClientOpPoolLocator)
{
clientOperations(true,true);
}
END_TASK_DEFINITION
DUNIT_TASK_DEFINITION(CLIENT1,CloseCache1)
{
LOG("cleanProc 1...");
cleanProc();
}
END_TASK_DEFINITION
DUNIT_TASK_DEFINITION(SERVER,CloseServer)
{
LOG("closing Server1...");
if ( isLocalServer ) {
CacheHelper::closeServer( 1 );
LOG("SERVER stopped");
}
}
END_TASK_DEFINITION
DUNIT_TASK_DEFINITION(LOCATOR,CloseLocator)
{
if ( isLocator ) {
CacheHelper::closeLocator( 1 );
LOG("Locator1 stopped");
}
}
END_TASK_DEFINITION
void runRegionQueryExclusiveTest(bool poolConfig = false, bool withLocators = false)
{
if(!poolConfig){
CALL_TASK(CreateServer)
CALL_TASK(ClientOp)
}else if(withLocators){
CALL_TASK(StartLocator)
CALL_TASK(CreateServerWithLocator)
CALL_TASK(ClientOpPoolLocator)
}else {
CALL_TASK(CreateServer)
CALL_TASK(ClientOpPoolEndPoint)
}
CALL_TASK(CloseCache1)
CALL_TASK(CloseServer)
if(poolConfig && withLocators) {
CALL_TASK(CloseLocator)
}
}
DUNIT_MAIN
{
//Basic Old Test
runRegionQueryExclusiveTest();
//New Test with Pool + EP
runRegionQueryExclusiveTest(true);
//New Test with Pool + Locators
runRegionQueryExclusiveTest(true,true);
}
END_MAIN