@@ -18,6 +18,7 @@ import kotlinx.coroutines.Dispatchers
1818import kotlinx.coroutines.cancel
1919import kotlinx.coroutines.delay
2020import kotlinx.coroutines.launch
21+ import org.jetbrains.annotations.VisibleForTesting
2122import software.aws.toolkits.core.utils.RemoteResolveParser
2223import software.aws.toolkits.core.utils.RemoteResource
2324import software.aws.toolkits.core.utils.error
@@ -31,7 +32,6 @@ import java.io.InputStream
3132import java.time.Duration
3233import java.util.concurrent.atomic.AtomicBoolean
3334
34- private const val NOTIFICATION_ENDPOINT = " " // TODO: Replace with actual endpoint
3535private const val MAX_RETRIES = 3
3636private const val RETRY_DELAY_MS = 1000L
3737
@@ -45,6 +45,26 @@ object NotificationFileValidator : RemoteResolveParser {
4545 }
4646}
4747
48+ object NotificationEndpoint {
49+ private var overriddenEndpoint: String? = null
50+
51+ fun getEndpoint (): String {
52+ return overriddenEndpoint ? : DEFAULT_ENDPOINT
53+ }
54+
55+ @VisibleForTesting
56+ fun setTestEndpoint (endpoint : String ) {
57+ overriddenEndpoint = endpoint
58+ }
59+
60+ @VisibleForTesting
61+ fun resetEndpoint () {
62+ overriddenEndpoint = null
63+ }
64+
65+ private const val DEFAULT_ENDPOINT = " " // TODO: Replace with actual endpoint
66+ }
67+
4868@State(name = " notificationEtag" , storages = [Storage (" aws.xml" )])
4969class NotificationEtagState : PersistentStateComponent <NotificationEtagConfiguration > {
5070 private var state = NotificationEtagConfiguration ()
@@ -81,7 +101,7 @@ internal final class NotificationPollingService : Disposable {
81101 private val resourceResolver: RemoteResourceResolverProvider = DefaultRemoteResourceResolverProvider ()
82102 private val notificationsResource = object : RemoteResource {
83103 override val name: String = " notifications.json"
84- override val urls: List <String > = listOf (NOTIFICATION_ENDPOINT )
104+ override val urls: List <String > = listOf (NotificationEndpoint .getEndpoint() )
85105 override val remoteResolveParser: RemoteResolveParser = NotificationFileValidator
86106 }
87107
@@ -138,7 +158,7 @@ internal final class NotificationPollingService : Disposable {
138158
139159 private fun getNotificationETag (): String =
140160 try {
141- HttpRequests .request(NOTIFICATION_ENDPOINT )
161+ HttpRequests .request(NotificationEndpoint .getEndpoint() )
142162 .userAgent(" AWS Toolkit for JetBrains" )
143163 .connect { request ->
144164 request.connection.headerFields[" ETag" ]?.firstOrNull().orEmpty()
0 commit comments