Skip to content

Commit

Permalink
Integration test
Browse files Browse the repository at this point in the history
  • Loading branch information
gthea committed Nov 28, 2023
1 parent 246a133 commit 9754e61
Showing 1 changed file with 119 additions and 0 deletions.
119 changes: 119 additions & 0 deletions src/androidTest/java/tests/integration/ProxyFactoryTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

import android.content.Context;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.test.platform.app.InstrumentationRegistry;

import org.junit.After;
Expand All @@ -26,9 +28,12 @@
import io.split.android.client.SplitFactoryBuilder;
import io.split.android.client.api.Key;
import io.split.android.client.events.SplitEvent;
import io.split.android.client.network.SplitAuthenticatedRequest;
import io.split.android.client.network.SplitAuthenticator;
import io.split.android.client.service.impressions.ImpressionsMode;
import io.split.android.client.service.synchronizer.ThreadUtils;
import io.split.android.client.storage.db.SplitRoomDatabase;
import io.split.android.client.utils.logger.Logger;
import io.split.android.client.utils.logger.SplitLogLevel;
import okhttp3.mockwebserver.Dispatcher;
import okhttp3.mockwebserver.MockResponse;
Expand Down Expand Up @@ -175,4 +180,118 @@ public MockResponse dispatch(RecordedRequest request) {
proxyServer.shutdown();
baseServer.shutdown();
}

@Test
public void authenticatorIsUsed() throws IOException, InterruptedException {

AtomicBoolean mySegmentsHit = new AtomicBoolean(false);
AtomicBoolean splitChangesHit = new AtomicBoolean(false);
CountDownLatch authLatch = new CountDownLatch(1);
CountDownLatch eventsLatch = new CountDownLatch(1);
CountDownLatch proxyAuthorizationHeaderLatch = new CountDownLatch(1);

// init server
MockWebServer proxyServer = new MockWebServer();
proxyServer.setDispatcher(new Dispatcher() {
@Override
public MockResponse dispatch(RecordedRequest request) {
String requestLine = request.getRequestLine();
if (request.getHeader("Proxy-Authorization") != null) {
proxyAuthorizationHeaderLatch.countDown();
}
if (requestLine.contains("/mySegments")) {
mySegmentsHit.set(true);
return new MockResponse().setResponseCode((request.getHeader("Proxy-Authorization") != null) ? 200 : 407).setBody("{\"mySegments\":[{ \"id\":\"id1\", \"name\":\"segment1\"}, { \"id\":\"id1\", \"name\":\"segment2\"}]}");
} else if (requestLine.contains("splitChanges")) {
splitChangesHit.set(true);
return new MockResponse().setResponseCode((request.getHeader("Proxy-Authorization") != null) ? 200 : 407).setBody(mSplitChanges);
} else if (requestLine.contains("auth")) {
authLatch.countDown();
return new MockResponse().setResponseCode((request.getHeader("Proxy-Authorization") != null) ? 200 : 407).setBody("{}");
} else if (requestLine.contains("Impressions")) {
eventsLatch.countDown();
return new MockResponse().setResponseCode((request.getHeader("Proxy-Authorization") != null) ? 200 : 407).setBody("{}");
} else {
return new MockResponse().setResponseCode((request.getHeader("Proxy-Authorization") != null) ? 200 : 407).setBody("{}");
}
}
});
proxyServer.start();

MockWebServer baseServer = new MockWebServer();
baseServer.setDispatcher(new Dispatcher() {
@Override
public MockResponse dispatch(RecordedRequest request) {
String requestLine = request.getRequestLine();
return new MockResponse().setResponseCode(200);
}
});
baseServer.start();

String url = baseServer.url("").toString();
ServiceEndpoints endpoints = ServiceEndpoints.builder()
.apiEndpoint(url)
.eventsEndpoint(url)
.sseAuthServiceEndpoint(url)
.streamingServiceEndpoint(url)
.build();

// init db
Context context = InstrumentationRegistry.getInstrumentation().getContext();
SplitRoomDatabase splitRoomDatabase = DatabaseHelper.getTestDatabase(context);
splitRoomDatabase.clearAllTables();

// init factory
Key key = IntegrationHelper.dummyUserKey();
mSplitFactory = IntegrationHelper.buildFactory(IntegrationHelper.dummyApiKey(),
key,
new SplitClientConfig.Builder()
.serviceEndpoints(endpoints)
.proxyAuthenticator(new SplitAuthenticator() {
@Override
public SplitAuthenticatedRequest authenticate(@NonNull SplitAuthenticatedRequest request) {
request.setHeader("Proxy-Authorization", "Bearer 1234567890");
return request;
}
})
.impressionsMode(ImpressionsMode.DEBUG)
.impressionsQueueSize(1)
.impressionsChunkSize(1)
.impressionsPerPush(1)
.impressionsRefreshRate(1)
.proxyHost(proxyServer.url("").toString())
.logLevel(SplitLogLevel.VERBOSE)
.build(),
context, null, splitRoomDatabase);

// init client
SplitClient client = mSplitFactory.client(key);
CountDownLatch readyLatch = new CountDownLatch(1);
TestingHelper.TestEventTask readyTask = new TestingHelper.TestEventTask(readyLatch);
client.on(SplitEvent.SDK_READY, readyTask);
boolean await = readyLatch.await(10, TimeUnit.SECONDS);
if (!await) {
Assert.fail("SDK_READY event not received");
}

client.getTreatment("FACUNDO_TEST");
client.getTreatment("FACUNDO_TEST");
client.getTreatment("FACUNDO_TEST");
Thread.sleep(500);
client.flush();

boolean awaitAuth = authLatch.await(5, TimeUnit.SECONDS);
boolean awaitEvents = eventsLatch.await(5, TimeUnit.SECONDS);
boolean awaitProxyAuthorizationHeader = proxyAuthorizationHeaderLatch.await(5, TimeUnit.SECONDS);
// assert
assertTrue(mySegmentsHit.get());
assertTrue(splitChangesHit.get());
assertTrue(awaitAuth);
assertTrue(awaitEvents);
assertTrue(awaitProxyAuthorizationHeader);

// teardown
proxyServer.shutdown();
baseServer.shutdown();
}
}

0 comments on commit 9754e61

Please sign in to comment.