Skip to content

Commit dbed41d

Browse files
committed
network request exception
1 parent 2fbb979 commit dbed41d

File tree

5 files changed

+29
-2
lines changed

5 files changed

+29
-2
lines changed

features/dd-sdk-android-flags/api/apiSurface

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ data class com.datadog.android.flags.FlagsConfiguration
2828
companion object
2929
interface com.datadog.android.flags.FlagsStateListener
3030
fun onStateChanged(com.datadog.android.flags.model.FlagsClientState)
31+
class com.datadog.android.flags.NetworkRequestFailedException : RuntimeException
32+
constructor(String)
3133
interface com.datadog.android.flags.StateObservable
3234
fun getCurrentState(): com.datadog.android.flags.model.FlagsClientState
3335
fun addListener(FlagsStateListener)

features/dd-sdk-android-flags/api/dd-sdk-android-flags.api

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ public abstract interface class com/datadog/android/flags/FlagsStateListener {
6969
public abstract fun onStateChanged (Lcom/datadog/android/flags/model/FlagsClientState;)V
7070
}
7171

72+
public final class com/datadog/android/flags/NetworkRequestFailedException : java/lang/RuntimeException {
73+
public fun <init> (Ljava/lang/String;)V
74+
}
75+
7276
public abstract interface class com/datadog/android/flags/StateObservable {
7377
public abstract fun addListener (Lcom/datadog/android/flags/FlagsStateListener;)V
7478
public abstract fun getCurrentState ()Lcom/datadog/android/flags/model/FlagsClientState;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0.
3+
* This product includes software developed at Datadog (https://www.datadoghq.com/).
4+
* Copyright 2016-Present Datadog, Inc.
5+
*/
6+
7+
package com.datadog.android.flags
8+
9+
/**
10+
* Exception thrown when a network request for flag evaluations fails.
11+
*
12+
* This exception is used to communicate network failures when updating evaluation contexts.
13+
* It provides a clear signal that the failure was due to network connectivity issues rather
14+
* than application logic errors.
15+
*
16+
* @param message A descriptive message about the network failure
17+
*/
18+
class NetworkRequestFailedException(message: String) : RuntimeException(message)

features/dd-sdk-android-flags/src/main/kotlin/com/datadog/android/flags/internal/evaluation/EvaluationsManager.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package com.datadog.android.flags.internal.evaluation
99
import com.datadog.android.api.InternalLogger
1010
import com.datadog.android.core.internal.utils.executeSafe
1111
import com.datadog.android.flags.EvaluationContextCallback
12+
import com.datadog.android.flags.NetworkRequestFailedException
1213
import com.datadog.android.flags.internal.FlagsStateManager
1314
import com.datadog.android.flags.internal.net.PrecomputedAssignmentsReader
1415
import com.datadog.android.flags.internal.repository.FlagsRepository
@@ -86,7 +87,7 @@ internal class EvaluationsManager(
8687
{ NETWORK_REQUEST_FAILED_MESSAGE }
8788
)
8889

89-
val throwable = Throwable(NETWORK_REQUEST_FAILED_MESSAGE)
90+
val throwable = NetworkRequestFailedException(NETWORK_REQUEST_FAILED_MESSAGE)
9091
if (hadFlags) {
9192
flagStateManager.updateState(FlagsClientState.Stale)
9293
} else {

features/dd-sdk-android-flags/src/test/kotlin/com/datadog/android/flags/internal/evaluation/EvaluationsManagerTest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import okhttp3.mockwebserver.MockWebServer
2121
import org.assertj.core.api.Assertions.assertThat
2222
import org.json.JSONObject
2323
import org.junit.jupiter.api.AfterEach
24+
import org.junit.jupiter.api.Assertions.assertDoesNotThrow
2425
import org.junit.jupiter.api.BeforeEach
2526
import org.junit.jupiter.api.Test
2627
import org.junit.jupiter.api.extension.ExtendWith
@@ -32,6 +33,7 @@ import org.mockito.kotlin.anyOrNull
3233
import org.mockito.kotlin.argumentCaptor
3334
import org.mockito.kotlin.eq
3435
import org.mockito.kotlin.inOrder
36+
import org.mockito.kotlin.mock
3537
import org.mockito.kotlin.times
3638
import org.mockito.kotlin.verify
3739
import org.mockito.kotlin.whenever
@@ -289,7 +291,7 @@ internal class EvaluationsManagerTest {
289291
fun `M invoke onSuccess W updateEvaluationsForContext() { success }`() {
290292
// Given
291293
val publicContext = EvaluationContext(fakeTargetingKey, emptyMap())
292-
val mockCallback = org.mockito.kotlin.mock<EvaluationContextCallback>()
294+
val mockCallback = mock<EvaluationContextCallback>()
293295
val jsonResponse = "{\"data\": {\"attributes\": {\"flags\": {}}}}"
294296
val flagsMap = emptyMap<String, PrecomputedFlag>()
295297

0 commit comments

Comments
 (0)