Skip to content

Commit

Permalink
Fix : Updated unit tests (#103)
Browse files Browse the repository at this point in the history
* modified unit test

* refactored tests

* refactored unit tests

* refactored unit tests

* refactored

* resolved PR comments

Co-authored-by: Sarthak Singhal <sarthaksinghal@Sarthaks-MacBook-Pro.local>
  • Loading branch information
sarthak77 and Sarthak Singhal committed Nov 23, 2021
1 parent 7df2959 commit d7615f2
Show file tree
Hide file tree
Showing 5 changed files with 355 additions and 556 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.hypertrace.core.query.service.api.ColumnIdentifier;
import org.hypertrace.core.query.service.api.Expression;
import org.hypertrace.core.query.service.api.Filter;
import org.hypertrace.core.query.service.api.Function;
import org.hypertrace.core.query.service.api.LiteralConstant;
import org.hypertrace.core.query.service.api.Operator;
import org.hypertrace.core.query.service.api.OrderByExpression;
import org.hypertrace.core.query.service.api.QueryRequest;
import org.hypertrace.core.query.service.api.QueryRequest.Builder;
import org.hypertrace.core.query.service.api.SortOrder;
import org.hypertrace.core.query.service.api.Value;
import org.hypertrace.core.query.service.api.ValueType;
Expand All @@ -29,53 +26,66 @@ public static Expression createAliasedColumnExpression(String columnName, String
.build();
}

public static Expression.Builder createFunctionExpression(
String functionName, String columnNameArg, String alias) {
public static Expression createCountByColumnSelection(String columnNames) {
return createFunctionExpression("Count", createColumnExpression(columnNames).build());
}

public static Expression createTimeColumnGroupByExpression(String timeColumn, String period) {
return createFunctionExpression(
"dateTimeConvert",
createColumnExpression(timeColumn).build(),
createStringLiteralValueExpression("1:MILLISECONDS:EPOCH"),
createStringLiteralValueExpression("1:MILLISECONDS:EPOCH"),
createStringLiteralValueExpression(period));
}

public static Expression createFunctionExpression(
String functionName, Expression... expressions) {
return Expression.newBuilder()
.setFunction(
Function.newBuilder()
.setAlias(alias)
.setFunctionName(functionName)
.addArguments(
Expression.newBuilder()
.setColumnIdentifier(
ColumnIdentifier.newBuilder().setColumnName(columnNameArg))));
.addAllArguments(Arrays.asList(expressions)))
.build();
}

public static Expression createFunctionExpression(
String functionName, String alias, Expression... expressions) {
public static Expression.Builder createAliasedFunctionExpression(
String functionName, String columnNameArg, String alias) {
return Expression.newBuilder()
.setFunction(
Function.newBuilder()
.setFunctionName(functionName)
.setAlias(alias)
.addAllArguments(Arrays.asList(expressions)))
.build();
.setFunctionName(functionName)
.addArguments(createColumnExpression(columnNameArg)));
}

public static Expression createFunctionExpression(
String functionName, Expression... expressions) {
public static Expression createAliasedFunctionExpression(
String functionName, String alias, Expression... expressions) {
return Expression.newBuilder()
.setFunction(
Function.newBuilder()
.setFunctionName(functionName)
.setAlias(alias)
.addAllArguments(Arrays.asList(expressions)))
.build();
}

public static OrderByExpression.Builder createOrderByExpression(
Expression.Builder expression, SortOrder sortOrder) {
return OrderByExpression.newBuilder().setExpression(expression).setOrder(sortOrder);
}

public static Filter createEqualsFilter(String column, String value) {
return createFilter(column, Operator.EQ, createStringLiteralValueExpression(value));
public static Filter.Builder createCompositeFilter(Operator operator, Filter... childFilters) {
return Filter.newBuilder().setOperator(operator).addAllChildFilter(Arrays.asList(childFilters));
}

public static Filter createInFilter(String column, List<String> values) {
return createFilter(column, Operator.IN, createStringArrayLiteralValueExpression(values));
}

public static Filter createNotEqualsFilter(String column, String value) {
return createFilter(column, Operator.NEQ, createStringLiteralValueExpression(value));
}

public static Filter createEqualsFilter(String column, String value) {
return createFilter(column, Operator.EQ, createStringLiteralValueExpression(value));
}

public static Filter createEqualsFilter(String column, long value) {
return createFilter(column, Operator.EQ, createLongLiteralValueExpression(value));
}
Expand All @@ -84,6 +94,30 @@ public static Filter createEqualsFilter(String column, int value) {
return createFilter(column, Operator.EQ, createIntLiteralValueExpression(value));
}

public static Filter createEqualsFilter(String column, float value) {
return createFilter(column, Operator.EQ, createFloatLiteralValueExpression(value));
}

public static Filter createEqualsFilter(String column, boolean value) {
return createFilter(column, Operator.EQ, createBoolLiteralValueExpression(value));
}

public static Filter createEqualsFilter(String column, double value) {
return createFilter(column, Operator.EQ, createDoubleLiteralValueExpression(value));
}

public static Filter createNullStringFilter(String columnName, Operator op) {
return createFilter(columnName, op, createNullStringLiteralValueExpression());
}

public static Filter createTimestampFilter(String columnName, Operator op, long value) {
return createFilter(columnName, op, createTimestampLiteralValueExpression(value));
}

public static Filter createTimeFilter(String columnName, Operator op, long value) {
return createFilter(columnName, op, createLongLiteralValueExpression(value));
}

public static Filter createFilter(String column, Operator operator, Expression expression) {
return createFilter(createColumnExpression(column).build(), operator, expression);
}
Expand Down Expand Up @@ -124,93 +158,64 @@ public static Expression createLongLiteralValueExpression(long value) {
.build();
}

public static Expression createIntLiteralValueExpression(int value) {
public static Expression createTimestampLiteralValueExpression(long value) {
return Expression.newBuilder()
.setLiteral(
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setInt(value).setValueType(ValueType.INT)))
.setValue(Value.newBuilder().setTimestamp(value).setValueType(ValueType.TIMESTAMP)))
.build();
}

public static Filter createTimeFilter(String columnName, Operator op, long value) {
ColumnIdentifier.Builder timeColumn = ColumnIdentifier.newBuilder().setColumnName(columnName);
Expression.Builder lhs = Expression.newBuilder().setColumnIdentifier(timeColumn);

LiteralConstant.Builder constant =
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setValueType(ValueType.LONG).setLong(value));
Expression.Builder rhs = Expression.newBuilder().setLiteral(constant);
return Filter.newBuilder().setLhs(lhs).setOperator(op).setRhs(rhs).build();
}

/** Given a column name, creates and returns an expression to select count(columnName). */
public static Expression.Builder createCountByColumnSelection(String... columnNames) {
Function.Builder count =
Function.newBuilder()
.setFunctionName("Count")
.addAllArguments(
Arrays.stream(columnNames)
.map(
columnName ->
Expression.newBuilder()
.setColumnIdentifier(
ColumnIdentifier.newBuilder().setColumnName(columnName))
.build())
.collect(Collectors.toList()));
return Expression.newBuilder().setFunction(count);
}

public static Filter.Builder createColumnValueFilter(
String columnName, Operator operator, String value) {
ColumnIdentifier.Builder column = ColumnIdentifier.newBuilder().setColumnName(columnName);
Expression.Builder lhs = Expression.newBuilder().setColumnIdentifier(column);

LiteralConstant.Builder constant =
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setValueType(ValueType.STRING).setString(value));
Expression.Builder rhs = Expression.newBuilder().setLiteral(constant);
return Filter.newBuilder().setLhs(lhs).setOperator(operator).setRhs(rhs);
public static Expression createDoubleLiteralValueExpression(double value) {
return Expression.newBuilder()
.setLiteral(
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setDouble(value).setValueType(ValueType.DOUBLE)))
.build();
}

