Esempio n. 1
0
void sessionmanager_8()
{
	SessionManager sm;
	SessionManager::TxnID txn, txn2;
	const SessionManager::SIDTIDEntry *stmap;
	int len;

	txn = sm.newTxnID(1000, true);
	txn2 = sm.newTxnID(1001, true);
	stmap = sm.SIDTIDMap(len);

	CPPUNIT_ASSERT(len == 2);

#ifdef BRM_VERBOSE
	int i;
	cerr << "len = " << len << endl;
	for (i = 0; i < len; i++) {
		cerr << "  " << i << ": txnid=" << stmap[i].txnid.id << " valid=" << 
			stmap[i].txnid.valid << " sessionid=" << stmap[i].sessionid << endl;
	}
#endif

	sm.committed(txn);
	sm.committed(txn2);
	delete [] stmap;
	stmap = sm.SIDTIDMap(len);

	CPPUNIT_ASSERT(len == 0);
	delete [] stmap;
}
Esempio n. 2
0
	/** Verifies that we can only have MaxTxns (1000 right now) active transactions at 
	any given time */
	void sessionManager_2() {
		int i;
		SessionManager *sm;
		SessionManager::TxnID txns[1001];
		string filename;
		
// 		destroySemaphores();
// 		destroyShmseg();
		
		sm = new SessionManager();
		filename = sm->getTxnIDFilename();
		delete sm;
		sm = new SessionManager();		

		for (i = 0; i < 1000; i++) {
			txns[i] = sm->newTxnID(i, false);
			CPPUNIT_ASSERT(txns[i].valid == true);
			//CPPUNIT_ASSERT(sm->verID() == txns[i].id);
		}
		txns[1000] = sm->newTxnID(i, false);
		CPPUNIT_ASSERT(txns[1000].valid == false);

		for (i = 999; i >= 0; i--) {
			SessionManager::TxnID tmp = sm->getTxnID(i);
			CPPUNIT_ASSERT(tmp.valid == txns[i].valid == true);
			CPPUNIT_ASSERT(tmp.id == txns[i].id);
			sm->committed(txns[i]);
			tmp = sm->getTxnID(i);
			CPPUNIT_ASSERT(tmp.valid == false);
			CPPUNIT_ASSERT(txns[i].valid == false);
		}
		
		try {
			sm->committed(txns[1000]);
		}
		// expected exception
		catch(invalid_argument& e)
		{ }
	
		delete sm;
// 		destroySemaphores();
// 		destroyShmseg();
	}
Esempio n. 3
0
	/** Verifies that transaction IDs get saved and restored correctly across "reboots" */
	void sessionManager_3()
	{
	
		SessionManager *sm;
		string filename;
		SessionManager::TxnID txnid;

		// scrub env
		sm = new SessionManager();
		filename = sm->getTxnIDFilename();
		delete sm;
// 		destroyShmseg();
// 		destroySemaphores();

		sm = new SessionManager();

		txnid = sm->newTxnID(0);
//   		CPPUNIT_ASSERT(txnid.id == 1);

		delete sm;
// 		destroyShmseg();
// 		destroySemaphores();

		sm = new SessionManager();
		sm->committed(txnid);
		txnid = sm->newTxnID(1);
//   		CPPUNIT_ASSERT(txnid.id == 2);

		delete sm;
		sm = new SessionManager();
		sm->committed(txnid);

// 		destroyShmseg();
// 		destroySemaphores();

	}
