package android.net.metrics import android.net.metrics.DhcpErrorEvent.DHCP_INVALID_OPTION_LENGTH import android.net.metrics.DhcpErrorEvent.errorCodeWithOption import androidx.test.filters.SmallTest import androidx.test.runner.AndroidJUnit4 import com.android.testutils.parcelingRoundTrip import java.lang.reflect.Modifier import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith private const val TEST_ERROR_CODE = 12345 //DHCP Optional Type: DHCP Subnet Mask (Copy from DhcpPacket.java due to it's protected) private const val DHCP_SUBNET_MASK = 1 @RunWith(AndroidJUnit4::class) @SmallTest class DhcpErrorEventTest { @Test fun testConstructor() { val event = DhcpErrorEvent(TEST_ERROR_CODE) assertEquals(TEST_ERROR_CODE, event.errorCode) } @Test fun testParcelUnparcel() { val event = DhcpErrorEvent(TEST_ERROR_CODE) val parceled = parcelingRoundTrip(event) assertEquals(TEST_ERROR_CODE, parceled.errorCode) } @Test fun testErrorCodeWithOption() { val errorCode = errorCodeWithOption(DHCP_INVALID_OPTION_LENGTH, DHCP_SUBNET_MASK); assertTrue((DHCP_INVALID_OPTION_LENGTH and errorCode) == DHCP_INVALID_OPTION_LENGTH); assertTrue((DHCP_SUBNET_MASK and errorCode) == DHCP_SUBNET_MASK); } @Test fun testToString() { val names = listOf("L2_ERROR", "L3_ERROR", "L4_ERROR", "DHCP_ERROR", "MISC_ERROR") val errorFields = DhcpErrorEvent::class.java.declaredFields.filter { it.type == Int::class.javaPrimitiveType && Modifier.isPublic(it.modifiers) && Modifier.isStatic(it.modifiers) && it.name !in names } errorFields.forEach { val intValue = it.getInt(null) val stringValue = DhcpErrorEvent(intValue).toString() assertTrue("Invalid string for error 0x%08X (field %s): %s".format(intValue, it.name, stringValue), stringValue.contains(it.name)) } } @Test fun testToString_InvalidErrorCode() { assertNotNull(DhcpErrorEvent(TEST_ERROR_CODE).toString()) } }