diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-08-30 19:15:17 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-08-30 19:15:17 +0000 |
commit | 7d736e9bbdee02ad4e52d9e609d8637d10d862f9 (patch) | |
tree | fe1d3ae7da2f4675c15cb21b13cd4059dbf62452 /common/tests/unit/src | |
parent | a22ca3808c771b412dfe83790fe2c23096020c5d (diff) | |
parent | 75fe68d4e6ba427b0db693025d7daccd9a86073f (diff) | |
download | net-7d736e9bbdee02ad4e52d9e609d8637d10d862f9.tar.gz |
Snap for 10737070 from 75fe68d4e6ba427b0db693025d7daccd9a86073f to mainline-resolv-releaseaml_res_341110000
Change-Id: I78f594e0f9ac3fe14f7c56afff200c66f70c4a87
Diffstat (limited to 'common/tests/unit/src')
4 files changed, 369 insertions, 87 deletions
diff --git a/common/tests/unit/src/com/android/net/module/util/ArpPacketTest.java b/common/tests/unit/src/com/android/net/module/util/ArpPacketTest.java new file mode 100644 index 00000000..e25d5548 --- /dev/null +++ b/common/tests/unit/src/com/android/net/module/util/ArpPacketTest.java @@ -0,0 +1,201 @@ +/* + * Copyright (C) 2019 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.net.module.util; + +import static com.android.net.module.util.NetworkStackConstants.ARP_REQUEST; +import static com.android.net.module.util.NetworkStackConstants.ETHER_ADDR_LEN; +import static com.android.net.module.util.NetworkStackConstants.ETHER_BROADCAST; +import static com.android.testutils.MiscAsserts.assertThrows; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +import android.net.InetAddresses; +import android.net.MacAddress; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import com.android.net.module.util.arp.ArpPacket; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.net.Inet4Address; +import java.nio.ByteBuffer; + +@RunWith(AndroidJUnit4.class) +@SmallTest +public final class ArpPacketTest { + + private static final Inet4Address TEST_IPV4_ADDR = + (Inet4Address) InetAddresses.parseNumericAddress("192.168.1.2"); + private static final Inet4Address INADDR_ANY = + (Inet4Address) InetAddresses.parseNumericAddress("0.0.0.0"); + private static final byte[] TEST_SENDER_MAC_ADDR = new byte[] { + 0x00, 0x1a, 0x11, 0x22, 0x33, 0x33 }; + private static final byte[] TEST_TARGET_MAC_ADDR = new byte[] { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + private static final byte[] TEST_ARP_PROBE = new byte[] { + // dst mac address + (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, + // src mac address + (byte) 0x00, (byte) 0x1a, (byte) 0x11, (byte) 0x22, (byte) 0x33, (byte) 0x33, + // ether type + (byte) 0x08, (byte) 0x06, + // hardware type + (byte) 0x00, (byte) 0x01, + // protocol type + (byte) 0x08, (byte) 0x00, + // hardware address size + (byte) 0x06, + // protocol address size + (byte) 0x04, + // opcode + (byte) 0x00, (byte) 0x01, + // sender mac address + (byte) 0x00, (byte) 0x1a, (byte) 0x11, (byte) 0x22, (byte) 0x33, (byte) 0x33, + // sender IP address + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + // target mac address + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + // target IP address + (byte) 0xc0, (byte) 0xa8, (byte) 0x01, (byte) 0x02, + }; + + private static final byte[] TEST_ARP_ANNOUNCE = new byte[] { + // dst mac address + (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, + // src mac address + (byte) 0x00, (byte) 0x1a, (byte) 0x11, (byte) 0x22, (byte) 0x33, (byte) 0x33, + // ether type + (byte) 0x08, (byte) 0x06, + // hardware type + (byte) 0x00, (byte) 0x01, + // protocol type + (byte) 0x08, (byte) 0x00, + // hardware address size + (byte) 0x06, + // protocol address size + (byte) 0x04, + // opcode + (byte) 0x00, (byte) 0x01, + // sender mac address + (byte) 0x00, (byte) 0x1a, (byte) 0x11, (byte) 0x22, (byte) 0x33, (byte) 0x33, + // sender IP address + (byte) 0xc0, (byte) 0xa8, (byte) 0x01, (byte) 0x02, + // target mac address + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + // target IP address + (byte) 0xc0, (byte) 0xa8, (byte) 0x01, (byte) 0x02, + }; + + private static final byte[] TEST_ARP_PROBE_TRUNCATED = new byte[] { + // dst mac address + (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, + // src mac address + (byte) 0x00, (byte) 0x1a, (byte) 0x11, (byte) 0x22, (byte) 0x33, (byte) 0x33, + // ether type + (byte) 0x08, (byte) 0x06, + // hardware type + (byte) 0x00, (byte) 0x01, + // protocol type + (byte) 0x08, (byte) 0x00, + // hardware address size + (byte) 0x06, + // protocol address size + (byte) 0x04, + // opcode + (byte) 0x00, + }; + + private static final byte[] TEST_ARP_PROBE_TRUNCATED_MAC = new byte[] { + // dst mac address + (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, + // src mac address + (byte) 0x00, (byte) 0x1a, (byte) 0x11, (byte) 0x22, (byte) 0x33, (byte) 0x33, + // ether type + (byte) 0x08, (byte) 0x06, + // hardware type + (byte) 0x00, (byte) 0x01, + // protocol type + (byte) 0x08, (byte) 0x00, + // hardware address size + (byte) 0x06, + // protocol address size + (byte) 0x04, + // opcode + (byte) 0x00, (byte) 0x01, + // sender mac address + (byte) 0x00, (byte) 0x1a, (byte) 0x11, (byte) 0x22, (byte) 0x33, + }; + + @Test + public void testBuildArpProbePacket() throws Exception { + final ByteBuffer arpProbe = ArpPacket.buildArpPacket(ETHER_BROADCAST, + TEST_SENDER_MAC_ADDR, TEST_IPV4_ADDR.getAddress(), new byte[ETHER_ADDR_LEN], + INADDR_ANY.getAddress(), (short) ARP_REQUEST); + assertArrayEquals(arpProbe.array(), TEST_ARP_PROBE); + } + + @Test + public void testBuildArpAnnouncePacket() throws Exception { + final ByteBuffer arpAnnounce = ArpPacket.buildArpPacket(ETHER_BROADCAST, + TEST_SENDER_MAC_ADDR, TEST_IPV4_ADDR.getAddress(), new byte[ETHER_ADDR_LEN], + TEST_IPV4_ADDR.getAddress(), (short) ARP_REQUEST); + assertArrayEquals(arpAnnounce.array(), TEST_ARP_ANNOUNCE); + } + + @Test + public void testParseArpProbePacket() throws Exception { + final ArpPacket packet = ArpPacket.parseArpPacket(TEST_ARP_PROBE, TEST_ARP_PROBE.length); + assertEquals(packet.opCode, ARP_REQUEST); + assertEquals(packet.senderHwAddress, MacAddress.fromBytes(TEST_SENDER_MAC_ADDR)); + assertEquals(packet.targetHwAddress, MacAddress.fromBytes(TEST_TARGET_MAC_ADDR)); + assertEquals(packet.senderIp, INADDR_ANY); + assertEquals(packet.targetIp, TEST_IPV4_ADDR); + } + + @Test + public void testParseArpAnnouncePacket() throws Exception { + final ArpPacket packet = ArpPacket.parseArpPacket(TEST_ARP_ANNOUNCE, + TEST_ARP_ANNOUNCE.length); + assertEquals(packet.opCode, ARP_REQUEST); + assertEquals(packet.senderHwAddress, MacAddress.fromBytes(TEST_SENDER_MAC_ADDR)); + assertEquals(packet.targetHwAddress, MacAddress.fromBytes(TEST_TARGET_MAC_ADDR)); + assertEquals(packet.senderIp, TEST_IPV4_ADDR); + assertEquals(packet.targetIp, TEST_IPV4_ADDR); + } + + @Test + public void testParseArpPacket_invalidByteBufferParameters() throws Exception { + assertThrows(ArpPacket.ParseException.class, () -> ArpPacket.parseArpPacket( + TEST_ARP_PROBE, 0)); + } + + @Test + public void testParseArpPacket_truncatedPacket() throws Exception { + assertThrows(ArpPacket.ParseException.class, () -> ArpPacket.parseArpPacket( + TEST_ARP_PROBE_TRUNCATED, TEST_ARP_PROBE_TRUNCATED.length)); + } + + @Test + public void testParseArpPacket_truncatedMacAddress() throws Exception { + assertThrows(ArpPacket.ParseException.class, () -> ArpPacket.parseArpPacket( + TEST_ARP_PROBE_TRUNCATED_MAC, TEST_ARP_PROBE_TRUNCATED.length)); + } +} diff --git a/common/tests/unit/src/com/android/net/module/util/CollectionUtilsTest.kt b/common/tests/unit/src/com/android/net/module/util/CollectionUtilsTest.kt index 9fb025b3..e23f9991 100644 --- a/common/tests/unit/src/com/android/net/module/util/CollectionUtilsTest.kt +++ b/common/tests/unit/src/com/android/net/module/util/CollectionUtilsTest.kt @@ -63,9 +63,6 @@ class CollectionUtilsTest { assertEquals(0, CollectionUtils.indexOfSubArray(haystack, byteArrayOf())) assertEquals(-1, CollectionUtils.indexOfSubArray(byteArrayOf(), byteArrayOf(3, 2))) assertEquals(0, CollectionUtils.indexOfSubArray(byteArrayOf(), byteArrayOf())) - assertThrows(NullPointerException::class.java) { - CollectionUtils.indexOfSubArray(haystack, null) - } } @Test diff --git a/common/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java b/common/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java index 328c39a4..e80fa80a 100644 --- a/common/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java +++ b/common/tests/unit/src/com/android/net/module/util/DeviceConfigUtilsTest.java @@ -17,12 +17,16 @@ package com.android.net.module.util; import static android.content.pm.PackageManager.MATCH_SYSTEM_ONLY; +import static android.provider.DeviceConfig.NAMESPACE_TETHERING; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; +import static com.android.net.module.util.FeatureVersions.CONNECTIVITY_MODULE_ID; +import static com.android.net.module.util.FeatureVersions.NETWORK_STACK_MODULE_ID; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.anyInt; @@ -84,6 +88,8 @@ public class DeviceConfigUtilsTest { private static final String TEST_GO_APEX_PACKAGE_NAME = "com.prefix.android.go.tethering"; private static final String TEST_CONNRES_PACKAGE_NAME = "com.prefix.android.connectivity.resources"; + private static final String TEST_NETWORKSTACK_NAME = "com.prefix.android.networkstack"; + private static final String TEST_GO_NETWORKSTACK_NAME = "com.prefix.android.go.networkstack"; private final PackageInfo mPackageInfo = new PackageInfo(); private final PackageInfo mApexPackageInfo = new PackageInfo(); private MockitoSession mSession; @@ -227,7 +233,7 @@ public class DeviceConfigUtilsTest { eq(TEST_EXPERIMENT_FLAG))); assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); } @@ -237,9 +243,9 @@ public class DeviceConfigUtilsTest { eq(TEST_EXPERIMENT_FLAG))); assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); - assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, true /* defaultEnabled */)); } @@ -252,7 +258,7 @@ public class DeviceConfigUtilsTest { eq(TEST_EXPERIMENT_FLAG))); assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); // Feature should be disabled by flag value "999999999". @@ -260,7 +266,7 @@ public class DeviceConfigUtilsTest { eq(TEST_EXPERIMENT_FLAG))); assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); - assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); // Follow defaultEnabled if the flag is not set @@ -270,9 +276,9 @@ public class DeviceConfigUtilsTest { TEST_EXPERIMENT_FLAG, false /* defaultEnabled */)); assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, true /* defaultEnabled */)); - assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, true /* defaultEnabled */)); } @@ -287,14 +293,14 @@ public class DeviceConfigUtilsTest { assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG)); - assertFalse(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertFalse(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, true /* defaultEnabled */)); doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(eq(TEST_NAME_SPACE), eq(TEST_EXPERIMENT_FLAG))); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); } @@ -317,9 +323,9 @@ public class DeviceConfigUtilsTest { public void testFeatureIsEnabledCaching_APEX() throws Exception { doReturn(TEST_FLAG_VALUE_STRING).when(() -> DeviceConfig.getProperty(eq(TEST_NAME_SPACE), eq(TEST_EXPERIMENT_FLAG))); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); - assertTrue(DeviceConfigUtils.isFeatureEnabled(mContext, TEST_NAME_SPACE, + assertTrue(DeviceConfigUtils.isTetheringFeatureEnabled(mContext, TEST_NAME_SPACE, TEST_EXPERIMENT_FLAG, TEST_APEX_NAME, false /* defaultEnabled */)); // Package info is only queried once @@ -346,4 +352,82 @@ public class DeviceConfigUtilsTest { doThrow(new Resources.NotFoundException()).when(mResources).getInteger(someResId); assertEquals(2098, DeviceConfigUtils.getResIntegerConfig(mContext, someResId, 2098)); } + + @Test + public void testGetNetworkStackModuleVersionCaching() throws Exception { + final PackageInfo networkStackPackageInfo = new PackageInfo(); + networkStackPackageInfo.setLongVersionCode(TEST_PACKAGE_VERSION); + doReturn(networkStackPackageInfo).when(mPm).getPackageInfo( + eq(TEST_NETWORKSTACK_NAME), anyInt()); + assertEquals(TEST_PACKAGE_VERSION, + DeviceConfigUtils.getNetworkStackModuleVersion(mContext)); + + assertEquals(TEST_PACKAGE_VERSION, + DeviceConfigUtils.getNetworkStackModuleVersion(mContext)); + // Package info is only queried once + verify(mPm, times(1)).getPackageInfo(anyString(), anyInt()); + verify(mContext, never()).getPackageName(); + } + + @Test + public void testGetNetworkStackModuleVersionOnNonMainline() { + assertEquals(DeviceConfigUtils.DEFAULT_PACKAGE_VERSION, + DeviceConfigUtils.getNetworkStackModuleVersion(mContext)); + } + + @Test + public void testGetNetworkStackModuleVersion() throws Exception { + final PackageInfo networkStackPackageInfo = new PackageInfo(); + final PackageInfo goNetworkStackPackageInfo = new PackageInfo(); + networkStackPackageInfo.setLongVersionCode(TEST_PACKAGE_VERSION); + goNetworkStackPackageInfo.setLongVersionCode(TEST_PACKAGE_VERSION + 1); + doReturn(goNetworkStackPackageInfo).when(mPm).getPackageInfo( + eq(TEST_NETWORKSTACK_NAME), anyInt()); + // Verify the returned value is go module version. + assertEquals(TEST_PACKAGE_VERSION + 1, + DeviceConfigUtils.getNetworkStackModuleVersion(mContext)); + } + + @Test + public void testIsFeatureSupported_networkStackFeature() throws Exception { + // Supported for DEFAULT_PACKAGE_VERSION + assertTrue(DeviceConfigUtils.isFeatureSupported( + mContext, TEST_PACKAGE_VERSION + NETWORK_STACK_MODULE_ID)); + + final PackageInfo networkStackPackageInfo = new PackageInfo(); + networkStackPackageInfo.setLongVersionCode(TEST_PACKAGE_VERSION); + doReturn(networkStackPackageInfo).when(mPm).getPackageInfo( + eq(TEST_NETWORKSTACK_NAME), anyInt()); + + assertTrue(DeviceConfigUtils.isFeatureSupported( + mContext, TEST_PACKAGE_VERSION + NETWORK_STACK_MODULE_ID)); + assertFalse(DeviceConfigUtils.isFeatureSupported( + mContext, TEST_PACKAGE_VERSION + NETWORK_STACK_MODULE_ID + 1)); + } + + @Test + public void testIsFeatureSupported_tetheringFeature() throws Exception { + assertTrue(DeviceConfigUtils.isFeatureSupported( + mContext, TEST_PACKAGE_VERSION + CONNECTIVITY_MODULE_ID)); + // Return false because feature requires a future version. + assertFalse(DeviceConfigUtils.isFeatureSupported( + mContext, 889900000L + CONNECTIVITY_MODULE_ID)); + } + + @Test + public void testIsFeatureSupported_illegalModule() throws Exception { + assertThrows(IllegalArgumentException.class, + () -> DeviceConfigUtils.isFeatureSupported(mContext, TEST_PACKAGE_VERSION)); + } + + @Test + public void testIsTetheringFeatureForceDisabled() throws Exception { + doReturn("0").when(() -> DeviceConfig.getProperty( + eq(NAMESPACE_TETHERING), eq(TEST_EXPERIMENT_FLAG))); + assertTrue(DeviceConfigUtils.isTetheringFeatureNotChickenedOut(TEST_EXPERIMENT_FLAG)); + + doReturn(TEST_FLAG_VALUE_STRING).when( + () -> DeviceConfig.getProperty(eq(NAMESPACE_TETHERING), eq(TEST_EXPERIMENT_FLAG))); + assertFalse(DeviceConfigUtils.isTetheringFeatureNotChickenedOut(TEST_EXPERIMENT_FLAG)); + } } diff --git a/common/tests/unit/src/com/android/net/module/util/StructTest.java b/common/tests/unit/src/com/android/net/module/util/StructTest.java index 4e462106..b4da0439 100644 --- a/common/tests/unit/src/com/android/net/module/util/StructTest.java +++ b/common/tests/unit/src/com/android/net/module/util/StructTest.java @@ -89,20 +89,20 @@ public class StructTest { return Struct.parse(clazz, buf); } - static class HeaderMsgWithConstructor extends Struct { + public static class HeaderMsgWithConstructor extends Struct { static int sType; static int sLength; @Field(order = 0, type = Type.U8, padding = 1) - final short mFamily; + public final short mFamily; @Field(order = 1, type = Type.U16) - final int mLen; + public final int mLen; @Field(order = 2, type = Type.S32) - final int mIfindex; + public final int mIfindex; @Field(order = 3, type = Type.U8) - final short mIcmpType; + public final short mIcmpType; @Field(order = 4, type = Type.U8, padding = 6) - final short mIcmpCode; + public final short mIcmpCode; HeaderMsgWithConstructor(final short family, final int len, final int ifindex, final short type, final short code) { @@ -133,20 +133,20 @@ public class StructTest { verifyHeaderParsing(msg); } - static class HeaderMsgWithoutConstructor extends Struct { + public static class HeaderMsgWithoutConstructor extends Struct { static int sType; static int sLength; @Field(order = 0, type = Type.U8, padding = 1) - short mFamily; + public short mFamily; @Field(order = 1, type = Type.U16) - int mLen; + public int mLen; @Field(order = 2, type = Type.S32) - int mIfindex; + public int mIfindex; @Field(order = 3, type = Type.U8) - short mIcmpType; + public short mIcmpType; @Field(order = 4, type = Type.U8, padding = 6) - short mIcmpCode; + public short mIcmpCode; } @Test @@ -164,7 +164,7 @@ public class StructTest { msg.writeToBytes(ByteOrder.LITTLE_ENDIAN)); } - static class HeaderMessage { + public static class HeaderMessage { @Field(order = 0, type = Type.U8, padding = 1) short mFamily; @Field(order = 1, type = Type.U16) @@ -183,7 +183,7 @@ public class StructTest { assertThrows(IllegalArgumentException.class, () -> Struct.parse(HeaderMessage.class, buf)); } - static class HeaderMessageMissingAnnotation extends Struct { + public static class HeaderMessageMissingAnnotation extends Struct { @Field(order = 0, type = Type.U8, padding = 1) short mFamily; @Field(order = 1, type = Type.U16) @@ -202,15 +202,15 @@ public class StructTest { () -> Struct.parse(HeaderMessageMissingAnnotation.class, buf)); } - static class NetworkOrderMessage extends Struct { + public static class NetworkOrderMessage extends Struct { @Field(order = 0, type = Type.UBE16) - final int mUBE16; + public final int mUBE16; @Field(order = 1, type = Type.UBE32) - final long mUBE32; + public final long mUBE32; @Field(order = 2, type = Type.UBE64) - final BigInteger mUBE64; + public final BigInteger mUBE64; @Field(order = 3, type = Type.UBE63) - final long mUBE63; + public final long mUBE63; NetworkOrderMessage(final int be16, final long be32, final BigInteger be64, final long be63) { @@ -235,19 +235,19 @@ public class StructTest { msg.writeToBytes(ByteOrder.LITTLE_ENDIAN)); } - static class UnsignedDataMessage extends Struct { + public static class UnsignedDataMessage extends Struct { @Field(order = 0, type = Type.U8) - final short mU8; + public final short mU8; @Field(order = 1, type = Type.U16) - final int mU16; + public final int mU16; @Field(order = 2, type = Type.U32) - final long mU32; + public final long mU32; @Field(order = 3, type = Type.U64) - final BigInteger mU64; + public final BigInteger mU64; @Field(order = 4, type = Type.U63) - final long mU63; + public final long mU63; @Field(order = 5, type = Type.U63) - final long mLU64; // represent U64 data with U63 type + public final long mLU64; // represent U64 data with U63 type UnsignedDataMessage(final short u8, final int u16, final long u32, final BigInteger u64, final long u63, final long lu64) { @@ -276,7 +276,7 @@ public class StructTest { msg.writeToBytes(ByteOrder.LITTLE_ENDIAN)); } - static class U64DataMessage extends Struct { + public static class U64DataMessage extends Struct { @Field(order = 0, type = Type.U64) long mU64; } @@ -290,10 +290,10 @@ public class StructTest { private static final String SMALL_VALUE_BIGINTEGER = "3412000000000000" + "0000000000001234" + "0000000000000000"; - static class SmallValueBigInteger extends Struct { - @Field(order = 0, type = Type.U64) final BigInteger mSmallValue; - @Field(order = 1, type = Type.UBE64) final BigInteger mBSmallValue; - @Field(order = 2, type = Type.U64) final BigInteger mZero; + public static class SmallValueBigInteger extends Struct { + @Field(order = 0, type = Type.U64) public final BigInteger mSmallValue; + @Field(order = 1, type = Type.UBE64) public final BigInteger mBSmallValue; + @Field(order = 2, type = Type.U64) public final BigInteger mZero; SmallValueBigInteger(final BigInteger smallValue, final BigInteger bSmallValue, final BigInteger zero) { @@ -316,15 +316,15 @@ public class StructTest { msg.writeToBytes(ByteOrder.LITTLE_ENDIAN)); } - static class SignedDataMessage extends Struct { + public static class SignedDataMessage extends Struct { @Field(order = 0, type = Type.S8) - final byte mS8; + public final byte mS8; @Field(order = 1, type = Type.S16) - final short mS16; + public final short mS16; @Field(order = 2, type = Type.S32) - final int mS32; + public final int mS32; @Field(order = 3, type = Type.S64) - final long mS64; + public final long mS64; SignedDataMessage(final byte s8, final short s16, final int s32, final long s64) { mS8 = s8; @@ -362,7 +362,7 @@ public class StructTest { msg.writeToBytes(ByteOrder.LITTLE_ENDIAN)); } - static class HeaderMessageWithDuplicateOrder extends Struct { + public static class HeaderMessageWithDuplicateOrder extends Struct { @Field(order = 0, type = Type.U8, padding = 1) short mFamily; @Field(order = 1, type = Type.U16) @@ -382,7 +382,7 @@ public class StructTest { () -> Struct.parse(HeaderMessageWithDuplicateOrder.class, buf)); } - static class HeaderMessageWithNegativeOrder extends Struct { + public static class HeaderMessageWithNegativeOrder extends Struct { @Field(order = 0, type = Type.U8, padding = 1) short mFamily; @Field(order = 1, type = Type.U16) @@ -402,7 +402,7 @@ public class StructTest { () -> Struct.parse(HeaderMessageWithNegativeOrder.class, buf)); } - static class HeaderMessageOutOfIndexBounds extends Struct { + public static class HeaderMessageOutOfIndexBounds extends Struct { @Field(order = 0, type = Type.U8, padding = 1) short mFamily; @Field(order = 1, type = Type.U16) @@ -422,7 +422,7 @@ public class StructTest { () -> Struct.parse(HeaderMessageOutOfIndexBounds.class, buf)); } - static class HeaderMessageMismatchedPrimitiveType extends Struct { + public static class HeaderMessageMismatchedPrimitiveType extends Struct { @Field(order = 0, type = Type.U8, padding = 1) short mFamily; @Field(order = 1, type = Type.U16) @@ -442,11 +442,11 @@ public class StructTest { () -> Struct.parse(HeaderMessageMismatchedPrimitiveType.class, buf)); } - static class PrefixMessage extends Struct { + public static class PrefixMessage extends Struct { @Field(order = 0, type = Type.UBE16) - final int mLifetime; + public final int mLifetime; @Field(order = 1, type = Type.ByteArray, arraysize = 12) - final byte[] mPrefix; + public final byte[] mPrefix; PrefixMessage(final int lifetime, final byte[] prefix) { mLifetime = lifetime; @@ -469,7 +469,7 @@ public class StructTest { msg.writeToBytes(ByteOrder.LITTLE_ENDIAN)); } - static class PrefixMessageWithZeroLengthArray extends Struct { + public static class PrefixMessageWithZeroLengthArray extends Struct { @Field(order = 0, type = Type.UBE16) final int mLifetime; @Field(order = 1, type = Type.ByteArray, arraysize = 0) @@ -495,7 +495,7 @@ public class StructTest { verifyPrefixByteArrayParsing(msg); } - static class HeaderMessageWithMutableField extends Struct { + public static class HeaderMessageWithMutableField extends Struct { @Field(order = 0, type = Type.U8, padding = 1) final short mFamily; @Field(order = 1, type = Type.U16) @@ -521,20 +521,20 @@ public class StructTest { () -> Struct.parse(HeaderMessageWithMutableField.class, buf)); } - static class HeaderMsgWithStaticConstant extends Struct { + public static class HeaderMsgWithStaticConstant extends Struct { private static final String TAG = "HeaderMessage"; private static final int FIELD_COUNT = 5; @Field(order = 0, type = Type.U8, padding = 1) - final short mFamily; + public final short mFamily; @Field(order = 1, type = Type.U16) - final int mLen; + public final int mLen; @Field(order = 2, type = Type.S32) - final int mIfindex; + public final int mIfindex; @Field(order = 3, type = Type.U8) - final short mIcmpType; + public final short mIcmpType; @Field(order = 4, type = Type.U8, padding = 6) - final short mIcmpCode; + public final short mIcmpCode; HeaderMsgWithStaticConstant(final short family, final int len, final int ifindex, final short type, final short code) { @@ -561,7 +561,7 @@ public class StructTest { msg.writeToBytes(ByteOrder.LITTLE_ENDIAN)); } - static class MismatchedConstructor extends Struct { + public static class MismatchedConstructor extends Struct { @Field(order = 0, type = Type.U16) final int mInt1; @Field(order = 1, type = Type.U16) final int mInt2; MismatchedConstructor(String int1, String int2) { @@ -577,9 +577,9 @@ public class StructTest { () -> Struct.parse(MismatchedConstructor.class, buf)); } - static class ClassWithTwoConstructors extends Struct { - @Field(order = 0, type = Type.U16) final int mInt1; - @Field(order = 1, type = Type.U16) final int mInt2; + public static class ClassWithTwoConstructors extends Struct { + @Field(order = 0, type = Type.U16) public final int mInt1; + @Field(order = 1, type = Type.U16) public final int mInt2; ClassWithTwoConstructors(String int1, String int2) { mInt1 = Integer.valueOf(int1); mInt2 = Integer.valueOf(int2); @@ -645,14 +645,14 @@ public class StructTest { } } - static class BigEndianDataMessage extends Struct { - @Field(order = 0, type = Type.S32) int mInt1; - @Field(order = 1, type = Type.S32) int mInt2; - @Field(order = 2, type = Type.UBE16) int mInt3; - @Field(order = 3, type = Type.U16) int mInt4; - @Field(order = 4, type = Type.U64) BigInteger mBigInteger1; - @Field(order = 5, type = Type.UBE64) BigInteger mBigInteger2; - @Field(order = 6, type = Type.S64) long mLong; + public static class BigEndianDataMessage extends Struct { + @Field(order = 0, type = Type.S32) public int mInt1; + @Field(order = 1, type = Type.S32) public int mInt2; + @Field(order = 2, type = Type.UBE16) public int mInt3; + @Field(order = 3, type = Type.U16) public int mInt4; + @Field(order = 4, type = Type.U64) public BigInteger mBigInteger1; + @Field(order = 5, type = Type.UBE64) public BigInteger mBigInteger2; + @Field(order = 6, type = Type.S64) public long mLong; } private static final String BIG_ENDIAN_DATA = "00000001" + "fffffffe" + "fffe" + "fffe" @@ -680,9 +680,9 @@ public class StructTest { return ByteBuffer.wrap(HexDump.hexStringToByteArray(hexString)); } - static class MacAddressMessage extends Struct { - @Field(order = 0, type = Type.EUI48) final MacAddress mMac1; - @Field(order = 1, type = Type.EUI48) final MacAddress mMac2; + public static class MacAddressMessage extends Struct { + public @Field(order = 0, type = Type.EUI48) final MacAddress mMac1; + public @Field(order = 1, type = Type.EUI48) final MacAddress mMac2; MacAddressMessage(final MacAddress mac1, final MacAddress mac2) { this.mMac1 = mac1; @@ -703,7 +703,7 @@ public class StructTest { msg.writeToBytes(ByteOrder.BIG_ENDIAN)); } - static class BadMacAddressType extends Struct { + public static class BadMacAddressType extends Struct { @Field(order = 0, type = Type.EUI48) byte[] mMac; } @@ -742,7 +742,7 @@ public class StructTest { assertArrayEquals(toByteBuffer(hexString).array(), msg.writeToBytes()); } - static class IpAddressMessage extends Struct { + public static class IpAddressMessage extends Struct { @Field(order = 0, type = Type.Ipv4Address) public final Inet4Address ipv4Address; @Field(order = 1, type = Type.Ipv6Address) public final Inet6Address ipv6Address; @@ -765,7 +765,7 @@ public class StructTest { msg.writeToBytes(ByteOrder.BIG_ENDIAN)); } - static class WrongIpAddressType extends Struct { + public static class WrongIpAddressType extends Struct { @Field(order = 0, type = Type.Ipv4Address) public byte[] ipv4Address; @Field(order = 1, type = Type.Ipv6Address) public byte[] ipv6Address; } @@ -777,7 +777,7 @@ public class StructTest { toByteBuffer("c0a86401" + "20010db8000300040005000600070008"))); } - static class FullTypeMessage extends Struct { + public static class FullTypeMessage extends Struct { @Field(order = 0, type = Type.U8) public final short u8; @Field(order = 1, type = Type.U16) public final int u16; @Field(order = 2, type = Type.U32) public final long u32; @@ -886,7 +886,7 @@ public class StructTest { assertTrue(msg.equals(msg1)); } - static class FullTypeMessageWithDupType extends Struct { + public static class FullTypeMessageWithDupType extends Struct { @Field(order = 0, type = Type.U8) public final short u8; @Field(order = 1, type = Type.U16) public final int u16; @Field(order = 2, type = Type.U32) public final long u32; @@ -1029,7 +1029,7 @@ public class StructTest { assertEquals(msg.hashCode(), msg1.hashCode()); } - static class InvalidByteArray extends Struct { + public static class InvalidByteArray extends Struct { @Field(order = 0, type = Type.ByteArray, arraysize = 12) public byte[] bytes; } |