From bfeb829a5050105a46145298cf5f06707fe91d01 Mon Sep 17 00:00:00 2001 From: Jesse Wilson Date: Wed, 22 Jul 2026 10:33:05 -0400 Subject: [PATCH] Update to Okio 3.18, including the new APIs --- gradle/libs.versions.toml | 2 +- .../internal/-DnsOverHttpsCall.kt | 2 +- .../dnsoverhttps/DnsRecordCodecTest.kt | 37 +++-- .../tls/internal/der/DerCertificatesTest.kt | 140 +++++++++--------- .../okhttp3/internal/dns/-DnsMessageReader.kt | 50 ++----- .../dns/DnsMessageReaderRecordedValuesTest.kt | 8 +- .../dns/DnsMessageReaderWriterTest.kt | 13 +- .../internal/ws/WebSocketWriterTest.kt | 16 +- 8 files changed, 120 insertions(+), 148 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c31716ac6fee..d0f4fb7dbd19 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -56,7 +56,7 @@ signature-android-apilevel24 = "7.0_r2" spotless-plugin = "8.7.0" square-kotlin-poet = "2.3.0" square-moshi = "1.15.2" -square-okio = "3.17.0" +square-okio = "3.18.0" square-retrofit = "3.0.0" startup-runtime = "1.2.0" testcontainers = "1.21.4" diff --git a/okhttp-dnsoverhttps/src/main/kotlin/okhttp3/dnsoverhttps/internal/-DnsOverHttpsCall.kt b/okhttp-dnsoverhttps/src/main/kotlin/okhttp3/dnsoverhttps/internal/-DnsOverHttpsCall.kt index 7ce30ae6e37d..76004e351f9a 100644 --- a/okhttp-dnsoverhttps/src/main/kotlin/okhttp3/dnsoverhttps/internal/-DnsOverHttpsCall.kt +++ b/okhttp-dnsoverhttps/src/main/kotlin/okhttp3/dnsoverhttps/internal/-DnsOverHttpsCall.kt @@ -138,7 +138,7 @@ internal class DnsOverHttpsCall( internal fun DnsMessage.asQueryParameter(): String { val buffer = Buffer() DnsMessageWriter(buffer).write(this@asQueryParameter) - return buffer.readByteString().base64Url().replace("=", "") + return buffer.readByteString().base64Url(includePadding = false) } internal class QueryRequestBody( diff --git a/okhttp-dnsoverhttps/src/test/java/okhttp3/dnsoverhttps/DnsRecordCodecTest.kt b/okhttp-dnsoverhttps/src/test/java/okhttp3/dnsoverhttps/DnsRecordCodecTest.kt index 89bebe07a910..b8279a55380e 100644 --- a/okhttp-dnsoverhttps/src/test/java/okhttp3/dnsoverhttps/DnsRecordCodecTest.kt +++ b/okhttp-dnsoverhttps/src/test/java/okhttp3/dnsoverhttps/DnsRecordCodecTest.kt @@ -57,10 +57,9 @@ class DnsRecordCodecTest { val encoded = decodeAnswers( byteString = - ( - "00008180000100010000000006676f6f676c6503636f6d0000010001c00c0001000100000043" + - "0004d83ad54e" - ).decodeHex(), + """ + 00008180000100010000000006676f6f676c6503636f6d0000010001c00c00010001000000430004d83ad54e + """.decodeHex(ignoreWhitespace = true), ) assertThat(encoded).containsExactly(InetAddress.getByName("216.58.213.78")) } @@ -70,11 +69,11 @@ class DnsRecordCodecTest { val decoded = decodeAnswers( byteString = - ( - "0000818000010003000000000567726170680866616365626f6f6b03636f6d0000010001c00c" + - "0005000100000a6d000603617069c012c0300005000100000cde000c04737461720463313072c012c0420001" + - "00010000003b00049df00112" - ).decodeHex(), + """ + 0000818000010003000000000567726170680866616365626f6f6b03636f6d0000010001c00c0005000100000a + 6d000603617069c012c0300005000100000cde000c04737461720463313072c012c042000100010000003b0004 + 9df00112 + """.decodeHex(ignoreWhitespace = true), ) assertThat(decoded).containsExactly(InetAddress.getByName("157.240.1.18")) } @@ -84,11 +83,11 @@ class DnsRecordCodecTest { val decoded = decodeAnswers( byteString = - ( - "0000818000010003000000000567726170680866616365626f6f6b03636f6d00001c0001c00c" + - "0005000100000a1b000603617069c012c0300005000100000b1f000c04737461720463313072c012c042001c" + - "00010000003b00102a032880f0290011faceb00c00000002" - ).decodeHex(), + """ + 0000818000010003000000000567726170680866616365626f6f6b03636f6d00001c0001c00c0005000100000a + 1b000603617069c012c0300005000100000b1f000c04737461720463313072c012c042001c00010000003b0010 + 2a032880f0290011faceb00c00000002 + """.decodeHex(ignoreWhitespace = true), ) assertThat(decoded) .containsExactly(InetAddress.getByName("2a03:2880:f029:11:face:b00c:0:2")) @@ -99,11 +98,11 @@ class DnsRecordCodecTest { assertFailsWith { decodeAnswers( byteString = - ( - "0000818300010000000100000e7364666c6b686673646c6b6a64660265650000010001c01b" + - "00060001000007070038026e7303746c64c01b0a686f73746d61737465720d6565737469696e7465726e65" + - "74c01b5adb12c100000e10000003840012750000000e10" - ).decodeHex(), + """ + 0000818300010000000100000e7364666c6b686673646c6b6a64660265650000010001c01b0006000100000707 + 0038026e7303746c64c01b0a686f73746d61737465720d6565737469696e7465726e6574c01b5adb12c100000e + 10000003840012750000000e10 + """.decodeHex(ignoreWhitespace = true), ) } } diff --git a/okhttp-tls/src/test/java/okhttp3/tls/internal/der/DerCertificatesTest.kt b/okhttp-tls/src/test/java/okhttp3/tls/internal/der/DerCertificatesTest.kt index 9db7894bafc4..f3ed24857c7e 100644 --- a/okhttp-tls/src/test/java/okhttp3/tls/internal/der/DerCertificatesTest.kt +++ b/okhttp-tls/src/test/java/okhttp3/tls/internal/der/DerCertificatesTest.kt @@ -94,19 +94,17 @@ internal class DerCertificatesTest { .isEqualTo(javaCertificate.signature.toByteString()) val publicKeyBytes = - ( - "3081890281810080a451e1b6b2da9f6f2afa8328959b9a4df58103457968c22fab7d81" + - "b25a10bba2e5bd7d70278604a140a30e53ceb6986ded72db5260676c8ccdf3d5cae1425533a4aaa772bcf0a9" + - "bccfb80caddadf4e89bfdbbe302f6e5f20247ec83110e5f51560198900a5d91756a8234988a04c74c45b1084" + - "827adfbbf6331243ba977ad70203010001" - ).decodeHex() + """ + 3081890281810080a451e1b6b2da9f6f2afa8328959b9a4df58103457968c22fab7d81b25a10bba2e5bd7d70278604 + a140a30e53ceb6986ded72db5260676c8ccdf3d5cae1425533a4aaa772bcf0a9bccfb80caddadf4e89bfdbbe302f6e + 5f20247ec83110e5f51560198900a5d91756a8234988a04c74c45b1084827adfbbf6331243ba977ad70203010001 + """.decodeHex(ignoreWhitespace = true) val signatureBytes = - ( - "36a6515c0a879472edeb373b1b58dc8810ba73d4a0b7341b0ef5825f59fbbb76149e55" + - "91c2398167eeb667716766c35c223cf15d2fc68d691d79db06b9f1852fd9dd305eaf0f11c90a9c69639da7ea" + - "415f2216991fa31e4f5c1d90aa42f793201b188da03d54486075a561c41b13daacd4343b1794ecc6b258b39c" + - "37e8a844db" - ).decodeHex() + """ + 36a6515c0a879472edeb373b1b58dc8810ba73d4a0b7341b0ef5825f59fbbb76149e5591c2398167eeb667716766c3 + 5c223cf15d2fc68d691d79db06b9f1852fd9dd305eaf0f11c90a9c69639da7ea415f2216991fa31e4f5c1d90aa42f7 + 93201b188da03d54486075a561c41b13daacd4343b1794ecc6b258b39c37e8a844db + """.decodeHex(ignoreWhitespace = true) assertThat(okHttpCertificate).isEqualTo( Certificate( @@ -222,25 +220,23 @@ internal class DerCertificatesTest { .fromDer(certificateByteString) val publicKeyBytes = - ( - "3082010a0282010100ba84b672db9e0c6be299e93001a776ea32b895411ac9da614e58" + - "72cffef68279bf7361060aa527d8b35fd3454e1c72d64e32f2728a0ff78319d06a808000451eb0c7e79abf12" + - "57271ca3682f0a87bd6a6b0e5e65f31c77d5d4858d7021b4b332e78ba2d5863902b1b8d247cee4c949c43ba7" + - "defb547d57bef0e86ec279b23a0b55e250981632135c2f7856c1c294b3f25ae4279a9f24d7c6ecd09b2582e3" + - "ccc2c445c58c977a066b2a119fa90a6e483b6fdbd4111942f78f07bff5535f9c3ef4172ce669ac4e324c6277" + - "eab7e8e5bb34bc198bae9c51e7b77eb553b13322e56dcf703c1afae29b67b683f48da5af624c4de058ac6434" + - "1203f8b68d946324a4710203010001" - ).decodeHex() + """ + 3082010a0282010100ba84b672db9e0c6be299e93001a776ea32b895411ac9da614e5872cffef68279bf7361060aa5 + 27d8b35fd3454e1c72d64e32f2728a0ff78319d06a808000451eb0c7e79abf1257271ca3682f0a87bd6a6b0e5e65f3 + 1c77d5d4858d7021b4b332e78ba2d5863902b1b8d247cee4c949c43ba7defb547d57bef0e86ec279b23a0b55e25098 + 1632135c2f7856c1c294b3f25ae4279a9f24d7c6ecd09b2582e3ccc2c445c58c977a066b2a119fa90a6e483b6fdbd4 + 111942f78f07bff5535f9c3ef4172ce669ac4e324c6277eab7e8e5bb34bc198bae9c51e7b77eb553b13322e56dcf70 + 3c1afae29b67b683f48da5af624c4de058ac64341203f8b68d946324a4710203010001 + """.decodeHex(ignoreWhitespace = true) val signatureBytes = - ( - "693383fc287a6f7def9d55ebc53e7a9d75b3ccc33836d934a2286818ea1e69d3bde7d0" + - "77dab800834e4acf6fd1f1c1223f74e4f798499e9bb69ee1db98772d5634b1a83cd9fdc0cdc7bf0503d402c5" + - "f1e5c6da08a513c7622311d161301d608445ef79a8c62693a4b7cd34b869c513f691b3c9457376b692f6760a" + - "5be10347b7e9294c913223374a9c35d878fd1d1fe483892480adb7f9cfe45da5d471c4855b701fdb3f1c01eb" + - "1a45263114cc65bf67decacc3365e54191d737be411a969de68a979da7ceac4e9a3dbd01a06ad94f22008b44" + - "d569627b2eebccbae7927d69673dfcb87cde4187d069eaba0a187a1a9543b3797128766da1fb574aec4dc80e" + - "10" - ).decodeHex() + """ + 693383fc287a6f7def9d55ebc53e7a9d75b3ccc33836d934a2286818ea1e69d3bde7d077dab800834e4acf6fd1f1c1 + 223f74e4f798499e9bb69ee1db98772d5634b1a83cd9fdc0cdc7bf0503d402c5f1e5c6da08a513c7622311d161301d + 608445ef79a8c62693a4b7cd34b869c513f691b3c9457376b692f6760a5be10347b7e9294c913223374a9c35d878fd + 1d1fe483892480adb7f9cfe45da5d471c4855b701fdb3f1c01eb1a45263114cc65bf67decacc3365e54191d737be41 + 1a969de68a979da7ceac4e9a3dbd01a06ad94f22008b44d569627b2eebccbae7927d69673dfcb87cde4187d069eaba + 0a187a1a9543b3797128766da1fb574aec4dc80e10 + """.decodeHex(ignoreWhitespace = true) assertThat(okHttpCertificate.signatureValue.byteString) .isEqualTo(javaCertificate.signature.toByteString()) @@ -363,28 +359,27 @@ internal class DerCertificatesTest { id = authorityInfoAccess, critical = false, value = - ( - "3025302306082b060105050730018617687474703a2f2f6f6373702e656" + - "e74727573742e6e6574" - ).decodeHex(), + """ + 3025302306082b060105050730018617687474703a2f2f6f6373702e656e74727573742e6e6574 + """.decodeHex(ignoreWhitespace = true), ), Extension( id = crlDistributionPoints, critical = false, value = - ( - "302a3028a026a0248622687474703a2f2f63726c2e656e74727573742e6" + - "e65742f726f6f746361312e63726c" - ).decodeHex(), + """ + 302a3028a026a0248622687474703a2f2f63726c2e656e74727573742e6e65742f726f6f74636131 + 2e63726c + """.decodeHex(ignoreWhitespace = true), ), Extension( id = certificatePolicies, critical = false, value = - ( - "303230300604551d20003028302606082b06010505070201161a6874747" + - "03a2f2f7777772e656e74727573742e6e65742f435053" - ).decodeHex(), + """ + 303230300604551d20003028302606082b06010505070201161a687474703a2f2f7777772e656e74 + 727573742e6e65742f435053 + """.decodeHex(ignoreWhitespace = true), ), Extension( id = subjectKeyIdentifier, @@ -472,25 +467,23 @@ internal class DerCertificatesTest { .fromDer(certificateByteString) val publicKeyBytes = - ( - "3082010a0282010100aafda24b05af6facacfd1bb82ed4b3d11e300dac6496b1481aa7" + - "49af1c5874074b423ca31f226c7e435076ddaee0960f44a6914d5611f55208796531fc88e1661b063ecb4f32" + - "3613ddc37556ca61483b6b455bb16259a4aef1daaf41e869d36bd4c1ddf7a01c877835409955f2ec9427b257" + - "a4f08d27c10c887e769fc6d5ce98c38d7c28620de8398bdc7ad780d0627955660008381f9a47a868dd42c77d" + - "4ef6a712894939018f077c09cf876d1572b9cfa367499a6edf9142a8848c6b323b69c22e5eb16842059264e7" + - "416f78aae075e49ee17c4d2fbb893c3f3d489b4a997ee3c68350498de6acfb2c2dd69dc25b543a1cdce0b726" + - "a23e0e6f6e09c6e570f10203010001" - ).decodeHex() + """ + 3082010a0282010100aafda24b05af6facacfd1bb82ed4b3d11e300dac6496b1481aa749af1c5874074b423ca31f22 + 6c7e435076ddaee0960f44a6914d5611f55208796531fc88e1661b063ecb4f323613ddc37556ca61483b6b455bb162 + 59a4aef1daaf41e869d36bd4c1ddf7a01c877835409955f2ec9427b257a4f08d27c10c887e769fc6d5ce98c38d7c28 + 620de8398bdc7ad780d0627955660008381f9a47a868dd42c77d4ef6a712894939018f077c09cf876d1572b9cfa367 + 499a6edf9142a8848c6b323b69c22e5eb16842059264e7416f78aae075e49ee17c4d2fbb893c3f3d489b4a997ee3c6 + 8350498de6acfb2c2dd69dc25b543a1cdce0b726a23e0e6f6e09c6e570f10203010001 + """.decodeHex(ignoreWhitespace = true) val signatureBytes = - ( - "60b5fa4d2b90a92004bb7ee927e6aef48951880121b5dc9bc6bde686e208d332267a38" + - "4bba8da49ced920f9f5abc20c13e2bc84ec4af87669ec0e52678a8f519823bbf5eb108e093433de4df5b0201" + - "7d8bec3a331ed6eb638c06ee151203d752bff698244b5e6e4c229b79601f0bf73470378a25b7ada1f50cf253" + - "8509b1149ae74f5ccbd0b41b3359d140c5da0557d0104848627ad4ebbdb1e83fdcc9aeabe54c16c9edd33990" + - "87d0b87e61a66ab6e2b1f651081176b18c3de3a4697044bb84fdf23a7d783ed2432f6aa3552e6a4d6894fb59" + - "e1ece5b91fd1d53baed0de7ebd2229ea88c6b95444f81b796645f06024a5d35a0b058c0c014ef031b4e0afad" + - "03" - ).decodeHex() + """ + 60b5fa4d2b90a92004bb7ee927e6aef48951880121b5dc9bc6bde686e208d332267a384bba8da49ced920f9f5abc20 + c13e2bc84ec4af87669ec0e52678a8f519823bbf5eb108e093433de4df5b02017d8bec3a331ed6eb638c06ee151203 + d752bff698244b5e6e4c229b79601f0bf73470378a25b7ada1f50cf2538509b1149ae74f5ccbd0b41b3359d140c5da + 0557d0104848627ad4ebbdb1e83fdcc9aeabe54c16c9edd3399087d0b87e61a66ab6e2b1f651081176b18c3de3a469 + 7044bb84fdf23a7d783ed2432f6aa3552e6a4d6894fb59e1ece5b91fd1d53baed0de7ebd2229ea88c6b95444f81b79 + 6645f06024a5d35a0b058c0c014ef031b4e0afad03 + """.decodeHex(ignoreWhitespace = true) assertThat(okHttpCertificate.signatureValue.byteString) .isEqualTo(javaCertificate.signature.toByteString()) @@ -660,30 +653,29 @@ internal class DerCertificatesTest { id = authorityInfoAccess, critical = false, value = - ( - "305a302306082b060105050730018617687474703a2f2f6f6373702e656" + - "e74727573742e6e6574303306082b060105050730028627687474703a2f2f6169612" + - "e656e74727573742e6e65742f6c316d2d636861696e3235362e636572" - ).decodeHex(), + """ + 305a302306082b060105050730018617687474703a2f2f6f6373702e656e74727573742e6e657430 + 3306082b060105050730028627687474703a2f2f6169612e656e74727573742e6e65742f6c316d2d + 636861696e3235362e636572 + """.decodeHex(ignoreWhitespace = true), ), Extension( id = crlDistributionPoints, critical = false, value = - ( - "302a3028a026a0248622687474703a2f2f63726c2e656e74727573742e6" + - "e65742f6c6576656c316d2e63726c" - ).decodeHex(), + """ + 302a3028a026a0248622687474703a2f2f63726c2e656e74727573742e6e65742f6c6576656c316d + 2e63726c + """.decodeHex(ignoreWhitespace = true), ), Extension( id = certificatePolicies, critical = false, value = - ( - "30413036060a6086480186fa6c0a01023028302606082b0601050507020" + - "1161a687474703a2f2f7777772e656e74727573742e6e65742f72706130070605678" + - "10c0101" - ).decodeHex(), + """ + 30413036060a6086480186fa6c0a01023028302606082b06010505070201161a687474703a2f2f77 + 77772e656e74727573742e6e65742f7270613007060567810c0101 + """.decodeHex(ignoreWhitespace = true), ), Extension( id = authorityKeyIdentifier, diff --git a/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/dns/-DnsMessageReader.kt b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/dns/-DnsMessageReader.kt index e58cf4969ebd..95e981f07fb5 100644 --- a/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/dns/-DnsMessageReader.kt +++ b/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/dns/-DnsMessageReader.kt @@ -24,10 +24,11 @@ import okhttp3.internal.skipAll import okio.Buffer import okio.BufferedSource import okio.ByteString -import okio.ForwardingSource import okio.ProtocolException -import okio.Source import okio.buffer +import okio.limit +import okio.readUByte +import okio.readUShort /** * Decode DNS messages, which are symmetric for requests and responses. @@ -49,10 +50,10 @@ class DnsMessageReader( val id = source.readShort() val flags = source.readShort().toInt() - val questionCount = source.readShort().toUShort().toInt() - val answerCount = source.readShort().toUShort().toInt() - val authorityRecordCount = source.readShort().toUShort().toInt() - val additionalRecordCount = source.readShort().toUShort().toInt() + val questionCount = source.readUShort().toInt() + val answerCount = source.readUShort().toInt() + val authorityRecordCount = source.readUShort().toInt() + val additionalRecordCount = source.readUShort().toInt() val questions = ArrayList(questionCount) for (i in 0 until questionCount) { @@ -112,7 +113,7 @@ class DnsMessageReader( maxOffset: Int = Int.MAX_VALUE, ) { while (true) { - val labelTypeAndLength = readByte().toUByte().toInt() + val labelTypeAndLength = readUByte().toInt() val labelType = labelTypeAndLength and 0b11000000 val labelLength = labelTypeAndLength and 0b00111111 when (labelType) { @@ -125,7 +126,7 @@ class DnsMessageReader( // Compressed suffix. 0b11_000000 -> { - val offset = (labelLength shl 8) or readByte().toUByte().toInt() + val offset = (labelLength shl 8) or readUByte().toInt() // Pointers may only refer to prior occurrences. if (offset >= maxOffset) { @@ -174,7 +175,7 @@ class DnsMessageReader( } `class` == CLASS_IN && type == TYPE_HTTPS -> { - return FixedLengthSource(this, recordDataLength) + return limit(recordDataLength) .buffer() .readHttpsResourceRecord(name, timeToLive) } @@ -191,7 +192,7 @@ class DnsMessageReader( name: String, timeToLive: Int, ): ResourceRecord.Https { - val svcPriority = readShort().toUShort() + val svcPriority = readUShort() val targetName = readName() var lastKey = -1 var alpnIds: MutableList? = null @@ -201,10 +202,10 @@ class DnsMessageReader( var echConfigList: ByteString? = null while (!exhausted()) { - val key = readShort().toUShort().toInt() + val key = readUShort().toInt() if (key <= lastKey) throw ProtocolException("malformed HTTPS resource record") lastKey = key - val valueLength = readShort().toUShort().toLong() + val valueLength = readUShort().toLong() when (key) { SERVICE_PARAMETER_MANDATORY -> { for (i in 0 until valueLength) { @@ -219,7 +220,7 @@ class DnsMessageReader( alpnIds = mutableListOf() var pos = 0L while (pos < valueLength) { - val alpnIdLength = readByte().toUByte().toLong() + val alpnIdLength = readUByte().toLong() pos++ if (pos + alpnIdLength > valueLength) { throw ProtocolException("malformed HTTPS / alpn") @@ -236,7 +237,7 @@ class DnsMessageReader( SERVICE_PARAMETER_PORT -> { if (valueLength != 2L) throw ProtocolException("malformed HTTPS / port") - port = readShort().toUShort().toInt() + port = readUShort().toInt() } SERVICE_PARAMETER_IPV4_HINT -> { @@ -284,24 +285,3 @@ class DnsMessageReader( ) } } - -internal class FixedLengthSource( - delegate: Source, - private val size: Long, -) : ForwardingSource(delegate) { - private var bytesReceived = 0L - - override fun read( - sink: Buffer, - byteCount: Long, - ): Long { - val result = - when (val toRead = byteCount.coerceAtMost(size - bytesReceived)) { - 0L -> -1L - else -> super.read(sink, toRead) - } - if (result != -1L) bytesReceived += result - if (bytesReceived < size && result == -1L) throw ProtocolException("truncated stream") - return result - } -} diff --git a/okhttp/src/commonTest/kotlin/okhttp3/internal/dns/DnsMessageReaderRecordedValuesTest.kt b/okhttp/src/commonTest/kotlin/okhttp3/internal/dns/DnsMessageReaderRecordedValuesTest.kt index a29742b360f8..3e1878254167 100644 --- a/okhttp/src/commonTest/kotlin/okhttp3/internal/dns/DnsMessageReaderRecordedValuesTest.kt +++ b/okhttp/src/commonTest/kotlin/okhttp3/internal/dns/DnsMessageReaderRecordedValuesTest.kt @@ -375,10 +375,10 @@ class DnsMessageReaderRecordedValuesTest { timeToLive = 604800, alpnIds = listOf("h3", "http/1.1"), echConfigList = - ( - "003dfe0d0039aa00200020a4a7bb34b77c43336c3a2931dd28c87d008218a99b44f1f" + - "0aa8a82537d487d43000400010001000a676f6f676c652e636f6d0000" - ).decodeHex(), + """ + 003dfe0d0039aa00200020a4a7bb34b77c43336c3a2931dd28c87d008218a99b44f1f0aa8a82537d487d4300 + 0400010001000a676f6f676c652e636f6d0000 + """.decodeHex(ignoreWhitespace = true), ), ) } diff --git a/okhttp/src/commonTest/kotlin/okhttp3/internal/dns/DnsMessageReaderWriterTest.kt b/okhttp/src/commonTest/kotlin/okhttp3/internal/dns/DnsMessageReaderWriterTest.kt index 08506f012ad5..8cf33e7528f9 100644 --- a/okhttp/src/commonTest/kotlin/okhttp3/internal/dns/DnsMessageReaderWriterTest.kt +++ b/okhttp/src/commonTest/kotlin/okhttp3/internal/dns/DnsMessageReaderWriterTest.kt @@ -123,10 +123,10 @@ class DnsMessageReaderWriterTest { InetAddress.getByName("2607:f8b0:4023:1807:0:0:0:8b"), ), echConfigList = - ( - "003dfe0d0039aa00200020a4a7bb34b77c43336c3a2931dd28c87d008218a99b44f1f" + - "0aa8a82537d487d43000400010001000a676f6f676c652e636f6d0000" - ).decodeHex(), + """ + 003dfe0d0039aa00200020a4a7bb34b77c43336c3a2931dd28c87d008218a99b44f1f0aa8a82537d487d + 43000400010001000a676f6f676c652e636f6d0000 + """.decodeHex(ignoreWhitespace = true), ), ResourceRecord.Https( name = "lysine.dev", @@ -144,8 +144,9 @@ class DnsMessageReaderWriterTest { fun `unbounded name compression`() { val buffer = Buffer() buffer.write( - "000081800001000100000000066c7973696e65c00c000100010363646ec00c000100010000000000040a141e28" - .decodeHex(), + """ + 000081800001000100000000066c7973696e65c00c000100010363646ec00c000100010000000000040a141e28 + """.decodeHex(ignoreWhitespace = true), ) val reader = DnsMessageReader(buffer) diff --git a/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketWriterTest.kt b/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketWriterTest.kt index bce1e7264bfb..c58d3104b4d7 100644 --- a/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketWriterTest.kt +++ b/okhttp/src/jvmTest/kotlin/okhttp3/internal/ws/WebSocketWriterTest.kt @@ -129,10 +129,10 @@ class WebSocketWriterTest { @Test fun serverBinaryMessage() { val payload = - ( - "60b420bb3851d9d47acb933dbe70399bf6c92da33af01d4fb770e98c0325f41d3ebaf8986da71" + - "2c82bcd4d554bf0b54023c2" - ).decodeHex() + """ + 60b420bb3851d9d47acb933dbe70399bf6c92da33af01d4fb770e98c0325f41d3ebaf8986da712c82bcd4d554bf0b5 + 4023c2 + """.decodeHex(ignoreWhitespace = true) serverWriter.writeMessageFrame(OPCODE_BINARY, payload) assertData("8232") assertData(payload) @@ -168,10 +168,10 @@ class WebSocketWriterTest { @Test fun clientBinary() { val payload = - ( - "60b420bb3851d9d47acb933dbe70399bf6c92da33af01d4fb770e98c0325f41d3ebaf8986da71" + - "2c82bcd4d554bf0b54023c2" - ).decodeHex() + """ + 60b420bb3851d9d47acb933dbe70399bf6c92da33af01d4fb770e98c0325f41d3ebaf8986da712c82bcd4d554bf0b5 + 4023c2 + """.decodeHex(ignoreWhitespace = true) clientWriter.writeMessageFrame(OPCODE_BINARY, payload) assertData("82b2") assertData("60b420bb")