From 5da8700f668ea23a3dbb1924b2966941a69d6edd Mon Sep 17 00:00:00 2001 From: Jiabin Huang Date: Thu, 17 Oct 2019 21:56:16 +0000 Subject: [PATCH] Revert "Revert "Add parcelable test for classes in libaudiofoundation."" This reverts commit aa05782462c7190556d41f6ce70d5db7e09b7ed9. Reason for revert: The original CL should work on top of ag/9570881 Test: make, atest audiofoundation_parcelable_test Change-Id: Ibd49f8e86d97f94b13ff59779631283c0c4452e3 --- media/libaudiofoundation/TEST_MAPPING | 7 + media/libaudiofoundation/tests/Android.bp | 25 +++ .../tests/audiofoundation_parcelable_test.cpp | 142 ++++++++++++++++++ 3 files changed, 174 insertions(+) create mode 100644 media/libaudiofoundation/TEST_MAPPING create mode 100644 media/libaudiofoundation/tests/Android.bp create mode 100644 media/libaudiofoundation/tests/audiofoundation_parcelable_test.cpp diff --git a/media/libaudiofoundation/TEST_MAPPING b/media/libaudiofoundation/TEST_MAPPING new file mode 100644 index 0000000000..f6d249a1a3 --- /dev/null +++ b/media/libaudiofoundation/TEST_MAPPING @@ -0,0 +1,7 @@ +{ + "presubmit": [ + { + "name": "audiofoundation_parcelable_test" + } + ] +} diff --git a/media/libaudiofoundation/tests/Android.bp b/media/libaudiofoundation/tests/Android.bp new file mode 100644 index 0000000000..f258b14424 --- /dev/null +++ b/media/libaudiofoundation/tests/Android.bp @@ -0,0 +1,25 @@ +cc_test { + name: "audiofoundation_parcelable_test", + + shared_libs: [ + "libaudiofoundation", + "libbinder", + "liblog", + "libutils", + ], + + header_libs: [ + "libaudio_system_headers", + ], + + srcs: [ + "audiofoundation_parcelable_test.cpp", + ], + + cflags: [ + "-Werror", + "-Wall", + ], + + test_suites: ["device-tests"], +} diff --git a/media/libaudiofoundation/tests/audiofoundation_parcelable_test.cpp b/media/libaudiofoundation/tests/audiofoundation_parcelable_test.cpp new file mode 100644 index 0000000000..5baa0725b9 --- /dev/null +++ b/media/libaudiofoundation/tests/audiofoundation_parcelable_test.cpp @@ -0,0 +1,142 @@ +/* + * Copyright (C) 2019 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. + */ + +#define LOG_TAG "audiofoundation_parcelable_test" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace android { + +static const audio_port_config TEST_AUDIO_PORT_CONFIG = { + .id = 0, + .role = AUDIO_PORT_ROLE_SINK, + .type = AUDIO_PORT_TYPE_DEVICE, + .config_mask = AUDIO_PORT_CONFIG_SAMPLE_RATE | AUDIO_PORT_CONFIG_CHANNEL_MASK | + AUDIO_PORT_CONFIG_FORMAT | AUDIO_PORT_CONFIG_GAIN, + .sample_rate = 48000, + .channel_mask = AUDIO_CHANNEL_OUT_STEREO, + .format = AUDIO_FORMAT_PCM_16_BIT, + .gain = { + .index = 0, + .mode = AUDIO_GAIN_MODE_JOINT, + .channel_mask = AUDIO_CHANNEL_OUT_STEREO, + } +}; + +class AudioPortConfigTestStub : public AudioPortConfig { +public: + sp getAudioPort() const override { return nullptr; } +}; + +AudioGains getAudioGainsForTest() { + AudioGains audioGains; + sp audioGain = new AudioGain(0 /*index*/, false /*useInChannelMask*/); + audioGain->setMode(AUDIO_GAIN_MODE_JOINT); + audioGain->setChannelMask(AUDIO_CHANNEL_OUT_STEREO); + audioGain->setMinValueInMb(-3200); + audioGain->setMaxValueInMb(600); + audioGain->setDefaultValueInMb(0); + audioGain->setStepValueInMb(100); + audioGain->setMinRampInMs(100); + audioGain->setMaxRampInMs(500); + audioGains.push_back(audioGain); + return audioGains; +} + +AudioProfileVector getAudioProfileVectorForTest() { + AudioProfileVector audioProfiles; + sp audioProfile = AudioProfile::createFullDynamic(); + audioProfile->setChannels({AUDIO_CHANNEL_OUT_MONO, AUDIO_CHANNEL_OUT_STEREO}); + audioProfile->setSampleRates({48000}); + audioProfiles.add(audioProfile); + return audioProfiles; +} + +TEST(AudioFoundationParcelableTest, ParcelingAudioGain) { + Parcel data; + AudioGains audioGains = getAudioGainsForTest(); + + ASSERT_EQ(data.writeParcelable(audioGains), NO_ERROR); + data.setDataPosition(0); + AudioGains audioGainsFromParcel; + ASSERT_EQ(data.readParcelable(&audioGainsFromParcel), NO_ERROR); + ASSERT_TRUE(audioGainsFromParcel.equals(audioGains)); +} + +TEST(AudioFoundationParcelableTest, ParcelingAudioProfileVector) { + Parcel data; + AudioProfileVector audioProfiles = getAudioProfileVectorForTest(); + + ASSERT_EQ(data.writeParcelable(audioProfiles), NO_ERROR); + data.setDataPosition(0); + AudioProfileVector audioProfilesFromParcel; + ASSERT_EQ(data.readParcelable(&audioProfilesFromParcel), NO_ERROR); + ASSERT_TRUE(audioProfilesFromParcel.equals(audioProfiles)); +} + +TEST(AudioFoundationParcelableTest, ParcelingAudioPort) { + Parcel data; + sp audioPort = new AudioPort( + "AudioPortName", AUDIO_PORT_TYPE_DEVICE, AUDIO_PORT_ROLE_SINK); + audioPort->setGains(getAudioGainsForTest()); + audioPort->setAudioProfiles(getAudioProfileVectorForTest()); + + ASSERT_EQ(data.writeParcelable(*audioPort), NO_ERROR); + data.setDataPosition(0); + sp audioPortFromParcel = new AudioPort( + "", AUDIO_PORT_TYPE_NONE, AUDIO_PORT_ROLE_NONE); + ASSERT_EQ(data.readParcelable(audioPortFromParcel.get()), NO_ERROR); + ASSERT_TRUE(audioPortFromParcel->equals(audioPort)); +} + +TEST(AudioFoundationParcelableTest, ParcelingAudioPortConfig) { + Parcel data; + sp audioPortConfig = new AudioPortConfigTestStub(); + audioPortConfig->applyAudioPortConfig(&TEST_AUDIO_PORT_CONFIG); + + ASSERT_EQ(data.writeParcelable(*audioPortConfig), NO_ERROR); + data.setDataPosition(0); + sp audioPortConfigFromParcel = new AudioPortConfigTestStub(); + ASSERT_EQ(data.readParcelable(audioPortConfigFromParcel.get()), NO_ERROR); + ASSERT_TRUE(audioPortConfigFromParcel->equals(audioPortConfig)); +} + +TEST(AudioFoundationParcelableTest, ParcelingDeviceDescriptorBase) { + Parcel data; + sp desc = new DeviceDescriptorBase(AUDIO_DEVICE_OUT_SPEAKER); + desc->setGains(getAudioGainsForTest()); + desc->setAudioProfiles(getAudioProfileVectorForTest()); + desc->applyAudioPortConfig(&TEST_AUDIO_PORT_CONFIG); + desc->setAddress("DeviceDescriptorBaseTestAddress"); + + ASSERT_EQ(data.writeParcelable(*desc), NO_ERROR); + data.setDataPosition(0); + sp descFromParcel = new DeviceDescriptorBase(AUDIO_DEVICE_NONE); + ASSERT_EQ(data.readParcelable(descFromParcel.get()), NO_ERROR); + ASSERT_TRUE(descFromParcel->equals(desc)); +} + +} // namespace android