package biz.karms.sinkit.tests.gsb; import biz.karms.sinkit.ejb.GSBService; import com.gargoylesoftware.htmlunit.HttpMethod; import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.WebRequest; import org.jboss.arquillian.container.test.api.OperateOnDeployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.arquillian.testng.Arquillian; import org.testng.annotations.Test; import javax.ejb.EJB; import java.net.HttpURLConnection; import java.net.URL; import java.util.logging.Logger; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; /** * Created by tom on 11/28/15. * * @author Tomas Kozel */ public class GSBTest extends Arquillian { private static final Logger LOGGER = Logger.getLogger(GSBTest.class.getName()); private static final String TOKEN = System.getenv("SINKIT_ACCESS_TOKEN"); @EJB private GSBService gsbService; @Test(dataProvider = Arquillian.ARQUILLIAN_DATA_PROVIDER, priority = 200) @OperateOnDeployment("ear") @RunAsClient public void clearGSBCacheTest(@ArquillianResource URL context) throws Exception { WebClient webClient = new WebClient(); WebRequest requestSettings = new WebRequest(new URL(context + "rest/gsb"), HttpMethod.DELETE); requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); Page page = webClient.getPage(requestSettings); assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); String responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("clear gsb cache Response: " + responseBody); String expected = "true"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); } @Test(dataProvider = Arquillian.ARQUILLIAN_DATA_PROVIDER, priority = 201) @OperateOnDeployment("ear") @RunAsClient public void putHashPrefixTest(@ArquillianResource URL context) throws Exception { WebClient webClient = new WebClient(); WebRequest requestSettings = new WebRequest(new URL(context + "rest/gsb/aabbccdd"), HttpMethod.PUT); requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); Page page = webClient.getPage(requestSettings); assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); String responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("hashPrefixTest Response:" + responseBody); String expected = "true"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); } @Test(dataProvider = Arquillian.ARQUILLIAN_DATA_PROVIDER, priority = 202) @OperateOnDeployment("ear") @RunAsClient public void getStatsTest(@ArquillianResource URL context) throws Exception { WebClient webClient = new WebClient(); WebRequest requestSettings = new WebRequest(new URL(context + "rest/gsb/stats"), HttpMethod.GET); requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); Page page = webClient.getPage(requestSettings); assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); String responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("getStatsTest Response:" + responseBody); String expected = "{\"gsbRecords\":1}"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); } @Test(dataProvider = Arquillian.ARQUILLIAN_DATA_PROVIDER, priority = 203) @OperateOnDeployment("ear") @RunAsClient public void removeHashPrefixTest(@ArquillianResource URL context) throws Exception { WebClient webClient = new WebClient(); WebRequest requestSettings = new WebRequest(new URL(context + "rest/gsb/aabbccdd"), HttpMethod.DELETE); requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); Page page = webClient.getPage(requestSettings); assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); String responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("removeHashPrefixTest Response:" + responseBody); String expected = "true"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); requestSettings = new WebRequest(new URL(context + "rest/gsb/stats"), HttpMethod.GET); requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); page = webClient.getPage(requestSettings); int counter = 0; while (page.getWebResponse().getStatusCode() != HttpURLConnection.HTTP_OK && counter < 10) { Thread.sleep(100); page = webClient.getPage(requestSettings); counter++; } assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("removeHashPrefixTest Response:" + responseBody); expected = "{\"gsbRecords\":0}"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); } @Test(dataProvider = Arquillian.ARQUILLIAN_DATA_PROVIDER, priority = 204) @OperateOnDeployment("ear") @RunAsClient public void lookupTest(@ArquillianResource URL context) throws Exception { WebClient webClient = new WebClient(); WebRequest requestSettings = new WebRequest(new URL(context + "rest/gsb/88981e62"), HttpMethod.PUT); requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); Page page = webClient.getPage(requestSettings); assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); String responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("removeHashPrefixTest Response:" + responseBody); String expected = "true"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); requestSettings = new WebRequest(new URL(context + "rest/gsb/lookup/google.com"), HttpMethod.GET); requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); page = webClient.getPage(requestSettings); assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("removeHashPrefixTest Response:" + responseBody); expected = "[\"MALWARE\"]"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); } @Test(dataProvider = Arquillian.ARQUILLIAN_DATA_PROVIDER, priority = 204) @OperateOnDeployment("ear") @RunAsClient public void lookupVariantTest(@ArquillianResource URL context) throws Exception { WebClient webClient = new WebClient(); WebRequest requestSettings = new WebRequest(new URL(context + "rest/gsb/c759a0aa"), HttpMethod.PUT); // prefix of evil.com/ requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); Page page = webClient.getPage(requestSettings); assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); String responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("removeHashPrefixTest Response:" + responseBody); String expected = "true"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); requestSettings = new WebRequest(new URL(context + "rest/gsb/lookup/very.bad.evil.com"), HttpMethod.GET); // should be blacklisted because of evil.com requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); page = webClient.getPage(requestSettings); assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("removeHashPrefixTest Response:" + responseBody); expected = "[\"PHISHING\"]"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); } //@Test(dataProvider = Arquillian.ARQUILLIAN_DATA_PROVIDER, priority = 205) //@OperateOnDeployment("ear") //@RunAsClient public void clearGSBCacheTest2(@ArquillianResource URL context) throws Exception { WebClient webClient = new WebClient(); WebRequest requestSettings = new WebRequest(new URL(context + "rest/gsb"), HttpMethod.DELETE); requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); Page page = webClient.getPage(requestSettings); assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); String responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("clear gsb cache Response: " + responseBody); String expected = "true"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); requestSettings = new WebRequest(new URL(context + "rest/gsb/stats"), HttpMethod.GET); requestSettings.setAdditionalHeader("Content-Type", "application/json"); requestSettings.setAdditionalHeader("X-sinkit-token", TOKEN); page = webClient.getPage(requestSettings); assertEquals(HttpURLConnection.HTTP_OK, page.getWebResponse().getStatusCode()); responseBody = page.getWebResponse().getContentAsString(); LOGGER.info("getStatsTest Response:" + responseBody); expected = "{\"gsbRecords\":0}"; assertTrue(responseBody.contains(expected), "Should have contained " + expected + ", but got: " + responseBody); } }