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 java.util.ArrayList;
20 import java.util.HashMap;
21 import java.util.List;
22 import java.util.Map;
23 
24 import android.net.wifi.p2p.WifiP2pDevice;
25 import android.net.wifi.p2p.WifiP2pManager.DnsSdTxtRecordListener;
26 import android.util.Log;
27 
28 /**
29  * The utility class for
30  * testing android.net.wifi.p2p.WifiP2pManager.DnsSdTxtRecordListener callback function.
31  */
32 public class DnsSdTxtRecordListenerTest extends ListenerTest
33     implements DnsSdTxtRecordListener {
34 
35     private static final String TAG = "DnsSdTxtRecordListenerTest";
36 
37     public static final List<ListenerArgument> NO_DNS_TXT
38             = new ArrayList<ListenerArgument>();
39 
40     public static final List<ListenerArgument> ALL_DNS_TXT
41             = new ArrayList<ListenerArgument>();
42 
43     public static final List<ListenerArgument> IPP_DNS_TXT
44             = new ArrayList<ListenerArgument>();
45 
46     public static final List<ListenerArgument> AFP_DNS_TXT
47             = new ArrayList<ListenerArgument>();
48 
49     static {
initialize()50         initialize();
51     }
52 
53     /**
54      * The target device address.
55      */
56     private String mTargetAddr;
57 
DnsSdTxtRecordListenerTest(String targetAddr)58     public DnsSdTxtRecordListenerTest(String targetAddr) {
59         mTargetAddr = targetAddr;
60     }
61 
62     @Override
onDnsSdTxtRecordAvailable(String fullDomainName, Map<String, String> txtRecordMap, WifiP2pDevice srcDevice)63     public void onDnsSdTxtRecordAvailable(String fullDomainName,
64             Map<String, String> txtRecordMap, WifiP2pDevice srcDevice) {
65         Log.d(TAG, fullDomainName + " " + txtRecordMap + " received from "
66                 + srcDevice.deviceAddress);
67 
68         /*
69          * Check only the response from the target device.
70          * The response from other devices are ignored.
71          */
72         if (srcDevice.deviceAddress.equalsIgnoreCase(mTargetAddr)) {
73             receiveCallback(new Argument(fullDomainName, txtRecordMap));
74         }
75     }
76 
initialize()77     private static void initialize() {
78         String ippDomainName = "myprinter._ipp._tcp.local.";
79         String afpDomainName = "example._afpovertcp._tcp.local.";
80 
81         Map<String, String> ippTxtRecord = new HashMap<String, String>();
82         Map<String, String> afpTxtRecord = new HashMap<String, String>();
83         ippTxtRecord.put("txtvers", "1");
84         ippTxtRecord.put("pdl", "application/postscript");
85 
86         IPP_DNS_TXT.add(new Argument(ippDomainName, ippTxtRecord));
87         AFP_DNS_TXT.add(new Argument(afpDomainName, afpTxtRecord));
88         ALL_DNS_TXT.add(new Argument(ippDomainName, ippTxtRecord));
89         ALL_DNS_TXT.add(new Argument(afpDomainName, afpTxtRecord));
90     }
91 
92     /**
93      * The container of the argument of {@link #onDnsSdTxtRecordAvailable}.
94      */
95     static class Argument extends ListenerArgument {
96 
97         private String mFullDomainName;
98         private Map<String, String> mTxtRecordMap;
99 
100         /**
101          * Set the argument of {@link #onDnsSdTxtRecordAvailable}.
102          * @param fullDomainName full domain name.
103          * @param txtRecordMap txt record map.
104          */
Argument(String fullDomainName, Map<String, String> txtRecordMap)105         Argument(String fullDomainName, Map<String, String> txtRecordMap) {
106             mFullDomainName = fullDomainName;
107             mTxtRecordMap = txtRecordMap;
108         }
109 
110         @Override
equals(Object obj)111         public boolean equals(Object obj) {
112             if (obj == null || !(obj instanceof Argument)) {
113                 return false;
114             }
115             Argument arg = (Argument)obj;
116             return equals(mFullDomainName, arg.mFullDomainName) &&
117                     equals(mTxtRecordMap, arg.mTxtRecordMap);
118         }
119 
equals(String s1, String s2)120         private boolean equals(String s1, String s2) {
121             if (s1 == null && s2 == null) {
122                 return true;
123             }
124             if (s1 == null || s2 == null) {
125                 return false;
126             }
127             return s1.equals(s2);
128         }
129 
equals(Map<String, String> s1, Map<String, String> s2)130         private boolean equals(Map<String, String> s1, Map<String, String> s2) {
131             if (s1 == null && s2 == null) {
132                 return true;
133             }
134             if (s1 == null || s2 == null) {
135                 return false;
136             }
137             return s1.equals(s2);
138         }
139 
140         @Override
toString()141         public String toString() {
142             return "domainName=" + mFullDomainName + " record='" + mTxtRecordMap + "'";
143         }
144     }
145 }
146