package com.denimgroup.threadfix.selenium.tests;
import static org.junit.Assert.assertTrue;
import java.util.Random;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.remote.RemoteWebDriver;
import com.denimgroup.threadfix.selenium.pages.ApplicationAddPage;
import com.denimgroup.threadfix.selenium.pages.ApplicationDetailPage;
import com.denimgroup.threadfix.selenium.pages.DashboardPage;
import com.denimgroup.threadfix.selenium.pages.GeneratedReportPage;
import com.denimgroup.threadfix.selenium.pages.LoginPage;
import com.denimgroup.threadfix.selenium.pages.TeamDetailPage;
import com.denimgroup.threadfix.selenium.pages.TeamIndexPage;
import com.denimgroup.threadfix.selenium.pages.ReportsIndexPage;
import com.denimgroup.threadfix.selenium.pages.UploadScanPage;
public class ReportTests extends BaseTest {
public ReportTests(String browser) {
super(browser);
// TODO Auto-generated constructor stub
}
private RemoteWebDriver driver;
private static LoginPage loginPage;
public ApplicationDetailPage applicationDetailPage;
public UploadScanPage uploadScanPage;
public TeamIndexPage organizationIndexPage;
public DashboardPage dashboardPage;
public TeamDetailPage organizationDetailPage;
public ReportsIndexPage reportsIndexPage;
public GeneratedReportPage generatedReportPage;
public ApplicationAddPage applicationAddPage;
Random generator = new Random();
boolean mySQL = true;
public String appWasAlreadyUploadedErrorText = "Scan file has already been uploaded.";
@Before
public void init() {
super.init();
driver = (RemoteWebDriver)super.getDriver();
loginPage = LoginPage.open(driver);
}
/*public static URL getScanFilePath(String category, String scannerName,
String fileName) {
String string = "SupportingFiles/" + category + "/" + scannerName + "/"
+ fileName;
return ClassLoader.getSystemResource(string);// .getFile();
}*/
@After
public void shutDown() {
driver.quit();
}
@Test
public void navigationTest() {
String pageText = loginPage.login("user", "password").clickReportsHeaderLink().getH2Tag();
assertTrue("Reports Page not found", pageText.contains("Reports"));
}
//reports require manual testing for now, can make automated tests to make sure the webelements generate
// @Test
// public void testCreateBasicApplicationnoscan() {
// String teamName = "testCreateTeam" + getRandomString(5);
// String appName = "testCreateApp" + getRandomString(5);
// String urlText = "http://testurl.com";
//
// // set up an organization
//
// ReportsIndexPage reportsIndexPage = loginPage.login("user", "password")
// .clickOrganizationHeaderLink()
// .clickAddTeamButton()
// .setTeamName(teamName)
// .addNewTeam()
// .addNewApplication(teamName, appName, urlText, "Low")
// .clickReportsHeaderLink();
//
// // Run Trending Report
// String PageText = driver.findElementByTagName("h2").getText();
// assertTrue("Reports Page not found", PageText.contains("Reports"));
//
// reportsIndexPage = reportsIndexPage.fillAllClickSaveReport("Trending Report",
// "testCreateApplicationOrg", "testCreateApplicationApp", "HTML");
//
// assertTrue("Reports Page not found", reportsIndexPage.isReportPresent());
//
// // Delete organization and Logout
//// loginPage = reportsIndexPage.clickOrganizationHeaderLink()
//// .expandTeamRowByName(teamName)
//// .clickViewTeamLink()
//// .clickDeleteButton()
//// .logout();
//
// }
/*
@Ignore // this test consistenly generates OutOfMemoryErrors on my box. We don't want to screw up all the tests.
@Test
public void generateAllReports() throws MalformedURLException {
String orgName = "testCreateOrg";
String appName = "testCreataApp";
String urlText = "http://testurl.com";
//set up an organization
organizationAddPage = loginPage.login("user", "password").clickOrganizationHeaderLink().clickAddTeamButton();
organizationAddPage.setNameInput(orgName);
boolean first = true;
//add an application
applicationAddPage = organizationAddPage.clickSubmitButtonValid().clickAddApplicationLink();
applicationAddPage.setNameInput(appName);
applicationAddPage.setUrlInput(urlText);
applicationDetailPage = applicationAddPage.clickAddApplicationButton();
for (String channel : fileMap.keySet()) {
if (first) {
first = false;
uploadScanPage = applicationDetailPage.clickUploadScanLinkFirstTime()
.setChannelTypeSelect(channel)
.clickAddChannelButton();
} else {
uploadScanPage = uploadScanPage.clickAddAnotherChannelLink()
.setChannelTypeSelect(channel)
.clickAddChannelButton();
}
}
for (Entry<String, String> mapEntry : fileMap.entrySet()) {
if (mapEntry.getValue() != null){
File appScanFile = null;
if (System.getProperty("scanFileBaseLocation") == null) {
appScanFile = new File(new URL(mapEntry.getValue()).getFile());
} else {
appScanFile = new File(mapEntry.getValue());
}
assertTrue("The test file did not exist.", appScanFile.exists());
} else {
continue;
}
uploadScanPage = uploadScanPage
// clickAddChannelButton()
.setFileInput(mapEntry.getValue())
.setChannelSelect(mapEntry.getKey())
.clickUploadScanButton()
.clickUploadScanLink();
uploadScanPage.sleep(1000);
}
//Navigate to Reports Page
driver.findElementById("reportsHeader").click();
ReportsIndexPage reportsIndexPage = new ReportsIndexPage(driver);
String PageText = driver.findElementByTagName("h2").getText();
assertTrue("Reports Page not found", PageText.contains("Reports"));
//Select Options to Run Trending report
reportsIndexPage.fillAllClickSaveReport("Trending Report","testCreateOrg", "testCreataApp", "HTML");
generatedReportPage = new GeneratedReportPage(driver);
String pageHeader = driver.findElementByTagName("span").getText();
assertTrue("Trending Report not generated",
pageHeader.contains("Trending Report"));
sleep(1000);
// Point In time Report
reportsIndexPage = generatedReportPage.clickReportsHeaderLink();
reportsIndexPage.fillAllClickSaveReport("Point in Time Report","testCreateOrg", "testCreataApp", "HTML");
generatedReportPage = new GeneratedReportPage(driver);
String pageHeader1 = driver.findElementByTagName("span").getText();
assertTrue("Point in Time Report not generated",
pageHeader1.contains("Point in Time Report"));
sleep(1000);
// Vulnerability Progress By type Report
reportsIndexPage = generatedReportPage.clickReportsHeaderLink();
generatedReportPage = reportsIndexPage.fillAllClickSaveReport("Vulnerability Progress By Type","testCreateOrg", "testCreataApp", "HTML");
String pageHeader2 = driver.findElementByTagName("span").getText();
assertTrue("Vulnerability Progress By type Report not generated",
pageHeader2.contains("Vulnerability Progress By Type"));
sleep(1000);
// Channel Comparison by Vulnerability Type Report
reportsIndexPage = generatedReportPage.clickReportsHeaderLink();
reportsIndexPage.fillAllClickSaveReport("Channel Comparison By Vulnerability Types","testCreateOrg", "testCreataApp", "HTML");
generatedReportPage = new GeneratedReportPage(driver);
String pageHeader3 = driver.findElementByTagName("span").getText();
assertTrue("Channel Comparison By Vulnerability Type Report not generated",
pageHeader3.contains("Channel Comparison By Vulnerability Types"));
sleep(1000);
// Channel Comparison Summary Report
reportsIndexPage = generatedReportPage.clickReportsHeaderLink();
reportsIndexPage.fillAllClickSaveReport("Channel Comparison Summary","testCreateOrg", "testCreataApp", "HTML");
generatedReportPage = new GeneratedReportPage(driver);
String pageHeader4 = driver.findElementByTagName("span").getText();
assertTrue("Channel Comparison Summary Report not generated",
pageHeader4.contains("Channel Comparison Summary"));
sleep(1000);
// Channel Comparison Detail Report
reportsIndexPage = generatedReportPage.clickReportsHeaderLink();
reportsIndexPage.fillAllClickSaveReport("Channel Comparison Detail","testCreateOrg", "testCreataApp", "HTML");
generatedReportPage = new GeneratedReportPage(driver);
String pageHeader5 = driver.findElementByTagName("h2").getText();
assertTrue("Channel Comparison Detail Report not generated",
pageHeader5.contains("Channel Comparison Detail"));
sleep(1000);
// Monthly Progress Report
reportsIndexPage = generatedReportPage.clickReportsHeaderLink();
reportsIndexPage.fillAllClickSaveReport("Monthly Progress Report","testCreateOrg", "testCreataApp", "HTML");
generatedReportPage = new GeneratedReportPage(driver);
String pageHeader6 = driver.findElementByTagName("span").getText();
assertTrue("Monthly Progress Report Report not generated",
pageHeader6.contains("Monthly Progress Report"));
sleep(1000);
// Portfolio Report
reportsIndexPage = generatedReportPage.clickReportsHeaderLink();
reportsIndexPage.fillAllClickSaveReport("Portfolio Report","testCreateOrg", "testCreataApp", "HTML");
generatedReportPage = new GeneratedReportPage(driver);
String pageHeader7 = driver.findElementByTagName("h2").getText();
assertTrue("Portfolio Report not generated",
pageHeader7.contains("Portfolio Report"));
sleep(1000);
}
*/
/*
* This is a smoke test, to be run on a blank database. It adds a bunch of
* apps with random criticalities and scan uploads and then tells you what
* the basic statistics should be.
*
* Requires human checking.
*/
/*
@Ignore
@Test
public void portfolioTest() {
dashboardPage = loginPage.login("user", "password");
int numOrgs = 5;
int numAppsPerOrg = 5;
String[] orgs = new String[numOrgs];
Integer[] appsByCriticality = new Integer[] { 0, 0, 0, 0 };
Integer[] appsNeverScannedByCriticality = new Integer[] { 0, 0, 0, 0 };
for (int i = 0; i < numOrgs; i++) {
orgs[i] = getRandomString(20);
organizationDetailPage = organizationIndexPage
.clickAddTeamButton().setNameInput(orgs[i])
.clickSubmitButtonValid();
for (int j = 0; j < numAppsPerOrg; j++) {
int index = generator.nextInt(4);
appsByCriticality[index] += 1;
applicationDetailPage = organizationDetailPage
.clickAddApplicationLink()
.setNameInput(getRandomString(i + 5))
.setUrlInput("http://dummyurl.com")
.setCriticalitySelect(criticalities[index])
.clickAddApplicationButton();
boolean hasScan = generator.nextBoolean();
if (hasScan) {
applicationDetailPage
.clickUploadScanLinkFirstTime()
.setChannelTypeSelect(ChannelType.ARACHNI)
.clickAddChannelButton()
.setFileInput(
ScanTests.getScanFilePath("Dynamic",
"Arachni", "php-demo.xml"))
.setChannelSelect(ChannelType.ARACHNI)
.clickUploadScanButton();
} else {
appsNeverScannedByCriticality[index] += 1;
}
organizationDetailPage = applicationDetailPage
.clickTeamHeaderLink().clickOrganizationLink(
orgs[i]);
}
organizationIndexPage = organizationDetailPage
.clickTeamHeaderLink();
}
log.debug("Critical: "
+ (100.0 * appsNeverScannedByCriticality[3] / appsByCriticality[3]));
log.debug("High: "
+ (100.0 * appsNeverScannedByCriticality[2] / appsByCriticality[2]));
log.debug("Medium: "
+ (100.0 * appsNeverScannedByCriticality[1] / appsByCriticality[1]));
log.debug("Low: "
+ (100.0 * appsNeverScannedByCriticality[0] / appsByCriticality[0]));
}
private void sleep(int num) {
try {
Thread.sleep(num);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
*/
}