Esempio n. 4
0
void sessionmanager_6()
{
	SessionManager sm;
	SessionManager::TxnID tmp;
	int ver1, ver2;

	ver1 = sm.verID();
	tmp = sm.newTxnID(1000);
	ver2 = sm.verID();
	
	CPPUNIT_ASSERT(ver2 == ver1 + 1);
	CPPUNIT_ASSERT(ver2 == tmp.id);
	CPPUNIT_ASSERT(tmp.valid == true);

	sm.committed(tmp);
	CPPUNIT_ASSERT(tmp.valid == false);
}
Esempio n. 5
0
void sessionmanager_7()
{
	SessionManager sm;
	SessionManager::TxnID txn, txn2;
	
	txn = sm.newTxnID(1000);
	txn2 = sm.getTxnID(1000);

	CPPUNIT_ASSERT(txn.id == txn2.id);
	CPPUNIT_ASSERT(txn.valid == txn2.valid == true);

	sm.rolledback(txn);
	CPPUNIT_ASSERT(txn.valid == false);

	txn2 = sm.getTxnID(1000);
	CPPUNIT_ASSERT(txn2.valid == false);
}
Esempio n. 6
0
int createTxns(const int& start, const int& end) {

	int first=start;
	int last=end;
	int newTxns=0;

	verifyLen=manager->verifySize();
	for (int idx = first; idx<last && verifyLen<maxNewTxns ; idx++)
	{
		managerTxns[idx] = manager->newTxnID((u_int32_t)idx+1000);
		CPPUNIT_ASSERT(managerTxns[idx].id>0);
		CPPUNIT_ASSERT(managerTxns[idx].valid==true);
		verifyLen=manager->verifySize();
		CPPUNIT_ASSERT(verifyLen>0);
		newTxns++;
	}
	CPPUNIT_ASSERT(newTxns==last-first);
	return newTxns;
}
Esempio n. 7
0
	void sessionManager_1()
	{
		SessionManager *sm = NULL;
		SessionManager::TxnID txn;
		const SessionManager::SIDTIDEntry* activeTxns;
		int len;
		string filename;
		
// 		destroySemaphores();
// 		destroyShmseg();
		
		try {
			sm = new SessionManager();
			//CPPUNIT_ASSERT(sm->verID() == 0);
			filename = sm->getTxnIDFilename();
			delete sm;
			sm = new SessionManager();
			txn = sm->newTxnID(0);
			CPPUNIT_ASSERT(txn.valid == true);
// 			CPPUNIT_ASSERT(txn.id == 1);
// 			CPPUNIT_ASSERT(sm->verID() == 1);
			txn = sm->newTxnID(1);
			CPPUNIT_ASSERT(txn.valid == true);
// 			CPPUNIT_ASSERT(txn.id == 2);
// 			CPPUNIT_ASSERT(sm->verID() == 2);
			activeTxns = sm->SIDTIDMap(len);
			CPPUNIT_ASSERT(activeTxns != NULL);
			CPPUNIT_ASSERT(len == 2);
			txn = sm->getTxnID(0);
			CPPUNIT_ASSERT(txn.valid == true);
// 			CPPUNIT_ASSERT(txn.id == 1);
			CPPUNIT_ASSERT(txn.valid == activeTxns[0].txnid.valid);
// 			CPPUNIT_ASSERT(txn.id == activeTxns[0].txnid.id);
			txn = sm->getTxnID(1);
			CPPUNIT_ASSERT(txn.valid == true);
// 			CPPUNIT_ASSERT(txn.id == 2);
			CPPUNIT_ASSERT(txn.valid == activeTxns[1].txnid.valid);
// 			CPPUNIT_ASSERT(txn.id == activeTxns[1].txnid.id);
			delete [] activeTxns;
			
			//make sure it's consistent across invocations
			delete sm;
			sm = new SessionManager();
			activeTxns = sm->SIDTIDMap(len);
			CPPUNIT_ASSERT(activeTxns != NULL);
			CPPUNIT_ASSERT(len == 2);
			txn = sm->getTxnID(0);
			CPPUNIT_ASSERT(txn.valid == true);
// 			CPPUNIT_ASSERT(txn.id == 1);
			CPPUNIT_ASSERT(txn.valid == activeTxns[0].txnid.valid);
// 			CPPUNIT_ASSERT(txn.id == activeTxns[0].txnid.id);
			txn = sm->getTxnID(1);
			CPPUNIT_ASSERT(txn.valid == true);
// 			CPPUNIT_ASSERT(txn.id == 2);
			CPPUNIT_ASSERT(txn.valid == activeTxns[1].txnid.valid);
// 			CPPUNIT_ASSERT(txn.id == activeTxns[1].txnid.id);
			sm->rolledback(txn);
			CPPUNIT_ASSERT(txn.valid == false);
			txn = sm->getTxnID(0);
			sm->committed(txn);
			CPPUNIT_ASSERT(txn.valid == false);
			delete [] activeTxns;
			activeTxns = sm->SIDTIDMap(len);
			CPPUNIT_ASSERT(len == 0);
			delete [] activeTxns;			
		}
		catch(runtime_error &e) {
			cout << "caught runtime_error (why doesn't cppunit notice these?): " << e.what() << endl;
			if (sm != NULL)
				delete sm;
// 			destroySemaphores();
// 			destroyShmseg();
			throw logic_error("Hey!  Stop!");
		}
		catch(exception &e) {
			cout << "caught exception: " << e.what() << endl;
			if (sm != NULL)
				delete sm;
// 			destroySemaphores();
// 			destroyShmseg();
			throw;
		}
		
		delete sm;		
// 		destroySemaphores();
// 		destroyShmseg();
	}