@@ -560,6 +560,84 @@ TEST(Http2SettingsManagerTest, AckAfterAckFails) {
560560 EXPECT_FALSE (settings_manager.AckLastSend ());
561561}
562562
563+ TEST (Http2SettingsManagerTest, ApplyIncomingSettingsEmpty) {
564+ Http2SettingsManager settings_manager;
565+ std::vector<Http2SettingsFrame::Setting> settings;
566+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings),
567+ Http2ErrorCode::kNoError );
568+ }
569+
570+ TEST (Http2SettingsManagerTest, ApplyIncomingSettingsValid) {
571+ Http2SettingsManager settings_manager;
572+ std::vector<Http2SettingsFrame::Setting> settings = {
573+ {Http2Settings::kHeaderTableSizeWireId , 1000 },
574+ {Http2Settings::kMaxConcurrentStreamsWireId , 200 }};
575+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings),
576+ Http2ErrorCode::kNoError );
577+ EXPECT_EQ (settings_manager.peer ().header_table_size (), 1000u );
578+ EXPECT_EQ (settings_manager.peer ().max_concurrent_streams (), 200u );
579+ }
580+
581+ TEST (Http2SettingsManagerTest, ApplyIncomingSettingsInvalidValue) {
582+ Http2SettingsManager settings_manager;
583+ // MaxFrameSize must be between 16384 and 16777215
584+ std::vector<Http2SettingsFrame::Setting> settings = {
585+ {Http2Settings::kMaxFrameSizeWireId , 16383 }};
586+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings),
587+ Http2ErrorCode::kProtocolError );
588+ std::vector<Http2SettingsFrame::Setting> settings1 = {
589+ {Http2Settings::kMaxFrameSizeWireId , 16777216 }};
590+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings1),
591+ Http2ErrorCode::kProtocolError );
592+ }
593+
594+ TEST (Http2SettingsManagerTest,
595+ ApplyIncomingSettingsAllowTrueBinaryMetadataTwice) {
596+ Http2SettingsManager settings_manager;
597+ std::vector<Http2SettingsFrame::Setting> settings = {
598+ {Http2Settings::kGrpcAllowTrueBinaryMetadataWireId , 1 }};
599+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings),
600+ Http2ErrorCode::kNoError );
601+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings),
602+ Http2ErrorCode::kNoError );
603+ }
604+
605+ TEST (Http2SettingsManagerTest,
606+ ApplyIncomingSettingsAllowTrueBinaryMetadataTwiceDifferentValue) {
607+ Http2SettingsManager settings_manager;
608+ std::vector<Http2SettingsFrame::Setting> settings1 = {
609+ {Http2Settings::kGrpcAllowTrueBinaryMetadataWireId , 1 }};
610+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings1),
611+ Http2ErrorCode::kNoError );
612+ std::vector<Http2SettingsFrame::Setting> settings2 = {
613+ {Http2Settings::kGrpcAllowTrueBinaryMetadataWireId , 0 }};
614+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings2),
615+ Http2ErrorCode::kConnectError );
616+ }
617+
618+ TEST (Http2SettingsManagerTest, ApplyIncomingSettingsAllowSecurityFrameTwice) {
619+ Http2SettingsManager settings_manager;
620+ std::vector<Http2SettingsFrame::Setting> settings = {
621+ {Http2Settings::kGrpcAllowSecurityFrameWireId , 1 }};
622+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings),
623+ Http2ErrorCode::kNoError );
624+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings),
625+ Http2ErrorCode::kNoError );
626+ }
627+
628+ TEST (Http2SettingsManagerTest,
629+ ApplyIncomingSettingsAllowSecurityFrameTwiceDifferentValue) {
630+ Http2SettingsManager settings_manager;
631+ std::vector<Http2SettingsFrame::Setting> settings1 = {
632+ {Http2Settings::kGrpcAllowSecurityFrameWireId , 1 }};
633+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings1),
634+ Http2ErrorCode::kNoError );
635+ std::vector<Http2SettingsFrame::Setting> settings2 = {
636+ {Http2Settings::kGrpcAllowSecurityFrameWireId , 0 }};
637+ EXPECT_EQ (settings_manager.ApplyIncomingSettings (settings2),
638+ Http2ErrorCode::kConnectError );
639+ }
640+
563641} // namespace grpc_core
564642
565643int main (int argc, char ** argv) {
0 commit comments