Skip to content

Commit

Permalink
Merge pull request #63 from deepueg/fix-request-handle-un-registration
Browse files Browse the repository at this point in the history
Fix request handle un registration
  • Loading branch information
deepueg authored Jan 7, 2020
2 parents b7f65e5 + d352e2c commit 492d585
Show file tree
Hide file tree
Showing 7 changed files with 218 additions and 106 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
package com.walmartlabs.electrode.reactnative.bridge;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import com.walmartlabs.electrode.reactnative.sample.api.PersonApi;

import org.junit.Test;

import java.util.concurrent.CountDownLatch;

import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertNotNull;
import static junit.framework.TestCase.assertSame;
import static junit.framework.TestCase.fail;

public class RequestHandleTests extends BaseBridgeTestCase {

@Test
public void testRequestHandlerRemoval() {
final CountDownLatch countDownLatch = new CountDownLatch(3);
final String requestName = "testRequestHandlerRemoval";

RequestHandlerHandle requestHandle = new RequestHandlerProcessor<>(requestName, None.class, None.class, new ElectrodeBridgeRequestHandler<None, None>() {
@Override
public void onRequest(@Nullable None payload, @NonNull ElectrodeBridgeResponseListener<None> responseListener) {
assertSame(None.NONE, payload);
responseListener.onSuccess(null);
countDownLatch.countDown();
}
}).execute();


new RequestProcessor<None, None>(requestName, null, None.class, new ElectrodeBridgeResponseListener<None>() {
@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
fail();
}

@Override
public void onSuccess(@Nullable None responseData) {
assertSame(None.NONE, responseData);
countDownLatch.countDown();
}
}).execute();

requestHandle.unregister();

new RequestProcessor<None, None>(requestName, null, None.class, new ElectrodeBridgeResponseListener<None>() {
@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
failureMessage.getMessage();
countDownLatch.countDown();
}

@Override
public void onSuccess(@Nullable None responseData) {
fail();
}
}).execute();

waitForCountDownToFinishOrFail(countDownLatch);
}

@Test
public void testRequestHandlerRemovalWithApi() {
final CountDownLatch countDownLatch = new CountDownLatch(3);
final int RESULT_AGE = 10;

RequestHandlerHandle handlerHandle = PersonApi.requests().registerGetAgeRequestHandler(new ElectrodeBridgeRequestHandler<String, Integer>() {
@Override
public void onRequest(@Nullable String payload, @NonNull ElectrodeBridgeResponseListener<Integer> responseListener) {
responseListener.onSuccess(RESULT_AGE);
countDownLatch.countDown();
}
});

PersonApi.requests().getAge("user", new ElectrodeBridgeResponseListener<Integer>() {
@Override
public void onSuccess(@Nullable Integer responseData) {
assertNotNull(responseData);
assertEquals(RESULT_AGE, responseData.intValue());
countDownLatch.countDown();
}

@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
fail();
}
});

handlerHandle.unregister();

PersonApi.requests().getAge("user", new ElectrodeBridgeResponseListener<Integer>() {
@Override
public void onSuccess(@Nullable Integer responseData) {
fail();
}

@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
assertNotNull(failureMessage);
countDownLatch.countDown();
}
});
waitForCountDownToFinishOrFail(countDownLatch);
}

@Test
public void testMultipleRequestHandlers() {
final CountDownLatch countDownLatch = new CountDownLatch(4);
final int RESULT_AGE_FIRST = 10;
final int RESULT_AGE_SECOND = 20;
final int RESULT_AGE_THIRD = 30;

RequestHandlerHandle handlerHandle = PersonApi.requests().registerGetAgeRequestHandler(new ElectrodeBridgeRequestHandler<String, Integer>() {
@Override
public void onRequest(@Nullable String payload, @NonNull ElectrodeBridgeResponseListener<Integer> responseListener) {
responseListener.onSuccess(RESULT_AGE_FIRST);
countDownLatch.countDown();
}
});

RequestHandlerHandle handlerHandle1 = PersonApi.requests().registerGetAgeRequestHandler(new ElectrodeBridgeRequestHandler<String, Integer>() {
@Override
public void onRequest(@Nullable String payload, @NonNull ElectrodeBridgeResponseListener<Integer> responseListener) {
responseListener.onSuccess(RESULT_AGE_SECOND);
countDownLatch.countDown();
}
});

RequestHandlerHandle handlerHandle2 = PersonApi.requests().registerGetAgeRequestHandler(new ElectrodeBridgeRequestHandler<String, Integer>() {
@Override
public void onRequest(@Nullable String payload, @NonNull ElectrodeBridgeResponseListener<Integer> responseListener) {
responseListener.onSuccess(RESULT_AGE_THIRD);
countDownLatch.countDown();
}
});

PersonApi.requests().getAge("user", new ElectrodeBridgeResponseListener<Integer>() {
@Override
public void onSuccess(@Nullable Integer responseData) {
assertNotNull(responseData);
assertEquals(RESULT_AGE_THIRD, responseData.intValue());
countDownLatch.countDown();
}

@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
fail();
}
});

