Skip to content

Commit

Permalink
added unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
danielzhaotongliu committed Jun 14, 2023
1 parent 1ee52d6 commit 363fb50
Showing 1 changed file with 54 additions and 0 deletions.
54 changes: 54 additions & 0 deletions xds/src/test/java/io/grpc/xds/LoadStatsManager2Test.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
*/
@RunWith(JUnit4.class)
public class LoadStatsManager2Test {
private static final double TOLERANCE = 1.0e-10;
private static final String CLUSTER_NAME1 = "cluster-foo.googleapis.com";
private static final String CLUSTER_NAME2 = "cluster-bar.googleapis.com";
private static final String EDS_SERVICE_NAME1 = "backend-service-foo.googleapis.com";
Expand Down Expand Up @@ -71,12 +72,18 @@ public void recordAndGetReport() {
for (int i = 0; i < 19; i++) {
loadCounter1.recordCallStarted();
}
loadCounter1.recordBackendLoadMetricStats("named1", 3.14159);
loadCounter1.recordBackendLoadMetricStats("named1", 1.618);
loadCounter1.recordBackendLoadMetricStats("named1", 99);
loadCounter1.recordBackendLoadMetricStats("named1", -97.23);
loadCounter1.recordBackendLoadMetricStats("named2", -2.718);
fakeClock.forwardTime(5L, TimeUnit.SECONDS);
dropCounter2.recordDroppedRequest();
loadCounter1.recordCallFinished(Status.OK);
for (int i = 0; i < 9; i++) {
loadCounter2.recordCallStarted();
}
loadCounter2.recordBackendLoadMetricStats("named3", 0.0009);
loadCounter2.recordCallFinished(Status.UNAVAILABLE);
fakeClock.forwardTime(10L, TimeUnit.SECONDS);
loadCounter3.recordCallStarted();
Expand All @@ -96,13 +103,31 @@ public void recordAndGetReport() {
assertThat(loadStats1.totalSuccessfulRequests()).isEqualTo(1L);
assertThat(loadStats1.totalErrorRequests()).isEqualTo(0L);
assertThat(loadStats1.totalRequestsInProgress()).isEqualTo(19L - 1L);
assertThat(loadStats1.loadMetricStatsMap().containsKey("named1")).isTrue();
assertThat(loadStats1.loadMetricStatsMap().containsKey("named2")).isTrue();
assertThat(
loadStats1.loadMetricStatsMap().get("named1").numRequestsFinishedWithMetric()).isEqualTo(
4L);
assertThat(loadStats1.loadMetricStatsMap().get("named1").totalMetricValue()).isWithin(TOLERANCE)
.of(3.14159 + 1.618 + 99 - 97.23);
assertThat(
loadStats1.loadMetricStatsMap().get("named2").numRequestsFinishedWithMetric()).isEqualTo(
1L);
assertThat(loadStats1.loadMetricStatsMap().get("named2").totalMetricValue()).isWithin(TOLERANCE)
.of(-2.718);

UpstreamLocalityStats loadStats2 =
findLocalityStats(stats1.upstreamLocalityStatsList(), LOCALITY2);
assertThat(loadStats2.totalIssuedRequests()).isEqualTo(9L);
assertThat(loadStats2.totalSuccessfulRequests()).isEqualTo(0L);
assertThat(loadStats2.totalErrorRequests()).isEqualTo(1L);
assertThat(loadStats2.totalRequestsInProgress()).isEqualTo(9L - 1L);
assertThat(loadStats2.loadMetricStatsMap().containsKey("named3")).isTrue();
assertThat(
loadStats2.loadMetricStatsMap().get("named3").numRequestsFinishedWithMetric()).isEqualTo(
1L);
assertThat(loadStats2.loadMetricStatsMap().get("named3").totalMetricValue()).isWithin(TOLERANCE)
.of(0.0009);

ClusterStats stats2 = findClusterStats(allStats, CLUSTER_NAME1, EDS_SERVICE_NAME2);
assertThat(stats2.loadReportIntervalNano()).isEqualTo(TimeUnit.SECONDS.toNanos(5L + 10L));
Expand All @@ -121,6 +146,7 @@ public void recordAndGetReport() {
assertThat(loadStats3.totalSuccessfulRequests()).isEqualTo(0L);
assertThat(loadStats3.totalErrorRequests()).isEqualTo(0L);
assertThat(loadStats3.totalRequestsInProgress()).isEqualTo(1L);
assertThat(loadStats3.loadMetricStatsMap()).isEmpty();

fakeClock.forwardTime(3L, TimeUnit.SECONDS);
List<ClusterStats> clusterStatsList = loadStatsManager.getClusterStatsReports(CLUSTER_NAME1);
Expand All @@ -135,11 +161,13 @@ public void recordAndGetReport() {
assertThat(loadStats1.totalSuccessfulRequests()).isEqualTo(0L);
assertThat(loadStats1.totalErrorRequests()).isEqualTo(0L);
assertThat(loadStats1.totalRequestsInProgress()).isEqualTo(18L); // still in-progress
assertThat(loadStats1.loadMetricStatsMap()).isEmpty();
loadStats2 = findLocalityStats(stats1.upstreamLocalityStatsList(), LOCALITY2);
assertThat(loadStats2.totalIssuedRequests()).isEqualTo(0L);
assertThat(loadStats2.totalSuccessfulRequests()).isEqualTo(0L);
assertThat(loadStats2.totalErrorRequests()).isEqualTo(0L);
assertThat(loadStats2.totalRequestsInProgress()).isEqualTo(8L); // still in-progress
assertThat(loadStats2.loadMetricStatsMap()).isEmpty();

stats2 = findClusterStats(clusterStatsList, CLUSTER_NAME1, EDS_SERVICE_NAME2);
assertThat(stats2.loadReportIntervalNano()).isEqualTo(TimeUnit.SECONDS.toNanos(3L));
Expand Down Expand Up @@ -194,9 +222,13 @@ public void sharedLoadCounterStatsAggregation() {
ClusterLocalityStats ref2 = loadStatsManager.getClusterLocalityStats(
CLUSTER_NAME1, EDS_SERVICE_NAME1, LOCALITY1);
ref1.recordCallStarted();
ref1.recordBackendLoadMetricStats("named1", 1.618);
ref1.recordBackendLoadMetricStats("named1", 3.14159);
ref1.recordCallFinished(Status.OK);
ref2.recordCallStarted();
ref2.recordCallStarted();
ref2.recordBackendLoadMetricStats("named1", -1);
ref2.recordBackendLoadMetricStats("named2", 2.718);
ref2.recordCallFinished(Status.UNAVAILABLE);

ClusterStats stats = Iterables.getOnlyElement(
Expand All @@ -207,6 +239,18 @@ public void sharedLoadCounterStatsAggregation() {
assertThat(localityStats.totalSuccessfulRequests()).isEqualTo(1L);
assertThat(localityStats.totalErrorRequests()).isEqualTo(1L);
assertThat(localityStats.totalRequestsInProgress()).isEqualTo(1L + 2L - 1L - 1L);
assertThat(localityStats.loadMetricStatsMap().containsKey("named1")).isTrue();
assertThat(localityStats.loadMetricStatsMap().containsKey("named2")).isTrue();
assertThat(
localityStats.loadMetricStatsMap().get("named1").numRequestsFinishedWithMetric()).isEqualTo(
3L);
assertThat(localityStats.loadMetricStatsMap().get("named1").totalMetricValue()).isWithin(
TOLERANCE).of(1.618 + 3.14159 - 1);
assertThat(
localityStats.loadMetricStatsMap().get("named2").numRequestsFinishedWithMetric()).isEqualTo(
1L);
assertThat(localityStats.loadMetricStatsMap().get("named2").totalMetricValue()).isEqualTo(
2.718);
}

@Test
Expand All @@ -215,6 +259,8 @@ public void loadCounterDelayedDeletionAfterAllInProgressRequestsReported() {
CLUSTER_NAME1, EDS_SERVICE_NAME1, LOCALITY1);
counter.recordCallStarted();
counter.recordCallStarted();
counter.recordBackendLoadMetricStats("named1", 2.718);
counter.recordBackendLoadMetricStats("named1", 1.414);

ClusterStats stats = Iterables.getOnlyElement(
loadStatsManager.getClusterStatsReports(CLUSTER_NAME1));
Expand All @@ -224,6 +270,12 @@ public void loadCounterDelayedDeletionAfterAllInProgressRequestsReported() {
assertThat(localityStats.totalSuccessfulRequests()).isEqualTo(0L);
assertThat(localityStats.totalErrorRequests()).isEqualTo(0L);
assertThat(localityStats.totalRequestsInProgress()).isEqualTo(2L);
assertThat(localityStats.loadMetricStatsMap().containsKey("named1")).isTrue();
assertThat(
localityStats.loadMetricStatsMap().get("named1").numRequestsFinishedWithMetric()).isEqualTo(
2L);
assertThat(localityStats.loadMetricStatsMap().get("named1").totalMetricValue()).isEqualTo(
2.718 + 1.414);

// release the counter, but requests still in-flight
counter.release();
Expand All @@ -234,6 +286,7 @@ public void loadCounterDelayedDeletionAfterAllInProgressRequestsReported() {
assertThat(localityStats.totalErrorRequests()).isEqualTo(0L);
assertThat(localityStats.totalRequestsInProgress())
.isEqualTo(2L); // retained by in-flight calls
assertThat(localityStats.loadMetricStatsMap().isEmpty()).isTrue();

counter.recordCallFinished(Status.OK);
counter.recordCallFinished(Status.UNAVAILABLE);
Expand All @@ -243,6 +296,7 @@ public void loadCounterDelayedDeletionAfterAllInProgressRequestsReported() {
assertThat(localityStats.totalSuccessfulRequests()).isEqualTo(1L);
assertThat(localityStats.totalErrorRequests()).isEqualTo(1L);
assertThat(localityStats.totalRequestsInProgress()).isEqualTo(0L);
assertThat(localityStats.loadMetricStatsMap().isEmpty()).isTrue();

assertThat(loadStatsManager.getClusterStatsReports(CLUSTER_NAME1)).isEmpty();
}
Expand Down

0 comments on commit 363fb50

Please sign in to comment.