blob: 0eab76799b817f33931f20c0d6eafdd13d997b82 [file] [log] [blame]
/*
* Copyright (C) 2022 The Android Open Source Project
*
* 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 com.android.helpers;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.time.Clock;
import java.time.Instant;
import java.time.ZoneId;
import java.util.Map;
public class SelectAdsLatencyHelperTest {
private static final String TEST_FILTER_LABEL = "SelectAds";
private static final String LOG_LABEL_P50_5G =
"SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p50_5G";
private static final String LOG_LABEL_P50_4GPLUS =
"SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p50_4GPLUS";
private static final String LOG_LABEL_P50_4G =
"SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p50_4G";
private static final String LOG_LABEL_P90_5G =
"SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p90_5G";
private static final String LOG_LABEL_P90_4GPLUS =
"SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p90_4GPLUS";
private static final String LOG_LABEL_P90_4G =
"SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p90_4G";
private static final String LOG_LABEL_REAL_SERVER_P50 =
"SELECT_ADS_LATENCY_SelectAdsTestServerLatency#selectAds_oneBuyer_realServer";
@Mock private LatencyHelper.InputStreamFilter mInputStreamFilter;
@Mock private Clock mClock;
private LatencyHelper mSelectAdsLatencyHelper;
private Instant mInstant = Clock.systemUTC().instant();
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mClock.getZone()).thenReturn(ZoneId.of("UTC")); // Used by DateTimeFormatter.
when(mClock.instant()).thenReturn(mInstant);
mSelectAdsLatencyHelper = SelectAdsLatencyHelper.getCollector(mInputStreamFilter, mClock);
mSelectAdsLatencyHelper.startCollecting();
}
@Test
public void testInitTimeInLogcat() throws IOException {
String logcatOutput =
"06-13 18:09:24.022 20765 D SelectAds: "
+ "(SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p50_5G: 102 ms)\n"
+ "06-29 02:47:32.030 31075 D SelectAds: "
+ "(SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p50_4GPLUS: 1"
+ " ms)\n"
+ "06-13 18:09:24.058 20765 D SelectAds: "
+ "(SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p50_4G: 43 "
+ "ms)\n"
+ "06-13 18:09:24.058 31075 D SelectAds: "
+ "(SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p90_5G: 23 "
+ "ms)\n"
+ "06-13 18:09:24.129 20765 D SelectAds: "
+ "(SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p90_4GPLUS: 45"
+ " ms)\n"
+ "06-13 18:09:24.130 31075 D SelectAds: "
+ "(SELECT_ADS_LATENCY_SelectAdsLatency#selectAds_p90_4G: 1 "
+ "ms)\n"
+ "06-13 18:09:25.058 20765 D SelectAds: "
+ "(SELECT_ADS_LATENCY_SelectAdsTestServerLatency"
+ "#selectAds_oneBuyer_realServer: 117 ms)\n";
when(mInputStreamFilter.getStream(TEST_FILTER_LABEL, mInstant))
.thenReturn(new ByteArrayInputStream(logcatOutput.getBytes()));
Map<String, Long> actual = mSelectAdsLatencyHelper.getMetrics();
assertThat(actual.get(LOG_LABEL_P50_5G)).isEqualTo(102);
assertThat(actual.get(LOG_LABEL_P50_4GPLUS)).isEqualTo(1);
assertThat(actual.get(LOG_LABEL_P50_4G)).isEqualTo(43);
assertThat(actual.get(LOG_LABEL_P90_5G)).isEqualTo(23);
assertThat(actual.get(LOG_LABEL_P90_4GPLUS)).isEqualTo(45);
assertThat(actual.get(LOG_LABEL_P90_4G)).isEqualTo(1);
assertThat(actual.get(LOG_LABEL_REAL_SERVER_P50)).isEqualTo(117);
}
@Test
public void testWithNonMatchingInput() throws IOException {
String logcatOutput = "Some random string";
when(mInputStreamFilter.getStream(TEST_FILTER_LABEL, mInstant))
.thenReturn(new ByteArrayInputStream(logcatOutput.getBytes()));
Map<String, Long> actual = mSelectAdsLatencyHelper.getMetrics();
assertThat(actual.size()).isEqualTo(0);
}
@Test
public void testWithEmptyLogcat() throws IOException {
when(mInputStreamFilter.getStream(TEST_FILTER_LABEL, mInstant))
.thenReturn(new ByteArrayInputStream("".getBytes()));
Map<String, Long> actual = mSelectAdsLatencyHelper.getMetrics();
assertThat(actual.size()).isEqualTo(0);
}
@Test
public void testInputStreamThrowsException() throws IOException {
when(mInputStreamFilter.getStream(TEST_FILTER_LABEL, mInstant))
.thenThrow(new IOException());
Map<String, Long> actual = mSelectAdsLatencyHelper.getMetrics();
for (Long val : actual.values()) {
assertThat(val).isEqualTo(0);
}
}
}