fix #1027, #1032: Admin API Test /api/admin/{failureurl, joblog}

This commit is contained in:
Keiichi Watanabe 2017-07-29 20:00:53 +09:00
parent 9caf5e7b4d
commit 151eff0370
2 changed files with 153 additions and 54 deletions

View file

@ -63,7 +63,7 @@ public class ITBase {
return System.getProperty("test.es.url", DEFAULT_ES_URL);
}
protected RequestSpecification checkMethodBase(final Map<String, Object> body) {
protected static RequestSpecification checkMethodBase(final Map<String, Object> body) {
return given().header("Authorization", getTestToken()).body(body, ObjectMapperType.JACKSON_2).when();
}
}

View file

@ -20,6 +20,7 @@ import static org.hamcrest.Matchers.equalTo;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -45,34 +46,19 @@ public class CrawlingInfoTests extends ITBase {
private static final String NAME_PREFIX = "crawlingInfoTest_";
private static String webConfigId;
@BeforeAll
protected static void initAll() {
RestAssured.baseURI = getFessUrl();
settingTestToken();
}
@BeforeEach
protected void init() {
}
@AfterEach
protected void tearDown() {
deleteMethod("/api/admin/webconfig/setting/" + getWebConfigId());
deleteMethod("/api/admin/scheduler/setting/" + getSchedulerId());
// TODO delete searchlist & job log
}
@AfterAll
protected static void tearDownAll() {
deleteTestToken();
}
@Test
void crawlingTest() {
// create and execute a web crawler
try {
createWebConfig();
logger.info("WebConfig is created");
Thread.sleep(10000);
webConfigId = getWebConfigId();
createJob();
logger.info("Job is created");
@ -81,18 +67,67 @@ public class CrawlingInfoTests extends ITBase {
startJob();
waitJob();
testReadCrawlingInfo();
testDeleteCrawlingInfo();
} catch (InterruptedException e) {
e.printStackTrace();
assertTrue(false);
}
}
private void createWebConfig() {
@BeforeEach
protected void init() {
}
@AfterEach
protected void tearDown() {
}
@AfterAll
protected static void tearDownAll() {
final List<Map<String, Object>> jobLogList = readJobLog();
for (Map<String, Object> elem : jobLogList) {
deleteMethod("/api/admin/joblog/log/" + elem.get("id"));
}
final List<Map<String, Object>> crawlingInfoList = readCrawlingInfo();
for (Map<String, Object> elem : crawlingInfoList) {
deleteMethod("/api/admin/crawlinginfo/log/" + elem.get("id"));
}
final List<Map<String, Object>> failureUrlList = readFailureUrl();
for (Map<String, Object> elem : failureUrlList) {
deleteMethod("/api/admin/failurelog/log/" + elem.get("id"));
}
deleteMethod("/api/admin/scheduler/setting/" + getSchedulerId());
deleteMethod("/api/admin/webconfig/setting/" + webConfigId);
deleteTestToken();
}
@Test
void jobLogTest() {
testReadJobLog();
testDeleteJobLog();
}
@Test
void crawlingInfoTest() {
testReadCrawlingInfo();
testDeleteCrawlingInfo();
}
@Test
void failureUrlTest() {
testReadFailureUrl();
testDeleteFailureUrl();
}
/**
* Methods for a Web Crawling Job
* */
private static void createWebConfig() {
final Map<String, Object> requestBody = new HashMap<>();
final String urls = "http://example.com";
final String urls = "http://example.com" + "\n" + "http://failure.url";
requestBody.put("name", NAME_PREFIX + "WebConfig");
requestBody.put("urls", urls);
requestBody.put("user_agent", "Mozilla/5.0");
@ -107,7 +142,7 @@ public class CrawlingInfoTests extends ITBase {
.body("response.status", equalTo(0));
}
private void createJob() {
private static void createJob() {
final Map<String, Object> requestBody = new HashMap<>();
requestBody.put("name", NAME_PREFIX + "Scheduler");
requestBody.put("target", "all");
@ -122,7 +157,7 @@ public class CrawlingInfoTests extends ITBase {
.body("response.status", equalTo(0));
}
private void startJob() {
private static void startJob() {
final Map<String, Object> requestBody = new HashMap<>();
final String schedulerId = getSchedulerId();
final Response response = checkMethodBase(requestBody).post("/api/admin/scheduler/" + schedulerId + "/start");
@ -130,9 +165,10 @@ public class CrawlingInfoTests extends ITBase {
logger.info("Start scheduler \"" + schedulerId + "\"");
}
private void waitJob() throws InterruptedException {
private static void waitJob() throws InterruptedException {
Boolean isRunning = false;
int count = 0;
while (count < 300 && !isRunning) { // Wait until the crawler starts
Thread.sleep(500);
count++;
@ -164,75 +200,138 @@ public class CrawlingInfoTests extends ITBase {
logger.info("Crawler terminated");
}
private void testReadCrawlingInfo() {
final String webConfigId = getWebConfigId();
final Map<String, Object> searchBody = new HashMap<>();
final String response = checkMethodBase(searchBody).get("/api/admin/crawlinginfo/logs").asString();
final List<Map<String, Object>> itemList = JsonPath.from(response).getList("response.logs");
//logger.info("crawling info" + response);
/**
* Test for JobLog
* */
private void testReadJobLog() {
final List<Map<String, Object>> logList = readJobLog();
assertEquals(1, logList.size());
}
int count = 0;
for (Map<String, Object> elem : itemList) {
if (elem.containsKey("session_id") && elem.get("session_id").equals(webConfigId)) {
count += 1;
private void testDeleteJobLog() {
final List<Map<String, Object>> logList = readJobLog();
for (Map<String, Object> elem : logList) {
deleteMethod("/api/admin/joblog/log/" + elem.get("id")).then().body("response.status", equalTo(0));
}
final List<Map<String, Object>> afterList = readJobLog();
assertEquals(0, afterList.size()); // check if logs are successfully deleted
}
private static List<Map<String, Object>> readJobLog() {
final List<Map<String, Object>> logList = readLogItems("joblog");
final List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
for (Map<String, Object> elem : logList) {
if (elem.containsKey("job_name") && elem.get("job_name").equals(NAME_PREFIX + "Scheduler")) {
resList.add(elem);
}
}
assertEquals(1, count);
return resList;
}
/**
* Test for CrawlingInfo
* */
private void testReadCrawlingInfo() {
final List<Map<String, Object>> logList = readCrawlingInfo();
assertEquals(1, logList.size());
}
private void testDeleteCrawlingInfo() {
final String webConfigId = getWebConfigId();
final Map<String, Object> searchBody = new HashMap<>();
final String response = checkMethodBase(searchBody).get("/api/admin/crawlinginfo/logs").asString();
final List<Map<String, Object>> itemList = JsonPath.from(response).getList("response.logs");
//logger.info("crawling info" + response);
final List<Map<String, Object>> logList = readCrawlingInfo();
for (Map<String, Object> elem : logList) {
deleteMethod("/api/admin/crawlinginfo/log/" + elem.get("id")).then().body("response.status", equalTo(0));
}
for (Map<String, Object> elem : itemList) {
final List<Map<String, Object>> afterList = readCrawlingInfo();
assertEquals(0, afterList.size()); // check if logs are successfully deleted
}
private static List<Map<String, Object>> readCrawlingInfo() {
final List<Map<String, Object>> logList = readLogItems("crawlinginfo");
final List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
for (Map<String, Object> elem : logList) {
if (elem.containsKey("session_id") && elem.get("session_id").equals(webConfigId)) {
deleteMethod("/api/admin/crawlinginfo/log/" + elem.get("id")).then().body("response.status", equalTo(0));
resList.add(elem);
}
}
return resList;
}
/**
* Test for FailureUrl
* */
private void testReadFailureUrl() {
final List<Map<String, Object>> logList = readFailureUrl();
assertEquals(1, logList.size());
}
private void testDeleteFailureUrl() {
final List<Map<String, Object>> logList = readFailureUrl();
for (Map<String, Object> elem : logList) {
deleteMethod("/api/admin/failureurl/log/" + elem.get("id")).then().body("response.status", equalTo(0));
}
final List<Map<String, Object>> afterList = readFailureUrl();
assertEquals(0, afterList.size()); // check if logs are successfully deleted
}
private static List<Map<String, Object>> readFailureUrl() {
final List<Map<String, Object>> logList = readLogItems("failureurl");
final List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
for (Map<String, Object> elem : logList) {
if (elem.containsKey("thread_name") && elem.get("thread_name").toString().startsWith("Crawler-" + webConfigId)) {
resList.add(elem);
}
}
return resList;
}
/**
* Utilities
* */
private String getJsonResponse(final String path) {
private static List<Map<String, Object>> readLogItems(final String apiName) {
final Map<String, Object> searchBody = new HashMap<>();
final String response = checkMethodBase(searchBody).get("/api/admin/" + apiName + "/logs").asString();
final List<Map<String, Object>> itemList = JsonPath.from(response).getList("response.logs");
return itemList;
}
private static String getJsonResponse(final String path) {
final Map<String, Object> searchBody = new HashMap<>();
final String response = checkMethodBase(searchBody).get(path).asString();
return response;
}
private String getResponsePath() {
private static String getResponsePath() {
return "response.settings.findAll {it.name.startsWith(\"" + NAME_PREFIX + "\")}";
}
private String getWebConfigId() {
private static String getWebConfigId() {
final String response = getJsonResponse("/api/admin/webconfig/settings");
final List<String> idList = JsonPath.from(response).getList(getResponsePath() + ".id");
return idList.get(0);
}
private String getSchedulerId() {
private static String getSchedulerId() {
final String response = getJsonResponse("/api/admin/scheduler/settings");
final List<String> idList = JsonPath.from(response).getList(getResponsePath() + ".id");
return idList.get(0);
}
private Map<String, Object> getSchedulerItem() {
private static Map<String, Object> getSchedulerItem() {
final String response = getJsonResponse("/api/admin/scheduler/settings");
final List<Map<String, Object>> itemList = JsonPath.from(response).getList(getResponsePath());
assertEquals(1, itemList.size());
return itemList.get(0);
}
private String buildJobScript() {
String webConfigId = getWebConfigId();
private static String buildJobScript() {
return String.format("return container.getComponent(\"crawlJob\")" + ".logLevel(\"info\")" + ".sessionId(\"%s\")"
+ ".webConfigIds([\"%s\"] as String[])" + ".jobExecutor(executor).execute();", webConfigId, webConfigId);
}
private Response deleteMethod(final String path) {
private static Response deleteMethod(final String path) {
return given().header("Authorization", getTestToken()).delete(path);
}
}