public static Filter.Builder createCompositeFilter(Operator operator, Filter... childFilters) {
return Filter.newBuilder().setOperator(operator).addAllChildFilter(Arrays.asList(childFilters));
public static Expression createFloatLiteralValueExpression(float value) {
return Expression.newBuilder()
.setLiteral(
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setFloat(value).setValueType(ValueType.FLOAT)))
.build();
}

public static OrderByExpression.Builder createOrderByExpression(
String columnName, SortOrder order) {
return OrderByExpression.newBuilder()
.setOrder(order)
.setExpression(createColumnExpression(columnName));
public static Expression createBoolLiteralValueExpression(boolean value) {
return Expression.newBuilder()
.setLiteral(
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setBoolean(value).setValueType(ValueType.BOOL)))
.build();
}

public static Expression createTimeColumnGroupByExpression(String timeColumn, String period) {
public static Expression createIntLiteralValueExpression(int value) {
return Expression.newBuilder()
.setFunction(
Function.newBuilder()
.setFunctionName("dateTimeConvert")
.addArguments(createColumnExpression(timeColumn))
.addArguments(
Expression.newBuilder()
.setLiteral(
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setString("1:MILLISECONDS:EPOCH"))))
.addArguments(
Expression.newBuilder()
.setLiteral(
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setString("1:MILLISECONDS:EPOCH"))))
.addArguments(
Expression.newBuilder()
.setLiteral(
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setString(period)))))
.setLiteral(
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setInt(value).setValueType(ValueType.INT)))
.build();
}

