Skip to content

Commit 930cded

Browse files
authored
Add test to verify user agent is passed (#2726)
1 parent 7635b98 commit 930cded

File tree

3 files changed

+52
-7
lines changed

3 files changed

+52
-7
lines changed

core/src/software/aws/toolkits/core/ToolkitClientManager.kt

+11-3
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,19 @@ abstract class ToolkitClientManager {
8484
* Creates a new client for the requested [AwsClientKey]
8585
*/
8686
@Suppress("UNCHECKED_CAST")
87-
protected open fun <T : SdkClient> createNewClient(
87+
open fun <T : SdkClient> createNewClient(
8888
sdkClass: KClass<T>,
8989
region: AwsRegion,
90-
credProvider: ToolkitCredentialsProvider
91-
): T = createNewClient(sdkClass, sdkHttpClient(), Region.of(region.id), credProvider, userAgent)
90+
credProvider: ToolkitCredentialsProvider,
91+
endpointOverride: String? = null
92+
): T = createNewClient(
93+
sdkClass = sdkClass,
94+
httpClient = sdkHttpClient(),
95+
region = Region.of(region.id),
96+
credProvider = credProvider,
97+
userAgent = userAgent,
98+
endpointOverride = endpointOverride
99+
)
92100

93101
companion object {
94102
private val GLOBAL_SERVICE_DENY_LIST = setOf(

jetbrains-core/tst/software/aws/toolkits/jetbrains/core/AwsClientManagerTest.kt

+33
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@
33

44
package software.aws.toolkits.jetbrains.core
55

6+
import com.github.tomakehurst.wiremock.WireMockServer
7+
import com.github.tomakehurst.wiremock.client.WireMock.aResponse
8+
import com.github.tomakehurst.wiremock.client.WireMock.any
9+
import com.github.tomakehurst.wiremock.client.WireMock.anyRequestedFor
10+
import com.github.tomakehurst.wiremock.client.WireMock.anyUrl
11+
import com.github.tomakehurst.wiremock.client.WireMock.stubFor
12+
import com.github.tomakehurst.wiremock.client.WireMock.verify
13+
import com.github.tomakehurst.wiremock.core.WireMockConfiguration
14+
import com.github.tomakehurst.wiremock.matching.ContainsPattern
615
import com.intellij.openapi.application.ApplicationManager
716
import com.intellij.openapi.util.Disposer
817
import com.intellij.openapi.util.use
@@ -20,6 +29,7 @@ import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption
2029
import software.amazon.awssdk.core.client.config.SdkClientOption
2130
import software.amazon.awssdk.core.signer.Signer
2231
import software.amazon.awssdk.http.SdkHttpClient
32+
import software.amazon.awssdk.services.lambda.LambdaClient
2333
import software.aws.toolkits.core.region.Endpoint
2434
import software.aws.toolkits.core.region.Service
2535
import software.aws.toolkits.core.region.anAwsRegion
@@ -173,6 +183,29 @@ class AwsClientManagerTest {
173183
assertThat(second).isSameAs(first)
174184
}
175185

186+
@Test
187+
fun userAgentIsPassed() {
188+
val wireMockServer = WireMockServer(WireMockConfiguration.wireMockConfig())
189+
try {
190+
wireMockServer.start()
191+
192+
stubFor(any(anyUrl()).willReturn(aResponse().withStatus(200)))
193+
194+
val sut = getClientManager().createNewClient(
195+
LambdaClient::class,
196+
regionProvider.createAwsRegion(),
197+
credentialManager.createCredentialProvider(),
198+
endpointOverride = wireMockServer.baseUrl()
199+
)
200+
201+
sut.listFunctions()
202+
203+
verify(anyRequestedFor(anyUrl()).withHeader("User-Agent", ContainsPattern("AWS-Toolkit-For-JetBrains/")))
204+
} finally {
205+
wireMockServer.stop()
206+
}
207+
}
208+
176209
// Test against real version so bypass ServiceManager for the client manager
177210
private fun getClientManager() = AwsClientManager()
178211

jetbrains-core/tst/software/aws/toolkits/jetbrains/core/MockClientManager.kt

+8-4
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,14 @@ class MockClientManager : AwsClientManager() {
3030
private val mockClients = mutableMapOf<Key, SdkClient>()
3131

3232
@Suppress("UNCHECKED_CAST")
33-
override fun <T : SdkClient> createNewClient(sdkClass: KClass<T>, region: AwsRegion, credProvider: ToolkitCredentialsProvider): T =
34-
mockClients[Key(sdkClass, region, credProvider.id)] as? T
35-
?: mockClients[Key(sdkClass)] as? T
36-
?: throw IllegalStateException("No mock registered for $sdkClass")
33+
override fun <T : SdkClient> createNewClient(
34+
sdkClass: KClass<T>,
35+
region: AwsRegion,
36+
credProvider: ToolkitCredentialsProvider,
37+
endpointOverride: String?
38+
): T = mockClients[Key(sdkClass, region, credProvider.id)] as? T
39+
?: mockClients[Key(sdkClass)] as? T
40+
?: throw IllegalStateException("No mock registered for $sdkClass")
3741

3842
override fun dispose() {
3943
super.dispose()

0 commit comments

Comments
 (0)