@@ -440,6 +440,62 @@ TEST_P(DynamicModuleHttpLanguageTests, FilterStateCallbacks) {
440440 EXPECT_EQ (stream_complete_value->serializeAsString (), " stream_complete_value" );
441441}
442442
443+ TEST_P (DynamicModuleTestLanguages, WillNotMoveDataAutomatically) {
444+ const std::string filter_name = " foo" ;
445+ const std::string filter_config = " bar" ;
446+
447+ const auto language = GetParam ();
448+ auto dynamic_module = newDynamicModule (testSharedObjectPath (" no_op" , language), false );
449+ EXPECT_TRUE (dynamic_module.ok ());
450+
451+ NiceMock<Server::Configuration::MockServerFactoryContext> context;
452+ Stats::IsolatedStoreImpl stats_store;
453+ auto filter_config_or_status =
454+ Envoy::Extensions::DynamicModules::HttpFilters::newDynamicModuleHttpFilterConfig (
455+ filter_name, filter_config, false , std::move (dynamic_module.value ()),
456+ *stats_store.createScope (" " ), context);
457+ EXPECT_TRUE (filter_config_or_status.ok ());
458+
459+ auto filter = std::make_shared<DynamicModuleHttpFilter>(filter_config_or_status.value (),
460+ stats_store.symbolTable ());
461+ filter->initializeInModuleFilter ();
462+
463+ NiceMock<Http::MockStreamDecoderFilterCallbacks> decoder_callbacks;
464+ filter->setDecoderFilterCallbacks (decoder_callbacks);
465+ NiceMock<Http::MockStreamEncoderFilterCallbacks> encoder_callbacks;
466+ filter->setEncoderFilterCallbacks (encoder_callbacks);
467+
468+ TestRequestHeaderMapImpl headers{{}};
469+ EXPECT_EQ (FilterHeadersStatus::Continue, filter->decodeHeaders (headers, false ));
470+
471+ Buffer::OwnedImpl buffered_request_data (" buffered data" );
472+ EXPECT_CALL (decoder_callbacks, addDecodedData (_, _)).Times (0 ); // should not be called.
473+
474+ Buffer::OwnedImpl new_request_data1 (" new data 1" ); // 10 bytes
475+ EXPECT_EQ (FilterDataStatus::Continue, filter->decodeData (new_request_data1, false ));
476+ EXPECT_EQ (10U , new_request_data1.length ());
477+ Buffer::OwnedImpl new_request_data2 (" new data 2" ); // 10 bytes
478+ EXPECT_EQ (FilterDataStatus::Continue, filter->decodeData (new_request_data2, true ));
479+ EXPECT_EQ (10U , new_request_data2.length ());
480+
481+ // Complete response lifecycle (needed for Rust no_op module lifecycle assertions).
482+ TestResponseHeaderMapImpl response_headers{{}};
483+ EXPECT_EQ (FilterHeadersStatus::Continue, filter->encodeHeaders (response_headers, false ));
484+
485+ Buffer::OwnedImpl buffered_response_data (" buffered data" );
486+ EXPECT_CALL (encoder_callbacks, addEncodedData (_, _)).Times (0 ); // should not be called.
487+
488+ Buffer::OwnedImpl new_response_data1 (" new data 1" ); // 10 bytes
489+ EXPECT_EQ (FilterDataStatus::Continue, filter->encodeData (new_response_data1, false ));
490+ EXPECT_EQ (10U , new_response_data1.length ());
491+ Buffer::OwnedImpl new_response_data2 (" new data 2" ); // 10 bytes
492+ EXPECT_EQ (FilterDataStatus::Continue, filter->encodeData (new_response_data2, true ));
493+ EXPECT_EQ (10U , new_response_data2.length ());
494+
495+ filter->onStreamComplete ();
496+ filter->onDestroy ();
497+ }
498+
443499TEST_P (DynamicModuleHttpLanguageTests, BodyCallbacks) {
444500 const std::string filter_name = " body_callbacks" ;
445501 const std::string filter_config = " " ;
@@ -469,12 +525,8 @@ TEST_P(DynamicModuleHttpLanguageTests, BodyCallbacks) {
469525 filter->setEncoderFilterCallbacks (encoder_callbacks);
470526 Buffer::OwnedImpl request_body;
471527 EXPECT_CALL (decoder_callbacks, decodingBuffer ()).WillRepeatedly (testing::Return (&request_body));
472- EXPECT_CALL (decoder_callbacks, addDecodedData (_, _))
473- .WillOnce (Invoke ([&](Buffer::Instance&, bool ) -> void {}));
474528 Buffer::OwnedImpl response_body;
475529 EXPECT_CALL (encoder_callbacks, encodingBuffer ()).WillRepeatedly (testing::Return (&response_body));
476- EXPECT_CALL (encoder_callbacks, addEncodedData (_, _))
477- .WillOnce (Invoke ([&](Buffer::Instance&, bool ) -> void {}));
478530 EXPECT_CALL (decoder_callbacks, modifyDecodingBuffer (_))
479531 .WillRepeatedly (Invoke ([&](std::function<void (Buffer::Instance&)> callback) -> void {
480532 callback (request_body);
0 commit comments