Add test for multiple prefixes
Bug: 260934173
Test: TH
Change-Id: I68388ecc28b371f739c092f1056e0da1c0313289
diff --git a/src/android/net/dhcp6/Dhcp6Packet.java b/src/android/net/dhcp6/Dhcp6Packet.java
index 594863c..9eb2a74 100644
--- a/src/android/net/dhcp6/Dhcp6Packet.java
+++ b/src/android/net/dhcp6/Dhcp6Packet.java
@@ -22,8 +22,8 @@
import android.util.Log;
import androidx.annotation.NonNull;
-import androidx.annotation.VisibleForTesting;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.HexDump;
import com.android.net.module.util.Struct;
import com.android.net.module.util.structs.IaPdOption;
@@ -380,8 +380,7 @@
* | |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
- @VisibleForTesting
- static Dhcp6Packet decode(@NonNull final ByteBuffer packet) throws ParseException {
+ private static Dhcp6Packet decode(@NonNull final ByteBuffer packet) throws ParseException {
int elapsedTime = 0;
byte[] iapd = null;
byte[] serverDuid = null;
diff --git a/tests/unit/src/android/net/dhcp6/Dhcp6PacketTest.kt b/tests/unit/src/android/net/dhcp6/Dhcp6PacketTest.kt
index de97ed4..00e480b 100644
--- a/tests/unit/src/android/net/dhcp6/Dhcp6PacketTest.kt
+++ b/tests/unit/src/android/net/dhcp6/Dhcp6PacketTest.kt
@@ -20,7 +20,7 @@
import androidx.test.runner.AndroidJUnit4
import com.android.net.module.util.HexDump
import com.android.testutils.assertThrows
-import java.nio.ByteBuffer
+import kotlin.test.assertEquals
import kotlin.test.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
@@ -42,7 +42,7 @@
// IA prefix option(option_len=25)
"001A001900000000000000004000000000000000000000000000000000"
val bytes = HexDump.hexStringToByteArray(solicitHex)
- val packet = Dhcp6Packet.decode(ByteBuffer.wrap(bytes))
+ val packet = Dhcp6Packet.decode(bytes, bytes.size)
assertTrue(packet is Dhcp6SolicitPacket)
}
@@ -61,7 +61,7 @@
"001A001900000000000000004000000000000000000000000000000000"
val bytes = HexDump.hexStringToByteArray(solicitHex)
assertThrows(Dhcp6Packet.ParseException::class.java) {
- Dhcp6Packet.decode(ByteBuffer.wrap(bytes))
+ Dhcp6Packet.decode(bytes, bytes.size)
}
}
@@ -80,7 +80,7 @@
"001A0019000000000000000040000000000000000000000000000000"
val bytes = HexDump.hexStringToByteArray(solicitHex)
assertThrows(Dhcp6Packet.ParseException::class.java) {
- Dhcp6Packet.decode(ByteBuffer.wrap(bytes))
+ Dhcp6Packet.decode(bytes, bytes.size)
}
}
@@ -99,7 +99,7 @@
"001A001900000000000000004000000000000000000000000000000000"
val bytes = HexDump.hexStringToByteArray(solicitHex)
assertThrows(Dhcp6Packet.ParseException::class.java) {
- Dhcp6Packet.decode(ByteBuffer.wrap(bytes))
+ Dhcp6Packet.decode(bytes, bytes.size)
}
}
@@ -119,7 +119,7 @@
// IA prefix option(option_len=25, prefix="fdfd:9ed6:7950:2::/64")
"001A00190000019F0000A8C040FDFD9ED6795000010000000000000000"
val bytes = HexDump.hexStringToByteArray(advertiseHex)
- val packet = Dhcp6Packet.decode(ByteBuffer.wrap(bytes))
+ val packet = Dhcp6Packet.decode(bytes, bytes.size)
assertTrue(packet is Dhcp6AdvertisePacket)
}
@@ -142,7 +142,37 @@
"001A00190000019F0000A8C040FDFD9ED6795000010000000000000000"
val bytes = HexDump.hexStringToByteArray(advertiseHex)
// The unsupported option will be skipped normally and won't throw ParseException.
- val packet = Dhcp6Packet.decode(ByteBuffer.wrap(bytes))
+ val packet = Dhcp6Packet.decode(bytes, bytes.size)
assertTrue(packet is Dhcp6AdvertisePacket)
}
+
+ @Test
+ fun testDecodeDhcp6ReplyPacket() {
+ val replyHex =
+ // Reply, Transaction ID
+ "07000A47" +
+ // server identifier option(option_len=10)
+ "0002000A0003000186C9B26AED4D" +
+ // client identifier option(option_len=12)
+ "0001000C0003001B02FBBAFFFEB7BC71" +
+ // SOL_MAX_RT (don't support this option yet)
+ "005200040000003c" +
+ // Rapid Commit
+ "000e0000" +
+ // DNS recursive server (don't support this opton yet)
+ "00170010fdfd9ed6795000000000000000000001" +
+ // IA_PD option(option_len=70, including IA prefix option)
+ "0019004629cc56c7000000d300000152" +
+ // IA prefix option(option_len=25, prefix="2401:fa00:49c:412::/64", preferred=400,
+ // valid=1623)
+ "001a00190000019000000657402401fa00049c04120000000000000000" +
+ // IA prefix option(option_len=25, prefix="fdfd:9ed6:7950:2::/64", preferred=423,
+ // valid=43200)
+ "001a0019000001a70000a8c040fdfd9ed6795000020000000000000000"
+ val bytes = HexDump.hexStringToByteArray(replyHex)
+ val packet = Dhcp6Packet.decode(bytes, bytes.size)
+ assertTrue(packet is Dhcp6ReplyPacket)
+ assertEquals(400, packet.prefixDelegation.minimalPreferredLifetime)
+ assertEquals(1623, packet.prefixDelegation.minimalValidLifetime)
+ }
}