Merge "[AWARE] Add builder pattern for Wi-Fi Aware NetworkSpecifier"
This commit is contained in:
@@ -29677,8 +29677,8 @@ package android.net.wifi.aware {
|
||||
|
||||
public class DiscoverySession implements java.lang.AutoCloseable {
|
||||
method public void close();
|
||||
method public android.net.NetworkSpecifier createNetworkSpecifierOpen(android.net.wifi.aware.PeerHandle);
|
||||
method public android.net.NetworkSpecifier createNetworkSpecifierPassphrase(android.net.wifi.aware.PeerHandle, java.lang.String);
|
||||
method public deprecated android.net.NetworkSpecifier createNetworkSpecifierOpen(android.net.wifi.aware.PeerHandle);
|
||||
method public deprecated android.net.NetworkSpecifier createNetworkSpecifierPassphrase(android.net.wifi.aware.PeerHandle, java.lang.String);
|
||||
method public void sendMessage(android.net.wifi.aware.PeerHandle, int, byte[]);
|
||||
}
|
||||
|
||||
@@ -29763,6 +29763,14 @@ package android.net.wifi.aware {
|
||||
field public static final int WIFI_AWARE_DATA_PATH_ROLE_RESPONDER = 1; // 0x1
|
||||
}
|
||||
|
||||
public static class WifiAwareManager.NetworkSpecifierBuilder {
|
||||
ctor public WifiAwareManager.NetworkSpecifierBuilder();
|
||||
method public android.net.NetworkSpecifier build();
|
||||
method public android.net.wifi.aware.WifiAwareManager.NetworkSpecifierBuilder setDiscoverySession(android.net.wifi.aware.DiscoverySession);
|
||||
method public android.net.wifi.aware.WifiAwareManager.NetworkSpecifierBuilder setPeerHandle(android.net.wifi.aware.PeerHandle);
|
||||
method public android.net.wifi.aware.WifiAwareManager.NetworkSpecifierBuilder setPskPassphrase(java.lang.String);
|
||||
}
|
||||
|
||||
public final class WifiAwareNetworkInfo implements android.os.Parcelable android.net.TransportInfo {
|
||||
method public int describeContents();
|
||||
method public java.net.Inet6Address getPeerIpv6Addr();
|
||||
|
||||
@@ -3888,7 +3888,11 @@ package android.net.wifi {
|
||||
package android.net.wifi.aware {
|
||||
|
||||
public class DiscoverySession implements java.lang.AutoCloseable {
|
||||
method public android.net.NetworkSpecifier createNetworkSpecifierPmk(android.net.wifi.aware.PeerHandle, byte[]);
|
||||
method public deprecated android.net.NetworkSpecifier createNetworkSpecifierPmk(android.net.wifi.aware.PeerHandle, byte[]);
|
||||
}
|
||||
|
||||
public static class WifiAwareManager.NetworkSpecifierBuilder {
|
||||
method public android.net.wifi.aware.WifiAwareManager.NetworkSpecifierBuilder setPmk(byte[]);
|
||||
}
|
||||
|
||||
public class WifiAwareSession implements java.lang.AutoCloseable {
|
||||
|
||||
@@ -34,11 +34,11 @@ import java.lang.ref.WeakReference;
|
||||
* {@link PublishDiscoverySession} and {@link SubscribeDiscoverySession}. This
|
||||
* class provides functionality common to both publish and subscribe discovery sessions:
|
||||
* <ul>
|
||||
* <li>Sending messages: {@link #sendMessage(PeerHandle, int, byte[])} method.
|
||||
* <li>Creating a network-specifier when requesting a Aware connection:
|
||||
* {@link #createNetworkSpecifierOpen(PeerHandle)} or
|
||||
* {@link #createNetworkSpecifierPassphrase(PeerHandle, String)}.
|
||||
* <li>Sending messages: {@link #sendMessage(PeerHandle, int, byte[])} method.
|
||||
* <li>Creating a network-specifier when requesting a Aware connection using
|
||||
* {@link WifiAwareManager.NetworkSpecifierBuilder}.
|
||||
* </ul>
|
||||
* <p>
|
||||
* The {@link #close()} method must be called to destroy discovery sessions once they are
|
||||
* no longer needed.
|
||||
*/
|
||||
@@ -270,6 +270,7 @@ public class DiscoverySession implements AutoCloseable {
|
||||
* <p>
|
||||
* To set up an encrypted link use the
|
||||
* {@link #createNetworkSpecifierPassphrase(PeerHandle, String)} API.
|
||||
* @deprecated Use the replacement {@link WifiAwareManager.NetworkSpecifierBuilder}.
|
||||
*
|
||||
* @param peerHandle The peer's handle obtained through
|
||||
* {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle, byte[], java.util.List)}
|
||||
@@ -284,6 +285,7 @@ public class DiscoverySession implements AutoCloseable {
|
||||
* android.net.ConnectivityManager.NetworkCallback)}
|
||||
* [or other varieties of that API].
|
||||
*/
|
||||
@Deprecated
|
||||
public NetworkSpecifier createNetworkSpecifierOpen(@NonNull PeerHandle peerHandle) {
|
||||
if (mTerminated) {
|
||||
Log.w(TAG, "createNetworkSpecifierOpen: called on terminated session");
|
||||
@@ -318,6 +320,7 @@ public class DiscoverySession implements AutoCloseable {
|
||||
* <p>
|
||||
* Note: per the Wi-Fi Aware specification the roles are fixed - a Subscriber is an INITIATOR
|
||||
* and a Publisher is a RESPONDER.
|
||||
* @deprecated Use the replacement {@link WifiAwareManager.NetworkSpecifierBuilder}.
|
||||
*
|
||||
* @param peerHandle The peer's handle obtained through
|
||||
* {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle,
|
||||
@@ -336,6 +339,7 @@ public class DiscoverySession implements AutoCloseable {
|
||||
* android.net.ConnectivityManager.NetworkCallback)}
|
||||
* [or other varieties of that API].
|
||||
*/
|
||||
@Deprecated
|
||||
public NetworkSpecifier createNetworkSpecifierPassphrase(
|
||||
@NonNull PeerHandle peerHandle, @NonNull String passphrase) {
|
||||
if (!WifiAwareUtils.validatePassphrase(passphrase)) {
|
||||
@@ -376,6 +380,7 @@ public class DiscoverySession implements AutoCloseable {
|
||||
* <p>
|
||||
* Note: per the Wi-Fi Aware specification the roles are fixed - a Subscriber is an INITIATOR
|
||||
* and a Publisher is a RESPONDER.
|
||||
* @deprecated Use the replacement {@link WifiAwareManager.NetworkSpecifierBuilder}.
|
||||
*
|
||||
* @param peerHandle The peer's handle obtained through
|
||||
* {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle,
|
||||
@@ -397,6 +402,7 @@ public class DiscoverySession implements AutoCloseable {
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@Deprecated
|
||||
@SystemApi
|
||||
public NetworkSpecifier createNetworkSpecifierPmk(@NonNull PeerHandle peerHandle,
|
||||
@NonNull byte[] pmk) {
|
||||
|
||||
@@ -21,6 +21,7 @@ import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.SdkConstant;
|
||||
import android.annotation.SdkConstant.SdkConstantType;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.SystemService;
|
||||
import android.content.Context;
|
||||
import android.net.ConnectivityManager;
|
||||
@@ -57,11 +58,7 @@ import java.util.List;
|
||||
* {@link WifiAwareSession#subscribe(SubscribeConfig, DiscoverySessionCallback, Handler)}.
|
||||
* <li>Create a Aware network specifier to be used with
|
||||
* {@link ConnectivityManager#requestNetwork(NetworkRequest, ConnectivityManager.NetworkCallback)}
|
||||
* to set-up a Aware connection with a peer. Refer to
|
||||
* {@link DiscoverySession#createNetworkSpecifierOpen(PeerHandle)},
|
||||
* {@link DiscoverySession#createNetworkSpecifierPassphrase(PeerHandle, String)},
|
||||
* {@link WifiAwareSession#createNetworkSpecifierOpen(int, byte[])}, and
|
||||
* {@link WifiAwareSession#createNetworkSpecifierPassphrase(int, byte[], String)}.
|
||||
* to set-up a Aware connection with a peer. Refer to {@link NetworkSpecifierBuilder}.
|
||||
* </ul>
|
||||
* <p>
|
||||
* Aware may not be usable when Wi-Fi is disabled (and other conditions). To validate that
|
||||
@@ -110,10 +107,7 @@ import java.util.List;
|
||||
* <li>{@link NetworkRequest.Builder#addTransportType(int)} of
|
||||
* {@link android.net.NetworkCapabilities#TRANSPORT_WIFI_AWARE}.
|
||||
* <li>{@link NetworkRequest.Builder#setNetworkSpecifier(String)} using
|
||||
* {@link WifiAwareSession#createNetworkSpecifierOpen(int, byte[])},
|
||||
* {@link WifiAwareSession#createNetworkSpecifierPassphrase(int, byte[], String)},
|
||||
* {@link DiscoverySession#createNetworkSpecifierOpen(PeerHandle)}, or
|
||||
* {@link DiscoverySession#createNetworkSpecifierPassphrase(PeerHandle, String)}.
|
||||
* {@link NetworkSpecifierBuilder}.
|
||||
* </ul>
|
||||
*/
|
||||
@SystemService(Context.WIFI_AWARE_SERVICE)
|
||||
@@ -145,8 +139,6 @@ public class WifiAwareManager {
|
||||
* Connection creation role is that of INITIATOR. Used to create a network specifier string
|
||||
* when requesting a Aware network.
|
||||
*
|
||||
* @see DiscoverySession#createNetworkSpecifierOpen(PeerHandle)
|
||||
* @see DiscoverySession#createNetworkSpecifierPassphrase(PeerHandle, String)
|
||||
* @see WifiAwareSession#createNetworkSpecifierOpen(int, byte[])
|
||||
* @see WifiAwareSession#createNetworkSpecifierPassphrase(int, byte[], String)
|
||||
*/
|
||||
@@ -156,8 +148,6 @@ public class WifiAwareManager {
|
||||
* Connection creation role is that of RESPONDER. Used to create a network specifier string
|
||||
* when requesting a Aware network.
|
||||
*
|
||||
* @see DiscoverySession#createNetworkSpecifierOpen(PeerHandle)
|
||||
* @see DiscoverySession#createNetworkSpecifierPassphrase(PeerHandle, String)
|
||||
* @see WifiAwareSession#createNetworkSpecifierOpen(int, byte[])
|
||||
* @see WifiAwareSession#createNetworkSpecifierPassphrase(int, byte[], String)
|
||||
*/
|
||||
@@ -415,6 +405,11 @@ public class WifiAwareManager {
|
||||
+ ", passphrase=" + ((passphrase == null) ? "null" : "non-null"));
|
||||
}
|
||||
|
||||
if (!WifiAwareUtils.isLegacyVersion(mContext, Build.VERSION_CODES.Q)) {
|
||||
throw new UnsupportedOperationException(
|
||||
"API not deprecated - use WifiAwareManager.NetworkSpecifierBuilder");
|
||||
}
|
||||
|
||||
if (role != WIFI_AWARE_DATA_PATH_ROLE_INITIATOR
|
||||
&& role != WIFI_AWARE_DATA_PATH_ROLE_RESPONDER) {
|
||||
throw new IllegalArgumentException(
|
||||
@@ -813,4 +808,135 @@ public class WifiAwareManager {
|
||||
mOriginalCallback.onSessionTerminated();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A builder class for a Wi-Fi Aware network specifier to set up an Aware connection with a
|
||||
* peer.
|
||||
* <p>
|
||||
* Note that all Wi-Fi Aware connection specifier objects must call the
|
||||
* {@link NetworkSpecifierBuilder#setDiscoverySession(DiscoverySession)} to specify the context
|
||||
* within which the connection is created, and
|
||||
* {@link NetworkSpecifierBuilder#setPeerHandle(PeerHandle)} to specify the peer to which the
|
||||
* connection is created.
|
||||
*/
|
||||
public static class NetworkSpecifierBuilder {
|
||||
private DiscoverySession mDiscoverySession;
|
||||
private PeerHandle mPeerHandle;
|
||||
private String mPskPassphrase;
|
||||
private byte[] mPmk;
|
||||
|
||||
/**
|
||||
* Configure the {@link PublishDiscoverySession} or {@link SubscribeDiscoverySession}
|
||||
* discovery session in whose context the connection is created.
|
||||
* <p>
|
||||
* Note: this method must be called for any connection request!
|
||||
*
|
||||
* @param discoverySession A Wi-Fi Aware discovery session.
|
||||
* @return the current {@link NetworkSpecifierBuilder} builder, enabling chaining of builder
|
||||
* methods.
|
||||
*/
|
||||
public @NonNull NetworkSpecifierBuilder setDiscoverySession(
|
||||
@NonNull DiscoverySession discoverySession) {
|
||||
if (discoverySession == null) {
|
||||
throw new IllegalArgumentException("Non-null discoverySession required");
|
||||
}
|
||||
mDiscoverySession = discoverySession;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the {@link PeerHandle} of the peer to which the Wi-Fi Aware connection is
|
||||
* requested. The peer is discovered through Wi-Fi Aware discovery,
|
||||
* <p>
|
||||
* Note: this method must be called for any connection request!
|
||||
*
|
||||
* @param peerHandle The peer's handle obtained through
|
||||
* {@link DiscoverySessionCallback#onServiceDiscovered(PeerHandle, byte[], java.util.List)}
|
||||
* or
|
||||
* {@link DiscoverySessionCallback#onMessageReceived(PeerHandle, byte[])}.
|
||||
* @return the current {@link NetworkSpecifierBuilder} builder, enabling chaining of builder
|
||||
* methods.
|
||||
*/
|
||||
public @NonNull NetworkSpecifierBuilder setPeerHandle(@NonNull PeerHandle peerHandle) {
|
||||
if (peerHandle == null) {
|
||||
throw new IllegalArgumentException("Non-null peerHandle required");
|
||||
}
|
||||
mPeerHandle = peerHandle;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the PSK Passphrase for the Wi-Fi Aware connection being requested. This method
|
||||
* is optional - if not called, then an Open (unencrypted) connection will be created.
|
||||
*
|
||||
* @param pskPassphrase The (optional) passphrase to be used to encrypt the link.
|
||||
* @return the current {@link NetworkSpecifierBuilder} builder, enabling chaining of builder
|
||||
* methods.
|
||||
*/
|
||||
public @NonNull NetworkSpecifierBuilder setPskPassphrase(@NonNull String pskPassphrase) {
|
||||
if (!WifiAwareUtils.validatePassphrase(pskPassphrase)) {
|
||||
throw new IllegalArgumentException("Passphrase must meet length requirements");
|
||||
}
|
||||
mPskPassphrase = pskPassphrase;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the PMK for the Wi-Fi Aware connection being requested. This method
|
||||
* is optional - if not called, then an Open (unencrypted) connection will be created.
|
||||
*
|
||||
* @param pmk A PMK (pairwise master key, see IEEE 802.11i) specifying the key to use for
|
||||
* encrypting the data-path. Use the {@link #setPskPassphrase(String)} to
|
||||
* specify a Passphrase.
|
||||
* @return the current {@link NetworkSpecifierBuilder} builder, enabling chaining of builder
|
||||
* methods.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public @NonNull NetworkSpecifierBuilder setPmk(@NonNull byte[] pmk) {
|
||||
if (!WifiAwareUtils.validatePmk(pmk)) {
|
||||
throw new IllegalArgumentException("PMK must 32 bytes");
|
||||
}
|
||||
mPmk = pmk;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a {@link android.net.NetworkRequest.Builder#setNetworkSpecifier(NetworkSpecifier)}
|
||||
* for a WiFi Aware connection (link) to the specified peer. The
|
||||
* {@link android.net.NetworkRequest.Builder#addTransportType(int)} should be set to
|
||||
* {@link android.net.NetworkCapabilities#TRANSPORT_WIFI_AWARE}.
|
||||
* <p> The default builder constructor will initialize a NetworkSpecifier which requests an
|
||||
* open (non-encrypted) link. To request an encrypted link use the
|
||||
* {@link #setPskPassphrase(String)} builder method.
|
||||
*
|
||||
* @return A {@link NetworkSpecifier} to be used to construct
|
||||
* {@link android.net.NetworkRequest.Builder#setNetworkSpecifier(NetworkSpecifier)} to pass
|
||||
* to {@link android.net.ConnectivityManager#requestNetwork(android.net.NetworkRequest,
|
||||
* android.net.ConnectivityManager.NetworkCallback)}
|
||||
* [or other varieties of that API].
|
||||
*/
|
||||
public @NonNull NetworkSpecifier build() {
|
||||
if (mDiscoverySession == null) {
|
||||
throw new IllegalStateException("Null discovery session!?");
|
||||
}
|
||||
if (mPskPassphrase != null & mPmk != null) {
|
||||
throw new IllegalStateException(
|
||||
"Can only specify a Passphrase or a PMK - not both!");
|
||||
}
|
||||
|
||||
int role = mDiscoverySession instanceof SubscribeDiscoverySession
|
||||
? WifiAwareManager.WIFI_AWARE_DATA_PATH_ROLE_INITIATOR
|
||||
: WifiAwareManager.WIFI_AWARE_DATA_PATH_ROLE_RESPONDER;
|
||||
|
||||
if (role == WIFI_AWARE_DATA_PATH_ROLE_INITIATOR && mPeerHandle == null) {
|
||||
throw new IllegalStateException("Null peerHandle!?");
|
||||
}
|
||||
|
||||
return new WifiAwareNetworkSpecifier(
|
||||
WifiAwareNetworkSpecifier.NETWORK_SPECIFIER_TYPE_IB, role,
|
||||
mDiscoverySession.mClientId, mDiscoverySession.mSessionId, mPeerHandle.peerId,
|
||||
null, mPmk, mPskPassphrase, Process.myUid());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -213,7 +213,7 @@ public class WifiAwareSession implements AutoCloseable {
|
||||
* This API is targeted for applications which can obtain the peer MAC address using OOB
|
||||
* (out-of-band) discovery. Aware discovery does not provide the MAC address of the peer -
|
||||
* when using Aware discovery use the alternative network specifier method -
|
||||
* {@link DiscoverySession#createNetworkSpecifierOpen(PeerHandle)}.
|
||||
* {@link android.net.wifi.aware.WifiAwareManager.NetworkSpecifierBuilder}.
|
||||
* <p>
|
||||
* To set up an encrypted link use the
|
||||
* {@link #createNetworkSpecifierPassphrase(int, byte[], String)} API.
|
||||
@@ -254,7 +254,7 @@ public class WifiAwareSession implements AutoCloseable {
|
||||
* This API is targeted for applications which can obtain the peer MAC address using OOB
|
||||
* (out-of-band) discovery. Aware discovery does not provide the MAC address of the peer -
|
||||
* when using Aware discovery use the alternative network specifier method -
|
||||
* {@link DiscoverySession#createNetworkSpecifierPassphrase(PeerHandle, String)}.
|
||||
* {@link android.net.wifi.aware.WifiAwareManager.NetworkSpecifierBuilder}.
|
||||
*
|
||||
* @param role The role of this device:
|
||||
* {@link WifiAwareManager#WIFI_AWARE_DATA_PATH_ROLE_INITIATOR} or
|
||||
@@ -300,7 +300,7 @@ public class WifiAwareSession implements AutoCloseable {
|
||||
* This API is targeted for applications which can obtain the peer MAC address using OOB
|
||||
* (out-of-band) discovery. Aware discovery does not provide the MAC address of the peer -
|
||||
* when using Aware discovery use the alternative network specifier method -
|
||||
* {@link DiscoverySession#createNetworkSpecifierPassphrase(PeerHandle, String)}.
|
||||
* {@link android.net.wifi.aware.WifiAwareManager.NetworkSpecifierBuilder}.
|
||||
*
|
||||
* @param role The role of this device:
|
||||
* {@link WifiAwareManager#WIFI_AWARE_DATA_PATH_ROLE_INITIATOR} or
|
||||
|
||||
@@ -108,7 +108,7 @@ public class WifiAwareManagerTest {
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mockApplicationInfo.targetSdkVersion = Build.VERSION_CODES.P;
|
||||
mockApplicationInfo.targetSdkVersion = Build.VERSION_CODES.Q;
|
||||
when(mockPackageManager.getApplicationInfo(anyString(), anyInt())).thenReturn(
|
||||
mockApplicationInfo);
|
||||
when(mockContext.getOpPackageName()).thenReturn("XXX");
|
||||
@@ -918,6 +918,8 @@ public class WifiAwareManagerTest {
|
||||
final ConfigRequest configRequest = new ConfigRequest.Builder().build();
|
||||
final PublishConfig publishConfig = new PublishConfig.Builder().build();
|
||||
|
||||
mockApplicationInfo.targetSdkVersion = Build.VERSION_CODES.P;
|
||||
|
||||
ArgumentCaptor<WifiAwareSession> sessionCaptor = ArgumentCaptor.forClass(
|
||||
WifiAwareSession.class);
|
||||
ArgumentCaptor<IWifiAwareEventCallback> clientProxyCallback = ArgumentCaptor
|
||||
@@ -951,6 +953,9 @@ public class WifiAwareManagerTest {
|
||||
WifiAwareNetworkSpecifier ns =
|
||||
(WifiAwareNetworkSpecifier) publishSession.getValue().createNetworkSpecifierOpen(
|
||||
peerHandle);
|
||||
WifiAwareNetworkSpecifier nsb = (WifiAwareNetworkSpecifier) new WifiAwareManager
|
||||
.NetworkSpecifierBuilder().setDiscoverySession(publishSession.getValue())
|
||||
.setPeerHandle(peerHandle).build();
|
||||
|
||||
// validate format
|
||||
collector.checkThat("role", role, equalTo(ns.role));
|
||||
@@ -958,9 +963,18 @@ public class WifiAwareManagerTest {
|
||||
collector.checkThat("session_id", sessionId, equalTo(ns.sessionId));
|
||||
collector.checkThat("peer_id", peerHandle.peerId, equalTo(ns.peerId));
|
||||
|
||||
collector.checkThat("role", role, equalTo(nsb.role));
|
||||
collector.checkThat("client_id", clientId, equalTo(nsb.clientId));
|
||||
collector.checkThat("session_id", sessionId, equalTo(nsb.sessionId));
|
||||
collector.checkThat("peer_id", peerHandle.peerId, equalTo(nsb.peerId));
|
||||
|
||||
// (4) request an encrypted (PMK) network specifier from the session
|
||||
ns = (WifiAwareNetworkSpecifier) publishSession.getValue().createNetworkSpecifierPmk(
|
||||
peerHandle, pmk);
|
||||
nsb =
|
||||
(WifiAwareNetworkSpecifier) new WifiAwareManager.NetworkSpecifierBuilder()
|
||||
.setDiscoverySession(
|
||||
publishSession.getValue()).setPeerHandle(peerHandle).setPmk(pmk).build();
|
||||
|
||||
// validate format
|
||||
collector.checkThat("role", role, equalTo(ns.role));
|
||||
@@ -969,9 +983,18 @@ public class WifiAwareManagerTest {
|
||||
collector.checkThat("peer_id", peerHandle.peerId, equalTo(ns.peerId));
|
||||
collector.checkThat("pmk", pmk , equalTo(ns.pmk));
|
||||
|
||||
collector.checkThat("role", role, equalTo(nsb.role));
|
||||
collector.checkThat("client_id", clientId, equalTo(nsb.clientId));
|
||||
collector.checkThat("session_id", sessionId, equalTo(nsb.sessionId));
|
||||
collector.checkThat("peer_id", peerHandle.peerId, equalTo(nsb.peerId));
|
||||
collector.checkThat("pmk", pmk , equalTo(nsb.pmk));
|
||||
|
||||
// (5) request an encrypted (Passphrase) network specifier from the session
|
||||
ns = (WifiAwareNetworkSpecifier) publishSession.getValue().createNetworkSpecifierPassphrase(
|
||||
peerHandle, passphrase);
|
||||
nsb = (WifiAwareNetworkSpecifier) new WifiAwareManager.NetworkSpecifierBuilder()
|
||||
.setDiscoverySession(publishSession.getValue()).setPeerHandle(peerHandle)
|
||||
.setPskPassphrase(passphrase).build();
|
||||
|
||||
// validate format
|
||||
collector.checkThat("role", role, equalTo(ns.role));
|
||||
@@ -980,6 +1003,12 @@ public class WifiAwareManagerTest {
|
||||
collector.checkThat("peer_id", peerHandle.peerId, equalTo(ns.peerId));
|
||||
collector.checkThat("passphrase", passphrase, equalTo(ns.passphrase));
|
||||
|
||||
collector.checkThat("role", role, equalTo(nsb.role));
|
||||
collector.checkThat("client_id", clientId, equalTo(nsb.clientId));
|
||||
collector.checkThat("session_id", sessionId, equalTo(nsb.sessionId));
|
||||
collector.checkThat("peer_id", peerHandle.peerId, equalTo(nsb.peerId));
|
||||
collector.checkThat("passphrase", passphrase, equalTo(nsb.passphrase));
|
||||
|
||||
verifyNoMoreInteractions(mockCallback, mockSessionCallback, mockAwareService,
|
||||
mockPublishSession, mockRttListener);
|
||||
}
|
||||
@@ -1051,7 +1080,7 @@ public class WifiAwareManagerTest {
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientNullPmk() throws Exception {
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), true, null, null);
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), true, null, null, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1059,7 +1088,7 @@ public class WifiAwareManagerTest {
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientIncorrectLengthPmk() throws Exception {
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), true, PMK_INVALID, null);
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), true, PMK_INVALID, null, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1067,7 +1096,7 @@ public class WifiAwareManagerTest {
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientNullPassphrase() throws Exception {
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), false, null, null);
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), false, null, null, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1076,7 +1105,7 @@ public class WifiAwareManagerTest {
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientTooShortPassphrase() throws Exception {
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), false, null,
|
||||
PASSPHRASE_TOO_SHORT);
|
||||
PASSPHRASE_TOO_SHORT, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1084,7 +1113,8 @@ public class WifiAwareManagerTest {
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientTooLongPassphrase() throws Exception {
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), false, null, PASSPHRASE_TOO_LONG);
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), false, null, PASSPHRASE_TOO_LONG,
|
||||
false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1092,7 +1122,8 @@ public class WifiAwareManagerTest {
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientNullPeer() throws Exception {
|
||||
executeNetworkSpecifierWithClient(null, false, null, PASSPHRASE_VALID);
|
||||
mockApplicationInfo.targetSdkVersion = Build.VERSION_CODES.P;
|
||||
executeNetworkSpecifierWithClient(null, false, null, PASSPHRASE_VALID, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1101,11 +1132,75 @@ public class WifiAwareManagerTest {
|
||||
@Test
|
||||
public void testNetworkSpecifierWithClientNullPeerLegacyApi() throws Exception {
|
||||
mockApplicationInfo.targetSdkVersion = Build.VERSION_CODES.O;
|
||||
executeNetworkSpecifierWithClient(null, false, null, PASSPHRASE_VALID);
|
||||
executeNetworkSpecifierWithClient(null, false, null, PASSPHRASE_VALID, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that a null PMK triggers an exception.
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientNullPmkBuilder() throws Exception {
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), true, null, null, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that a non-32-bytes PMK triggers an exception.
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientIncorrectLengthPmkBuilder() throws Exception {
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), true, PMK_INVALID, null, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that a null Passphrase triggers an exception.
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientNullPassphraseBuilder() throws Exception {
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), false, null, null, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that a too short Passphrase triggers an exception.
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientTooShortPassphraseBuilder() throws Exception {
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), false, null,
|
||||
PASSPHRASE_TOO_SHORT, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that a too long Passphrase triggers an exception.
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientTooLongPassphraseBuilder() throws Exception {
|
||||
executeNetworkSpecifierWithClient(new PeerHandle(123412), false, null, PASSPHRASE_TOO_LONG,
|
||||
true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that a null PeerHandle triggers an exception.
|
||||
*/
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testNetworkSpecifierWithClientNullPeerBuilder() throws Exception {
|
||||
executeNetworkSpecifierWithClient(null, false, null, PASSPHRASE_VALID, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate that a null PeerHandle does not trigger an exception for legacy API.
|
||||
*/
|
||||
@Test
|
||||
public void testNetworkSpecifierWithClientNullPeerLegacyApiBuilder() throws Exception {
|
||||
mockApplicationInfo.targetSdkVersion = Build.VERSION_CODES.O;
|
||||
executeNetworkSpecifierWithClient(null, false, null, PASSPHRASE_VALID, false);
|
||||
}
|
||||
|
||||
@Test(expected = UnsupportedOperationException.class)
|
||||
public void testNetworkSpecifierDeprecatedOnNewApi() throws Exception {
|
||||
executeNetworkSpecifierWithClient(null, false, null, PASSPHRASE_VALID, false);
|
||||
}
|
||||
|
||||
private void executeNetworkSpecifierWithClient(PeerHandle peerHandle, boolean doPmk, byte[] pmk,
|
||||
String passphrase) throws Exception {
|
||||
String passphrase, boolean useBuilder) throws Exception {
|
||||
final int clientId = 4565;
|
||||
final int sessionId = 123;
|
||||
final ConfigRequest configRequest = new ConfigRequest.Builder().build();
|
||||
@@ -1142,9 +1237,20 @@ public class WifiAwareManagerTest {
|
||||
|
||||
// (3) create network specifier
|
||||
if (doPmk) {
|
||||
publishSession.getValue().createNetworkSpecifierPmk(peerHandle, pmk);
|
||||
if (useBuilder) {
|
||||
new WifiAwareManager.NetworkSpecifierBuilder().setDiscoverySession(
|
||||
publishSession.getValue()).setPeerHandle(peerHandle).setPmk(pmk).build();
|
||||
} else {
|
||||
publishSession.getValue().createNetworkSpecifierPmk(peerHandle, pmk);
|
||||
}
|
||||
} else {
|
||||
publishSession.getValue().createNetworkSpecifierPassphrase(peerHandle, passphrase);
|
||||
if (useBuilder) {
|
||||
new WifiAwareManager.NetworkSpecifierBuilder().setDiscoverySession(
|
||||
publishSession.getValue()).setPeerHandle(peerHandle).setPskPassphrase(
|
||||
passphrase).build();
|
||||
} else {
|
||||
publishSession.getValue().createNetworkSpecifierPassphrase(peerHandle, passphrase);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user