package test.nvarghese.beowulf.common.http.txn;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import junit.framework.Assert;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.message.BasicNameValuePair;
import org.bson.types.ObjectId;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.google.code.morphia.Datastore;
import com.google.code.morphia.Morphia;
import com.mongodb.Mongo;
import com.nvarghese.beowulf.common.http.txn.AbstractHttpTransaction;
import com.nvarghese.beowulf.common.http.txn.HttpMethodType;
import com.nvarghese.beowulf.common.http.txn.HttpTransactionFactory;
import com.nvarghese.beowulf.common.http.txn.HttpTxnDAO;
import com.nvarghese.beowulf.common.http.txn.HttpTxnDocument;
import com.nvarghese.beowulf.common.http.txn.TransactionSource;
public class HttpTxnDAOTest {
private Datastore ds;
@BeforeClass
public void initialize() throws UnknownHostException {
Mongo mongo = new Mongo("localhost:10001");
ds = new Morphia().createDatastore(mongo, "webscantxntests");
}
@Test(groups = "BW_http_get_txn_dao_test")
public void testSimpleGetRequestPersisted() throws URISyntaxException {
URI uri = new URI("http://localhost:9888/index.html");
AbstractHttpTransaction transaction = HttpTransactionFactory.createTransaction(HttpMethodType.GET, uri, null, null, TransactionSource.NONE);
HttpTxnDAO txnDAO = new HttpTxnDAO(ds);
HttpTxnDocument txnDocument = transaction.toHttpTxnDocument();
ObjectId id = txnDAO.createHttpTxnDocument(txnDocument);
Assert.assertNotNull(id);
HttpTxnDocument loadedTransactionDocument = txnDAO.getHttpTxnDocument(id);
Assert.assertEquals(loadedTransactionDocument.getRequestURI(), txnDocument.getRequestURI());
// execute
AbstractHttpTransaction loadedTransaction = AbstractHttpTransaction.getObject(loadedTransactionDocument);
loadedTransaction.execute();
HttpTxnDocument txnDocument2 = loadedTransaction.toHttpTxnDocument();
txnDAO.updateHttpTxnDocument(txnDocument2);
HttpTxnDocument loadedTransactionDocument2 = txnDAO.getHttpTxnDocument(id);
AbstractHttpTransaction loadedTransaction2 = AbstractHttpTransaction.getObject(loadedTransactionDocument2);
Assert.assertEquals(loadedTransaction2.getResponseStatusCode(), loadedTransaction.getResponseStatusCode());
}
@Test(groups = "BW_http_post_txn_dao_test")
public void testSimplePostRequestPersisted() throws URISyntaxException, UnsupportedEncodingException {
URI uri = new URI("http://localhost:9888/index.html");
AbstractHttpTransaction transaction = HttpTransactionFactory.createTransaction(HttpMethodType.POST, uri, getUrlEncodedFormEntity(), null, TransactionSource.NONE);
HttpTxnDAO txnDAO = new HttpTxnDAO(ds);
HttpTxnDocument txnDocument = transaction.toHttpTxnDocument();
ObjectId id = txnDAO.createHttpTxnDocument(txnDocument);
Assert.assertNotNull(id);
HttpTxnDocument loadedTransactionDocument = txnDAO.getHttpTxnDocument(id);
Assert.assertEquals(loadedTransactionDocument.getRequestURI(), txnDocument.getRequestURI());
// execute
AbstractHttpTransaction loadedTransaction = AbstractHttpTransaction.getObject(loadedTransactionDocument);
loadedTransaction.execute();
HttpTxnDocument txnDocument2 = loadedTransaction.toHttpTxnDocument();
txnDAO.updateHttpTxnDocument(txnDocument2);
HttpTxnDocument loadedTransactionDocument2 = txnDAO.getHttpTxnDocument(id);
AbstractHttpTransaction loadedTransaction2 = AbstractHttpTransaction.getObject(loadedTransactionDocument2);
Assert.assertEquals(loadedTransaction2.getResponseStatusCode(), loadedTransaction.getResponseStatusCode());
}
private UrlEncodedFormEntity getUrlEncodedFormEntity() throws UnsupportedEncodingException {
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("param1", "value1"));
formparams.add(new BasicNameValuePair("param2", "value2"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams);
return entity;
}
@AfterClass
public void cleanup() {
// ds.getDB().dropDatabase();
}
}