package test.nvarghese.beowulf.common.scan.dao;
import java.net.UnknownHostException;
import org.bson.types.ObjectId;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
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.scan.dao.ReportIssueDAO;
import com.nvarghese.beowulf.common.scan.model.ReportIssueDocument;
import com.nvarghese.beowulf.common.scan.model.ReportIssueVariantDocument;
import com.nvarghese.beowulf.common.webtest.ReportThreatType;
import com.nvarghese.beowulf.common.webtest.ThreatSeverityType;
public class ReportIssueDAOTest {
private Datastore ds;
@BeforeClass
public void initialize() throws UnknownHostException {
Mongo mongo = new Mongo("localhost:10001");
ds = new Morphia().createDatastore(mongo, "webscantestreps");
}
@Test(dataProvider = "feedDifferentReportIssueDocuments")
public void testCreateReportIssueDocument(ReportIssueDocument reportIssueDocument) {
ReportIssueDAO reportIssueDAO = new ReportIssueDAO(ds);
ObjectId id = reportIssueDAO.createReportIssueDocument(reportIssueDocument);
Assert.assertNotNull(id);
ReportIssueDocument loadedReportIssueDocument = reportIssueDAO.getReportIssueDocument(id);
Assert.assertEquals(loadedReportIssueDocument.getModuleName(), reportIssueDocument.getModuleName());
}
@Test(dependsOnMethods = { "testCreateReportIssueDocument" })
public void testFindByUrlAndComboQuery() {
ReportIssueDAO reportIssueDAO = new ReportIssueDAO(ds);
ReportIssueDocument document = reportIssueDAO.findByUrlAndThreatTypeAndModuleNumber("http://dummysite.com/issue1/",
ReportThreatType.BRUTEFORCE, 1, false);
Assert.assertNotNull(document);
Assert.assertEquals(document.getThreatType().toString(), ReportThreatType.BRUTEFORCE.toString());
}
@Test(dependsOnMethods = { "testFindByUrlAndComboQuery" })
public void testAddReportIssueVariant() {
ReportIssueDAO reportIssueDAO = new ReportIssueDAO(ds);
ReportIssueDocument document = reportIssueDAO.findByUrlAndThreatTypeAndModuleNumber("http://dummysite.com/issue1/",
ReportThreatType.BRUTEFORCE, 1, false);
ReportIssueVariantDocument issueVariantDocument = new ReportIssueVariantDocument();
issueVariantDocument.setDescription("SampleDescription");
reportIssueDAO.addReportIssueVariants(document.getId(), issueVariantDocument);
ReportIssueDocument loadedDocument = reportIssueDAO.getReportIssueDocument(document.getId(), true);
Assert.assertEquals(loadedDocument.getIssueVariants().size(), 1);
Assert.assertEquals(loadedDocument.getIssueVariants().get(0).getDescription(), "SampleDescription");
}
@Test
public void testNonExistingReportIssueDocument() {
ReportIssueDAO reportIssueDAO = new ReportIssueDAO(ds);
ObjectId id = new ObjectId();
ReportIssueDocument reportIssueDocument = reportIssueDAO.getReportIssueDocument(id);
Assert.assertNull(reportIssueDocument);
}
@DataProvider(/* parallel=false */)
public Object[][] feedDifferentReportIssueDocuments() {
return new Object[][] { { provideDummyReportIssueDocument("http://dummysite.com/issue1/", "Mod1", 1, ReportThreatType.BRUTEFORCE) },
{ provideDummyReportIssueDocument("http://dummysite.com/issue2/", "Mod1", 1, ReportThreatType.BRUTEFORCE) },
{ provideDummyReportIssueDocument("http://dummysite.com/issue3/", "Mod1", 1, ReportThreatType.BRUTEFORCE) }, };
}
private ReportIssueDocument provideDummyReportIssueDocument(String uri, String moduleName, long moduleNumber, ReportThreatType threatType) {
ReportIssueDocument reportIssueDocument = new ReportIssueDocument();
reportIssueDocument.setIssueUrl(uri);
reportIssueDocument.setModuleName(moduleName);
reportIssueDocument.setModuleNumber(moduleNumber);
reportIssueDocument.setThreatType(threatType);
reportIssueDocument.setThreatSeverityType(ThreatSeverityType.HIGH);
return reportIssueDocument;
}
@AfterClass
public void cleanup() {
ds.getDB().dropDatabase();
}
}