17640caaf912a7eefacc3e2108c5afd70f7b072a4noda/* 27640caaf912a7eefacc3e2108c5afd70f7b072a4noda * Copyright (C) 2010 The Android Open Source Project 37640caaf912a7eefacc3e2108c5afd70f7b072a4noda * 47640caaf912a7eefacc3e2108c5afd70f7b072a4noda * Licensed under the Apache License, Version 2.0 (the "License"); 57640caaf912a7eefacc3e2108c5afd70f7b072a4noda * you may not use this file except in compliance with the License. 67640caaf912a7eefacc3e2108c5afd70f7b072a4noda * You may obtain a copy of the License at 77640caaf912a7eefacc3e2108c5afd70f7b072a4noda * 87640caaf912a7eefacc3e2108c5afd70f7b072a4noda * http://www.apache.org/licenses/LICENSE-2.0 97640caaf912a7eefacc3e2108c5afd70f7b072a4noda * 107640caaf912a7eefacc3e2108c5afd70f7b072a4noda * Unless required by applicable law or agreed to in writing, software 117640caaf912a7eefacc3e2108c5afd70f7b072a4noda * distributed under the License is distributed on an "AS IS" BASIS, 127640caaf912a7eefacc3e2108c5afd70f7b072a4noda * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137640caaf912a7eefacc3e2108c5afd70f7b072a4noda * See the License for the specific language governing permissions and 147640caaf912a7eefacc3e2108c5afd70f7b072a4noda * limitations under the License. 157640caaf912a7eefacc3e2108c5afd70f7b072a4noda */ 167640caaf912a7eefacc3e2108c5afd70f7b072a4noda 177640caaf912a7eefacc3e2108c5afd70f7b072a4nodapackage com.android.smspush.unitTests; 187640caaf912a7eefacc3e2108c5afd70f7b072a4noda 197640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.app.Service; 207640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.content.Context; 217640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.content.Intent; 227640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.os.IBinder; 237640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport android.util.Log; 247640caaf912a7eefacc3e2108c5afd70f7b072a4noda 257640caaf912a7eefacc3e2108c5afd70f7b072a4nodaimport com.android.internal.util.HexDump; 267640caaf912a7eefacc3e2108c5afd70f7b072a4noda 277640caaf912a7eefacc3e2108c5afd70f7b072a4noda/** 287640caaf912a7eefacc3e2108c5afd70f7b072a4noda * To verify that receiver application receives correct body data. 297640caaf912a7eefacc3e2108c5afd70f7b072a4noda */ 307640caaf912a7eefacc3e2108c5afd70f7b072a4nodapublic class DataVerify extends Service { 317640caaf912a7eefacc3e2108c5afd70f7b072a4noda private static final String LOG_TAG = "WAP PUSH"; 327640caaf912a7eefacc3e2108c5afd70f7b072a4noda private static final int TIME_WAIT = 100; 337640caaf912a7eefacc3e2108c5afd70f7b072a4noda private static final int WAIT_COUNT = 100; 347640caaf912a7eefacc3e2108c5afd70f7b072a4noda private static byte[] mLastReceivedPdu = null; 357640caaf912a7eefacc3e2108c5afd70f7b072a4noda private static boolean sDataSet = false; 367640caaf912a7eefacc3e2108c5afd70f7b072a4noda 377640caaf912a7eefacc3e2108c5afd70f7b072a4noda private class IDataVerifyStub extends IDataVerify.Stub { 387640caaf912a7eefacc3e2108c5afd70f7b072a4noda public Context mContext; 397640caaf912a7eefacc3e2108c5afd70f7b072a4noda 407640caaf912a7eefacc3e2108c5afd70f7b072a4noda public IDataVerifyStub() { 417640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 427640caaf912a7eefacc3e2108c5afd70f7b072a4noda 437640caaf912a7eefacc3e2108c5afd70f7b072a4noda boolean arrayCompare(byte[] arr1, byte[] arr2) { 447640caaf912a7eefacc3e2108c5afd70f7b072a4noda int i; 457640caaf912a7eefacc3e2108c5afd70f7b072a4noda 467640caaf912a7eefacc3e2108c5afd70f7b072a4noda if (arr1 == null || arr2 == null) { 477640caaf912a7eefacc3e2108c5afd70f7b072a4noda if (arr1 == null) { 487640caaf912a7eefacc3e2108c5afd70f7b072a4noda Log.w(LOG_TAG, "arr1 is null"); 497640caaf912a7eefacc3e2108c5afd70f7b072a4noda } else { 507640caaf912a7eefacc3e2108c5afd70f7b072a4noda Log.w(LOG_TAG, "arr2 is null"); 517640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 527640caaf912a7eefacc3e2108c5afd70f7b072a4noda return false; 537640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 547640caaf912a7eefacc3e2108c5afd70f7b072a4noda 557640caaf912a7eefacc3e2108c5afd70f7b072a4noda if (arr1.length != arr2.length) { 567640caaf912a7eefacc3e2108c5afd70f7b072a4noda return false; 577640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 587640caaf912a7eefacc3e2108c5afd70f7b072a4noda 597640caaf912a7eefacc3e2108c5afd70f7b072a4noda for (i = 0; i < arr1.length; i++) { 607640caaf912a7eefacc3e2108c5afd70f7b072a4noda if (arr1[i] != arr2[i]) return false; 617640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 627640caaf912a7eefacc3e2108c5afd70f7b072a4noda return true; 637640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 647640caaf912a7eefacc3e2108c5afd70f7b072a4noda 657640caaf912a7eefacc3e2108c5afd70f7b072a4noda /** 667640caaf912a7eefacc3e2108c5afd70f7b072a4noda * Compare pdu and received pdu 677640caaf912a7eefacc3e2108c5afd70f7b072a4noda */ 687640caaf912a7eefacc3e2108c5afd70f7b072a4noda public synchronized boolean verifyData(byte[] pdu) { 697640caaf912a7eefacc3e2108c5afd70f7b072a4noda int cnt = 0; 707640caaf912a7eefacc3e2108c5afd70f7b072a4noda 717640caaf912a7eefacc3e2108c5afd70f7b072a4noda while (!sDataSet) { 727640caaf912a7eefacc3e2108c5afd70f7b072a4noda // wait for the activity receive data. 737640caaf912a7eefacc3e2108c5afd70f7b072a4noda try { 747640caaf912a7eefacc3e2108c5afd70f7b072a4noda Thread.sleep(TIME_WAIT); 757640caaf912a7eefacc3e2108c5afd70f7b072a4noda if (cnt++ > WAIT_COUNT) { 767640caaf912a7eefacc3e2108c5afd70f7b072a4noda // don't wait more than 10 sec. 777640caaf912a7eefacc3e2108c5afd70f7b072a4noda return false; 787640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 797640caaf912a7eefacc3e2108c5afd70f7b072a4noda } catch (InterruptedException e) {} 807640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 817640caaf912a7eefacc3e2108c5afd70f7b072a4noda 827640caaf912a7eefacc3e2108c5afd70f7b072a4noda Log.v(LOG_TAG, "verify pdu"); 837640caaf912a7eefacc3e2108c5afd70f7b072a4noda boolean ret = arrayCompare(pdu, mLastReceivedPdu); 847640caaf912a7eefacc3e2108c5afd70f7b072a4noda return ret; 857640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 867640caaf912a7eefacc3e2108c5afd70f7b072a4noda 877640caaf912a7eefacc3e2108c5afd70f7b072a4noda /** 887640caaf912a7eefacc3e2108c5afd70f7b072a4noda * Clear the old data. This method must be called before starting the test 897640caaf912a7eefacc3e2108c5afd70f7b072a4noda */ 907640caaf912a7eefacc3e2108c5afd70f7b072a4noda public void resetData() { 917640caaf912a7eefacc3e2108c5afd70f7b072a4noda mLastReceivedPdu = null; 927640caaf912a7eefacc3e2108c5afd70f7b072a4noda sDataSet = false; 937640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 947640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 957640caaf912a7eefacc3e2108c5afd70f7b072a4noda 967640caaf912a7eefacc3e2108c5afd70f7b072a4noda private final IDataVerifyStub binder = new IDataVerifyStub(); 977640caaf912a7eefacc3e2108c5afd70f7b072a4noda 987640caaf912a7eefacc3e2108c5afd70f7b072a4noda /** 997640caaf912a7eefacc3e2108c5afd70f7b072a4noda * Constructor 1007640caaf912a7eefacc3e2108c5afd70f7b072a4noda */ 1017640caaf912a7eefacc3e2108c5afd70f7b072a4noda public DataVerify() { 1027640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 1037640caaf912a7eefacc3e2108c5afd70f7b072a4noda 1047640caaf912a7eefacc3e2108c5afd70f7b072a4noda /** 1057640caaf912a7eefacc3e2108c5afd70f7b072a4noda * Receiver application must call this method when it receives the wap push message 1067640caaf912a7eefacc3e2108c5afd70f7b072a4noda */ 1077640caaf912a7eefacc3e2108c5afd70f7b072a4noda public static void SetLastReceivedPdu(byte[] pdu) { 1087640caaf912a7eefacc3e2108c5afd70f7b072a4noda mLastReceivedPdu = pdu; 1097640caaf912a7eefacc3e2108c5afd70f7b072a4noda sDataSet = true; 1107640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 1117640caaf912a7eefacc3e2108c5afd70f7b072a4noda 1127640caaf912a7eefacc3e2108c5afd70f7b072a4noda @Override 1137640caaf912a7eefacc3e2108c5afd70f7b072a4noda public IBinder onBind(Intent arg0) { 1147640caaf912a7eefacc3e2108c5afd70f7b072a4noda return binder; 1157640caaf912a7eefacc3e2108c5afd70f7b072a4noda } 1167640caaf912a7eefacc3e2108c5afd70f7b072a4noda 1177640caaf912a7eefacc3e2108c5afd70f7b072a4noda} 1187640caaf912a7eefacc3e2108c5afd70f7b072a4noda 1197640caaf912a7eefacc3e2108c5afd70f7b072a4noda 120