Skip to content

Commit

Permalink
feat: introduced retry rules for flaky android push tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ttypic committed Oct 3, 2024
1 parent 1d04fc4 commit 3d017ab
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
49 changes: 49 additions & 0 deletions android/src/androidTest/java/io/ably/lib/test/RetryTestRule.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package io.ably.lib.test;

import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;


public class RetryTestRule implements TestRule {

private final int timesToRunTestCount;

/**
* If `times` is 0, then we should run the test once.
*/
public RetryTestRule(int times) {
this.timesToRunTestCount = times + 1;
}

@Override
public Statement apply(Statement base, Description description) {
return statement(base, description);
}

private Statement statement(Statement base, Description description) {
return new Statement() {

@Override
public void evaluate() throws Throwable {
Throwable latestException = null;

for (int runCount = 0; runCount < timesToRunTestCount; runCount++) {
try {
base.evaluate();
return;
} catch (Throwable t) {
latestException = t;
System.err.printf("%s: test failed on run: `%d`. Will run a maximum of `%d` times.%n", description.getDisplayName(), runCount, timesToRunTestCount);
t.printStackTrace();
}
}

if (latestException != null) {
System.err.printf("%s: giving up after `%d` failures%n", description.getDisplayName(), timesToRunTestCount);
throw latestException;
}
}
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import android.content.IntentFilter;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.util.Log;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
Expand Down Expand Up @@ -41,6 +42,7 @@
import io.ably.lib.rest.Auth;
import io.ably.lib.rest.Channel;
import io.ably.lib.rest.DeviceDetails;
import io.ably.lib.test.RetryTestRule;
import io.ably.lib.test.common.Helpers;
import io.ably.lib.test.common.Helpers.AsyncWaiter;
import io.ably.lib.test.common.Helpers.CompletionWaiter;
Expand All @@ -59,7 +61,9 @@
import java9.util.stream.StreamSupport;

import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

Expand All @@ -86,6 +90,9 @@
public class AndroidPushTest {
private static final int TIMEOUT_SECONDS = 30;

@Rule
public RetryTestRule retryRule = new RetryTestRule(2);

private class TestActivation {
private Helpers.RawHttpTracker httpTracker;
private AblyRest rest;
Expand Down Expand Up @@ -181,6 +188,11 @@ private void moveToAfterRegistrationUpdateFailed() throws AblyException {
}
}

@Before
public void cleanUp() {
PreferenceManager.getDefaultSharedPreferences(InstrumentationRegistry.getTargetContext()).edit().clear().commit();
}

// RSH2a
@Test
public void push_activate() throws InterruptedException, AblyException {
Expand Down

0 comments on commit 3d017ab

Please sign in to comment.