/*
* Copyright 2013 Future Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.araqne.logdb.query.parser;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.araqne.logdb.QueryParseException;
import org.araqne.logdb.QueryParserService;
import org.araqne.logdb.impl.FunctionRegistryImpl;
import org.araqne.logdb.query.aggregator.AggregationField;
import org.araqne.logdb.query.command.Stats;
import org.araqne.logdb.query.engine.QueryParserServiceImpl;
import org.junit.Before;
import org.junit.Test;
public class StatsParserTest {
private QueryParserService queryParserService;
@Before
public void setup() {
QueryParserServiceImpl p = new QueryParserServiceImpl();
p.setFunctionRegistry(new FunctionRegistryImpl());
queryParserService = p;
}
@Test
public void testCount() {
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
Stats stats = (Stats) p.parse(null, "stats count");
assertEquals(1, stats.getAggregationFields().size());
assertEquals("count", stats.getAggregationFields().get(0).getName());
assertEquals("stats count", stats.toString());
// abbreviation form
stats = (Stats) p.parse(null, "stats c");
assertEquals(1, stats.getAggregationFields().size());
assertEquals("count", stats.getAggregationFields().get(0).getName());
assertEquals("stats count", stats.toString());
}
@Test
public void testCountArgs(){
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
String query = "stats count(1,2) by line";
try {
p.parse(null, query);
fail();
} catch (QueryParseException e) {
if (e.isDebugMode()) {
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("91010", e.getType());
assertEquals(6, e.getStartOffset());
assertEquals(15, e.getEndOffset());
}
}
@Test
public void testFirstArgs(){
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
String query = "stats first(1,2) ";
try {
p.parse(null, query);
fail();
} catch (QueryParseException e) {
if (e.isDebugMode()) {
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("91020", e.getType());
assertEquals(6, e.getStartOffset());
assertEquals(15, e.getEndOffset());
}
}
@Test
public void testSumMin() {
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
Stats stats = (Stats) p.parse(null, "stats sum(min(10000, sport)) as foo");
AggregationField field = stats.getAggregationFields().get(0);
assertEquals("foo", field.getName());
assertEquals("stats sum(min(10000, sport)) as foo", stats.toString());
}
@Test
public void testSingleClauses() {
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
Stats stats = (Stats) p.parse(null, "stats sum(rcvd) by sip");
assertEquals(1, stats.getAggregationFields().size());
assertEquals("sum(rcvd)", stats.getAggregationFields().get(0).getName());
assertEquals("stats sum(rcvd) by sip", stats.toString());
}
@Test
public void testMultiAggregationsAndClauses() {
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
Stats stats = (Stats) p.parse(null, "stats sum(rcvd) as rcvd, sum(sent) as sent by sip, dip");
assertEquals(2, stats.getAggregationFields().size());
assertEquals(2, stats.getClauses().size());
assertEquals("rcvd", stats.getAggregationFields().get(0).getName());
assertEquals("sent", stats.getAggregationFields().get(1).getName());
assertEquals("sip", stats.getClauses().get(0));
assertEquals("dip", stats.getClauses().get(1));
assertEquals("stats sum(rcvd) as rcvd, sum(sent) as sent by sip, dip", stats.toString());
}
@Test
public void testNeedFunction() {
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
String query = "stats";
try {
p.parse(null, query);
fail();
} catch (QueryParseException e) {
if(e.isDebugMode()){
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("21700", e.getType());
assertEquals(6, e.getStartOffset());
assertEquals(4, e.getEndOffset());
}
}
@Test
public void testMissingClause() {
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
String query = "stats sum(rcvd) as rcvd, sum(sent) as sent by sip,";
try {
p.parse(null, query);
fail();
} catch (QueryParseException e) {
if(e.isDebugMode()){
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("21701", e.getType());
assertEquals(6, e.getStartOffset());
assertEquals(49, e.getEndOffset());
}
}
@Test
public void testAggreGationFunction() {
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
String query = "stats sample";
try {
p.parse(null, query);
fail();
} catch (QueryParseException e) {
if(e.isDebugMode()){
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("21702", e.getType());
assertEquals(6, e.getStartOffset());
assertEquals(11, e.getEndOffset());
}
}
@Test
public void testCreateAggreGationFunction() {
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
String query = "stats sum";
try {
p.parse(null, query);
fail();
} catch (QueryParseException e) {
if(e.isDebugMode()){
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("21703", e.getType());
assertEquals(6, e.getStartOffset());
assertEquals(8, e.getEndOffset());
}
}
@Test
public void testWhiteSpaceFieldNameBugFix() {
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
Stats stats = (Stats) p.parse(null, "stats first(a) as a , first(b) as b by c");
assertEquals("a", stats.getAggregationFields().get(0).getName());
assertEquals("b", stats.getAggregationFields().get(1).getName());
assertEquals("c", stats.getClauses().get(0));
}
// araqne/issue#684. check also boxplot and timechart.
@Test
public void testMultilineBugFix() {
StatsParser p = new StatsParser();
p.setQueryParserService(queryParserService);
Stats stats = (Stats) p.parse(null, "stats count\nby\nname");
assertEquals("count", stats.getAggregationFields().get(0).getName());
assertEquals("name", stats.getClauses().get(0));
}
}