Improving load test tool.

This commit is contained in:
lotodore
2011-02-27 13:40:55 +00:00
parent 1f833d106a
commit 22718fad46
+106 -74
View File
@@ -169,31 +169,45 @@ main(int argc, char *argv[])
return 1; return 1;
} }
PokerTHMessage_t *msg; PokerTHMessage_t *msg = NULL;
int errorCode;
char *tmpOut;
size_t tmpOutSize;
string nextGsaslMsg;
NetSession **sessionArray = new NetSession *[numGames * 10]; NetSession **sessionArray = new NetSession *[numGames * 10];
unsigned *gameId = new unsigned[numGames]; unsigned *gameId = new unsigned[numGames];
for (int i = 0; i < numGames * 10; i++) { const int LoginsPerLoop = 50;
sessionArray[i] = new NetSession(ioService); for (int t = 0; t < (numGames * 10) / LoginsPerLoop + 1; t++) {
NetSession *session = sessionArray[i]; int startNum = t * LoginsPerLoop;
int endNum = (t + 1) * LoginsPerLoop;
session->socket.connect(*curEndpoint, error); if (endNum > numGames * 10) {
endNum = numGames * 10;
// Receive server information
msg = receiveMessage(session);
if (!msg || msg->present != PokerTHMessage_PR_announceMessage) {
cout << "Announce failed" << endl;
return 1;
} }
ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg); for (int i = startNum; i < endNum; i++) {
sessionArray[i] = new NetSession(ioService);
NetSession *session = sessionArray[i];
// Send init session->socket.connect(*curEndpoint, error);
msg = (PokerTHMessage_t *)calloc(1, sizeof(PokerTHMessage_t));
msg->present = PokerTHMessage_PR_initMessage; // Receive server information
InitMessage_t *netInit = &msg->choice.initMessage; msg = receiveMessage(session);
netInit->requestedVersion.major = 2; if (!msg || msg->present != PokerTHMessage_PR_announceMessage) {
netInit->requestedVersion.minor = 0; cout << "Announce failed" << endl;
int errorCode = gsasl_client_start(authContext, "SCRAM-SHA-1", &session->authSession); return 1;
if (errorCode == GSASL_OK) { }
ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg);
// Send init
msg = (PokerTHMessage_t *)calloc(1, sizeof(PokerTHMessage_t));
msg->present = PokerTHMessage_PR_initMessage;
InitMessage_t *netInit = &msg->choice.initMessage;
netInit->requestedVersion.major = 2;
netInit->requestedVersion.minor = 0;
errorCode = gsasl_client_start(authContext, "SCRAM-SHA-1", &session->authSession);
if (errorCode != GSASL_OK) {
cout << "Auth start error." << endl;
return 1;
}
ostringstream param; ostringstream param;
param << "test" << i + firstId; param << "test" << i + firstId;
cout << "User " << param.str() << " logging in." << endl; cout << "User " << param.str() << " logging in." << endl;
@@ -204,9 +218,6 @@ main(int argc, char *argv[])
netInit->login.present = login_PR_authenticatedLogin; netInit->login.present = login_PR_authenticatedLogin;
AuthenticatedLogin_t *authLogin = &netInit->login.choice.authenticatedLogin; AuthenticatedLogin_t *authLogin = &netInit->login.choice.authenticatedLogin;
char *tmpOut;
size_t tmpOutSize;
string nextGsaslMsg;
errorCode = gsasl_step(session->authSession, NULL, 0, &tmpOut, &tmpOutSize); errorCode = gsasl_step(session->authSession, NULL, 0, &tmpOut, &tmpOutSize);
if (errorCode == GSASL_NEEDS_MORE) { if (errorCode == GSASL_NEEDS_MORE) {
nextGsaslMsg = string(tmpOut, tmpOutSize); nextGsaslMsg = string(tmpOut, tmpOutSize);
@@ -223,7 +234,10 @@ main(int argc, char *argv[])
cout << "Init auth request failed" << endl; cout << "Init auth request failed" << endl;
return 1; return 1;
} }
}
for (int i = startNum; i < endNum; i++) {
NetSession *session = sessionArray[i];
msg = receiveMessage(session); msg = receiveMessage(session);
if (!msg || msg->present != PokerTHMessage_PR_authMessage) { if (!msg || msg->present != PokerTHMessage_PR_authMessage) {
cout << "Auth request failed" << endl; cout << "Auth request failed" << endl;
@@ -255,28 +269,32 @@ main(int argc, char *argv[])
cout << "Init auth response failed" << endl; cout << "Init auth response failed" << endl;
return 1; return 1;
} }
}
for (int i = startNum; i < endNum; i++) {
NetSession *session = sessionArray[i];
msg = receiveMessage(session); msg = receiveMessage(session);
if (!msg || msg->present != PokerTHMessage_PR_authMessage) { if (!msg || msg->present != PokerTHMessage_PR_authMessage) {
cout << "Auth response failed" << endl; cout << "Auth response failed" << endl;
return 1; return 1;
} }
ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg); ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg);
}
// Receive init ack // Receive init ack
msg = receiveMessage(session); msg = receiveMessage(session);
if (!msg || msg->present != PokerTHMessage_PR_initAckMessage) { if (!msg || msg->present != PokerTHMessage_PR_initAckMessage) {
cout << "Init ack failed" << endl; cout << "Init ack failed" << endl;
return 1; return 1;
} }
ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg); ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg);
for (int j = i; j >= 0; j--) { for (int j = i; j >= 0; j--) {
size_t bytes_readable = sessionArray[j]->socket.available(); size_t bytes_readable = sessionArray[j]->socket.available();
while (bytes_readable > 0) { while (bytes_readable > 0) {
msg = receiveMessage(sessionArray[j]); msg = receiveMessage(sessionArray[j]);
ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg); ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg);
bytes_readable = sessionArray[j]->socket.available(); bytes_readable = sessionArray[j]->socket.available();
}
} }
} }
} }
@@ -336,47 +354,61 @@ main(int argc, char *argv[])
ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg); ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg);
} }
for (int i = 0; i < numGames * 10; i++) { for (int t = 0; t < (numGames * 10) / LoginsPerLoop + 1; t++) {
if (i % 10 == 0) { int startNum = t * LoginsPerLoop;
continue; int endNum = (t + 1) * LoginsPerLoop;
if (endNum > numGames * 10) {
endNum = numGames * 10;
} }
NetSession *session = sessionArray[i]; for (int i = startNum; i < endNum; i++) {
if (i % 10 == 0) {
continue;
}
NetSession *session = sessionArray[i];
cout << "Player " << session->name << " joining game " << (i / 10)+1 << endl; cout << "Player " << session->name << " joining game " << (i / 10)+1 << endl;
msg = (PokerTHMessage_t *)calloc(1, sizeof(PokerTHMessage_t)); msg = (PokerTHMessage_t *)calloc(1, sizeof(PokerTHMessage_t));
msg->present = PokerTHMessage_PR_joinGameRequestMessage; msg->present = PokerTHMessage_PR_joinGameRequestMessage;
JoinGameRequestMessage_t *netJoinGame = &msg->choice.joinGameRequestMessage; JoinGameRequestMessage_t *netJoinGame = &msg->choice.joinGameRequestMessage;
string tmpGamePassword("blah123"); string tmpGamePassword("blah123");
netJoinGame->password = OCTET_STRING_new_fromBuf( netJoinGame->password = OCTET_STRING_new_fromBuf(
&asn_DEF_UTF8String, &asn_DEF_UTF8String,
tmpGamePassword.c_str(), tmpGamePassword.c_str(),
tmpGamePassword.length()); tmpGamePassword.length());
netJoinGame->joinGameAction.present = joinGameAction_PR_joinExistingGame; netJoinGame->joinGameAction.present = joinGameAction_PR_joinExistingGame;
JoinExistingGame_t *joinExisting = &netJoinGame->joinGameAction.choice.joinExistingGame; JoinExistingGame_t *joinExisting = &netJoinGame->joinGameAction.choice.joinExistingGame;
joinExisting->gameId = gameId[i / 10]; joinExisting->gameId = gameId[i / 10];
if (!sendMessage(session, msg)) { if (!sendMessage(session, msg)) {
cout << "Join game failed" << endl; cout << "Join game failed" << endl;
return 1; return 1;
}
msg = NULL;
} }
msg = NULL; for (int i = startNum; i < endNum; i++) {
// Receive join game ack if (i % 10 == 0) {
do { continue;
}
NetSession *session = sessionArray[i];
// Receive join game ack
do {
ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg);
msg = receiveMessage(session);
if (!msg) {
cout << "Receive in lobby failed" << endl;
return 1;
}
if (msg->present == PokerTHMessage_PR_errorMessage) {
cout << "Received error" << endl;
return 1;
}
} while (msg->present != PokerTHMessage_PR_joinGameReplyMessage);
if (msg->choice.joinGameReplyMessage.joinGameResult.present != joinGameResult_PR_joinGameAck) {
cout << "Join game ack failed" << endl;
return 1;
}
ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg); ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg);
msg = receiveMessage(session); msg = NULL;
if (!msg) {
cout << "Receive in lobby failed" << endl;
return 1;
}
if (msg->present == PokerTHMessage_PR_errorMessage) {
cout << "Received error" << endl;
return 1;
}
} while (msg->present != PokerTHMessage_PR_joinGameReplyMessage);
if (msg->choice.joinGameReplyMessage.joinGameResult.present != joinGameResult_PR_joinGameAck) {
cout << "Join game ack failed" << endl;
return 1;
} }
ASN_STRUCT_FREE(asn_DEF_PokerTHMessage, msg);
} }
bool terminated = false; bool terminated = false;
while (!terminated) { while (!terminated) {