1adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang/* 2adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * Copyright (C) 2014 The Android Open Source Project 3adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * 4adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * you may not use this file except in compliance with the License. 6adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * You may obtain a copy of the License at 7adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * 8adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * http://www.apache.org/licenses/LICENSE-2.0 9adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * 10adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * Unless required by applicable law or agreed to in writing, software 11adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * distributed under the License is distributed on an "AS IS" BASIS, 12adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * See the License for the specific language governing permissions and 14adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * limitations under the License. 15adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang */ 16adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 176d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangpackage android.bluetooth.le; 18adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 196d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangimport android.bluetooth.le.ScanRecord; 20adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wangimport android.os.ParcelUuid; 21adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wangimport android.test.suitebuilder.annotation.SmallTest; 22adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 23adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wangimport junit.framework.TestCase; 24adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 25adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wangimport java.util.Arrays; 26adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 27adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang/** 286d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Unit test cases for {@link ScanRecord}. 29adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * <p> 30ab2ed62f15d0dac0f8ef825ff2d3677c9ae18f44Wei Wang * To run this test, use adb shell am instrument -e class 'android.bluetooth.ScanRecordTest' -w 31adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang * 'com.android.bluetooth.tests/android.bluetooth.BluetoothTestRunner' 32adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang */ 336d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangpublic class ScanRecordTest extends TestCase { 34adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 35adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang @SmallTest 36adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang public void testParser() { 37adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang byte[] scanRecord = new byte[] { 38adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 0x02, 0x01, 0x1a, // advertising flags 39adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 0x05, 0x02, 0x0b, 0x11, 0x0a, 0x11, // 16 bit service uuids 40adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 0x04, 0x09, 0x50, 0x65, 0x64, // name 41adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 0x02, 0x0A, (byte) 0xec, // tx power level 42adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 0x05, 0x16, 0x0b, 0x11, 0x50, 0x64, // service data 43adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 0x05, (byte) 0xff, (byte) 0xe0, 0x00, 0x02, 0x15, // manufacturer specific data 44adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 0x03, 0x50, 0x01, 0x02, // an unknown data type won't cause trouble 45adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang }; 466d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang ScanRecord data = ScanRecord.parseFromBytes(scanRecord); 47adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang assertEquals(0x1a, data.getAdvertiseFlags()); 48adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang ParcelUuid uuid1 = ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB"); 49adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang ParcelUuid uuid2 = ParcelUuid.fromString("0000110B-0000-1000-8000-00805F9B34FB"); 50adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang assertTrue(data.getServiceUuids().contains(uuid1)); 51adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang assertTrue(data.getServiceUuids().contains(uuid2)); 52adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 53af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang assertEquals("Ped", data.getDeviceName()); 54adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang assertEquals(-20, data.getTxPowerLevel()); 55adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 566bf513d32db7fbc157681bd642e12a201cf20a89Wei Wang assertTrue(data.getManufacturerSpecificData().get(0x00E0) != null); 57adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang assertArrayEquals(new byte[] { 586bf513d32db7fbc157681bd642e12a201cf20a89Wei Wang 0x02, 0x15 }, data.getManufacturerSpecificData().get(0x00E0)); 59adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 606bf513d32db7fbc157681bd642e12a201cf20a89Wei Wang assertTrue(data.getServiceData().containsKey(uuid2)); 61adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang assertArrayEquals(new byte[] { 626bf513d32db7fbc157681bd642e12a201cf20a89Wei Wang 0x50, 0x64 }, data.getServiceData().get(uuid2)); 63adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang } 64adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 65adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang // Assert two byte arrays are equal. 66adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang private static void assertArrayEquals(byte[] expected, byte[] actual) { 67adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang if (!Arrays.equals(expected, actual)) { 68adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang fail("expected:<" + Arrays.toString(expected) + 69adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang "> but was:<" + Arrays.toString(actual) + ">"); 70adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang } 71adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang 72adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang } 73adf6aff5b03b1e3ca4636f9887225a7f906d1238Wei Wang} 74