Monika Singh
06/11/2024, 11:50 AMjava.net.ProtocolException: Expected 'Connection' header value 'Upgrade' but was 'close'
Could someone please help regarding how to test GQL subscriptions?
Stacktrace:
java.net.ProtocolException: Expected 'Connection' header value 'Upgrade' but was 'close'
at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:46)
at kotlinx.coroutines.channels.BufferedChannel.receive$suspendImpl(BufferedChannel.kt:681)
at kotlinx.coroutines.channels.BufferedChannel.receive(BufferedChannel.kt)
at com.apollographql.apollo3.internal.ChannelWrapper.receive(ChannelWrapper.kt)
at com.apollographql.apollo3.network.ws.DefaultWebSocketEngine$open$3.receive(OkHttpWebSocketEngine.kt:86)
at com.apollographql.apollo3.network.ws.WsProtocol.receiveMessageMap(WsProtocol.kt:131)
at com.apollographql.apollo3.network.ws.SubscriptionWsProtocol$connectionInit$2.invokeSuspend(SubscriptionWsProtocol.kt:39)
at com.apollographql.apollo3.network.ws.SubscriptionWsProtocol$connectionInit$2.invoke(SubscriptionWsProtocol.kt)
at com.apollographql.apollo3.network.ws.SubscriptionWsProtocol$connectionInit$2.invoke(SubscriptionWsProtocol.kt)
at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturnIgnoreTimeout(Undispatched.kt:89)
at kotlinx.coroutines.TimeoutKt.setupTimeout(Timeout.kt:151)
at kotlinx.coroutines.TimeoutKt.withTimeout(Timeout.kt:46)
at com.apollographql.apollo3.network.ws.SubscriptionWsProtocol.connectionInit(SubscriptionWsProtocol.kt:38)
at com.apollographql.apollo3.network.ws.WebSocketNetworkTransport.supervise(WebSocketNetworkTransport.kt:214)
at com.apollographql.apollo3.network.ws.WebSocketNetworkTransport.access$supervise(WebSocketNetworkTransport.kt:61)
at com.apollographql.apollo3.network.ws.WebSocketNetworkTransport$supervise$1.invokeSuspend(WebSocketNetworkTransport.kt)
at com.apollographql.apollo3.network.ws.SubscriptionWsProtocol.connectionInit(SubscriptionWsProtocol.kt:38)
at com.apollographql.apollo3.network.ws.WebSocketNetworkTransport.supervise(WebSocketNetworkTransport.kt:214)
at com.apollographql.apollo3.network.ws.WebSocketNetworkTransport$1.invokeSuspend(WebSocketNetworkTransport.kt:98)
Caused by: java.net.ProtocolException: Expected 'Connection' header value 'Upgrade' but was 'close'
at okhttp3.internal.ws.RealWebSocket.checkUpgradeSuccess$okhttp(RealWebSocket.kt:230)
at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:170)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Subscription:
val client = ApolloClient.Builder()
client.subscriptionNetworkTransport(
WebSocketNetworkTransport.Builder()
.protocol(
SubscriptionWsProtocol.Factory(connectionPayload = {
mapOf(
"token" to ""
)
})
)
.serverUrl(serverUrl = endpoint)
.build()
)
public val mockGQLServer: MockServer by lazy { MockServer() }
@Test
fun testSubscribe() = testScope {
mockGQLServer.enqueue(gqlMockResponse(responseString = "", httpStatusCode = 101))
val resultFlow = client.subscription(subscription).toFlow()
resultFlow.test {
val result = awaitItem()
awaitComplete()
}
}
private fun gqlMockResponse(responseString: String, httpStatusCode: Int = 200): MockResponse {
val headers = mapOf(
"Accept" to "application/json",
"Content-Type" to "application/json",
"Connection" to "Upgrade",
"Upgrade" to "websocket"
)
return MockResponse.Builder()
.body(responseString)
.statusCode(httpStatusCode)
.headers(
headers
).build()
}
mbonnin
06/11/2024, 12:02 PMapollo-mockserver
for WebSocket support.mbonnin
06/11/2024, 12:02 PMmbonnin
06/11/2024, 12:05 PMmockServer.enqueueWebSocket()
instead of just enqueue()
mbonnin
06/11/2024, 12:06 PMApolloClient
, etc.. APIsmbonnin
06/11/2024, 12:06 PMMonika Singh
06/11/2024, 1:17 PM