diff options
author | Mikhail Naganov <mnaganov@google.com> | 2017-10-10 10:31:07 -0700 |
---|---|---|
committer | Mikhail Naganov <mnaganov@google.com> | 2017-10-10 14:30:00 -0700 |
commit | ce607879baf84d5b3a8df95a609ad06204c56711 (patch) | |
tree | 8b8e559c12d0884455b7a2f5e7d113b9a839b763 | |
parent | 926a8e7440a0c85d39dbf7143bfe03964363ddec (diff) | |
download | android_hardware_interfaces-ce607879baf84d5b3a8df95a609ad06204c56711.tar.gz android_hardware_interfaces-ce607879baf84d5b3a8df95a609ad06204c56711.tar.bz2 android_hardware_interfaces-ce607879baf84d5b3a8df95a609ad06204c56711.zip |
Audio VTS: Allow 4GB buffer prepareToWrite/Read to succeed on 64 bits
Because on oc-dev the runtime image can not be modified and that this is
not a bug but a test and implementation misalignment,
allow prepareForWrite/Read(UINT32_MAX, UINT32_MAX) to succeed on oc-dev.
MR1 will have a better fix where the HAL will always reject > 1GiB
buffers independently of the architecture.
Test: vts-tradefed run commandAndExit vts --module VtsHalAudioV2_0Target
Bug: 67030516
Change-Id: I10a5ee3868c67c45ed5297d9c5c89129d762c7cd
Merged-In: I4cc3efda9bb66e6dae8b4e6785f52d9e51440aee
Signed-off-by: Kevin Rocard <krocard@google.com>
-rw-r--r-- | audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp | 48 |
1 files changed, 32 insertions, 16 deletions
diff --git a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp index 8ac8a297e..3ee44f33c 100644 --- a/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp +++ b/audio/2.0/vts/functional/AudioPrimaryHidlHalTest.cpp @@ -1057,27 +1057,34 @@ TEST_P(InputStreamTest, SetGain) { "InputStream::setGain"); } -static void testPrepareForReading(IStreamIn* stream, uint32_t frameSize, - uint32_t framesCount) { +static void testPrepareForReading(IStreamIn* stream, uint32_t frameSize, uint32_t framesCount, + bool allowSucceed) { Result res; - // Ignore output parameters as the call should fail + // Ignore output parameters. ASSERT_OK(stream->prepareForReading( frameSize, framesCount, [&res](auto r, auto&, auto&, auto&, auto&) { res = r; })); - EXPECT_RESULT(Result::INVALID_ARGUMENTS, res); + if (allowSucceed) { + auto status = { + Result::INVALID_ARGUMENTS, Result::OK, + }; + EXPECT_RESULT(status, res); + } else { + EXPECT_RESULT(Result::INVALID_ARGUMENTS, res); + }; } TEST_P(InputStreamTest, PrepareForReadingWithZeroBuffer) { doc::test( "Preparing a stream for reading with a 0 sized buffer should fail"); - testPrepareForReading(stream.get(), 0, 0); + testPrepareForReading(stream.get(), 0, 0, false /*allowSucceed*/); } TEST_P(InputStreamTest, PrepareForReadingWithHugeBuffer) { doc::test( "Preparing a stream for reading with a 2^32 sized buffer should fail"); - testPrepareForReading(stream.get(), 1, - std::numeric_limits<uint32_t>::max()); + testPrepareForReading(stream.get(), 1, std::numeric_limits<uint32_t>::max(), + false /*allowSucceed*/); } TEST_P(InputStreamTest, PrepareForReadingCheckOverflow) { @@ -1085,7 +1092,8 @@ TEST_P(InputStreamTest, PrepareForReadingCheckOverflow) { "Preparing a stream for reading with a overflowing sized buffer should " "fail"); auto uintMax = std::numeric_limits<uint32_t>::max(); - testPrepareForReading(stream.get(), uintMax, uintMax); + // In O, the test fails for 32-bit HAL, and succeeds for 64-bit HAL. + testPrepareForReading(stream.get(), uintMax, uintMax, true /*allowSucceed*/); } TEST_P(InputStreamTest, GetInputFramesLost) { @@ -1125,27 +1133,34 @@ TEST_P(OutputStreamTest, setVolume) { "setVolume"); } -static void testPrepareForWriting(IStreamOut* stream, uint32_t frameSize, - uint32_t framesCount) { +static void testPrepareForWriting(IStreamOut* stream, uint32_t frameSize, uint32_t framesCount, + bool allowSucceed) { Result res; - // Ignore output parameters as the call should fail + // Ignore output parameters. ASSERT_OK(stream->prepareForWriting( frameSize, framesCount, [&res](auto r, auto&, auto&, auto&, auto&) { res = r; })); - EXPECT_RESULT(Result::INVALID_ARGUMENTS, res); + if (allowSucceed) { + auto status = { + Result::INVALID_ARGUMENTS, Result::OK, + }; + EXPECT_RESULT(status, res); + } else { + EXPECT_RESULT(Result::INVALID_ARGUMENTS, res); + }; } TEST_P(OutputStreamTest, PrepareForWriteWithZeroBuffer) { doc::test( "Preparing a stream for writing with a 0 sized buffer should fail"); - testPrepareForWriting(stream.get(), 0, 0); + testPrepareForWriting(stream.get(), 0, 0, false /*allowSucceed*/); } TEST_P(OutputStreamTest, PrepareForWriteWithHugeBuffer) { doc::test( "Preparing a stream for writing with a 2^32 sized buffer should fail"); - testPrepareForWriting(stream.get(), 1, - std::numeric_limits<uint32_t>::max()); + testPrepareForWriting(stream.get(), 1, std::numeric_limits<uint32_t>::max(), + false /*allowSucceed*/); } TEST_P(OutputStreamTest, PrepareForWritingCheckOverflow) { @@ -1153,7 +1168,8 @@ TEST_P(OutputStreamTest, PrepareForWritingCheckOverflow) { "Preparing a stream for writing with a overflowing sized buffer should " "fail"); auto uintMax = std::numeric_limits<uint32_t>::max(); - testPrepareForWriting(stream.get(), uintMax, uintMax); + // In O, the test fails for 32-bit HAL, and succeeds for 64-bit HAL. + testPrepareForWriting(stream.get(), uintMax, uintMax, true /*allowSucceed*/); } struct Capability { |