diff --git a/source/extensions/filters/network/dubbo_proxy/dubbo_protocol_impl.cc b/source/extensions/filters/network/dubbo_proxy/dubbo_protocol_impl.cc index 01d86199fc64c..52cea791c9150 100644 --- a/source/extensions/filters/network/dubbo_proxy/dubbo_protocol_impl.cc +++ b/source/extensions/filters/network/dubbo_proxy/dubbo_protocol_impl.cc @@ -183,7 +183,11 @@ bool DubboProtocolImpl::encode(Buffer::Instance& buffer, const MessageMetadata& buffer.writeByte(flag); buffer.writeByte(static_cast(metadata.responseStatus())); buffer.writeBEInt(metadata.requestId()); - buffer.writeBEInt(0); + // Body of heart beat response is null. + // TODO(wbpcode): Currently we only support the Hessian2 serialization scheme, so here we + // directly use the 'N' for null object in Hessian2. This coupling should be unnecessary. + buffer.writeBEInt(1u); + buffer.writeByte('N'); return true; } case MessageType::Response: { diff --git a/test/extensions/filters/network/dubbo_proxy/dubbo_protocol_impl_test.cc b/test/extensions/filters/network/dubbo_proxy/dubbo_protocol_impl_test.cc index 9f57e392df534..19b49d1dbbb2e 100644 --- a/test/extensions/filters/network/dubbo_proxy/dubbo_protocol_impl_test.cc +++ b/test/extensions/filters/network/dubbo_proxy/dubbo_protocol_impl_test.cc @@ -151,6 +151,21 @@ TEST(DubboProtocolImplTest, encode) { EXPECT_TRUE(dubbo_protocol.decodeData(buffer, context, output_metadata)); } +TEST(DubboProtocolImplTest, HeartBeatResponseTest) { + MessageMetadata metadata; + metadata.setMessageType(MessageType::HeartbeatResponse); + metadata.setResponseStatus(ResponseStatus::Ok); + metadata.setSerializationType(SerializationType::Hessian2); + metadata.setRequestId(100); + + Buffer::OwnedImpl buffer; + DubboProtocolImpl dubbo_protocol; + dubbo_protocol.initSerializer(SerializationType::Hessian2); + EXPECT_TRUE(dubbo_protocol.encode(buffer, metadata, "", RpcResponseType::ResponseWithValue)); + // 16 bytes header and one byte null object body. + EXPECT_EQ(17, buffer.length()); +} + TEST(DubboProtocolImplTest, decode) { Buffer::OwnedImpl buffer; MessageMetadataSharedPtr metadata;