Skip to content

Commit 89a7580

Browse files
committed
Add a unit test for the gauge counter behavior
1 parent 8ce0966 commit 89a7580

File tree

2 files changed

+38
-23
lines changed

2 files changed

+38
-23
lines changed

firebase-perf/src/main/java/com/google/firebase/perf/session/gauges/GaugeCounter.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ import java.util.concurrent.atomic.AtomicInteger
2323
object GaugeCounter {
2424
private const val MAX_METRIC_COUNT = 25
2525
private val counter = AtomicInteger(0)
26-
private val gaugeManager: GaugeManager = GaugeManager.getInstance()
26+
// TODO(b/394127311): Setting this as a var for a unit test. Refactor it.
27+
var gaugeManager: GaugeManager = GaugeManager.getInstance()
2728

2829
fun incrementCounter() {
2930
val metricsCount = counter.incrementAndGet()

firebase-perf/src/test/java/com/google/firebase/perf/session/gauges/GaugeManagerTest.java

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import com.google.firebase.perf.v1.GaugeMetadata;
4242
import com.google.firebase.perf.v1.GaugeMetric;
4343
import com.google.testing.timing.FakeScheduledExecutorService;
44+
import java.util.Random;
4445
import java.util.concurrent.TimeUnit;
4546
import org.junit.Before;
4647
import org.junit.Ignore;
@@ -323,38 +324,37 @@ public void stopCollectingGauges_invalidGaugeCollectionFrequency_appInForeground
323324
}
324325

325326
@Test
326-
@Ignore // TODO(b/394127311): Change to verify GaugeCounter.
327-
public void testStartCollectingGaugesStartsAJobToConsumeTheGeneratedMetrics() {
327+
public void testGaugeCounterStartsAJobToConsumeTheGeneratedMetrics() {
328328
PerfSession fakeSession = createTestSession(1);
329+
testGaugeManager.setApplicationProcessState(ApplicationProcessState.FOREGROUND);
329330
testGaugeManager.startCollectingGauges(fakeSession);
331+
GaugeCounter.INSTANCE.setGaugeManager(testGaugeManager);
332+
333+
// There's no job to log the gauges.
334+
assertThat(fakeScheduledExecutorService.isEmpty()).isTrue();
335+
336+
// Generate metrics that don't exceed the GaugeCounter.MAX_COUNT.
337+
generateMetricsAndIncrementCounter(24);
330338

339+
// There's still no job to log the gauges.
340+
assertThat(fakeScheduledExecutorService.isEmpty()).isTrue();
341+
342+
generateMetricsAndIncrementCounter(2);
331343
assertThat(fakeScheduledExecutorService.isEmpty()).isFalse();
332344
assertThat(fakeScheduledExecutorService.getDelayToNextTask(TimeUnit.MILLISECONDS))
333-
.isEqualTo(
334-
getMinimumBackgroundCollectionFrequency()
335-
* APPROX_NUMBER_OF_DATA_POINTS_PER_GAUGE_METRIC);
336-
337-
CpuMetricReading fakeCpuMetricReading1 = createFakeCpuMetricReading(200, 100);
338-
CpuMetricReading fakeCpuMetricReading2 = createFakeCpuMetricReading(300, 200);
339-
fakeCpuGaugeCollector.cpuMetricReadings.add(fakeCpuMetricReading1);
340-
fakeCpuGaugeCollector.cpuMetricReadings.add(fakeCpuMetricReading2);
341-
342-
AndroidMemoryReading fakeMemoryMetricReading1 =
343-
createFakeAndroidMetricReading(/* currentUsedAppJavaHeapMemoryKb= */ 123456);
344-
AndroidMemoryReading fakeMemoryMetricReading2 =
345-
createFakeAndroidMetricReading(/* currentUsedAppJavaHeapMemoryKb= */ 23454678);
346-
fakeMemoryGaugeCollector.memoryMetricReadings.add(fakeMemoryMetricReading1);
347-
fakeMemoryGaugeCollector.memoryMetricReadings.add(fakeMemoryMetricReading2);
345+
.isEqualTo(TIME_TO_WAIT_BEFORE_FLUSHING_GAUGES_QUEUE_MS);
348346

349347
fakeScheduledExecutorService.simulateSleepExecutingAtMostOneTask();
350348
GaugeMetric recordedGaugeMetric =
351-
getLastRecordedGaugeMetric(ApplicationProcessState.BACKGROUND, 1);
349+
getLastRecordedGaugeMetric(ApplicationProcessState.FOREGROUND, 1);
352350

353-
assertThatCpuGaugeMetricWasSentToTransport(
354-
testSessionId(1), recordedGaugeMetric, fakeCpuMetricReading1, fakeCpuMetricReading2);
351+
// It flushes all metrics in the ConcurrentLinkedQueues.
352+
int recordedGaugeMetricsCount =
353+
recordedGaugeMetric.getAndroidMemoryReadingsCount()
354+
+ recordedGaugeMetric.getCpuMetricReadingsCount();
355+
assertThat(recordedGaugeMetricsCount).isEqualTo(26);
355356

356-
assertThatMemoryGaugeMetricWasSentToTransport(
357-
testSessionId(1), recordedGaugeMetric, fakeMemoryMetricReading1, fakeMemoryMetricReading2);
357+
assertThat(recordedGaugeMetric.getSessionId()).isEqualTo(testSessionId(1));
358358
}
359359

360360
@Test
@@ -519,6 +519,20 @@ private long getMinimumBackgroundCollectionFrequency() {
519519
return DEFAULT_CPU_GAUGE_COLLECTION_FREQUENCY_BG_MS;
520520
}
521521

522+
// Simulates the behavior of Cpu and Memory Gauge collector.
523+
private void generateMetricsAndIncrementCounter(int count) {
524+
Random random = new Random();
525+
for (int i = 0; i < count; ++i) {
526+
if (random.nextInt(2) == 0) {
527+
fakeCpuGaugeCollector.cpuMetricReadings.add(createFakeCpuMetricReading(100, 200));
528+
GaugeCounter.INSTANCE.incrementCounter();
529+
} else {
530+
fakeMemoryGaugeCollector.memoryMetricReadings.add(createFakeAndroidMetricReading(100));
531+
GaugeCounter.INSTANCE.incrementCounter();
532+
}
533+
}
534+
}
535+
522536
private CpuMetricReading createFakeCpuMetricReading(long userTimeUs, long systemTimeUs) {
523537
CpuMetricReading.Builder fakeMetricReadingBuilder = CpuMetricReading.newBuilder();
524538
fakeMetricReadingBuilder.setClientTimeUs(System.currentTimeMillis());

0 commit comments

Comments
 (0)