Skip to content

Commit

Permalink
add some more fine grained tests
Browse files Browse the repository at this point in the history
  • Loading branch information
kolea2 committed Mar 19, 2024
1 parent 229fc25 commit 9f34f34
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,19 @@
import com.google.api.core.InternalApi;
import com.google.cloud.Structs;
import com.google.common.base.Objects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/** Model class for {@link com.google.datastore.v1.PlanSummary} */
@BetaApi
public class PlanSummary {
private final List<Map<String, Object>> indexesUsed = new ArrayList<>();
private final List<Map<String, Object>> indexesUsed;

@InternalApi
public PlanSummary(com.google.datastore.v1.PlanSummary proto) {
proto
.getIndexesUsedList()
.forEach(indexesUsed -> this.indexesUsed.add(Structs.asMap(indexesUsed)));
this.indexesUsed =
proto.getIndexesUsedList().stream().map(Structs::asMap).collect(Collectors.toList());
}

/** Returns the indexes selected for the query. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ public void testQueryProfile() {
Truth.assertThat(results.hasNext()).isTrue();
Truth.assertThat(results.getExplainMetrics().isPresent()).isTrue();
assertPlanSummary(results.getExplainMetrics().get().getPlanSummary());
assertExecutionStats(results.getExplainMetrics().get().getExecutionStats().get());
assertExecutionStats(results.getExplainMetrics().get().getExecutionStats().get(), 2, 2, "2");

QueryResults<Entity> results2 =
datastore.run(simpleOrQuery, ExplainOptions.newBuilder().build());
Expand All @@ -421,7 +421,8 @@ public void testQueryProfile() {
Truth.assertThat(resultsAggregation.size() > 0).isTrue();

assertPlanSummary(resultsAggregation.getExplainMetrics().get().getPlanSummary());
assertExecutionStats(resultsAggregation.getExplainMetrics().get().getExecutionStats().get());
assertExecutionStats(
resultsAggregation.getExplainMetrics().get().getExecutionStats().get(), 1, 1, "2");

AggregationQuery aggregationQuery2 =
Query.newAggregationQueryBuilder().over(simpleOrQuery).addAggregation(count()).build();
Expand Down Expand Up @@ -569,7 +570,7 @@ public void testTransactionExplainOptionsAnalyze() {

ExplainMetrics explainMetrics = baseResults.getExplainMetrics().get();
assertPlanSummary(explainMetrics.getPlanSummary());
assertExecutionStats(explainMetrics.getExecutionStats().get());
assertExecutionStats(explainMetrics.getExecutionStats().get(), 1, 1, "1");

baseTransaction.add(ENTITY3);
baseTransaction.commit();
Expand All @@ -585,7 +586,7 @@ public void testTransactionExplainOptionsAnalyze() {
assertTrue(results.size() > 0);

assertPlanSummary(results.getExplainMetrics().get().getPlanSummary());
assertExecutionStats(results.getExplainMetrics().get().getExecutionStats().get());
assertExecutionStats(results.getExplainMetrics().get().getExecutionStats().get(), 1, 1, "1");
aggregationTransaction.commit();
}

Expand Down Expand Up @@ -625,19 +626,25 @@ private void assertPlanSummary(PlanSummary planSummary) {
each -> Truth.assertThat(each.keySet()).containsAtLeast("properties", "query_scope"));
}

private void assertExecutionStats(ExecutionStats executionStats) {
private void assertExecutionStats(
ExecutionStats executionStats,
long expectedReadOps,
long expectedResultsReturned,
String expectedIndexEntriesScanned) {
Map<String, Object> debugStats = executionStats.getDebugStats();
Truth.assertThat(debugStats.keySet())
.containsAtLeast("billing_details", "documents_scanned", "index_entries_scanned");
Truth.assertThat(debugStats.get("index_entries_scanned"))
.isEqualTo(expectedIndexEntriesScanned);

Duration executionDuration = executionStats.getExecutionDuration();
Truth.assertThat(executionDuration).isIn(Range.greaterThan(Duration.ofMillis(0)));

long readOperations = executionStats.getReadOperations();
Truth.assertThat(readOperations).isIn(Range.atLeast(1L));
Truth.assertThat(readOperations).isEqualTo(expectedReadOps);

long resultsReturned = executionStats.getResultsReturned();
Truth.assertThat(resultsReturned).isIn(Range.atLeast(1L));
Truth.assertThat(resultsReturned).isEqualTo(expectedResultsReturned);
}

@Test
Expand Down Expand Up @@ -1824,7 +1831,7 @@ private void testCountAggregationReadTimeWith(Consumer<AggregationQuery.Builder>
Long oldCount = getOnlyElement(results).getLong("total_count");
assertThat(oldCount).isEqualTo(2L);
assertPlanSummary(results.getExplainMetrics().get().getPlanSummary());
assertExecutionStats(results.getExplainMetrics().get().getExecutionStats().get());
assertExecutionStats(results.getExplainMetrics().get().getExecutionStats().get(), 1, 1, "2");
} finally {
datastore.delete(entity1.getKey(), entity2.getKey(), entity3.getKey());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public class PlanSummaryTest {
private final Struct struct2 =
Struct.newBuilder()
.putFields("key2", Value.newBuilder().setStringValue("val2").build())
.putFields("key3", Value.newBuilder().setStringValue("val3").build())
.build();
private final com.google.datastore.v1.PlanSummary proto =
com.google.datastore.v1.PlanSummary.newBuilder()
Expand All @@ -43,6 +44,7 @@ public class PlanSummaryTest {
public void testModel() {
Truth.assertThat(planSummary.getIndexesUsed())
.isEqualTo(Lists.newArrayList(Structs.asMap(struct1), Structs.asMap(struct2)));
Truth.assertThat(planSummary.getIndexesUsed().get(0).get("key")).isEqualTo("val");
}

@Test
Expand Down

0 comments on commit 9f34f34

Please sign in to comment.