88 "bytes"
99 "io"
1010 "log"
11+ "net/http"
12+ "net/textproto"
1113 "net/url"
1214 "testing"
1315
@@ -21,10 +23,12 @@ func TestReqToLog(t *testing.T) {
2123 defaultConfig := createDefaultConfig ().(* Config )
2224
2325 tests := []struct {
24- desc string
25- sc * bufio.Scanner
26- query url.Values
27- tt func (t * testing.T , reqLog plog.Logs , reqLen int , settings receiver.Settings )
26+ desc string
27+ sc * bufio.Scanner
28+ headers http.Header
29+ query url.Values
30+ config * Config
31+ tt func (t * testing.T , reqLog plog.Logs , reqLen int , settings receiver.Settings )
2832 }{
2933 {
3034 desc : "Valid query valid event" ,
@@ -110,11 +114,103 @@ func TestReqToLog(t *testing.T) {
110114 require .Equal (t , 2 , scopeLogsScope .Attributes ().Len ())
111115 },
112116 },
117+ {
118+ desc : "Headers not added by default" ,
119+ headers : http.Header {
120+ textproto .CanonicalMIMEHeaderKey ("X-Foo" ): []string {"1" },
121+ textproto .CanonicalMIMEHeaderKey ("X-Bar" ): []string {"2" },
122+ },
123+ sc : func () * bufio.Scanner {
124+ reader := io .NopCloser (bytes .NewReader ([]byte ("this is a: log" )))
125+ return bufio .NewScanner (reader )
126+ }(),
127+ tt : func (t * testing.T , reqLog plog.Logs , reqLen int , _ receiver.Settings ) {
128+ require .Equal (t , 1 , reqLen )
129+
130+ attributes := reqLog .ResourceLogs ().At (0 ).Resource ().Attributes ()
131+ require .Equal (t , 0 , attributes .Len ())
132+
133+ scopeLogsScope := reqLog .ResourceLogs ().At (0 ).ScopeLogs ().At (0 ).Scope ()
134+ require .Equal (t , 2 , scopeLogsScope .Attributes ().Len ()) // expect no additional attributes even though headers are set
135+ },
136+ },
137+ {
138+ desc : "Headers added if ConvertHeadersToAttributes enabled" ,
139+ headers : http.Header {
140+ textproto .CanonicalMIMEHeaderKey ("X-Foo" ): []string {"1" },
141+ textproto .CanonicalMIMEHeaderKey ("X-Bar" ): []string {"2" },
142+ },
143+ config : & Config {
144+ Path : defaultPath ,
145+ HealthPath : defaultHealthPath ,
146+ ReadTimeout : defaultReadTimeout ,
147+ WriteTimeout : defaultWriteTimeout ,
148+ ConvertHeadersToAttributes : true ,
149+ },
150+ sc : func () * bufio.Scanner {
151+ reader := io .NopCloser (bytes .NewReader ([]byte ("this is a: log" )))
152+ return bufio .NewScanner (reader )
153+ }(),
154+ tt : func (t * testing.T , reqLog plog.Logs , reqLen int , _ receiver.Settings ) {
155+ require .Equal (t , 1 , reqLen )
156+
157+ attributes := reqLog .ResourceLogs ().At (0 ).Resource ().Attributes ()
158+ require .Equal (t , 0 , attributes .Len ())
159+
160+ scopeLogsScope := reqLog .ResourceLogs ().At (0 ).ScopeLogs ().At (0 ).Scope ()
161+ require .Equal (t , 4 , scopeLogsScope .Attributes ().Len ()) // expect no additional attributes even though headers are set
162+ v , exists := scopeLogsScope .Attributes ().Get ("header.x_foo" )
163+ require .True (t , exists )
164+ require .Equal (t , "1" , v .AsString ())
165+ v , exists = scopeLogsScope .Attributes ().Get ("header.x_bar" )
166+ require .True (t , exists )
167+ require .Equal (t , "2" , v .AsString ())
168+ },
169+ },
170+ {
171+ desc : "Required header skipped" ,
172+ headers : http.Header {
173+ textproto .CanonicalMIMEHeaderKey ("X-Foo" ): []string {"1" },
174+ textproto .CanonicalMIMEHeaderKey ("X-Bar" ): []string {"2" },
175+ textproto .CanonicalMIMEHeaderKey ("X-Required-Header" ): []string {"password" },
176+ },
177+ config : & Config {
178+ Path : defaultPath ,
179+ HealthPath : defaultHealthPath ,
180+ ReadTimeout : defaultReadTimeout ,
181+ WriteTimeout : defaultWriteTimeout ,
182+ RequiredHeader : RequiredHeader {Key : "X-Required-Header" , Value : "password" },
183+ ConvertHeadersToAttributes : true ,
184+ },
185+ sc : func () * bufio.Scanner {
186+ reader := io .NopCloser (bytes .NewReader ([]byte ("this is a: log" )))
187+ return bufio .NewScanner (reader )
188+ }(),
189+ tt : func (t * testing.T , reqLog plog.Logs , reqLen int , _ receiver.Settings ) {
190+ require .Equal (t , 1 , reqLen )
191+
192+ attributes := reqLog .ResourceLogs ().At (0 ).Resource ().Attributes ()
193+ require .Equal (t , 0 , attributes .Len ())
194+
195+ scopeLogsScope := reqLog .ResourceLogs ().At (0 ).ScopeLogs ().At (0 ).Scope ()
196+ require .Equal (t , 4 , scopeLogsScope .Attributes ().Len ()) // expect no additional attributes even though headers are set
197+ _ , exists := scopeLogsScope .Attributes ().Get ("header.x_foo" )
198+ require .True (t , exists )
199+ _ , exists = scopeLogsScope .Attributes ().Get ("header.x_bar" )
200+ require .True (t , exists )
201+ _ , exists = scopeLogsScope .Attributes ().Get ("header.x_required_header" )
202+ require .False (t , exists )
203+ },
204+ },
113205 }
114206
115207 for _ , test := range tests {
116208 t .Run (test .desc , func (t * testing.T ) {
117- reqLog , reqLen := reqToLog (test .sc , test .query , defaultConfig , receivertest .NewNopSettings ())
209+ testConfig := defaultConfig
210+ if test .config != nil {
211+ testConfig = test .config
212+ }
213+ reqLog , reqLen := reqToLog (test .sc , test .headers , test .query , testConfig , receivertest .NewNopSettings ())
118214 test .tt (t , reqLog , reqLen , receivertest .NewNopSettings ())
119215 })
120216 }
0 commit comments