handlerHandle.unregister();
handlerHandle1.unregister();

PersonApi.requests().getAge("user", new ElectrodeBridgeResponseListener<Integer>() {
@Override
public void onSuccess(@Nullable Integer responseData) {
assertNotNull(responseData);
assertEquals(RESULT_AGE_THIRD, responseData.intValue());
countDownLatch.countDown();
}

@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
fail();
}
});

handlerHandle2.unregister();

PersonApi.requests().getAge("user", new ElectrodeBridgeResponseListener<Integer>() {
@Override
public void onSuccess(@Nullable Integer responseData) {
fail();
}

@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
assertNotNull(failureMessage);
countDownLatch.countDown();
}
});

waitForCountDownToFinishOrFail(countDownLatch);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1195,95 +1195,4 @@ public void onResponse(ReadableMap response) {

waitForCountDownToFinishOrFail(countDownLatch);
}

@Test
public void testRequestHandlerRemoval() {
final CountDownLatch countDownLatch = new CountDownLatch(3);
final String requestName = "testRequestHandlerRemoval";

RequestHandlerHandle requestHandle = new RequestHandlerProcessor<>(requestName, None.class, None.class, new ElectrodeBridgeRequestHandler<None, None>() {
@Override
public void onRequest(@Nullable None payload, @NonNull ElectrodeBridgeResponseListener<None> responseListener) {
assertSame(None.NONE, payload);
responseListener.onSuccess(null);
countDownLatch.countDown();
}
}).execute();


new RequestProcessor<None, None>(requestName, null, None.class, new ElectrodeBridgeResponseListener<None>() {
@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
fail();
}

@Override
public void onSuccess(@Nullable None responseData) {
assertSame(None.NONE, responseData);
countDownLatch.countDown();
}
}).execute();

requestHandle.unregister();

new RequestProcessor<None, None>(requestName, null, None.class, new ElectrodeBridgeResponseListener<None>() {
@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
failureMessage.getMessage();
countDownLatch.countDown();
}

@Override
public void onSuccess(@Nullable None responseData) {
fail();
}
}).execute();

waitForCountDownToFinishOrFail(countDownLatch);
}

@Test
public void testRequestHandlerRemovalWithApi() {
final CountDownLatch countDownLatch = new CountDownLatch(3);
final int RESULT_AGE = 10;

RequestHandlerHandle handlerHandle = PersonApi.requests().registerGetAgeRequestHandler(new ElectrodeBridgeRequestHandler<String, Integer>() {
@Override
public void onRequest(@Nullable String payload, @NonNull ElectrodeBridgeResponseListener<Integer> responseListener) {
responseListener.onSuccess(RESULT_AGE);
countDownLatch.countDown();
}
});

PersonApi.requests().getAge("user", new ElectrodeBridgeResponseListener<Integer>() {
@Override
public void onSuccess(@Nullable Integer responseData) {
assertNotNull(responseData);
assertEquals(RESULT_AGE, responseData.intValue());
countDownLatch.countDown();
}

@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
fail();
}
});

handlerHandle.unregister();

PersonApi.requests().getAge("user", new ElectrodeBridgeResponseListener<Integer>() {
@Override
public void onSuccess(@Nullable Integer responseData) {
fail();
}

@Override
public void onFailure(@NonNull FailureMessage failureMessage) {
assertNotNull(failureMessage);
countDownLatch.countDown();
}
});
waitForCountDownToFinishOrFail(countDownLatch);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ public static void addConstantsProvider(@NonNull ConstantsProvider constantsProv
sConstantsProviders.add(constantsProvider);
}

@NonNull
@Nullable
@Override
public UUID getRequestHandlerId(@NonNull String name) {
return sRequestRegistrar.getRequestHandlerId(name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.walmartlabs.electrode.reactnative.bridge;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import java.util.UUID;

Expand Down Expand Up @@ -66,7 +67,7 @@ public interface ElectrodeNativeBridge {
* @param name
* @return {@link UUID} of the request handler
*/
@NonNull
@Nullable
UUID getRequestHandlerId(@NonNull String name);

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,10 @@ public void onSuccess(TResp obj) {

@Override
public boolean unregister() {
Logger.d(TAG, "Removing registered request handler %s with id %s", handler, id);
ElectrodeBridgeRequestHandler removedHandler = ElectrodeBridgeHolder.unregisterRequestHandler(id);
if (handler != null && intermediateRequestHandler == removedHandler) {
intermediateRequestHandler = null;
handler = null;
return true;
} else {
Logger.w(TAG, "Not able to unregister a request handler. This is not normal as the request handle should have proper reference of the registered handler. ");
}
return false;
Logger.w(TAG, "Removing registered request handler %s with id %s", handler, id);
ElectrodeBridgeHolder.unregisterRequestHandler(id);
intermediateRequestHandler = null;
handler = null;
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,6 @@ public interface RequestRegistrar<T> {
* @param name
* @return {@link UUID} of the request handler
*/
@NonNull
@Nullable
UUID getRequestHandlerId(@NonNull String name);
}
Loading

0 comments on commit 492d585

Please sign in to comment.