Skip to content

Commit 8404a31

Browse files
committed
use totalBytes for test
1 parent 41de815 commit 8404a31

File tree

6 files changed

+57
-18
lines changed

6 files changed

+57
-18
lines changed

runtime/auth/aws-signing-common/api/aws-signing-common.api

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public final class aws/smithy/kotlin/runtime/auth/awssigning/AwsChunkedByteReadC
1414
public fun cancel (Ljava/lang/Throwable;)Z
1515
public fun getAvailableForRead ()I
1616
public fun getClosedCause ()Ljava/lang/Throwable;
17+
public final fun getTotalBytesTransferred ()J
1718
public fun isClosedForRead ()Z
1819
public fun isClosedForWrite ()Z
1920
public fun read (Laws/smithy/kotlin/runtime/io/SdkBuffer;JLkotlin/coroutines/Continuation;)Ljava/lang/Object;
@@ -23,9 +24,8 @@ public final class aws/smithy/kotlin/runtime/auth/awssigning/AwsChunkedSource :
2324
public fun <init> (Laws/smithy/kotlin/runtime/io/SdkSource;Laws/smithy/kotlin/runtime/auth/awssigning/AwsSigner;Laws/smithy/kotlin/runtime/auth/awssigning/AwsSigningConfig;[BLaws/smithy/kotlin/runtime/http/DeferredHeaders;)V
2425
public synthetic fun <init> (Laws/smithy/kotlin/runtime/io/SdkSource;Laws/smithy/kotlin/runtime/auth/awssigning/AwsSigner;Laws/smithy/kotlin/runtime/auth/awssigning/AwsSigningConfig;[BLaws/smithy/kotlin/runtime/http/DeferredHeaders;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2526
public fun close ()V
26-
public final fun getContentBytesTransferred ()J
27+
public final fun getTotalBytesTransferred ()J
2728
public fun read (Laws/smithy/kotlin/runtime/io/SdkBuffer;J)J
28-
public final fun setContentBytesTransferred (J)V
2929
}
3030

3131
public final class aws/smithy/kotlin/runtime/auth/awssigning/AwsSignatureType : java/lang/Enum {

runtime/auth/aws-signing-common/common/src/aws/smithy/kotlin/runtime/auth/awssigning/AwsChunkedByteReadChannel.kt

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,32 @@ public class AwsChunkedByteReadChannel(
4545
override val availableForRead: Int
4646
get() = chunkReader.chunk.size.toInt() + delegate.availableForRead
4747

48+
/**
49+
* Tracks the total bytes transferred, including chunk metadata.
50+
*/
51+
private var totalBytesTransferred: Long = 0L
52+
53+
/**
54+
* Gets the total bytes transferred for testing purposes only.
55+
*/
56+
@InternalApi
57+
public fun getTotalBytesTransferred(): Long = totalBytesTransferred
58+
4859
override suspend fun read(sink: SdkBuffer, limit: Long): Long {
4960
require(limit >= 0L) { "Invalid limit ($limit) must be >= 0L" }
50-
if (!chunkReader.ensureValidChunk()) return -1L
51-
return chunkReader.chunk.read(sink, limit)
61+
62+
// Reset metadata bytes counter
63+
chunkReader.chunkMetadataBytes = 0
64+
65+
if (!chunkReader.ensureValidChunk()) {
66+
totalBytesTransferred = -1L
67+
return -1L
68+
}
69+
70+
totalBytesTransferred = chunkReader.chunk.read(sink, limit)
71+
72+
// Return the actual bytes excluding metadata
73+
return totalBytesTransferred - chunkReader.chunkMetadataBytes
5274
}
5375
}
5476

runtime/auth/aws-signing-common/common/src/aws/smithy/kotlin/runtime/auth/awssigning/AwsChunkedSource.kt

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,26 +41,35 @@ public class AwsChunkedSource(
4141
)
4242

4343
/**
44-
* Tracks the content bytes transferred, excluding chunk metadata.
45-
* This public property can be accessed to monitor file transfer progress.
44+
* Tracks the total bytes transferred, including chunk metadata.
4645
*/
47-
public var contentBytesTransferred: Long = 0L
46+
private var totalBytesTransferred: Long = 0L
47+
48+
/**
49+
* Gets the total bytes transferred for testing purposes only.
50+
*/
51+
@InternalApi
52+
public fun getTotalBytesTransferred(): Long = totalBytesTransferred
4853

4954
override fun read(sink: SdkBuffer, limit: Long): Long {
5055
require(limit >= 0L) { "Invalid limit ($limit) must be >= 0L" }
51-
// COROUTINE SAFETY: runBlocking is allowed here because SdkSource is a synchronous blocking interface
5256

53-
// reset metadata bytes counter
57+
// Reset metadata bytes counter
5458
chunkReader.chunkMetadataBytes = 0
59+
60+
// COROUTINE SAFETY: runBlocking is allowed here because SdkSource is a synchronous blocking interface
5561
val isChunkValid = runBlocking {
5662
chunkReader.ensureValidChunk()
5763
}
58-
if (!isChunkValid) return -1L
64+
if (!isChunkValid) {
65+
totalBytesTransferred = -1L
66+
return -1L
67+
}
5968

60-
val totalBytesTransferred = chunkReader.chunk.read(sink, limit)
61-
contentBytesTransferred = totalBytesTransferred - chunkReader.chunkMetadataBytes
69+
totalBytesTransferred = chunkReader.chunk.read(sink, limit)
6270

63-
return totalBytesTransferred
71+
// Return the actual bytes excluding metadata
72+
return totalBytesTransferred - chunkReader.chunkMetadataBytes
6473
}
6574

6675
override fun close() {

runtime/auth/aws-signing-tests/common/src/aws/smithy/kotlin/runtime/auth/awssigning/tests/AwsChunkedByteReadChannelTestBase.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,14 @@ abstract class AwsChunkedByteReadChannelTestBase : AwsChunkedTestBase(AwsChunked
4242

4343
writeJob.invokeOnCompletion { cause -> chan.close(cause) }
4444

45-
val totalBytesExpected = encodedChunkLength(CHUNK_SIZE_BYTES) * (numChunks - 1) +
46-
encodedChunkLength(CHUNK_SIZE_BYTES / 2) + encodedChunkLength(0) + "\r\n".length
4745
val sink = SdkBuffer()
4846

4947
val bytesRead = awsChunked.readAll(sink)
5048
writeJob.join()
5149

5250
val bytesAsString = sink.readUtf8()
5351

54-
assertEquals(totalBytesExpected.toLong(), bytesRead)
52+
assertEquals(dataLengthBytes.toLong() , bytesRead)
5553
assertTrue(awsChunked.isClosedForRead)
5654

5755
val chunkSignatures = getChunkSignatures(bytesAsString)

runtime/auth/aws-signing-tests/common/src/aws/smithy/kotlin/runtime/auth/awssigning/tests/AwsChunkedTestBase.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,12 @@ fun interface AwsChunkedReaderFactory {
3131
val chunked = AwsChunkedByteReadChannel(ch, signer, signingConfig, previousSignature, trailingHeaders)
3232
object : AwsChunkedTestReader {
3333
override fun isClosedForRead(): Boolean = chunked.isClosedForRead
34-
override suspend fun read(sink: SdkBuffer, limit: Long): Long = chunked.read(sink, limit)
34+
35+
// Override read function to track totalBytesTransferred for testing
36+
override suspend fun read(sink: SdkBuffer, limit: Long): Long {
37+
chunked.read(sink, limit)
38+
return chunked.getTotalBytesTransferred()
39+
}
3540
}
3641
}
3742
}

runtime/auth/aws-signing-tests/jvm/src/aws/smithy/kotlin/runtime/auth/awssigning/tests/AwsChunkedSourceTestBase.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ val AwsChunkedReaderFactory.Companion.Source: AwsChunkedReaderFactory
1818
val rc = chunked.read(sink, Long.MAX_VALUE)
1919
return rc == -1L
2020
}
21-
override suspend fun read(sink: SdkBuffer, limit: Long): Long = chunked.read(sink, limit)
21+
22+
// Override read function to track totalBytesTransferred for testing
23+
override suspend fun read(sink: SdkBuffer, limit: Long): Long {
24+
chunked.read(sink, limit)
25+
return chunked.getTotalBytesTransferred()
26+
}
2227
}
2328
}
2429

0 commit comments

Comments
 (0)