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
This commit is contained in:
Chuwei He 2025-09-03 17:01:03 +09:00
commit 014ae496d1
2 changed files with 85 additions and 0 deletions

View file

@ -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();
}
}

View file

@ -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<InetAddress> 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);
});
}
}