• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 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.cts.verifier.p2p.testcase;
18 
19 import android.content.Context;
20 import android.net.wifi.WpsInfo;
21 import android.net.wifi.p2p.WifiP2pConfig;
22 import android.net.wifi.p2p.WifiP2pDevice;
23 import android.net.wifi.p2p.WifiP2pInfo;
24 import android.net.wifi.p2p.WifiP2pManager;
25 
26 import com.android.cts.verifier.R;
27 
28 import java.lang.reflect.Method;
29 
30 /**
31  * A base class for connection request test.
32  */
33 public abstract class ConnectReqTestCase extends ReqTestCase {
34 
35     protected P2pBroadcastReceiverTest mReceiverTest;
36 
ConnectReqTestCase(Context context)37     public ConnectReqTestCase(Context context) {
38         super(context);
39     }
40 
41     /**
42      * Set up the test case.
43      */
setUp()44     protected void setUp() {
45         super.setUp();
46         mReceiverTest = new P2pBroadcastReceiverTest(mContext);
47         mReceiverTest.init(mChannel);
48 
49         try {
50             Method[] methods = WifiP2pManager.class.getMethods();
51             for (int i = 0; i < methods.length; i++) {
52                 if (methods[i].getName().equals("deletePersistentGroup")) {
53                     // Delete any persistent group
54                     for (int netid = 0; netid < 32; netid++) {
55                         methods[i].invoke(mP2pMgr, mChannel, netid, null);
56                     }
57                 }
58             }
59         } catch(Exception e) {
60             e.printStackTrace();
61         }
62         // Disconnect from wifi to avoid channel conflict
63         mWifiMgr.disconnect();
64     }
65 
66     /**
67      * Tear down the test case.
68      */
tearDown()69     protected void tearDown() {
70         super.tearDown();
71         if (mReceiverTest != null) {
72             mReceiverTest.close();
73         }
74         if (mP2pMgr != null) {
75             mP2pMgr.cancelConnect(mChannel, null);
76             mP2pMgr.removeGroup(mChannel, null);
77         }
78     }
79 
80     /**
81      * Tries to connect the target devices.
82      * @param isJoin if true, try to join the group. otherwise, try go negotiation.
83      * @param wpsConfig wps configuration method.
84      * @return true if succeeded.
85      * @throws InterruptedException
86      */
connectTest(boolean isJoin, int wpsConfig)87     protected boolean connectTest(boolean isJoin, int wpsConfig) throws InterruptedException {
88         notifyTestMsg(R.string.p2p_searching_target);
89 
90         /*
91          * Search target device and check its capability.
92          */
93         ActionListenerTest actionListener = new ActionListenerTest();
94         mP2pMgr.discoverPeers(mChannel, actionListener);
95         if (!actionListener.check(ActionListenerTest.SUCCESS, TIMEOUT)) {
96             mReason = mContext.getString(R.string.p2p_discover_peers_error);
97             return false;
98         }
99 
100         WifiP2pDevice dev = mReceiverTest.waitDeviceFound(mTargetAddress, TIMEOUT);
101         if (dev == null) {
102             mReason = mContext.getString(R.string.p2p_target_not_found_error);
103             return false;
104         }
105 
106         if (!isJoin && dev.isGroupOwner()) {
107             // target device should be p2p device.
108             mReason = mContext.getString(R.string.p2p_target_invalid_role_error);
109             return false;
110         } else if (isJoin && !dev.isGroupOwner()) {
111             //target device should be group owner.
112             mReason = mContext.getString(R.string.p2p_target_invalid_role_error2);
113             return false;
114         }
115 
116         if (wpsConfig == WpsInfo.PBC) {
117             notifyTestMsg(R.string.p2p_connecting_with_pbc);
118         } else {
119             notifyTestMsg(R.string.p2p_connecting_with_pin);
120         }
121 
122         /*
123          * Try to connect the target device.
124          */
125         WifiP2pConfig config = new WifiP2pConfig();
126         config.deviceAddress = dev.deviceAddress;
127         config.wps.setup = wpsConfig;
128         mP2pMgr.connect(mChannel, config, actionListener);
129         if (!actionListener.check(ActionListenerTest.SUCCESS, TIMEOUT)) {
130             mReason = mContext.getString(R.string.p2p_connect_error);
131             return false;
132         }
133 
134         /*
135          * Check if the connection broadcast is received.
136          */
137         WifiP2pInfo p2pInfo = mReceiverTest.waitConnectionNotice(TIMEOUT_FOR_USER_ACTION);
138         if (p2pInfo == null) {
139             mReason = mContext.getString(R.string.p2p_connection_error);
140             return false;
141         }
142 
143         /*
144          * Wait until peer gets marked conencted.
145          */
146         notifyTestMsg(R.string.p2p_waiting_for_peer_to_connect);
147         if (mReceiverTest.waitPeerConnected(mTargetAddress, TIMEOUT) != true) {
148             mReason = mContext.getString(R.string.p2p_connection_error);
149             return false;
150         }
151 
152         /*
153          * Remove the p2p group manualy.
154          */
155         mP2pMgr.removeGroup(mChannel, actionListener);
156         if (!actionListener.check(ActionListenerTest.SUCCESS, TIMEOUT)) {
157             mReason = mContext.getString(R.string.p2p_remove_group_error);
158             return false;
159         }
160 
161         notifyTestMsg(R.string.p2p_waiting_for_peer_to_disconnect);
162 
163         /*
164          * Check if p2p disconnection broadcast is received
165          */
166         p2pInfo = mReceiverTest.waitDisconnectionNotice(TIMEOUT);
167         if (p2pInfo == null) {
168             mReason = mContext.getString(R.string.p2p_connection_error);
169             return false;
170         }
171 
172         /* Wait until peer gets marked disconnected */
173 
174         if (mReceiverTest.waitPeerDisconnected(mTargetAddress, TIMEOUT) != true) {
175             mReason = mContext.getString(R.string.p2p_detect_disconnection_error);
176             return false;
177         }
178 
179         return true;
180     }
181 }
182