1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.server.wifi.aware;
18 
19 import android.net.wifi.aware.ConfigRequest;
20 import android.net.wifi.aware.PublishConfig;
21 import android.net.wifi.aware.SubscribeConfig;
22 import android.util.SparseIntArray;
23 
24 /**
25  * Utility methods for Wi-Fi Aware unit tests.
26  */
27 public class TestUtils {
28     public static class MonitoredWifiAwareNativeApi extends WifiAwareNativeApi {
29         private SparseIntArray mTransactionIds = new SparseIntArray();
30 
MonitoredWifiAwareNativeApi()31         MonitoredWifiAwareNativeApi() {
32             super(null); // doesn't matter - mocking parent
33         }
34 
addTransactionId(int transactionId)35         private void addTransactionId(int transactionId) {
36             if (transactionId == 0) {
37                 return; // transaction ID == 0 is used as a placeholder ID in several command
38             }
39             mTransactionIds.append(transactionId, mTransactionIds.get(transactionId) + 1);
40         }
41 
validateUniqueTransactionIds()42         public void validateUniqueTransactionIds() {
43             for (int i = 0; i < mTransactionIds.size(); ++i) {
44                 if (mTransactionIds.valueAt(i) != 1) {
45                     throw new RuntimeException("Duplicate transaction IDs -- " + mTransactionIds);
46                 }
47             }
48         }
49 
enableAndConfigure(short transactionId, ConfigRequest configRequest, boolean notifyIdentityChange, boolean initialConfiguration, boolean isInteractive, boolean isIdle, boolean rangingEnabled, boolean isInstantCommunicationEnabled)50         public boolean enableAndConfigure(short transactionId, ConfigRequest configRequest,
51                 boolean notifyIdentityChange, boolean initialConfiguration, boolean isInteractive,
52                 boolean isIdle, boolean rangingEnabled, boolean isInstantCommunicationEnabled) {
53             addTransactionId(transactionId);
54             return true;
55         }
56 
disable(short transactionId)57         public boolean disable(short transactionId) {
58             addTransactionId(transactionId);
59             return true;
60         }
61 
publish(short transactionId, byte publishId, PublishConfig publishConfig)62         public boolean publish(short transactionId, byte publishId, PublishConfig publishConfig) {
63             addTransactionId(transactionId);
64             return true;
65         }
66 
subscribe(short transactionId, byte subscribeId, SubscribeConfig subscribeConfig)67         public boolean subscribe(short transactionId, byte subscribeId,
68                 SubscribeConfig subscribeConfig) {
69             addTransactionId(transactionId);
70             return true;
71         }
72 
sendMessage(short transactionId, byte pubSubId, int requestorInstanceId, byte[] dest, byte[] message, int messageId)73         public boolean sendMessage(short transactionId, byte pubSubId, int requestorInstanceId,
74                 byte[] dest, byte[] message, int messageId) {
75             addTransactionId(transactionId);
76             return true;
77         }
78 
stopPublish(short transactionId, byte pubSubId)79         public boolean stopPublish(short transactionId, byte pubSubId) {
80             addTransactionId(transactionId);
81             return true;
82         }
83 
stopSubscribe(short transactionId, byte pubSubId)84         public boolean stopSubscribe(short transactionId, byte pubSubId) {
85             addTransactionId(transactionId);
86             return true;
87         }
88 
getCapabilities(short transactionId)89         public boolean getCapabilities(short transactionId) {
90             addTransactionId(transactionId);
91             return true;
92         }
93 
createAwareNetworkInterface(short transactionId, String interfaceName)94         public boolean createAwareNetworkInterface(short transactionId, String interfaceName) {
95             addTransactionId(transactionId);
96             return true;
97         }
98 
deleteAwareNetworkInterface(short transactionId, String interfaceName)99         public boolean deleteAwareNetworkInterface(short transactionId, String interfaceName) {
100             addTransactionId(transactionId);
101             return true;
102         }
103 
initiateDataPath(short transactionId, int peerId, int channelRequestType, int channel, byte[] peer, String interfaceName, byte[] pmk, String passphrase, boolean isOutOfBand, byte[] appInfo, Capabilities capabilities)104         public boolean initiateDataPath(short transactionId, int peerId, int channelRequestType,
105                 int channel, byte[] peer, String interfaceName, byte[] pmk, String passphrase,
106                 boolean isOutOfBand, byte[] appInfo, Capabilities capabilities) {
107             addTransactionId(transactionId);
108             return true;
109         }
110 
respondToDataPathRequest(short transactionId, boolean accept, int ndpId, String interfaceName, byte[] pmk, String passphrase, byte[] appInfo, boolean isOutOfBand, Capabilities capabilities)111         public boolean respondToDataPathRequest(short transactionId, boolean accept, int ndpId,
112                 String interfaceName, byte[] pmk, String passphrase, byte[] appInfo,
113                 boolean isOutOfBand, Capabilities capabilities) {
114             addTransactionId(transactionId);
115             return true;
116         }
117 
endDataPath(short transactionId, int ndpId)118         public boolean endDataPath(short transactionId, int ndpId) {
119             addTransactionId(transactionId);
120             return true;
121         }
122     }
123 }
124