blob: f2962d64424d3db2d8fb7330e2ff53512247b90c [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 <gfcpp/GemfireCppCache.hpp>
#include "fw_helper.hpp"
#include <string>
using namespace gemfire;
using namespace test;
int testXmlCacheCreationWithOverflow( )
{
char* host_name = (char*)"XML_CACHE_CREATION_TEST";
CacheFactoryPtr cacheFactory;
CachePtr cptr;
const uint32_t totalSubRegionsRoot1 = 2;
const uint32_t totalRootRegions = 2;
char* path = ACE_OS::getenv("TESTSRC");
std::string directory(path);
cout <<"create DistributedSytem with name="<< host_name <<endl;
try
{
cacheFactory = CacheFactory::createCacheFactory();
}
catch (Exception& ex)
{
ex.showMessage();
ex.printStackTrace();
return -1;
}
cout <<
"Create cache with the configurations provided in valid_overflowAttr.xml" <<endl;
try
{
std::string filePath = directory + "/non-existent.xml";
cptr = cacheFactory->set("cache-xml-file", filePath.c_str())->create();
return -1;
}
catch (CacheXmlException& ex)
{
ex.showMessage();
ex.printStackTrace();
}
catch (...) {
LOGINFO("Unknown exception");
return -1;
}
///return 0;
try
{
std::string filePath = directory + "/valid_overflowAttr.xml";
cout<<"getPdxIgnoreUnreadFields should return true.1"<<endl;
cptr = cacheFactory->set("cache-xml-file", filePath.c_str())->create();
if( cptr->getPdxIgnoreUnreadFields() != false)
{
cout<<"getPdxIgnoreUnreadFields should return true."<<endl;
return -1;
}
else{
cout<<"getPdxIgnoreUnreadFields returned true."<<endl;
}
//return 0;
}
catch (Exception& ex)
{
cout<<"getPdxIgnoreUnreadFields should return true2."<<endl;
ex.showMessage();
ex.printStackTrace();
return -1;
}
catch (...) {
LOGINFO("ARB: unknown exception");
return -1;
}
VectorOfRegion vrp;
cout<<"Test if number of root regions are correct"<<endl;
cptr->rootRegions(vrp);
cout << " vrp.size="<<vrp.size()<<endl;
if(vrp.size()!= totalRootRegions)
{
cout<<"Number of root regions does not match"<<endl;
return -1;
}
cout<<"Root regions in Cache :"<<endl;
for(unsigned int i=0; i< (uint32_t)vrp.size(); i++)
{
cout <<"vc["<<i<<"].m_reaPtr="<< vrp.at(i).ptr()<<endl;
cout <<"vc["<<i<<"]="<<vrp.at(i)->getName()<<endl;
}
RegionPtr regPtr1 = vrp.at(0);
uint32_t i=0;
VectorOfRegion vr;
cout<<"Test if the number of sub regions with the root region Root1 are correct" << endl;
regPtr1->subregions(true, vr);
cout << " vr.size="<<vr.size()<<endl;
if(vr.size()!= totalSubRegionsRoot1)
{
cout<<"Number of Subregions does not match"<<endl;
return -1;
}
cout<<"get subregions from the root region :"<< vrp.at(0)->getName() <<endl;
for(unsigned int i=0; i<(uint32_t)vr.size(); i++)
{
cout <<"vc["<<i<<"].m_reaPtr="<< vr.at(i).ptr()<<endl;
cout <<"vc["<<i<<"]="<<vr.at(i)->getName()<<endl;
}
cout << "Test if the nesting of regions is correct" <<endl;
const char* parentName;
const char* childName;
RegionPtr regPtr2 = vrp.at(1);
VectorOfRegion vsr;
regPtr2->subregions(true, vsr);
for(uint32_t i=0; i<(uint32_t)vsr.size(); i++)
{
Region* regPtr = vsr.at(i).ptr();
childName = regPtr->getName();
RegionPtr x = regPtr->getParentRegion();
parentName = (x.ptr())->getName();
if (strcmp(childName,"SubSubRegion221") ==0)
{
if (strcmp(parentName,"SubRegion22") !=0)
{
cout << "Incorrect parent: tree structure not formed correctly" <<endl;
return -1;
}
}
}
cout << "****Correct region tree structure created from valid_cache.xml****" <<endl;
vr.clear();
vrp.clear();
cout<< "Test the attributes of region" <<endl;
RegionAttributesPtr raPtr = regPtr1->getAttributes();
RegionAttributes* regAttr = raPtr.ptr();
cout << "Attributes of root region Root1 are : " <<endl;
const ScopeType::Scope scopeST = regAttr->getScope();
cout << "scpe : local"<< endl;
if(scopeST != ScopeType::LOCAL )
{
return -1;
}
bool cachingEnabled = regAttr->getCachingEnabled();
cout << "Caching-enabled :true" <<endl;
if(!cachingEnabled)
{
return -1;
}
int lruEL = regAttr->getLruEntriesLimit();
cout << "lru-entries-limit : 35" <<endl;
if (lruEL != 35)
{
return -1;
}
int concurrency = regAttr->getConcurrencyLevel();
cout << "concurrency-level : 10" <<endl;
if (concurrency != 10)
{
return -1;
}
int initialCapacity = regAttr->getInitialCapacity();
cout << "initial-capacity : 25" <<endl;
if (initialCapacity != 25)
{
return -1;
}
int regionIdleTO = regAttr->getRegionIdleTimeout();
cout << "RegionIdleTimeout:20 " <<endl;
if (regionIdleTO != 20)
{
return -1;
}
ExpirationAction::Action action1 = regAttr->getRegionIdleTimeoutAction() ;
cout << "RegionIdleTimeoutAction : Destroy" <<endl;
if(action1 != ExpirationAction::DESTROY)
{
return -1;
}
const DiskPolicyType::PolicyType type = regAttr->getDiskPolicy();
cout << "DiskPolicy : overflows" << endl;
if(type != DiskPolicyType::OVERFLOWS)
{
cout << " diskpolicy is not overflows " << endl;
return -1;
}
const char* lib = regAttr->getPersistenceLibrary();
const char* libFun = regAttr->getPersistenceFactory();
printf(" persistence library1 = %s\n",lib);
printf(" persistence function1 = %s\n",libFun);
cout<< "persistence library = "<< regAttr->getPersistenceLibrary() << endl;
cout<< "persistence function = " << regAttr->getPersistenceFactory() << endl;
PropertiesPtr pconfig = regAttr->getPersistenceProperties();
if (pconfig != NULLPTR) {
cout<< " persistence property is not null"<<endl;
cout<< " persistencedir = "<<pconfig->find("PersistenceDirectory")->asChar()<< endl;
cout<< " pagesize = "<<pconfig->find("PageSize")->asChar()<< endl;
cout<< " maxpagecount = "<<pconfig->find("MaxPageCount")->asChar()<< endl;
}
cout << "****Attributes of Root1 are correctly set****" <<endl;
RegionAttributesPtr raPtr2 = regPtr2->getAttributes();
RegionAttributes* regAttr2 = raPtr2.ptr();
const char* lib2 = regAttr2->getPersistenceLibrary();
const char* libFun2 = regAttr2->getPersistenceFactory();
printf(" persistence library2 = %s\n",lib2);
printf(" persistence function2 = %s\n",libFun2);
cout<< "persistence library = "<< regAttr2->getPersistenceLibrary() << endl;
cout<< "persistence function = " << regAttr2->getPersistenceFactory() << endl;
PropertiesPtr pconfig2 = regAttr2->getPersistenceProperties();
if (pconfig2 != NULLPTR) {
cout<< " persistence property is not null for Root2"<<endl;
cout<< " persistencedir2 = "<<pconfig2->find("PersistenceDirectory")->asChar()<< endl;
cout<< " pagesize2 = "<<pconfig->find("PageSize")->asChar()<< endl;
cout<< " maxpagecount2 = "<<pconfig->find("MaxPageCount")->asChar()<< endl;
}
cout <<"Destroy region"<<endl;
try{
regPtr1->destroyRegion();
regPtr2->destroyRegion();
} catch(Exception& ex) {
ex.showMessage();
ex.printStackTrace();
return -1;
}
regPtr1 = NULLPTR;
regPtr2 = NULLPTR;
if(!cptr->isClosed())
{
cptr->close();
cptr = NULLPTR;
}
////////////////////////////testing of cache.xml completed///////////////////
cout <<"Create cache with the configurations provided in the invalid_overflowAttr1.xml." <<endl;
cout <<"This is a well-formed xml....attributes not provided for persistence manager. exception should be thrown" << endl;
try
{
std::string filePath = directory + "/invalid_overflowAttr1.xml";
cptr = cacheFactory->set("cache-xml-file", filePath.c_str())->create();
return -1;
}
catch (Exception& ex)
{
cout << endl;
ex.showMessage();
ex.printStackTrace();
}
///////////////testing of invalid_cache1.xml completed///////////////////
cout <<"Create cache with the configurations provided in the invalid_overflowAttr2.xml." <<endl;
cout <<" This is a well-formed xml....attribute values is not provided for persistence library name......should throw an exception" << endl;
try
{
std::string filePath = directory + "/invalid_overflowAttr2.xml";
cptr = cacheFactory->set("cache-xml-file", filePath.c_str())->create();
return -1;
}
catch (CacheXmlException& ex)
{
cout << endl;
ex.showMessage();
ex.printStackTrace();
}
///////////////testing of invalid_cache2.xml completed///////////////////
cout <<"Create cache with the configurations provided in the invalid_overflowAttr3.xml." <<endl;
cout <<"This is a well-formed xml....but region-attributes for persistence invalid......should throw an exception" << endl;
try
{
std::string filePath = directory + "/invalid_overflowAttr3.xml";
cptr = cacheFactory->set("cache-xml-file", filePath.c_str())->create();
return -1;
}
catch (Exception& ex)
{
cout << endl;
ex.showMessage();
ex.printStackTrace();
}
///////////////testing of invalid_cache3.xml completed///////////////////
cout <<"disconnecting..."<<endl;
try
{
cout <<"just before disconnecting..."<<endl;
if(cptr != NULLPTR && !cptr->isClosed())
{
cptr->close();
cptr = NULLPTR;
}
}
catch(Exception& ex)
{
ex.showMessage();
ex.printStackTrace();
return -1;
}
cout <<"done with test"<<endl;
cout <<"Test successful!"<<endl;
return 0;
}
BEGIN_TEST(ValidXmlTestOverFlow)
{
int res = testXmlCacheCreationWithOverflow( );
if ( res != 0 )
{
FAIL( "Test Failed." );
}
}
END_TEST(ValidXmlTestOverFlow)