/**
* This file is part of Graylog.
*
* Graylog is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Graylog is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Graylog. If not, see <http://www.gnu.org/licenses/>.
*/
package integration.search;
import com.jayway.restassured.path.json.JsonPath;
import com.jayway.restassured.response.ValidatableResponse;
import com.lordofthejars.nosqlunit.annotation.UsingDataSet;
import integration.RequiresAuthentication;
import integration.RestTestIncludingElasticsearch;
import org.junit.Ignore;
import org.junit.Test;
import static com.jayway.restassured.RestAssured.given;
import static org.assertj.core.api.Assertions.assertThat;
@RequiresAuthentication
@Ignore("Flakey test")
public class AbsoluteSearchResourceTest extends RestTestIncludingElasticsearch {
@Test
@UsingDataSet(locations = "searchForExistingKeyword.json")
public void searchForAllMessages() {
final ValidatableResponse result = doSearchFor("*");
final JsonPath response = result
.statusCode(200)
.extract().jsonPath();
assertThat(response.getInt("total_results")).isEqualTo(2);
assertThat(response.getList("messages")).hasSize(2);
assertThat(response.getList("used_indices")).hasSize(1);
}
@Test
@UsingDataSet(locations = "searchForExistingKeyword.json")
public void searchForExistingKeyword() {
final ValidatableResponse result = doSearchFor("Testmessage");
final JsonPath response = result
.statusCode(200)
.extract().jsonPath();
assertThat(response.getInt("total_results")).isEqualTo(1);
assertThat(response.getList("messages")).hasSize(1);
assertThat(response.getList("used_indices")).hasSize(1);
}
@Test
@UsingDataSet(locations = "searchForExistingKeyword.json")
public void searchForNonexistingKeyword() {
final ValidatableResponse result = doSearchFor("Nonexistent");
final JsonPath response = result
.statusCode(200)
.extract().jsonPath();
assertThat(response.getInt("total_results")).isEqualTo(0);
assertThat(response.getList("messages")).isEmpty();
assertThat(response.getList("used_indices")).hasSize(1);
}
@Test
@UsingDataSet(locations = "searchForExistingKeyword.json")
public void searchForExistingKeywordOutsideOfTimeRange() {
final ValidatableResponse result = doSearchFor("Testmessage", "2015-06-14T11:32:16.827Z", "2015-06-15T11:32:16.827Z");
final JsonPath response = result
.statusCode(200)
.extract().jsonPath();
assertThat(response.getInt("total_results")).isEqualTo(0);
assertThat(response.getList("messages")).isEmpty();
assertThat(response.getList("used_indices")).hasSize(1);
}
@Test
@UsingDataSet(locations = "searchForExistingKeyword.json")
public void searchForExistingKeywordInsideOfVeryNarrowTimeRange() {
final ValidatableResponse result = doSearchFor("Testmessage", "2015-06-16T11:32:16.827Z", "2015-06-16T11:32:16.827Z");
final JsonPath response = result
.statusCode(200)
.extract().jsonPath();
assertThat(response.getInt("total_results")).isEqualTo(1);
assertThat(response.getList("messages")).isNotEmpty();
assertThat(response.getList("used_indices")).hasSize(1);
}
protected ValidatableResponse doSearchFor(String query) {
return doSearchFor(query, "1971-03-14T15:09:26.540Z", "2015-08-14T15:09:26.540Z");
}
protected ValidatableResponse doSearchFor(String query, String from, String to) {
final ValidatableResponse result = given()
.when()
.param("query", query)
.param("from", from)
.param("to", to)
.get("/search/universal/absolute")
.then()
.body(".", containsAllKeys("query", "built_query", "used_indices", "messages", "fields", "time", "total_results", "from", "to"));
final JsonPath resultBody = result.extract().jsonPath();
assertThat(resultBody.getString("query")).isEqualTo(query);
return result;
}
}