diff options
author | Sandeep Siddhartha <sansid@google.com> | 2014-07-25 18:37:29 -0700 |
---|---|---|
committer | Sandeep Siddhartha <sansid@google.com> | 2014-07-28 11:10:32 -0700 |
commit | 39c12fab49075b715c253c68c84b5c10c3150197 (patch) | |
tree | bcb5cff2b35c50575cb8e4b60ea35e8a635b16e7 /tests | |
parent | e0b8c378b7b4881396346116a9c1d633d1a4eb9f (diff) | |
download | frameworks_base-39c12fab49075b715c253c68c84b5c10c3150197.zip frameworks_base-39c12fab49075b715c253c68c84b5c10c3150197.tar.gz frameworks_base-39c12fab49075b715c253c68c84b5c10c3150197.tar.bz2 |
Use blob (shared memory) for large data in sound model/recognition event/config
Also add a missing null check in writeBlob
Bug: 16516353
Change-Id: Ie702f8daae541cab7c2cee6e13d49e7fc84c84e1
Diffstat (limited to 'tests')
-rw-r--r-- | tests/SoundTriggerTests/Android.mk | 27 | ||||
-rw-r--r-- | tests/SoundTriggerTests/AndroidManifest.xml | 25 | ||||
-rw-r--r-- | tests/SoundTriggerTests/src/android/hardware/soundtrigger/SoundTriggerTest.java | 256 |
3 files changed, 308 insertions, 0 deletions
diff --git a/tests/SoundTriggerTests/Android.mk b/tests/SoundTriggerTests/Android.mk new file mode 100644 index 0000000..407a9d7 --- /dev/null +++ b/tests/SoundTriggerTests/Android.mk @@ -0,0 +1,27 @@ +# +# Copyright (C) 2014 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := tests + +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_JAVA_LIBRARIES := android.test.runner + +LOCAL_PACKAGE_NAME := SoundTriggerTests + +include $(BUILD_PACKAGE) diff --git a/tests/SoundTriggerTests/AndroidManifest.xml b/tests/SoundTriggerTests/AndroidManifest.xml new file mode 100644 index 0000000..5e5a108 --- /dev/null +++ b/tests/SoundTriggerTests/AndroidManifest.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2014 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="android.hardware.soundtrigger"> + <application> + <uses-library android:name="android.test.runner" /> + </application> + + <instrumentation android:name="android.test.InstrumentationTestRunner" + android:targetPackage="android.hardware.soundtrigger" + android:label="Tests for android.hardware.soundtrigger" /> +</manifest> diff --git a/tests/SoundTriggerTests/src/android/hardware/soundtrigger/SoundTriggerTest.java b/tests/SoundTriggerTests/src/android/hardware/soundtrigger/SoundTriggerTest.java new file mode 100644 index 0000000..5d32c66 --- /dev/null +++ b/tests/SoundTriggerTests/src/android/hardware/soundtrigger/SoundTriggerTest.java @@ -0,0 +1,256 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.soundtrigger; + +import android.hardware.soundtrigger.SoundTrigger; +import android.hardware.soundtrigger.SoundTrigger.Keyphrase; +import android.hardware.soundtrigger.SoundTrigger.KeyphraseSoundModel; +import android.hardware.soundtrigger.SoundTrigger.RecognitionEvent; +import android.os.Parcel; +import android.test.InstrumentationTestCase; +import android.test.suitebuilder.annotation.LargeTest; +import android.test.suitebuilder.annotation.SmallTest; + +import java.util.Arrays; +import java.util.Random; +import java.util.UUID; + +public class SoundTriggerTest extends InstrumentationTestCase { + private Random mRandom = new Random(); + + @SmallTest + public void testKeyphraseParcelUnparcel_noUsers() throws Exception { + Keyphrase keyphrase = new Keyphrase(1, 0, "en-US", "hello", null); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + keyphrase.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + Keyphrase unparceled = Keyphrase.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(keyphrase.id, unparceled.id); + assertNull(unparceled.users); + assertEquals(keyphrase.locale, unparceled.locale); + assertEquals(keyphrase.text, unparceled.text); + } + + @SmallTest + public void testKeyphraseParcelUnparcel_zeroUsers() throws Exception { + Keyphrase keyphrase = new Keyphrase(1, 0, "en-US", "hello", new int[0]); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + keyphrase.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + Keyphrase unparceled = Keyphrase.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(keyphrase.id, unparceled.id); + assertTrue(Arrays.equals(keyphrase.users, unparceled.users)); + assertEquals(keyphrase.locale, unparceled.locale); + assertEquals(keyphrase.text, unparceled.text); + } + + @SmallTest + public void testKeyphraseParcelUnparcel_pos() throws Exception { + Keyphrase keyphrase = new Keyphrase(1, 0, "en-US", "hello", new int[] {1, 2, 3, 4, 5}); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + keyphrase.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + Keyphrase unparceled = Keyphrase.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(keyphrase.id, unparceled.id); + assertTrue(Arrays.equals(keyphrase.users, unparceled.users)); + assertEquals(keyphrase.locale, unparceled.locale); + assertEquals(keyphrase.text, unparceled.text); + } + + @SmallTest + public void testKeyphraseSoundModelParcelUnparcel_noData() throws Exception { + Keyphrase[] keyphrases = new Keyphrase[2]; + keyphrases[0] = new Keyphrase(1, 0, "en-US", "hello", new int[] {0}); + keyphrases[1] = new Keyphrase(2, 0, "fr-FR", "there", new int[] {1, 2}); + KeyphraseSoundModel ksm = new KeyphraseSoundModel(UUID.randomUUID(), null, keyphrases); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + ksm.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + KeyphraseSoundModel unparceled = KeyphraseSoundModel.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(ksm.uuid, unparceled.uuid); + assertNull(unparceled.data); + assertEquals(ksm.type, unparceled.type); + assertTrue(Arrays.equals(keyphrases, unparceled.keyphrases)); + } + + @SmallTest + public void testKeyphraseSoundModelParcelUnparcel_zeroData() throws Exception { + Keyphrase[] keyphrases = new Keyphrase[2]; + keyphrases[0] = new Keyphrase(1, 0, "en-US", "hello", new int[] {0}); + keyphrases[1] = new Keyphrase(2, 0, "fr-FR", "there", new int[] {1, 2}); + KeyphraseSoundModel ksm = new KeyphraseSoundModel(UUID.randomUUID(), new byte[0], + keyphrases); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + ksm.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + KeyphraseSoundModel unparceled = KeyphraseSoundModel.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(ksm.uuid, unparceled.uuid); + assertEquals(ksm.type, unparceled.type); + assertTrue(Arrays.equals(ksm.keyphrases, unparceled.keyphrases)); + assertTrue(Arrays.equals(ksm.data, unparceled.data)); + } + + @SmallTest + public void testKeyphraseSoundModelParcelUnparcel_noKeyphrases() throws Exception { + byte[] data = new byte[10]; + mRandom.nextBytes(data); + KeyphraseSoundModel ksm = new KeyphraseSoundModel(UUID.randomUUID(), data, null); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + ksm.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + KeyphraseSoundModel unparceled = KeyphraseSoundModel.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(ksm.uuid, unparceled.uuid); + assertEquals(ksm.type, unparceled.type); + assertNull(unparceled.keyphrases); + assertTrue(Arrays.equals(ksm.data, unparceled.data)); + } + + @SmallTest + public void testKeyphraseSoundModelParcelUnparcel_zeroKeyphrases() throws Exception { + byte[] data = new byte[10]; + mRandom.nextBytes(data); + KeyphraseSoundModel ksm = new KeyphraseSoundModel(UUID.randomUUID(), data, + new Keyphrase[0]); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + ksm.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + KeyphraseSoundModel unparceled = KeyphraseSoundModel.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(ksm.uuid, unparceled.uuid); + assertEquals(ksm.type, unparceled.type); + assertTrue(Arrays.equals(ksm.keyphrases, unparceled.keyphrases)); + assertTrue(Arrays.equals(ksm.data, unparceled.data)); + } + + @LargeTest + public void testKeyphraseSoundModelParcelUnparcel_largeData() throws Exception { + Keyphrase[] keyphrases = new Keyphrase[2]; + keyphrases[0] = new Keyphrase(1, 0, "en-US", "hello", new int[] {0}); + keyphrases[1] = new Keyphrase(2, 0, "fr-FR", "there", new int[] {1, 2}); + byte[] data = new byte[200 * 1024]; + mRandom.nextBytes(data); + KeyphraseSoundModel ksm = new KeyphraseSoundModel(UUID.randomUUID(), data, keyphrases); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + ksm.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + KeyphraseSoundModel unparceled = KeyphraseSoundModel.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(ksm.uuid, unparceled.uuid); + assertEquals(ksm.type, unparceled.type); + assertTrue(Arrays.equals(ksm.data, unparceled.data)); + assertTrue(Arrays.equals(ksm.keyphrases, unparceled.keyphrases)); + } + + @SmallTest + public void testRecognitionEventParcelUnparcel_noData() throws Exception { + RecognitionEvent re = new RecognitionEvent(SoundTrigger.RECOGNITION_STATUS_SUCCESS, 1, + true, 2, 3, 4, null); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + re.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + RecognitionEvent unparceled = RecognitionEvent.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(re, unparceled); + } + + @SmallTest + public void testRecognitionEventParcelUnparcel_zeroData() throws Exception { + RecognitionEvent re = new RecognitionEvent(SoundTrigger.RECOGNITION_STATUS_FAILURE, 1, + true, 2, 3, 4, new byte[1]); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + re.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + RecognitionEvent unparceled = RecognitionEvent.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(re, unparceled); + } + + @SmallTest + public void testRecognitionEventParcelUnparcel_largeData() throws Exception { + byte[] data = new byte[200 * 1024]; + mRandom.nextBytes(data); + RecognitionEvent re = new RecognitionEvent(SoundTrigger.RECOGNITION_STATUS_ABORT, 1, + false, 2, 3, 4, data); + + // Write to a parcel + Parcel parcel = Parcel.obtain(); + re.writeToParcel(parcel, 0); + + // Read from it + parcel.setDataPosition(0); + RecognitionEvent unparceled = RecognitionEvent.CREATOR.createFromParcel(parcel); + + // Verify that they are the same + assertEquals(re, unparceled); + } +} |