From 45f6ef836deb7c9e6d2f49dff9fe2b0c722e4f4f Mon Sep 17 00:00:00 2001 From: Hugo Benichi Date: Wed, 15 Mar 2017 23:05:01 +0900 Subject: [PATCH] Connectivity metrics: serialize networkId, transports, ifname This patch adds translation from ConnectivityMetricsEvent to IpConnectivityEvent of recently added fields: - top-level network id - top-level ifname - transports Also adds inference of link layer from transports or ifname. At the moment these new fields are not populated in ConnectivityMetricsEvent. Follow-up patches will fill this gap for the events of the android.net.metrics package. Test: new unit tests, $ runtest frameworks-net passes Bug: 34901696 Change-Id: I563a6a3183470bdfaabb7c781a1beaf6b1058bf0 --- .../java/android/net/NetworkCapabilities.java | 6 +- .../IpConnectivityEventBuilderTest.java | 135 ++++++++++++++++++ 2 files changed, 139 insertions(+), 2 deletions(-) diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index 4dd8ce9c8b..0765c86776 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -423,8 +423,10 @@ public final class NetworkCapabilities implements Parcelable { */ public static final int TRANSPORT_WIFI_AWARE = 5; - private static final int MIN_TRANSPORT = TRANSPORT_CELLULAR; - private static final int MAX_TRANSPORT = TRANSPORT_WIFI_AWARE; + /** @hide */ + public static final int MIN_TRANSPORT = TRANSPORT_CELLULAR; + /** @hide */ + public static final int MAX_TRANSPORT = TRANSPORT_WIFI_AWARE; /** * Adds the given transport type to this {@code NetworkCapability} instance. diff --git a/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java b/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java index 48861bde77..7f53495da2 100644 --- a/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java +++ b/tests/net/java/com/android/server/connectivity/IpConnectivityEventBuilderTest.java @@ -26,6 +26,11 @@ import static com.android.server.connectivity.MetricsTestUtil.anIntArray; import static com.android.server.connectivity.MetricsTestUtil.b; import static com.android.server.connectivity.MetricsTestUtil.describeIpEvent; import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityLog; +import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.BLUETOOTH; +import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.CELLULAR; +import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.ETHERNET; +import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.MULTIPLE; +import static com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.WIFI; import android.net.ConnectivityMetricsEvent; import android.net.metrics.ApfProgramEvent; @@ -46,6 +51,136 @@ import junit.framework.TestCase; // TODO: instead of comparing textpb to textpb, parse textpb and compare proto to proto. public class IpConnectivityEventBuilderTest extends TestCase { + @SmallTest + public void testLinkLayerInferrence() { + ConnectivityMetricsEvent ev = describeIpEvent( + aType(IpReachabilityEvent.class), + aString("wlan0"), + anInt(IpReachabilityEvent.NUD_FAILED)); + + String want = joinLines( + "dropped_events: 0", + "events <", + " if_name: \"\"", + " link_layer: 0", + " network_id: 0", + " time_ms: 1", + " transports: 0", + " ip_reachability_event <", + " event_type: 512", + " if_name: \"wlan0\"", + " >", + ">", + "version: 2"); + verifySerialization(want, ev); + + ev.netId = 123; + ev.transports = 3; // transports have priority for inferrence of link layer + ev.ifname = "wlan0"; + want = joinLines( + "dropped_events: 0", + "events <", + " if_name: \"\"", + String.format(" link_layer: %d", MULTIPLE), + " network_id: 123", + " time_ms: 1", + " transports: 3", + " ip_reachability_event <", + " event_type: 512", + " if_name: \"wlan0\"", + " >", + ">", + "version: 2"); + verifySerialization(want, ev); + + ev.transports = 1; + ev.ifname = null; + want = joinLines( + "dropped_events: 0", + "events <", + " if_name: \"\"", + String.format(" link_layer: %d", CELLULAR), + " network_id: 123", + " time_ms: 1", + " transports: 1", + " ip_reachability_event <", + " event_type: 512", + " if_name: \"wlan0\"", + " >", + ">", + "version: 2"); + verifySerialization(want, ev); + + ev.transports = 0; + ev.ifname = "not_inferred"; + want = joinLines( + "dropped_events: 0", + "events <", + " if_name: \"not_inferred\"", + " link_layer: 0", + " network_id: 123", + " time_ms: 1", + " transports: 0", + " ip_reachability_event <", + " event_type: 512", + " if_name: \"wlan0\"", + " >", + ">", + "version: 2"); + verifySerialization(want, ev); + + ev.ifname = "bt-pan"; + want = joinLines( + "dropped_events: 0", + "events <", + " if_name: \"\"", + String.format(" link_layer: %d", BLUETOOTH), + " network_id: 123", + " time_ms: 1", + " transports: 0", + " ip_reachability_event <", + " event_type: 512", + " if_name: \"wlan0\"", + " >", + ">", + "version: 2"); + verifySerialization(want, ev); + + ev.ifname = "rmnet_ipa0"; + want = joinLines( + "dropped_events: 0", + "events <", + " if_name: \"\"", + String.format(" link_layer: %d", CELLULAR), + " network_id: 123", + " time_ms: 1", + " transports: 0", + " ip_reachability_event <", + " event_type: 512", + " if_name: \"wlan0\"", + " >", + ">", + "version: 2"); + verifySerialization(want, ev); + + ev.ifname = "wlan0"; + want = joinLines( + "dropped_events: 0", + "events <", + " if_name: \"\"", + String.format(" link_layer: %d", WIFI), + " network_id: 123", + " time_ms: 1", + " transports: 0", + " ip_reachability_event <", + " event_type: 512", + " if_name: \"wlan0\"", + " >", + ">", + "version: 2"); + verifySerialization(want, ev); + } + @SmallTest public void testDefaultNetworkEventSerialization() { ConnectivityMetricsEvent ev = describeIpEvent(