1/*
2 * Copyright (C) 2010 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
17package com.android.smspush.unitTests;
18
19import android.app.Service;
20import android.content.Context;
21import android.content.Intent;
22import android.os.IBinder;
23import android.util.Log;
24
25import com.android.internal.util.HexDump;
26
27/**
28 * To verify that receiver application receives correct body data.
29 */
30public class DataVerify extends Service {
31    private static final String LOG_TAG = "WAP PUSH";
32    private static final int TIME_WAIT = 100;
33    private static final int WAIT_COUNT = 100;
34    private static byte[] mLastReceivedPdu = null;
35    private static boolean sDataSet = false;
36
37    private class IDataVerifyStub extends IDataVerify.Stub {
38        public Context mContext;
39
40        public IDataVerifyStub() {
41        }
42
43        boolean arrayCompare(byte[] arr1, byte[] arr2) {
44            int i;
45
46            if (arr1 == null || arr2 == null) {
47                if (arr1 == null) {
48                    Log.w(LOG_TAG, "arr1 is null");
49                } else {
50                    Log.w(LOG_TAG, "arr2 is null");
51                }
52                return false;
53            }
54
55            if (arr1.length != arr2.length) {
56                return false;
57            }
58
59            for (i = 0; i < arr1.length; i++) {
60                if (arr1[i] != arr2[i]) return false;
61            }
62            return true;
63        }
64
65        /**
66         * Compare pdu and received pdu
67         */
68        public synchronized boolean verifyData(byte[] pdu) {
69            int cnt = 0;
70
71            while (!sDataSet) {
72                // wait for the activity receive data.
73                try {
74                    Thread.sleep(TIME_WAIT);
75                    if (cnt++ > WAIT_COUNT) {
76                        // don't wait more than 10 sec.
77                        return false;
78                    }
79                } catch (InterruptedException e) {}
80            }
81
82            Log.v(LOG_TAG, "verify pdu");
83            boolean ret = arrayCompare(pdu, mLastReceivedPdu);
84            return ret;
85        }
86
87        /**
88         * Clear the old data. This method must be called before starting the test
89         */
90        public void resetData() {
91            mLastReceivedPdu = null;
92            sDataSet = false;
93        }
94    }
95
96    private final IDataVerifyStub binder = new IDataVerifyStub();
97
98    /**
99     * Constructor
100     */
101    public DataVerify() {
102    }
103
104    /**
105     * Receiver application must call this method when it receives the wap push message
106     */
107    public static void SetLastReceivedPdu(byte[] pdu) {
108        mLastReceivedPdu = pdu;
109        sDataSet = true;
110    }
111
112    @Override
113    public IBinder onBind(Intent arg0) {
114        return binder;
115    }
116
117}
118
119
120