@@ -53,7 +53,7 @@ func TestProcessHeaderOverride_ChannelTestSkipsClientHeaderPlaceholder(t *testin
5353
5454 headers , err := processHeaderOverride (info , ctx )
5555 require .NoError (t , err )
56- _ , ok := headers ["X-Upstream-Trace " ]
56+ _ , ok := headers ["x-upstream-trace " ]
5757 require .False (t , ok )
5858}
5959
@@ -77,7 +77,38 @@ func TestProcessHeaderOverride_NonTestKeepsClientHeaderPlaceholder(t *testing.T)
7777
7878 headers , err := processHeaderOverride (info , ctx )
7979 require .NoError (t , err )
80- require .Equal (t , "trace-123" , headers ["X-Upstream-Trace" ])
80+ require .Equal (t , "trace-123" , headers ["x-upstream-trace" ])
81+ }
82+
83+ func TestProcessHeaderOverride_RuntimeOverrideIsFinalHeaderMap (t * testing.T ) {
84+ t .Parallel ()
85+
86+ gin .SetMode (gin .TestMode )
87+ recorder := httptest .NewRecorder ()
88+ ctx , _ := gin .CreateTestContext (recorder )
89+ ctx .Request = httptest .NewRequest (http .MethodPost , "/v1/chat/completions" , nil )
90+
91+ info := & relaycommon.RelayInfo {
92+ IsChannelTest : false ,
93+ UseRuntimeHeadersOverride : true ,
94+ RuntimeHeadersOverride : map [string ]any {
95+ "x-static" : "runtime-value" ,
96+ "x-runtime" : "runtime-only" ,
97+ },
98+ ChannelMeta : & relaycommon.ChannelMeta {
99+ HeadersOverride : map [string ]any {
100+ "X-Static" : "legacy-value" ,
101+ "X-Legacy" : "legacy-only" ,
102+ },
103+ },
104+ }
105+
106+ headers , err := processHeaderOverride (info , ctx )
107+ require .NoError (t , err )
108+ require .Equal (t , "runtime-value" , headers ["x-static" ])
109+ require .Equal (t , "runtime-only" , headers ["x-runtime" ])
110+ _ , exists := headers ["x-legacy" ]
111+ require .False (t , exists )
81112}
82113
83114func TestProcessHeaderOverride_PassthroughSkipsAcceptEncoding (t * testing.T ) {
@@ -101,8 +132,62 @@ func TestProcessHeaderOverride_PassthroughSkipsAcceptEncoding(t *testing.T) {
101132
102133 headers , err := processHeaderOverride (info , ctx )
103134 require .NoError (t , err )
104- require .Equal (t , "trace-123" , headers ["X-Trace-Id " ])
135+ require .Equal (t , "trace-123" , headers ["x-trace-id " ])
105136
106- _ , hasAcceptEncoding := headers ["Accept-Encoding " ]
137+ _ , hasAcceptEncoding := headers ["accept-encoding " ]
107138 require .False (t , hasAcceptEncoding )
108139}
140+
141+ func TestProcessHeaderOverride_PassHeadersTemplateSetsRuntimeHeaders (t * testing.T ) {
142+ t .Parallel ()
143+
144+ gin .SetMode (gin .TestMode )
145+ recorder := httptest .NewRecorder ()
146+ ctx , _ := gin .CreateTestContext (recorder )
147+ ctx .Request = httptest .NewRequest (http .MethodPost , "/v1/responses" , nil )
148+ ctx .Request .Header .Set ("Originator" , "Codex CLI" )
149+ ctx .Request .Header .Set ("Session_id" , "sess-123" )
150+
151+ info := & relaycommon.RelayInfo {
152+ IsChannelTest : false ,
153+ RequestHeaders : map [string ]string {
154+ "Originator" : "Codex CLI" ,
155+ "Session_id" : "sess-123" ,
156+ },
157+ ChannelMeta : & relaycommon.ChannelMeta {
158+ ParamOverride : map [string ]any {
159+ "operations" : []any {
160+ map [string ]any {
161+ "mode" : "pass_headers" ,
162+ "value" : []any {"Originator" , "Session_id" , "X-Codex-Beta-Features" },
163+ },
164+ },
165+ },
166+ HeadersOverride : map [string ]any {
167+ "X-Static" : "legacy-value" ,
168+ },
169+ },
170+ }
171+
172+ _ , err := relaycommon .ApplyParamOverrideWithRelayInfo ([]byte (`{"model":"gpt-4.1"}` ), info )
173+ require .NoError (t , err )
174+ require .True (t , info .UseRuntimeHeadersOverride )
175+ require .Equal (t , "Codex CLI" , info .RuntimeHeadersOverride ["originator" ])
176+ require .Equal (t , "sess-123" , info .RuntimeHeadersOverride ["session_id" ])
177+ _ , exists := info .RuntimeHeadersOverride ["x-codex-beta-features" ]
178+ require .False (t , exists )
179+ require .Equal (t , "legacy-value" , info .RuntimeHeadersOverride ["x-static" ])
180+
181+ headers , err := processHeaderOverride (info , ctx )
182+ require .NoError (t , err )
183+ require .Equal (t , "Codex CLI" , headers ["originator" ])
184+ require .Equal (t , "sess-123" , headers ["session_id" ])
185+ _ , exists = headers ["x-codex-beta-features" ]
186+ require .False (t , exists )
187+
188+ upstreamReq := httptest .NewRequest (http .MethodPost , "https://example.com/v1/responses" , nil )
189+ applyHeaderOverrideToRequest (upstreamReq , headers )
190+ require .Equal (t , "Codex CLI" , upstreamReq .Header .Get ("Originator" ))
191+ require .Equal (t , "sess-123" , upstreamReq .Header .Get ("Session_id" ))
192+ require .Empty (t , upstreamReq .Header .Get ("X-Codex-Beta-Features" ))
193+ }
0 commit comments