44
55package io .modelcontextprotocol .modern .server ;
66
7+ import io .modelcontextprotocol .modern .McpHttp ;
78import org .junit .jupiter .api .Test ;
89
910import static org .assertj .core .api .Assertions .assertThat ;
@@ -12,28 +13,28 @@ class McpHeadersTests {
1213
1314 @ Test
1415 void paramAddedTwiceIgnoringCaseIsMalformed () {
15- McpHeaders headers = McpHeaders .builder ().param ("Region" , "eu" ).param ("region" , "eu" ).build ();
16+ McpHeaders headers = McpHeaders .builder ().paramHeader ("Region" , "eu" ).paramHeader ("region" , "eu" ).build ();
1617
1718 assertThat (headers .param ("region" )).isEqualTo (McpHeader .malformed ("Mcp-Param-Region" ));
1819 }
1920
2021 @ Test
2122 void paramAddedAfterNullStaysMalformed () {
22- McpHeaders headers = McpHeaders .builder ().param ("Region" , null ).param ("region" , "eu" ).build ();
23+ McpHeaders headers = McpHeaders .builder ().paramHeader ("Region" , null ).paramHeader ("region" , "eu" ).build ();
2324
2425 assertThat (headers .param ("region" ).isMalformed ()).isTrue ();
2526 }
2627
2728 @ Test
2829 void nullParamAddedAfterValueMakesItMalformed () {
29- McpHeaders headers = McpHeaders .builder ().param ("Region" , "eu" ).param ("region" , null ).build ();
30+ McpHeaders headers = McpHeaders .builder ().paramHeader ("Region" , "eu" ).paramHeader ("region" , null ).build ();
3031
3132 assertThat (headers .param ("region" ).isMalformed ()).isTrue ();
3233 }
3334
3435 @ Test
3536 void presentParamHasItsValue () {
36- McpHeaders headers = McpHeaders .builder ().param ("Region" , "eu" ).build ();
37+ McpHeaders headers = McpHeaders .builder ().paramHeader ("Region" , "eu" ).build ();
3738
3839 McpHeader header = headers .param ("region" );
3940 assertThat (header .name ()).isEqualTo ("Mcp-Param-Region" );
@@ -43,21 +44,21 @@ void presentParamHasItsValue() {
4344
4445 @ Test
4546 void paramIsLookedUpIgnoringCase () {
46- McpHeaders headers = McpHeaders .builder ().param ("Region" , "eu" ).build ();
47+ McpHeaders headers = McpHeaders .builder ().paramHeader ("Region" , "eu" ).build ();
4748
4849 assertThat (headers .param ("REGION" )).isEqualTo (headers .param ("region" ));
4950 }
5051
5152 @ Test
5253 void absentParamIsNull () {
53- McpHeaders headers = McpHeaders .builder ().param ("Region" , "eu" ).build ();
54+ McpHeaders headers = McpHeaders .builder ().paramHeader ("Region" , "eu" ).build ();
5455
5556 assertThat (headers .param ("tenant" )).isNull ();
5657 }
5758
5859 @ Test
5960 void paramIsLookedUpByFullHeaderNameIgnoringCase () {
60- McpHeaders headers = McpHeaders .builder ().param ("Region" , "eu" ).build ();
61+ McpHeaders headers = McpHeaders .builder ().paramHeader ("Region" , "eu" ).build ();
6162
6263 assertThat (headers .get ("mcp-param-REGION" )).isEqualTo (McpHeader .of ("Mcp-Param-Region" , "eu" ));
6364 assertThat (headers .get ("Region" )).isNull ();
@@ -67,17 +68,56 @@ void paramIsLookedUpByFullHeaderNameIgnoringCase() {
6768 void paramNamedLikeAnotherMcpHeaderKeepsItsPrefix () {
6869 // "Mcp-Name" is a valid x-mcp-header name, so a tool can make the client send
6970 // Mcp-Param-Mcp-Name, which is not the Mcp-Name header.
70- McpHeaders headers = McpHeaders .builder ().param ("Mcp-Name" , "echo" ).build ();
71+ McpHeaders headers = McpHeaders .builder ().paramHeader ("Mcp-Name" , "echo" ).build ();
7172
7273 assertThat (headers .get ("Mcp-Param-Mcp-Name" )).isEqualTo (McpHeader .of ("Mcp-Param-Mcp-Name" , "echo" ));
7374 assertThat (headers .get ("Mcp-Name" )).isNull ();
75+ assertThat (headers .get (McpHttp .Headers .MCP_NAME )).isNull ();
7476 }
7577
7678 @ Test
77- void toStringOmitsValues () {
78- McpHeaders headers = McpHeaders .builder ().param ("Region" , "eu-west1" ).param ("Tenant" , null ).build ();
79+ void nameIsLookedUpAsMcpName () {
80+ McpHeaders headers = McpHeaders .builder ().header (McpHttp .Headers .MCP_NAME , "echo" ).build ();
81+
82+ assertThat (headers .get (McpHttp .Headers .MCP_NAME )).isEqualTo (McpHeader .of ("Mcp-Name" , "echo" ));
83+ assertThat (headers .get ("mcp-name" )).isEqualTo (headers .get (McpHttp .Headers .MCP_NAME ));
84+ assertThat (headers .param ("Name" )).isNull ();
85+ }
86+
87+ @ Test
88+ void nameAddedTwiceIsMalformed () {
89+ McpHeaders headers = McpHeaders .builder ()
90+ .header (McpHttp .Headers .MCP_NAME , "echo" )
91+ .header (McpHttp .Headers .MCP_NAME , "echo" )
92+ .build ();
93+
94+ assertThat (headers .get (McpHttp .Headers .MCP_NAME )).isEqualTo (McpHeader .malformed ("Mcp-Name" ));
95+ }
96+
97+ @ Test
98+ void nullNameIsMalformed () {
99+ McpHeaders headers = McpHeaders .builder ().header (McpHttp .Headers .MCP_NAME , null ).build ();
79100
80- assertThat (headers .toString ()).contains ("Mcp-Param-Region" , "Mcp-Param-Tenant" ).doesNotContain ("eu-west1" );
101+ assertThat (headers .get (McpHttp .Headers .MCP_NAME ).isMalformed ()).isTrue ();
102+ }
103+
104+ @ Test
105+ void absentNameIsNull () {
106+ McpHeaders headers = McpHeaders .builder ().paramHeader ("Region" , "eu" ).build ();
107+
108+ assertThat (headers .get (McpHttp .Headers .MCP_NAME )).isNull ();
109+ }
110+
111+ @ Test
112+ void toStringOmitsValues () {
113+ McpHeaders headers = McpHeaders .builder ()
114+ .header (McpHttp .Headers .MCP_NAME , "secret-task" )
115+ .paramHeader ("Region" , "eu-west1" )
116+ .paramHeader ("Tenant" , null )
117+ .build ();
118+
119+ assertThat (headers .toString ()).contains ("Mcp-Name" , "Mcp-Param-Region" , "Mcp-Param-Tenant" )
120+ .doesNotContain ("secret-task" , "eu-west1" );
81121 assertThat (headers .param ("region" ).toString ()).doesNotContain ("eu-west1" );
82122 }
83123
0 commit comments