From 014ae496d15efbc1553eff48a22ce7d69d9f1e2c Mon Sep 17 00:00:00 2001 From: Chuwei He Date: Wed, 3 Sep 2025 17:01:03 +0900 Subject: [PATCH] Add util method to convert StaticIpConfiguration to proto This patch adds util methods to convert StaticIpConfiguration to its proto equivalent, and also adds unit tests to test the conversion. Test: atest ConnectivityCoverageTests Bug: 397536853 Flag: EXEMPT mainline Change-Id: I1bd5683202bc0e144e195b4915721e7f414c95cf --- .../android/server/net/ProtoConfigUtils.java | 30 ++++++++++ .../server/net/ProtoConfigUtilsTest.java | 55 +++++++++++++++++++ 2 files changed, 85 insertions(+) diff --git a/service-t/src/com/android/server/net/ProtoConfigUtils.java b/service-t/src/com/android/server/net/ProtoConfigUtils.java index 7ed124d231..3b9d1185fa 100644 --- a/service-t/src/com/android/server/net/ProtoConfigUtils.java +++ b/service-t/src/com/android/server/net/ProtoConfigUtils.java @@ -23,15 +23,20 @@ import android.net.EthernetPortSelector; import android.net.InetAddresses; import android.net.LinkAddress; import android.net.MacAddress; +import android.net.StaticIpConfiguration; import android.text.TextUtils; import android.util.Log; import com.android.server.network.configstore.proto.NetworkConfigStoreProto.EthernetPortSelectorProto; import com.android.server.network.configstore.proto.NetworkConfigStoreProto.LinkAddressProto; import com.android.server.network.configstore.proto.NetworkConfigStoreProto.MeteredOverrideProto; +import com.android.server.network.configstore.proto.NetworkConfigStoreProto.StaticIpv4ConfigurationProto; + +import java.net.InetAddress; /** * Static util methods for {@link ProtoConfig}. + * Note that conversion methods are responsible of doing null check on arguments. */ public class ProtoConfigUtils { private static final String TAG = "ProtoConfigUtils"; @@ -143,4 +148,29 @@ public class ProtoConfigUtils { throw new IllegalArgumentException("No MAC address or interface is found."); } } + + /** + * Converts an {@link StaticIpConfiguration} object to a corresponding. + * {@link StaticIpv4ConfigurationProto} object. + */ + public static StaticIpv4ConfigurationProto convertStaticIpConfigurationToProto( + StaticIpConfiguration config) { + requireNonNull(config, "Static IP configuration cannot be null."); + final StaticIpv4ConfigurationProto.Builder builder = + StaticIpv4ConfigurationProto.newBuilder(); + builder.setAddress(convertLinkAddressToProto(config.getIpAddress())); + if (config.getGateway() != null) { + builder.setGateway(config.getGateway().getHostAddress()); + } + for (InetAddress inetAddr : config.getDnsServers()) { + builder.addDnsServers(inetAddr.getHostAddress()); + } + if (config.getDomains() != null) { + for (String domain : config.getDomains().split(",")) { + if (domain.isEmpty()) continue; + builder.addSearchDomains(domain); + } + } + return builder.build(); + } } diff --git a/tests/unit/java/com/android/server/net/ProtoConfigUtilsTest.java b/tests/unit/java/com/android/server/net/ProtoConfigUtilsTest.java index 1f7b74115a..6454cd14b4 100644 --- a/tests/unit/java/com/android/server/net/ProtoConfigUtilsTest.java +++ b/tests/unit/java/com/android/server/net/ProtoConfigUtilsTest.java @@ -24,19 +24,28 @@ import static org.junit.Assert.assertTrue; import android.net.EthernetConfiguration; import android.net.EthernetPortSelector; +import android.net.InetAddresses; import android.net.LinkAddress; import android.net.MacAddress; +import android.net.StaticIpConfiguration; import android.os.Build; import com.android.server.network.configstore.proto.NetworkConfigStoreProto.EthernetPortSelectorProto; import com.android.server.network.configstore.proto.NetworkConfigStoreProto.LinkAddressProto; import com.android.server.network.configstore.proto.NetworkConfigStoreProto.MeteredOverrideProto; +import com.android.server.network.configstore.proto.NetworkConfigStoreProto.StaticIpv4ConfigurationProto; import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRunner; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + /** * Unit tests for {@link ProtoConfigUtils} */ @@ -48,6 +57,15 @@ public class ProtoConfigUtilsTest { private static final int PREFIX_LENGTH = 24; private static final String IFACE_NAME = "eth0"; private static final MacAddress MAC_ADDR = MacAddress.fromString("aa:bb:cc:dd:ee:11"); + private static final String GATEWAY_ADDRESS = "192.168.1.1"; + private static final String DOMAIN1 = "aexample.com"; + private static final String DOMAIN2 = "test.net"; + private static final String DNS_IP_ADDR_1 = "1.2.3.4"; + private static final String DNS_IP_ADDR_2 = "5.6.7.8"; + + private static final ArrayList DNS_SERVERS = new ArrayList<>(List.of( + InetAddresses.parseNumericAddress(DNS_IP_ADDR_1), + InetAddresses.parseNumericAddress(DNS_IP_ADDR_2))); @Test public void testconvertMeteredOverrideToProto() { @@ -150,4 +168,41 @@ public class ProtoConfigUtilsTest { assertThrows(IllegalArgumentException.class, () -> ProtoConfigUtils.convertPortSelectorFromProto(emptyProto)); } + + @Test + public void testConvertStaticIpConfigurationToProto() { + final StaticIpConfiguration staticIpConfig = new StaticIpConfiguration.Builder() + .setIpAddress(new LinkAddress(LINK_ADDRESS_STRING)) + .setGateway(InetAddresses.parseNumericAddress(GATEWAY_ADDRESS)) + .setDnsServers(DNS_SERVERS) + .setDomains(DOMAIN1 + "," + DOMAIN2) + .build(); + + final StaticIpv4ConfigurationProto proto = + ProtoConfigUtils.convertStaticIpConfigurationToProto(staticIpConfig); + + assertNotNull(proto); + assertTrue(proto.hasAddress()); + Assert.assertEquals(IP_ADDRESS_STRING, proto.getAddress().getAddress()); + Assert.assertEquals(PREFIX_LENGTH, proto.getAddress().getPrefixLength()); + + assertTrue(proto.hasGateway()); + Assert.assertEquals(GATEWAY_ADDRESS, proto.getGateway()); + + Assert.assertEquals(2, proto.getDnsServersCount()); + Assert.assertEquals(Arrays.asList(DNS_IP_ADDR_1, DNS_IP_ADDR_2), + proto.getDnsServersList()); + + Assert.assertEquals(2, proto.getSearchDomainsCount()); + Assert.assertEquals(Arrays.asList(DOMAIN1, DOMAIN2), + proto.getSearchDomainsList()); + } + + @Test + public void testConvertStaticIpConfigurationToProto_nullInput() { + assertThrows("Static IP configuration cannot be null.", + NullPointerException.class, () -> { + ProtoConfigUtils.convertStaticIpConfigurationToProto(null); + }); + } }