From a9454a1b48746a4536d454f1cfecddf80f0452f3 Mon Sep 17 00:00:00 2001 From: Chuwei He Date: Wed, 3 Sep 2025 13:44:32 +0900 Subject: [PATCH] Add conversion util methods for LinkAddress This patch adds util methods to convert LinkAddress to and from its proto equivalent, and also adds unit tests to test the conversion. Test: atest ConnectivityCoverageTests Bug: 397536853 Flag: EXEMPT mainline Change-Id: I66243dc94f9b2619551f957c698b3bc0c285aced --- .../android/server/net/ProtoConfigUtils.java | 27 +++++++++++++++++++ .../server/net/ProtoConfigUtilsTest.java | 27 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/service-t/src/com/android/server/net/ProtoConfigUtils.java b/service-t/src/com/android/server/net/ProtoConfigUtils.java index 5428bd3da8..6988516714 100644 --- a/service-t/src/com/android/server/net/ProtoConfigUtils.java +++ b/service-t/src/com/android/server/net/ProtoConfigUtils.java @@ -19,8 +19,11 @@ import static java.util.Objects.requireNonNull; import android.net.EthernetConfiguration; import android.net.EthernetConfiguration.MeteredOverride; +import android.net.InetAddresses; +import android.net.LinkAddress; import android.util.Log; +import com.android.server.network.configstore.proto.NetworkConfigStoreProto.LinkAddressProto; import com.android.server.network.configstore.proto.NetworkConfigStoreProto.MeteredOverrideProto; /** @@ -69,4 +72,28 @@ public class ProtoConfigUtils { } }; } + + /** + * Converts an {@link LinkAddress} object to a corresponding {@link LinkAddressProto} object. + */ + public static LinkAddressProto convertLinkAddressToProto(LinkAddress linkAddress) { + requireNonNull(linkAddress, "LinkAddress must not be null"); + return LinkAddressProto.newBuilder() + .setAddress(linkAddress.getAddress().getHostAddress()) + .setPrefixLength(linkAddress.getPrefixLength()) + .build(); + } + + /** + * Converts an {@link LinkAddressProto} object to a corresponding value of {@link LinkAddress} + * type. + * + * @throws IllegalArgumentException if the address string in the proto is not a valid IP + * address. + */ + public static LinkAddress convertLinkAddressFromProto(LinkAddressProto linkAddress) { + requireNonNull(linkAddress, "LinkAddressProto must not be null"); + return new LinkAddress(InetAddresses.parseNumericAddress(linkAddress.getAddress()), + linkAddress.getPrefixLength()); + } } diff --git a/tests/unit/java/com/android/server/net/ProtoConfigUtilsTest.java b/tests/unit/java/com/android/server/net/ProtoConfigUtilsTest.java index b555c56df9..986b0a0c51 100644 --- a/tests/unit/java/com/android/server/net/ProtoConfigUtilsTest.java +++ b/tests/unit/java/com/android/server/net/ProtoConfigUtilsTest.java @@ -19,8 +19,10 @@ package com.android.server.net; import static org.junit.Assert.assertEquals; import android.net.EthernetConfiguration; +import android.net.LinkAddress; import android.os.Build; +import com.android.server.network.configstore.proto.NetworkConfigStoreProto.LinkAddressProto; import com.android.server.network.configstore.proto.NetworkConfigStoreProto.MeteredOverrideProto; import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRunner; @@ -34,6 +36,10 @@ import org.junit.runner.RunWith; @RunWith(DevSdkIgnoreRunner.class) @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.S_V2) public class ProtoConfigUtilsTest { + private static final String LINK_ADDRESS_STRING = "192.168.1.10/24"; + private static final String IP_ADDRESS_STRING = "192.168.1.10"; + private static final int PREFIX_LENGTH = 24; + @Test public void testconvertMeteredOverrideToProto() { assertEquals(MeteredOverrideProto.METERED_OVERRIDE_FORCE_METERED, @@ -59,4 +65,25 @@ public class ProtoConfigUtilsTest { ProtoConfigUtils.convertMeteredOverrideFromProto( MeteredOverrideProto.METERED_OVERRIDE_NONE)); } + + @Test + public void testConvertLinkAddressToProto() { + LinkAddress linkAddr = new LinkAddress(LINK_ADDRESS_STRING); + LinkAddressProto proto = ProtoConfigUtils.convertLinkAddressToProto(linkAddr); + + assertEquals(IP_ADDRESS_STRING, proto.getAddress()); + assertEquals(PREFIX_LENGTH, proto.getPrefixLength()); + } + + @Test + public void testConvertLinkAddressFromProto() { + LinkAddressProto proto = LinkAddressProto.newBuilder() + .setAddress(IP_ADDRESS_STRING) + .setPrefixLength(PREFIX_LENGTH) + .build(); + + LinkAddress actual = ProtoConfigUtils.convertLinkAddressFromProto(proto); + LinkAddress target = new LinkAddress(LINK_ADDRESS_STRING); + assertEquals(actual, target); + } }