public static Expression createNullStringLiteralValueExpression() {
return Expression.newBuilder()
.setLiteral(
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setValueType(ValueType.NULL_STRING)))
.build();
}

public static QueryRequest getQueryRequestWithFilter(Filter filter) {
Builder builder = QueryRequest.newBuilder();
builder.addGroupBy(createTimeColumnGroupByExpression("SERVICE.startTime", "15:SECONDS"));
builder.setFilter(filter);
return builder.build();
public static Expression createNullNumberLiteralValueExpression() {
return Expression.newBuilder()
.setLiteral(
LiteralConstant.newBuilder()
.setValue(Value.newBuilder().setValueType(ValueType.NULL_NUMBER)))
.build();
}

public static OrderByExpression.Builder createOrderByExpression(
Expression.Builder expression, SortOrder sortOrder) {
return OrderByExpression.newBuilder().setExpression(expression).setOrder(sortOrder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import static org.hypertrace.core.query.service.QueryRequestBuilderUtils.createStringLiteralValueExpression;
import static org.hypertrace.core.query.service.QueryRequestBuilderUtils.createTimeColumnGroupByExpression;
import static org.hypertrace.core.query.service.QueryRequestBuilderUtils.createTimeFilter;
import static org.hypertrace.core.query.service.QueryRequestBuilderUtils.getQueryRequestWithFilter;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

Expand Down Expand Up @@ -435,4 +434,11 @@ private static Stream<Arguments> provideQueryRequest() {
Arguments.arguments(getQueryRequestWithFilter(filter1)),
Arguments.arguments(getQueryRequestWithFilter(filter2)));
}

private static QueryRequest getQueryRequestWithFilter(Filter filter) {
Builder builder = QueryRequest.newBuilder();
builder.addGroupBy(createTimeColumnGroupByExpression("SERVICE.startTime", "15:SECONDS"));
builder.setFilter(filter);
return builder.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1133,7 +1133,7 @@ public void testNullTenantIdQueryRequestContextThrowsNPE() {
.addSelection(QueryRequestBuilderUtils.createColumnExpression("col1"))
.addSelection(QueryRequestBuilderUtils.createColumnExpression("col2"))
.addAggregation(
QueryRequestBuilderUtils.createFunctionExpression(
QueryRequestBuilderUtils.createAliasedFunctionExpression(
"AVG", "duration", "avg_duration"))
.build();
Assertions.assertThrows(
Expand All @@ -1152,7 +1152,7 @@ public void testNullTenantIdQueryRequestContextThrowsNPE() {
.addSelection(QueryRequestBuilderUtils.createColumnExpression("col2"))
.addGroupBy(QueryRequestBuilderUtils.createColumnExpression("col3"))
.addAggregation(
QueryRequestBuilderUtils.createFunctionExpression(
QueryRequestBuilderUtils.createAliasedFunctionExpression(
"AVG", "duration", "avg_duration"))
.build();
Assertions.assertThrows(
Expand Down
Loading

0 comments on commit d7615f2

Please sign in to comment.