From 4b7c4adc319a310263d63a22a836e5b63029bbd6 Mon Sep 17 00:00:00 2001 From: Lais Andrade Date: Mon, 16 Nov 2020 13:36:00 +0000 Subject: [PATCH] Fix flaky waveform vibration test Use Mockito.inOrder verifier to check waveform amplitues are set in the expected pattern order and use a single timeout for the entire waveform in the test. Bug: 173347869 Test: atest FrameworksServicesTests:VibratorServiceTest Change-Id: Ib1780746027f15ade2360b5c4f740bccc919b57a --- .../android/server/VibratorServiceTest.java | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/services/tests/servicestests/src/com/android/server/VibratorServiceTest.java b/services/tests/servicestests/src/com/android/server/VibratorServiceTest.java index c1f83cbb77c5b..eae4a0804971c 100644 --- a/services/tests/servicestests/src/com/android/server/VibratorServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/VibratorServiceTest.java @@ -452,22 +452,15 @@ public class VibratorServiceTest { new long[]{10, 10, 10}, new int[]{100, 200, 50}, -1); vibrate(service, effect); - verify(mNativeWrapperMock).vibratorOff(); - - // Wait for VibrateThread to turn vibrator ON with total timing and no callback. - Thread.sleep(5); - verify(mNativeWrapperMock).vibratorOn(eq(30L), anyLong()); - - // First amplitude set right away. - verify(mNativeWrapperMock).vibratorSetAmplitude(eq(100)); - - // Second amplitude set after first timing is finished. - Thread.sleep(10); - verify(mNativeWrapperMock).vibratorSetAmplitude(eq(200)); - - // Third amplitude set after second timing is finished. - Thread.sleep(10); - verify(mNativeWrapperMock).vibratorSetAmplitude(eq(50)); + // Wait for VibrateThread to finish: 10ms 100, 10ms 200, 10ms 50. + Thread.sleep(40); + InOrder inOrderVerifier = inOrder(mNativeWrapperMock); + inOrderVerifier.verify(mNativeWrapperMock).vibratorOff(); + inOrderVerifier.verify(mNativeWrapperMock).vibratorOn(eq(30L), anyLong()); + inOrderVerifier.verify(mNativeWrapperMock).vibratorSetAmplitude(eq(100)); + inOrderVerifier.verify(mNativeWrapperMock).vibratorSetAmplitude(eq(200)); + inOrderVerifier.verify(mNativeWrapperMock).vibratorSetAmplitude(eq(50)); + inOrderVerifier.verify(mNativeWrapperMock).vibratorOff(); } @Test @@ -696,7 +689,7 @@ public class VibratorServiceTest { HAPTIC_FEEDBACK_ATTRS); // Waveform effect runs on a separate thread. - Thread.sleep(5); + Thread.sleep(15); // Alarm vibration is never scaled. verify(mNativeWrapperMock).vibratorSetAmplitude(eq(100));