Merge changes from topic "connectivity-diagnostics-system-server"
* changes: Add ConnectivityDiagnosticsManager to System Server. Make DataStallReport Parcelable. Make ConnectivityReport Parcelable.
This commit is contained in:
@@ -18,10 +18,18 @@ package android.net;
|
|||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.Nullable;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
import android.os.PersistableBundle;
|
import android.os.PersistableBundle;
|
||||||
|
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
|
import com.android.internal.util.Preconditions;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.Executor;
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -47,38 +55,47 @@ import java.util.concurrent.Executor;
|
|||||||
* </ul>
|
* </ul>
|
||||||
*/
|
*/
|
||||||
public class ConnectivityDiagnosticsManager {
|
public class ConnectivityDiagnosticsManager {
|
||||||
public static final int DETECTION_METHOD_DNS_EVENTS = 1;
|
private final Context mContext;
|
||||||
public static final int DETECTION_METHOD_TCP_METRICS = 2;
|
private final IConnectivityManager mService;
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
public ConnectivityDiagnosticsManager(Context context, IConnectivityManager service) {
|
||||||
@IntDef(
|
mContext = Preconditions.checkNotNull(context, "missing context");
|
||||||
prefix = {"DETECTION_METHOD_"},
|
mService = Preconditions.checkNotNull(service, "missing IConnectivityManager");
|
||||||
value = {DETECTION_METHOD_DNS_EVENTS, DETECTION_METHOD_TCP_METRICS})
|
}
|
||||||
public @interface DetectionMethod {}
|
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
public ConnectivityDiagnosticsManager() {}
|
@VisibleForTesting
|
||||||
|
public static boolean persistableBundleEquals(
|
||||||
|
@Nullable PersistableBundle a, @Nullable PersistableBundle b) {
|
||||||
|
if (a == b) return true;
|
||||||
|
if (a == null || b == null) return false;
|
||||||
|
if (!Objects.equals(a.keySet(), b.keySet())) return false;
|
||||||
|
for (String key : a.keySet()) {
|
||||||
|
if (!Objects.equals(a.get(key), b.get(key))) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/** Class that includes connectivity information for a specific Network at a specific time. */
|
/** Class that includes connectivity information for a specific Network at a specific time. */
|
||||||
public static class ConnectivityReport {
|
public static final class ConnectivityReport implements Parcelable {
|
||||||
/** The Network for which this ConnectivityReport applied */
|
/** The Network for which this ConnectivityReport applied */
|
||||||
@NonNull public final Network network;
|
@NonNull private final Network mNetwork;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The timestamp for the report. The timestamp is taken from {@link
|
* The timestamp for the report. The timestamp is taken from {@link
|
||||||
* System#currentTimeMillis}.
|
* System#currentTimeMillis}.
|
||||||
*/
|
*/
|
||||||
public final long reportTimestamp;
|
private final long mReportTimestamp;
|
||||||
|
|
||||||
/** LinkProperties available on the Network at the reported timestamp */
|
/** LinkProperties available on the Network at the reported timestamp */
|
||||||
@NonNull public final LinkProperties linkProperties;
|
@NonNull private final LinkProperties mLinkProperties;
|
||||||
|
|
||||||
/** NetworkCapabilities available on the Network at the reported timestamp */
|
/** NetworkCapabilities available on the Network at the reported timestamp */
|
||||||
@NonNull public final NetworkCapabilities networkCapabilities;
|
@NonNull private final NetworkCapabilities mNetworkCapabilities;
|
||||||
|
|
||||||
/** PersistableBundle that may contain additional info about the report */
|
/** PersistableBundle that may contain additional info about the report */
|
||||||
@NonNull public final PersistableBundle additionalInfo;
|
@NonNull private final PersistableBundle mAdditionalInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for ConnectivityReport.
|
* Constructor for ConnectivityReport.
|
||||||
@@ -101,30 +118,148 @@ public class ConnectivityDiagnosticsManager {
|
|||||||
@NonNull LinkProperties linkProperties,
|
@NonNull LinkProperties linkProperties,
|
||||||
@NonNull NetworkCapabilities networkCapabilities,
|
@NonNull NetworkCapabilities networkCapabilities,
|
||||||
@NonNull PersistableBundle additionalInfo) {
|
@NonNull PersistableBundle additionalInfo) {
|
||||||
this.network = network;
|
mNetwork = network;
|
||||||
this.reportTimestamp = reportTimestamp;
|
mReportTimestamp = reportTimestamp;
|
||||||
this.linkProperties = linkProperties;
|
mLinkProperties = linkProperties;
|
||||||
this.networkCapabilities = networkCapabilities;
|
mNetworkCapabilities = networkCapabilities;
|
||||||
this.additionalInfo = additionalInfo;
|
mAdditionalInfo = additionalInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the Network for this ConnectivityReport.
|
||||||
|
*
|
||||||
|
* @return The Network for which this ConnectivityReport applied
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public Network getNetwork() {
|
||||||
|
return mNetwork;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the epoch timestamp (milliseconds) for when this report was taken.
|
||||||
|
*
|
||||||
|
* @return The timestamp for the report. Taken from {@link System#currentTimeMillis}.
|
||||||
|
*/
|
||||||
|
public long getReportTimestamp() {
|
||||||
|
return mReportTimestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the LinkProperties available when this report was taken.
|
||||||
|
*
|
||||||
|
* @return LinkProperties available on the Network at the reported timestamp
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public LinkProperties getLinkProperties() {
|
||||||
|
return new LinkProperties(mLinkProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the NetworkCapabilities when this report was taken.
|
||||||
|
*
|
||||||
|
* @return NetworkCapabilities available on the Network at the reported timestamp
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public NetworkCapabilities getNetworkCapabilities() {
|
||||||
|
return new NetworkCapabilities(mNetworkCapabilities);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a PersistableBundle with additional info for this report.
|
||||||
|
*
|
||||||
|
* @return PersistableBundle that may contain additional info about the report
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public PersistableBundle getAdditionalInfo() {
|
||||||
|
return new PersistableBundle(mAdditionalInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(@Nullable Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof ConnectivityReport)) return false;
|
||||||
|
final ConnectivityReport that = (ConnectivityReport) o;
|
||||||
|
|
||||||
|
// PersistableBundle is optimized to avoid unparcelling data unless fields are
|
||||||
|
// referenced. Because of this, use {@link ConnectivityDiagnosticsManager#equals} over
|
||||||
|
// {@link PersistableBundle#kindofEquals}.
|
||||||
|
return mReportTimestamp == that.mReportTimestamp
|
||||||
|
&& mNetwork.equals(that.mNetwork)
|
||||||
|
&& mLinkProperties.equals(that.mLinkProperties)
|
||||||
|
&& mNetworkCapabilities.equals(that.mNetworkCapabilities)
|
||||||
|
&& persistableBundleEquals(mAdditionalInfo, that.mAdditionalInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(
|
||||||
|
mNetwork,
|
||||||
|
mReportTimestamp,
|
||||||
|
mLinkProperties,
|
||||||
|
mNetworkCapabilities,
|
||||||
|
mAdditionalInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||||||
|
dest.writeParcelable(mNetwork, flags);
|
||||||
|
dest.writeLong(mReportTimestamp);
|
||||||
|
dest.writeParcelable(mLinkProperties, flags);
|
||||||
|
dest.writeParcelable(mNetworkCapabilities, flags);
|
||||||
|
dest.writeParcelable(mAdditionalInfo, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Implement the Parcelable interface */
|
||||||
|
public static final @NonNull Creator<ConnectivityReport> CREATOR =
|
||||||
|
new Creator<>() {
|
||||||
|
public ConnectivityReport createFromParcel(Parcel in) {
|
||||||
|
return new ConnectivityReport(
|
||||||
|
in.readParcelable(null),
|
||||||
|
in.readLong(),
|
||||||
|
in.readParcelable(null),
|
||||||
|
in.readParcelable(null),
|
||||||
|
in.readParcelable(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConnectivityReport[] newArray(int size) {
|
||||||
|
return new ConnectivityReport[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Class that includes information for a suspected data stall on a specific Network */
|
/** Class that includes information for a suspected data stall on a specific Network */
|
||||||
public static class DataStallReport {
|
public static final class DataStallReport implements Parcelable {
|
||||||
|
public static final int DETECTION_METHOD_DNS_EVENTS = 1;
|
||||||
|
public static final int DETECTION_METHOD_TCP_METRICS = 2;
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef(
|
||||||
|
prefix = {"DETECTION_METHOD_"},
|
||||||
|
value = {DETECTION_METHOD_DNS_EVENTS, DETECTION_METHOD_TCP_METRICS})
|
||||||
|
public @interface DetectionMethod {}
|
||||||
|
|
||||||
/** The Network for which this DataStallReport applied */
|
/** The Network for which this DataStallReport applied */
|
||||||
@NonNull public final Network network;
|
@NonNull private final Network mNetwork;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The timestamp for the report. The timestamp is taken from {@link
|
* The timestamp for the report. The timestamp is taken from {@link
|
||||||
* System#currentTimeMillis}.
|
* System#currentTimeMillis}.
|
||||||
*/
|
*/
|
||||||
public final long reportTimestamp;
|
private long mReportTimestamp;
|
||||||
|
|
||||||
/** The detection method used to identify the suspected data stall */
|
/** The detection method used to identify the suspected data stall */
|
||||||
@DetectionMethod public final int detectionMethod;
|
@DetectionMethod private final int mDetectionMethod;
|
||||||
|
|
||||||
/** PersistableBundle that may contain additional information on the suspected data stall */
|
/** PersistableBundle that may contain additional information on the suspected data stall */
|
||||||
@NonNull public final PersistableBundle stallDetails;
|
@NonNull private final PersistableBundle mStallDetails;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor for DataStallReport.
|
* Constructor for DataStallReport.
|
||||||
@@ -143,11 +278,101 @@ public class ConnectivityDiagnosticsManager {
|
|||||||
long reportTimestamp,
|
long reportTimestamp,
|
||||||
@DetectionMethod int detectionMethod,
|
@DetectionMethod int detectionMethod,
|
||||||
@NonNull PersistableBundle stallDetails) {
|
@NonNull PersistableBundle stallDetails) {
|
||||||
this.network = network;
|
mNetwork = network;
|
||||||
this.reportTimestamp = reportTimestamp;
|
mReportTimestamp = reportTimestamp;
|
||||||
this.detectionMethod = detectionMethod;
|
mDetectionMethod = detectionMethod;
|
||||||
this.stallDetails = stallDetails;
|
mStallDetails = stallDetails;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the Network for this DataStallReport.
|
||||||
|
*
|
||||||
|
* @return The Network for which this DataStallReport applied
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public Network getNetwork() {
|
||||||
|
return mNetwork;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the epoch timestamp (milliseconds) for when this report was taken.
|
||||||
|
*
|
||||||
|
* @return The timestamp for the report. Taken from {@link System#currentTimeMillis}.
|
||||||
|
*/
|
||||||
|
public long getReportTimestamp() {
|
||||||
|
return mReportTimestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the detection method used to identify this suspected data stall.
|
||||||
|
*
|
||||||
|
* @return The detection method used to identify the suspected data stall
|
||||||
|
*/
|
||||||
|
public int getDetectionMethod() {
|
||||||
|
return mDetectionMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a PersistableBundle with additional info for this report.
|
||||||
|
*
|
||||||
|
* @return PersistableBundle that may contain additional information on the suspected data
|
||||||
|
* stall
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public PersistableBundle getStallDetails() {
|
||||||
|
return new PersistableBundle(mStallDetails);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(@Nullable Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (!(o instanceof DataStallReport)) return false;
|
||||||
|
final DataStallReport that = (DataStallReport) o;
|
||||||
|
|
||||||
|
// PersistableBundle is optimized to avoid unparcelling data unless fields are
|
||||||
|
// referenced. Because of this, use {@link ConnectivityDiagnosticsManager#equals} over
|
||||||
|
// {@link PersistableBundle#kindofEquals}.
|
||||||
|
return mReportTimestamp == that.mReportTimestamp
|
||||||
|
&& mDetectionMethod == that.mDetectionMethod
|
||||||
|
&& mNetwork.equals(that.mNetwork)
|
||||||
|
&& persistableBundleEquals(mStallDetails, that.mStallDetails);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(mNetwork, mReportTimestamp, mDetectionMethod, mStallDetails);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** {@inheritDoc} */
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||||||
|
dest.writeParcelable(mNetwork, flags);
|
||||||
|
dest.writeLong(mReportTimestamp);
|
||||||
|
dest.writeInt(mDetectionMethod);
|
||||||
|
dest.writeParcelable(mStallDetails, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Implement the Parcelable interface */
|
||||||
|
public static final @NonNull Creator<DataStallReport> CREATOR =
|
||||||
|
new Creator<DataStallReport>() {
|
||||||
|
public DataStallReport createFromParcel(Parcel in) {
|
||||||
|
return new DataStallReport(
|
||||||
|
in.readParcelable(null),
|
||||||
|
in.readLong(),
|
||||||
|
in.readInt(),
|
||||||
|
in.readParcelable(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataStallReport[] newArray(int size) {
|
||||||
|
return new DataStallReport[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,196 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2020 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package android.net;
|
||||||
|
|
||||||
|
import static android.net.ConnectivityDiagnosticsManager.ConnectivityReport;
|
||||||
|
import static android.net.ConnectivityDiagnosticsManager.DataStallReport;
|
||||||
|
|
||||||
|
import static com.android.testutils.ParcelUtilsKt.assertParcelSane;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertNotEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import android.os.PersistableBundle;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
|
@RunWith(JUnit4.class)
|
||||||
|
public class ConnectivityDiagnosticsManagerTest {
|
||||||
|
private static final int NET_ID = 1;
|
||||||
|
private static final int DETECTION_METHOD = 2;
|
||||||
|
private static final long TIMESTAMP = 10L;
|
||||||
|
private static final String INTERFACE_NAME = "interface";
|
||||||
|
private static final String BUNDLE_KEY = "key";
|
||||||
|
private static final String BUNDLE_VALUE = "value";
|
||||||
|
|
||||||
|
private ConnectivityReport createSampleConnectivityReport() {
|
||||||
|
final LinkProperties linkProperties = new LinkProperties();
|
||||||
|
linkProperties.setInterfaceName(INTERFACE_NAME);
|
||||||
|
|
||||||
|
final NetworkCapabilities networkCapabilities = new NetworkCapabilities();
|
||||||
|
networkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
|
||||||
|
|
||||||
|
final PersistableBundle bundle = new PersistableBundle();
|
||||||
|
bundle.putString(BUNDLE_KEY, BUNDLE_VALUE);
|
||||||
|
|
||||||
|
return new ConnectivityReport(
|
||||||
|
new Network(NET_ID), TIMESTAMP, linkProperties, networkCapabilities, bundle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ConnectivityReport createDefaultConnectivityReport() {
|
||||||
|
return new ConnectivityReport(
|
||||||
|
new Network(0),
|
||||||
|
0L,
|
||||||
|
new LinkProperties(),
|
||||||
|
new NetworkCapabilities(),
|
||||||
|
PersistableBundle.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPersistableBundleEquals() {
|
||||||
|
assertFalse(
|
||||||
|
ConnectivityDiagnosticsManager.persistableBundleEquals(
|
||||||
|
null, PersistableBundle.EMPTY));
|
||||||
|
assertFalse(
|
||||||
|
ConnectivityDiagnosticsManager.persistableBundleEquals(
|
||||||
|
PersistableBundle.EMPTY, null));
|
||||||
|
assertTrue(
|
||||||
|
ConnectivityDiagnosticsManager.persistableBundleEquals(
|
||||||
|
PersistableBundle.EMPTY, PersistableBundle.EMPTY));
|
||||||
|
|
||||||
|
final PersistableBundle a = new PersistableBundle();
|
||||||
|
a.putString(BUNDLE_KEY, BUNDLE_VALUE);
|
||||||
|
|
||||||
|
final PersistableBundle b = new PersistableBundle();
|
||||||
|
b.putString(BUNDLE_KEY, BUNDLE_VALUE);
|
||||||
|
|
||||||
|
final PersistableBundle c = new PersistableBundle();
|
||||||
|
c.putString(BUNDLE_KEY, null);
|
||||||
|
|
||||||
|
assertFalse(
|
||||||
|
ConnectivityDiagnosticsManager.persistableBundleEquals(PersistableBundle.EMPTY, a));
|
||||||
|
assertFalse(
|
||||||
|
ConnectivityDiagnosticsManager.persistableBundleEquals(a, PersistableBundle.EMPTY));
|
||||||
|
|
||||||
|
assertTrue(ConnectivityDiagnosticsManager.persistableBundleEquals(a, b));
|
||||||
|
assertTrue(ConnectivityDiagnosticsManager.persistableBundleEquals(b, a));
|
||||||
|
|
||||||
|
assertFalse(ConnectivityDiagnosticsManager.persistableBundleEquals(a, c));
|
||||||
|
assertFalse(ConnectivityDiagnosticsManager.persistableBundleEquals(c, a));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectivityReportEquals() {
|
||||||
|
assertEquals(createSampleConnectivityReport(), createSampleConnectivityReport());
|
||||||
|
assertEquals(createDefaultConnectivityReport(), createDefaultConnectivityReport());
|
||||||
|
|
||||||
|
final LinkProperties linkProperties = new LinkProperties();
|
||||||
|
linkProperties.setInterfaceName(INTERFACE_NAME);
|
||||||
|
|
||||||
|
final NetworkCapabilities networkCapabilities = new NetworkCapabilities();
|
||||||
|
networkCapabilities.addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
|
||||||
|
|
||||||
|
final PersistableBundle bundle = new PersistableBundle();
|
||||||
|
bundle.putString(BUNDLE_KEY, BUNDLE_VALUE);
|
||||||
|
|
||||||
|
assertNotEquals(
|
||||||
|
createDefaultConnectivityReport(),
|
||||||
|
new ConnectivityReport(
|
||||||
|
new Network(NET_ID),
|
||||||
|
0L,
|
||||||
|
new LinkProperties(),
|
||||||
|
new NetworkCapabilities(),
|
||||||
|
PersistableBundle.EMPTY));
|
||||||
|
assertNotEquals(
|
||||||
|
createDefaultConnectivityReport(),
|
||||||
|
new ConnectivityReport(
|
||||||
|
new Network(0),
|
||||||
|
TIMESTAMP,
|
||||||
|
new LinkProperties(),
|
||||||
|
new NetworkCapabilities(),
|
||||||
|
PersistableBundle.EMPTY));
|
||||||
|
assertNotEquals(
|
||||||
|
createDefaultConnectivityReport(),
|
||||||
|
new ConnectivityReport(
|
||||||
|
new Network(0),
|
||||||
|
0L,
|
||||||
|
linkProperties,
|
||||||
|
new NetworkCapabilities(),
|
||||||
|
PersistableBundle.EMPTY));
|
||||||
|
assertNotEquals(
|
||||||
|
createDefaultConnectivityReport(),
|
||||||
|
new ConnectivityReport(
|
||||||
|
new Network(0),
|
||||||
|
TIMESTAMP,
|
||||||
|
new LinkProperties(),
|
||||||
|
networkCapabilities,
|
||||||
|
PersistableBundle.EMPTY));
|
||||||
|
assertNotEquals(
|
||||||
|
createDefaultConnectivityReport(),
|
||||||
|
new ConnectivityReport(
|
||||||
|
new Network(0),
|
||||||
|
TIMESTAMP,
|
||||||
|
new LinkProperties(),
|
||||||
|
new NetworkCapabilities(),
|
||||||
|
bundle));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectivityReportParcelUnparcel() {
|
||||||
|
assertParcelSane(createSampleConnectivityReport(), 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DataStallReport createSampleDataStallReport() {
|
||||||
|
final PersistableBundle bundle = new PersistableBundle();
|
||||||
|
bundle.putString(BUNDLE_KEY, BUNDLE_VALUE);
|
||||||
|
return new DataStallReport(new Network(NET_ID), TIMESTAMP, DETECTION_METHOD, bundle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DataStallReport createDefaultDataStallReport() {
|
||||||
|
return new DataStallReport(new Network(0), 0L, 0, PersistableBundle.EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDataStallReportEquals() {
|
||||||
|
assertEquals(createSampleDataStallReport(), createSampleDataStallReport());
|
||||||
|
assertEquals(createDefaultDataStallReport(), createDefaultDataStallReport());
|
||||||
|
|
||||||
|
final PersistableBundle bundle = new PersistableBundle();
|
||||||
|
bundle.putString(BUNDLE_KEY, BUNDLE_VALUE);
|
||||||
|
|
||||||
|
assertNotEquals(
|
||||||
|
createDefaultDataStallReport(),
|
||||||
|
new DataStallReport(new Network(NET_ID), 0L, 0, PersistableBundle.EMPTY));
|
||||||
|
assertNotEquals(
|
||||||
|
createDefaultDataStallReport(),
|
||||||
|
new DataStallReport(new Network(0), TIMESTAMP, 0, PersistableBundle.EMPTY));
|
||||||
|
assertNotEquals(
|
||||||
|
createDefaultDataStallReport(),
|
||||||
|
new DataStallReport(new Network(0), 0L, DETECTION_METHOD, PersistableBundle.EMPTY));
|
||||||
|
assertNotEquals(
|
||||||
|
createDefaultDataStallReport(), new DataStallReport(new Network(0), 0L, 0, bundle));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDataStallReportParcelUnparcel() {
|
||||||
|
assertParcelSane(createSampleDataStallReport(), 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user