Skip to content

Commit

Permalink
Merge SdkFacade into EmbraceInternalInterface
Browse files Browse the repository at this point in the history
  • Loading branch information
bidetofevil committed Oct 21, 2023
1 parent d7da4f2 commit 99a7059
Show file tree
Hide file tree
Showing 12 changed files with 42 additions and 71 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,12 @@ public class EmbraceOkHttp3ApplicationInterceptor implements Interceptor {
static final String UNKNOWN_MESSAGE = "An error occurred during the execution of this network request";
final Embrace embrace;

private final SdkFacade sdkFacade;

public EmbraceOkHttp3ApplicationInterceptor() {
this(Embrace.getInstance(), new SdkFacade());
this(Embrace.getInstance());
}

EmbraceOkHttp3ApplicationInterceptor(Embrace embrace, SdkFacade sdkFacade) {
EmbraceOkHttp3ApplicationInterceptor(Embrace embrace) {
this.embrace = embrace;
this.sdkFacade = sdkFacade;
}

@Override
Expand All @@ -69,7 +66,7 @@ public Response intercept(Chain chain) throws IOException {
causeName(e, UNKNOWN_EXCEPTION),
causeMessage(e, UNKNOWN_MESSAGE),
request.header(embrace.getTraceIdHeader()),
sdkFacade.isNetworkSpanForwardingEnabled() ? request.header(TRACEPARENT_HEADER_NAME) : null,
embrace.getInternalInterface().isNetworkSpanForwardingEnabled() ? request.header(TRACEPARENT_HEADER_NAME) : null,
null
)
);
Expand All @@ -91,7 +88,7 @@ public Response intercept(Chain chain) throws IOException {
errorType != null ? errorType : UNKNOWN_EXCEPTION,
errorMessage != null ? errorMessage : UNKNOWN_MESSAGE,
request.header(embrace.getTraceIdHeader()),
sdkFacade.isNetworkSpanForwardingEnabled() ? request.header(TRACEPARENT_HEADER_NAME) : null,
embrace.getInternalInterface().isNetworkSpanForwardingEnabled() ? request.header(TRACEPARENT_HEADER_NAME) : null,
null
)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,13 @@ public final class EmbraceOkHttp3NetworkInterceptor implements Interceptor {
};

final Embrace embrace;
private final SdkFacade sdkFacade;

public EmbraceOkHttp3NetworkInterceptor() {
this(Embrace.getInstance(), new SdkFacade());
this(Embrace.getInstance());
}

EmbraceOkHttp3NetworkInterceptor(Embrace embrace, SdkFacade sdkFacade) {
EmbraceOkHttp3NetworkInterceptor(Embrace embrace) {
this.embrace = embrace;
this.sdkFacade = sdkFacade;
}

@Override
Expand All @@ -77,7 +75,7 @@ public Response intercept(Chain chain) throws IOException {
return chain.proceed(originalRequest);
}

boolean networkSpanForwardingEnabled = sdkFacade.isNetworkSpanForwardingEnabled();
boolean networkSpanForwardingEnabled = embrace.getInternalInterface().isNetworkSpanForwardingEnabled();

String traceparent = null;
if (networkSpanForwardingEnabled && originalRequest.header(TRACEPARENT_HEADER_NAME) == null) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.embrace.android.embracesdk.okhttp3

import io.embrace.android.embracesdk.Embrace
import io.embrace.android.embracesdk.internal.EmbraceInternalInterface
import io.embrace.android.embracesdk.network.EmbraceNetworkRequest
import io.embrace.android.embracesdk.network.http.NetworkCaptureData
import io.embrace.android.embracesdk.okhttp3.EmbraceOkHttp3ApplicationInterceptor.UNKNOWN_EXCEPTION
Expand Down Expand Up @@ -64,7 +65,7 @@ internal class EmbraceOkHttp3InterceptorsTest {
private lateinit var postNetworkInterceptorTestInterceptor: Interceptor
private lateinit var okHttpClient: OkHttpClient
private lateinit var mockEmbrace: Embrace
private lateinit var mockSdkFacade: SdkFacade
private lateinit var mockInternalInterface: EmbraceInternalInterface
private lateinit var getRequestBuilder: Request.Builder
private lateinit var postRequestBuilder: Request.Builder
private lateinit var capturedEmbraceNetworkRequest: CapturingSlot<EmbraceNetworkRequest>
Expand All @@ -79,13 +80,16 @@ internal class EmbraceOkHttp3InterceptorsTest {
fun setup() {
server = MockWebServer()
mockEmbrace = mockk(relaxed = true)
mockSdkFacade = mockk(relaxed = true)
applicationInterceptor = EmbraceOkHttp3ApplicationInterceptor(mockEmbrace, mockSdkFacade)
mockInternalInterface = mockk(relaxed = true)
every { mockInternalInterface.shouldCaptureNetworkBody(any(), "POST") } answers { true }
every { mockInternalInterface.shouldCaptureNetworkBody(any(), "GET") } answers { false }
every { mockInternalInterface.isNetworkSpanForwardingEnabled() } answers { isNetworkSpanForwardingEnabled }
applicationInterceptor = EmbraceOkHttp3ApplicationInterceptor(mockEmbrace)
preNetworkInterceptorTestInterceptor = TestInspectionInterceptor(
beforeRequestSent = { request -> preNetworkInterceptorBeforeRequestSupplier.invoke(request) },
afterResponseReceived = { response -> preNetworkInterceptorAfterResponseSupplier.invoke(response) }
)
networkInterceptor = EmbraceOkHttp3NetworkInterceptor(mockEmbrace, mockSdkFacade)
networkInterceptor = EmbraceOkHttp3NetworkInterceptor(mockEmbrace)
postNetworkInterceptorTestInterceptor = TestInspectionInterceptor(
beforeRequestSent = { request -> postNetworkInterceptorBeforeRequestSupplier.invoke(request) },
afterResponseReceived = { response -> postNetworkInterceptorAfterResponseSupplier.invoke(response) }
Expand All @@ -106,11 +110,9 @@ internal class EmbraceOkHttp3InterceptorsTest {
.header(requestHeaderName, requestHeaderValue)
capturedEmbraceNetworkRequest = slot()
every { mockEmbrace.isStarted } answers { isSDKStarted }
every { mockEmbrace.internalInterface.shouldCaptureNetworkBody(any(), "POST") } answers { true }
every { mockEmbrace.internalInterface.shouldCaptureNetworkBody(any(), "GET") } answers { false }
every { mockEmbrace.recordNetworkRequest(capture(capturedEmbraceNetworkRequest)) } answers { }
every { mockEmbrace.generateW3cTraceparent() } answers { GENERATED_TRACEPARENT }
every { mockSdkFacade.isNetworkSpanForwardingEnabled } answers { isNetworkSpanForwardingEnabled }
every { mockEmbrace.internalInterface } answers { mockInternalInterface }
}

@After
Expand Down Expand Up @@ -184,7 +186,7 @@ internal class EmbraceOkHttp3InterceptorsTest {
isSDKStarted = false
server.enqueue(createBaseMockResponse())
runGetRequest()
verify(exactly = 0) { mockSdkFacade.isNetworkSpanForwardingEnabled }
verify(exactly = 0) { mockInternalInterface.isNetworkSpanForwardingEnabled() }
verify(exactly = 0) { mockEmbrace.internalInterface.shouldCaptureNetworkBody(any(), any()) }
}

Expand Down
1 change: 1 addition & 0 deletions embrace-android-sdk/api/embrace-android-sdk.api
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ public abstract interface annotation class io/embrace/android/embracesdk/annotat
}

public abstract interface class io/embrace/android/embracesdk/internal/EmbraceInternalInterface {
public abstract fun isNetworkSpanForwardingEnabled ()Z
public abstract fun logComposeTap (Landroid/util/Pair;Ljava/lang/String;)V
public abstract fun logError (Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;Z)V
public abstract fun logHandledException (Ljava/lang/Throwable;Lio/embrace/android/embracesdk/LogType;Ljava/util/Map;[Ljava/lang/StackTraceElement;)V
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,4 +176,8 @@ internal class EmbraceInternalInterfaceImpl(
override fun setProcessStartedByNotification() {
embraceImpl.setProcessStartedByNotification()

Check warning on line 177 in embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/EmbraceInternalInterfaceImpl.kt

View check run for this annotation

Codecov / codecov/patch

embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/EmbraceInternalInterfaceImpl.kt#L177

Added line #L177 was not covered by tests
}

override fun isNetworkSpanForwardingEnabled(): Boolean {
return embraceImpl.configService?.networkSpanForwardingBehavior?.isNetworkSpanForwardingEnabled() ?: false
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ public interface EmbraceInternalInterface {
* Mark that this application process was created in response to a notification
*/
public fun setProcessStartedByNotification()

public fun isNetworkSpanForwardingEnabled(): Boolean
}

internal val default = object : EmbraceInternalInterface {

Check warning on line 127 in embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/EmbraceInternalInterface.kt

View check run for this annotation

Codecov / codecov/patch

embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/EmbraceInternalInterface.kt#L127

Added line #L127 was not covered by tests
Expand Down Expand Up @@ -177,4 +179,6 @@ internal val default = object : EmbraceInternalInterface {
override fun shouldCaptureNetworkBody(url: String, method: String): Boolean = false

Check warning on line 179 in embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/EmbraceInternalInterface.kt

View check run for this annotation

Codecov / codecov/patch

embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/EmbraceInternalInterface.kt#L179

Added line #L179 was not covered by tests

override fun setProcessStartedByNotification() { }

Check warning on line 181 in embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/EmbraceInternalInterface.kt

View check run for this annotation

Codecov / codecov/patch

embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/EmbraceInternalInterface.kt#L181

Added line #L181 was not covered by tests

override fun isNetworkSpanForwardingEnabled(): Boolean = false

Check warning on line 183 in embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/EmbraceInternalInterface.kt

View check run for this annotation

Codecov / codecov/patch

embrace-android-sdk/src/main/java/io/embrace/android/embracesdk/internal/EmbraceInternalInterface.kt#L183

Added line #L183 was not covered by tests
}
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ public void addRequestProperty(@NonNull String key, @Nullable String value) {
public void connect() throws IOException {
identifyTraceId();
try {
if (NetworkUtils.isNetworkSpanForwardingEnabled(embrace.getConfigService())) {
if (embrace.getInternalInterface().isNetworkSpanForwardingEnabled()) {
traceparent = connection.getRequestProperty(TRACEPARENT_HEADER_NAME);
}
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ protected URLConnection openConnection(URL url, Proxy proxy) throws IOException
}

protected void injectTraceparent(@NonNull URLConnection connection) {
boolean networkSpanForwardingEnabled = NetworkUtils.isNetworkSpanForwardingEnabled(embrace.getConfigService());
boolean networkSpanForwardingEnabled = embrace.getInternalInterface().isNetworkSpanForwardingEnabled();
if (networkSpanForwardingEnabled && !connection.getRequestProperties().containsKey(TRACEPARENT_HEADER_NAME)) {
connection.addRequestProperty(TRACEPARENT_HEADER_NAME, embrace.generateW3cTraceparent());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.embrace.android.embracesdk.utils

import io.embrace.android.embracesdk.config.ConfigService
import io.embrace.android.embracesdk.logging.InternalStaticEmbraceLogger.Companion.logDebug
import io.embrace.android.embracesdk.logging.InternalStaticEmbraceLogger.Companion.logWarning
import java.net.MalformedURLException
Expand Down Expand Up @@ -101,8 +100,4 @@ internal object NetworkUtils {
(if (pathPos < 0) 0 else pathPos) + suffix.length.coerceAtMost(terminalPos)
)
}

@JvmStatic
fun isNetworkSpanForwardingEnabled(configService: ConfigService?): Boolean =
configService?.networkSpanForwardingBehavior?.isNetworkSpanForwardingEnabled() ?: false
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
package io.embrace.android.embracesdk.network.http

import io.embrace.android.embracesdk.Embrace
import io.embrace.android.embracesdk.config.ConfigService
import io.embrace.android.embracesdk.config.behavior.NetworkSpanForwardingBehavior.Companion.TRACEPARENT_HEADER_NAME
import io.embrace.android.embracesdk.config.remote.NetworkSpanForwardingRemoteConfig
import io.embrace.android.embracesdk.fakes.FakeConfigService
import io.embrace.android.embracesdk.fakes.fakeNetworkSpanForwardingBehavior
import io.embrace.android.embracesdk.internal.EmbraceInternalInterface
import io.embrace.android.embracesdk.network.EmbraceNetworkRequest
import io.mockk.CapturingSlot
Expand All @@ -30,35 +26,28 @@ internal class EmbraceUrlConnectionOverrideTest {

private lateinit var mockEmbrace: Embrace
private lateinit var mockInternalInterface: EmbraceInternalInterface
private lateinit var fakeConfigService: ConfigService
private lateinit var mockConnection: HttpsURLConnection
private lateinit var capturedCallId: MutableList<String>
private lateinit var capturedEmbraceNetworkRequest: CapturingSlot<EmbraceNetworkRequest>
private lateinit var remoteNetworkSpanForwardingConfig: NetworkSpanForwardingRemoteConfig
private lateinit var embraceUrlConnectionOverride: EmbraceUrlConnectionOverride<HttpsURLConnection>
private lateinit var embraceUrlConnectionOverrideUnwrapped: EmbraceUrlConnectionOverride<HttpsURLConnection>
private var shouldCaptureNetworkBody = false
private var isNetworkSpanForwardingEnabled = false

@Before
fun setup() {
mockEmbrace = mockk(relaxed = true)
every { mockEmbrace.internalInterface } answers { mockInternalInterface }
shouldCaptureNetworkBody = false
isNetworkSpanForwardingEnabled = false
capturedCallId = mutableListOf()
capturedEmbraceNetworkRequest = slot()
remoteNetworkSpanForwardingConfig = NetworkSpanForwardingRemoteConfig(pctEnabled = 0f)
fakeConfigService = FakeConfigService(
networkSpanForwardingBehavior = fakeNetworkSpanForwardingBehavior(
remoteConfig = { remoteNetworkSpanForwardingConfig }
)
)
mockInternalInterface = mockk(relaxed = true)
every { mockInternalInterface.shouldCaptureNetworkBody(any(), any()) } answers { shouldCaptureNetworkBody }
every {
mockInternalInterface.recordAndDeduplicateNetworkRequest(capture(capturedCallId), capture(capturedEmbraceNetworkRequest))
} answers { }
every { mockEmbrace.configService } answers { fakeConfigService }

every { mockInternalInterface.isNetworkSpanForwardingEnabled() } answers { isNetworkSpanForwardingEnabled }
mockConnection = createMockConnection()
embraceUrlConnectionOverride = EmbraceUrlConnectionOverride(mockConnection, true, mockEmbrace)
embraceUrlConnectionOverrideUnwrapped = EmbraceUrlConnectionOverride(mockConnection, false, mockEmbrace)
Expand Down Expand Up @@ -182,15 +171,15 @@ internal class EmbraceUrlConnectionOverrideTest {

@Test
fun `check traceheaders are forwarded if feature flag is on`() {
remoteNetworkSpanForwardingConfig = NetworkSpanForwardingRemoteConfig(pctEnabled = 100f)
isNetworkSpanForwardingEnabled = true
executeRequest()
assertEquals(HTTP_OK, capturedEmbraceNetworkRequest.captured.responseCode)
assertEquals(TRACEPARENT, capturedEmbraceNetworkRequest.captured.w3cTraceparent)
}

@Test
fun `check traceheaders are forwarded on errors if feature flag is on`() {
remoteNetworkSpanForwardingConfig = NetworkSpanForwardingRemoteConfig(pctEnabled = 100f)
isNetworkSpanForwardingEnabled = true
executeRequest(exceptionOnInputStream = true)
assertNull(capturedEmbraceNetworkRequest.captured.responseCode)
assertEquals(TRACEPARENT, capturedEmbraceNetworkRequest.captured.w3cTraceparent)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,8 @@ package io.embrace.android.embracesdk.network.http
import android.os.Build.VERSION_CODES.TIRAMISU
import androidx.test.ext.junit.runners.AndroidJUnit4
import io.embrace.android.embracesdk.Embrace
import io.embrace.android.embracesdk.config.ConfigService
import io.embrace.android.embracesdk.config.behavior.NetworkSpanForwardingBehavior.Companion.TRACEPARENT_HEADER_NAME
import io.embrace.android.embracesdk.config.remote.NetworkSpanForwardingRemoteConfig
import io.embrace.android.embracesdk.fakes.FakeConfigService
import io.embrace.android.embracesdk.fakes.fakeNetworkSpanForwardingBehavior
import io.embrace.android.embracesdk.internal.EmbraceInternalInterface
import io.embrace.android.embracesdk.network.EmbraceNetworkRequest
import io.mockk.CapturingSlot
import io.mockk.every
Expand All @@ -25,23 +22,20 @@ import java.net.URL
@RunWith(AndroidJUnit4::class)
internal class EmbraceUrlStreamHandlerTest {
private lateinit var mockEmbrace: Embrace
private lateinit var fakeConfigService: ConfigService
private lateinit var mockInternalInterface: EmbraceInternalInterface
private lateinit var capturedEmbraceNetworkRequest: CapturingSlot<EmbraceNetworkRequest>
private lateinit var remoteNetworkSpanForwardingConfig: NetworkSpanForwardingRemoteConfig
private var isNetworkSpanForwardingEnabled = false

@Before
fun setup() {
mockEmbrace = mockk(relaxed = true)
mockInternalInterface = mockk(relaxed = true)
every { mockInternalInterface.isNetworkSpanForwardingEnabled() } answers { isNetworkSpanForwardingEnabled }
capturedEmbraceNetworkRequest = slot()
remoteNetworkSpanForwardingConfig = NetworkSpanForwardingRemoteConfig(pctEnabled = 0f)
fakeConfigService = FakeConfigService(
networkSpanForwardingBehavior = fakeNetworkSpanForwardingBehavior(
remoteConfig = { remoteNetworkSpanForwardingConfig }
)
)
every { mockEmbrace.recordNetworkRequest(capture(capturedEmbraceNetworkRequest)) } answers { }
every { mockEmbrace.configService } answers { fakeConfigService }
every { mockEmbrace.internalInterface } answers { mockInternalInterface }
every { mockEmbrace.generateW3cTraceparent() } answers { TRACEPARENT }
isNetworkSpanForwardingEnabled = false
}

@Test
Expand Down Expand Up @@ -78,7 +72,7 @@ internal class EmbraceUrlStreamHandlerTest {

@Test
fun `check traceheader is injected into http request if feature flag is on`() {
remoteNetworkSpanForwardingConfig = NetworkSpanForwardingRemoteConfig(pctEnabled = 100f)
isNetworkSpanForwardingEnabled = true
val url = URL(
"http",
"embrace.io",
Expand All @@ -95,7 +89,7 @@ internal class EmbraceUrlStreamHandlerTest {

@Test
fun `check traceheader is injected into https request if feature flag is on`() {
remoteNetworkSpanForwardingConfig = NetworkSpanForwardingRemoteConfig(pctEnabled = 100f)
isNetworkSpanForwardingEnabled = true
val url = URL(
"https",
"embrace.io",
Expand Down

0 comments on commit 99a7059

Please sign in to comment.