Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit acf64e15 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Test DataStallStatsUtils.write" am: 4a8513ce am: d010b417 am:...

Merge "Test DataStallStatsUtils.write" am: 4a8513ce am: d010b417 am: 9d6fffac am: f5ec508e am: 5823f6ef

Original change: https://android-review.googlesource.com/c/platform/packages/modules/NetworkStack/+/1335699

Change-Id: I905bfc42d71ed42d123e9248e2ebecefaddab846
parents 2da70295 5823f6ef
Loading
Loading
Loading
Loading
+73 −1
Original line number Diff line number Diff line
@@ -16,18 +16,33 @@

package com.android.networkstack.metrics

import android.net.NetworkCapabilities.TRANSPORT_CELLULAR
import android.net.captiveportal.CaptivePortalProbeResult
import android.net.metrics.ValidationProbeEvent
import android.net.util.DataStallUtils.DATA_STALL_EVALUATION_TYPE_DNS
import android.telephony.TelephonyManager
import androidx.test.filters.SmallTest
import androidx.test.runner.AndroidJUnit4
import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession
import com.android.dx.mockito.inline.extended.ExtendedMockito.verify
import com.android.server.connectivity.nano.CellularData
import com.android.server.connectivity.nano.DataStallEventProto
import com.android.server.connectivity.nano.DnsEvent
import com.google.protobuf.nano.MessageNano
import java.util.Arrays
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import android.net.metrics.ValidationProbeEvent
import org.mockito.ArgumentMatchers.eq

@RunWith(AndroidJUnit4::class)
@SmallTest
class DataStallStatsUtilsTest {
    private val TEST_ELAPSED_TIME_MS = 123456789L
    private val TEST_MCCMNC = "123456"
    private val TEST_SIGNAL_STRENGTH = -100
    private val RETURN_CODE_DNS_TIMEOUT = 255

    @Test
    fun testProbeResultToEnum() {
        assertEquals(DataStallStatsUtils.probeResultToEnum(null), DataStallEventProto.INVALID)
@@ -53,4 +68,61 @@ class DataStallStatsUtilsTest {
                CaptivePortalProbeResult.PORTAL_CODE, ValidationProbeEvent.PROBE_HTTPS)),
                DataStallEventProto.PORTAL)
    }

    @Test
    fun testWrite() {
        val session = mockitoSession().spyStatic(NetworkStackStatsLog::class.java).startMocking()
        val stats = DataStallDetectionStats.Builder()
                .setEvaluationType(DATA_STALL_EVALUATION_TYPE_DNS)
                .setNetworkType(TRANSPORT_CELLULAR)
                .setCellData(TelephonyManager.NETWORK_TYPE_LTE /* radioType */,
                        true /* roaming */,
                        TEST_MCCMNC /* networkMccmnc */,
                        TEST_MCCMNC /* simMccmnc */,
                        TEST_SIGNAL_STRENGTH /* signalStrength */)
                .setTcpFailRate(90)
                .setTcpSentSinceLastRecv(10)
        generateTimeoutDnsEvent(stats, count = 5)
        DataStallStatsUtils.write(stats.build(), CaptivePortalProbeResult.PARTIAL)

        verify { NetworkStackStatsLog.write(
                eq(NetworkStackStatsLog.DATA_STALL_EVENT),
                eq(DATA_STALL_EVALUATION_TYPE_DNS),
                eq(DataStallEventProto.PARTIAL),
                eq(TRANSPORT_CELLULAR),
                eq(DataStallDetectionStats.emptyWifiInfoIfNull(null)),
                eq(makeTestCellDataNano()),
                eq(makeTestDnsTimeoutNano(5)),
                eq(90) /* tcpFailRate */,
                eq(10) /* tcpSentSinceLastRecv */) }

        session.finishMocking()
    }

    private fun makeTestDnsTimeoutNano(timeoutCount: Int): ByteArray? {
        // Make an expected nano dns message.
        val event = DnsEvent()
        event.dnsReturnCode = IntArray(timeoutCount)
        event.dnsTime = LongArray(timeoutCount)
        Arrays.fill(event.dnsReturnCode, RETURN_CODE_DNS_TIMEOUT)
        Arrays.fill(event.dnsTime, TEST_ELAPSED_TIME_MS)
        return MessageNano.toByteArray(event)
    }

    private fun makeTestCellDataNano(): ByteArray? {
        // Make an expected nano cell data message.
        val data = CellularData()
        data.ratType = DataStallEventProto.RADIO_TECHNOLOGY_LTE
        data.networkMccmnc = TEST_MCCMNC
        data.simMccmnc = TEST_MCCMNC
        data.isRoaming = true
        data.signalStrength = TEST_SIGNAL_STRENGTH
        return MessageNano.toByteArray(data)
    }

    private fun generateTimeoutDnsEvent(stats: DataStallDetectionStats.Builder, count: Int) {
        repeat(count) {
            stats.addDnsEvent(RETURN_CODE_DNS_TIMEOUT, TEST_ELAPSED_TIME_MS)
        }
    }
}