@@ -10,16 +10,12 @@ import aws.smithy.kotlin.runtime.businessmetrics.BusinessMetric
1010import aws.smithy.kotlin.runtime.businessmetrics.SmithyBusinessMetric
1111import aws.smithy.kotlin.runtime.businessmetrics.emitBusinessMetric
1212import aws.smithy.kotlin.runtime.client.ProtocolRequestInterceptorContext
13- import aws.smithy.kotlin.runtime.collections.get
1413import aws.smithy.kotlin.runtime.http.*
1514import aws.smithy.kotlin.runtime.http.request.HttpRequest
1615import aws.smithy.kotlin.runtime.net.url.Url
1716import aws.smithy.kotlin.runtime.operation.ExecutionContext
1817import kotlinx.coroutines.test.runTest
19- import kotlin.test.Test
20- import kotlin.test.assertFailsWith
21- import kotlin.test.assertFalse
22- import kotlin.test.assertTrue
18+ import kotlin.test.*
2319
2420class BusinessMetricsInterceptorTest {
2521 @Test
@@ -32,6 +28,23 @@ class BusinessMetricsInterceptorTest {
3228 assertFalse(userAgentHeader.endsWith(" m/" ))
3329 }
3430
31+ @Test
32+ fun noValidBusinessMetrics () = runTest {
33+ val executionContext = ExecutionContext ()
34+
35+ val invalidBusinessMetric = object : BusinessMetric {
36+ override val identifier: String = " All work and no play makes Jack a dull boy" .repeat(1000 )
37+ }
38+
39+ executionContext.emitBusinessMetric(invalidBusinessMetric)
40+
41+ val interceptor = BusinessMetricsInterceptor ()
42+ val request = interceptor.modifyBeforeTransmit(interceptorContext(executionContext))
43+ val userAgentHeader = request.headers[USER_AGENT ]!!
44+
45+ assertFalse(userAgentHeader.endsWith(" m/" ))
46+ }
47+
3548 @Test
3649 fun businessMetrics () = runTest {
3750 val executionContext = ExecutionContext ()
@@ -66,49 +79,57 @@ class BusinessMetricsInterceptorTest {
6679 }
6780
6881 @Test
69- fun truncateBusinessMetrics () = runTest {
82+ fun businessMetricsMaxLength () = runTest {
7083 val executionContext = ExecutionContext ()
7184 executionContext.attributes[aws.smithy.kotlin.runtime.businessmetrics.BusinessMetrics ] = mutableSetOf ()
7285
73- for (i in 0 .. 1024 ) {
86+ for (i in 0 .. BUSINESS_METRICS_MAX_LENGTH ) {
7487 executionContext.emitBusinessMetric(
7588 object : BusinessMetric {
7689 override val identifier: String = i.toString()
7790 },
7891 )
7992 }
8093
81- val rawMetrics = executionContext[aws.smithy.kotlin.runtime.businessmetrics.BusinessMetrics ]
82- val rawMetricsString = rawMetrics.joinToString(" ," , " m/" )
83- val rawMetricsByteArray = rawMetricsString.encodeToByteArray()
84-
85- assertTrue(rawMetricsByteArray.size >= BUSINESS_METRICS_MAX_LENGTH )
86-
8794 val interceptor = BusinessMetricsInterceptor ()
8895 val request = interceptor.modifyBeforeTransmit(interceptorContext(executionContext))
8996 val userAgentHeader = request.headers[USER_AGENT ]!!
90- val truncatedMetrics = " m/" + userAgentHeader.substringAfter(" m/" )
97+ val metrics = " m/" + userAgentHeader.substringAfter(" m/" )
9198
92- assertTrue(truncatedMetrics .encodeToByteArray().size <= BUSINESS_METRICS_MAX_LENGTH )
93- assertFalse(truncatedMetrics .endsWith(" ," ))
99+ assertTrue(metrics .encodeToByteArray().size <= BUSINESS_METRICS_MAX_LENGTH )
100+ assertFalse(metrics .endsWith(" ," ))
94101 }
95102
96103 @Test
97- fun malformedBusinessMetrics () = runTest {
104+ fun invalidBusinessMetric () = runTest {
98105 val executionContext = ExecutionContext ()
99- val reallyLongMetric = " All work and no play makes Jack a dull boy" .repeat(1000 )
100106
101- executionContext.attributes.emitBusinessMetric(
102- object : BusinessMetric {
103- override val identifier: String = reallyLongMetric
104- },
105- )
107+ val validMetric = AwsBusinessMetric .S3_EXPRESS_BUCKET
108+ val invalidMetric = object : BusinessMetric {
109+ override val identifier: String = " All work and no play makes Jack a dull boy" .repeat(1000 )
110+ }
111+
112+ executionContext.attributes.emitBusinessMetric(validMetric)
113+ executionContext.attributes.emitBusinessMetric(invalidMetric)
106114
107115 val interceptor = BusinessMetricsInterceptor ()
116+ val request = interceptor.modifyBeforeTransmit(interceptorContext(executionContext))
117+ val userAgentHeader = request.headers[USER_AGENT ]!!
108118
109- assertFailsWith<IllegalStateException >(" Business metrics are incorrectly formatted:" ) {
110- interceptor.modifyBeforeTransmit(interceptorContext(executionContext))
111- }
119+ assertTrue(
120+ userAgentHeader.contains(validMetric.identifier),
121+ )
122+ assertFalse(
123+ userAgentHeader.contains(invalidMetric.identifier),
124+ )
125+ }
126+
127+ @Test
128+ fun businessMetricToString () {
129+ val businessMetricToString = AwsBusinessMetric .S3_EXPRESS_BUCKET .toString()
130+ val businessMetricIdentifier = AwsBusinessMetric .S3_EXPRESS_BUCKET .identifier
131+
132+ assertEquals(businessMetricIdentifier, businessMetricToString)
112133 }
113134}
114135
0 commit comments