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
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user