Skip to content

Commit 291138e

Browse files
committed
chore: add tests for headers
1 parent 8585bff commit 291138e

File tree

3 files changed

+123
-35
lines changed

3 files changed

+123
-35
lines changed

cmd/test/test.go

Lines changed: 0 additions & 35 deletions
This file was deleted.

vsl/header.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package vsl
44

55
import (
66
"encoding/json"
7+
"fmt"
78
"net/textproto"
89
"slices"
910
)
@@ -85,6 +86,10 @@ type HdrValue struct {
8586
state HdrState
8687
}
8788

89+
func (h HdrValue) String() string {
90+
return fmt.Sprintf("Value: %s, State: %s", h.value, h.state)
91+
}
92+
8893
func (h HdrValue) MarshalJSON() ([]byte, error) {
8994
aux := struct {
9095
Value string

vsl/header_test.go

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
package vsl
44

55
import (
6+
"strings"
67
"testing"
8+
9+
"github.com/aorith/varnishlog-parser/assets"
710
)
811

912
func TestHeadersAddAndValues(t *testing.T) {
@@ -87,3 +90,118 @@ func TestCanonicalHeaderName(t *testing.T) {
8790
}
8891
}
8992
}
93+
94+
type testHeader struct {
95+
name string
96+
values []HdrValue
97+
}
98+
99+
func TestHeadersFromCompleteVCL(t *testing.T) {
100+
ts, err := NewTransactionParser(strings.NewReader(assets.VCLComplete1)).Parse()
101+
if err != nil {
102+
t.Fatalf("vsl parser failed: %s", err)
103+
}
104+
105+
tt1 := []testHeader{
106+
{name: "Host", values: []HdrValue{{value: "www.example1.org", state: HdrStateReceived}}},
107+
{name: "User-Agent", values: []HdrValue{{value: "curl/8.7.1", state: HdrStateReceived}}},
108+
{name: "Accept", values: []HdrValue{{value: "*/*", state: HdrStateReceived}}},
109+
{name: "Secret", values: []HdrValue{{value: "1234", state: HdrStateReceived}}},
110+
{name: "X-Forwarded-For", values: []HdrValue{{value: "1.1.1.1, 2.2.2.2", state: HdrStateReceived}}},
111+
{name: "Via", values: []HdrValue{}},
112+
{name: "Xid", values: []HdrValue{}},
113+
{name: "X-Test-Header", values: []HdrValue{}},
114+
}
115+
116+
testHeaders(t, tt1, ts.Transactions()[1].ReqHeaders.GetSortedHeaders(), true)
117+
118+
tt2 := []testHeader{
119+
{name: "Host", values: []HdrValue{{value: "www.example1.org", state: HdrStateReceived}}},
120+
{name: "User-Agent", values: []HdrValue{{value: "curl/8.7.1", state: HdrStateReceived}}},
121+
{name: "Accept", values: []HdrValue{{value: "*/*", state: HdrStateReceived}}},
122+
{name: "Secret", values: []HdrValue{{value: "1234", state: HdrStateReceived}}},
123+
{name: "X-Forwarded-For", values: []HdrValue{{value: "1.1.1.1, 2.2.2.2, 192.168.65.1", state: HdrStateModified}}},
124+
{name: "Via", values: []HdrValue{{value: "1.1 b736436225f7 (Varnish/7.5)", state: HdrStateAdded}}},
125+
{name: "Xid", values: []HdrValue{{value: "262", state: HdrStateAdded}}},
126+
{name: "X-Test-Header", values: []HdrValue{{value: "Test Value", state: HdrStateDeleted}}},
127+
}
128+
129+
testHeaders(t, tt2, ts.Transactions()[1].ReqHeaders.GetSortedHeaders(), false)
130+
131+
tt3 := []testHeader{
132+
{name: "Date", values: []HdrValue{{value: "Fri, 01 Nov 2024 19:59:58 GMT", state: HdrStateReceived}}},
133+
{name: "Server", values: []HdrValue{{value: "Varnish", state: HdrStateReceived}}},
134+
{name: "X-Varnish", values: []HdrValue{{value: "2", state: HdrStateReceived}, {value: "262", state: HdrStateReceived}}},
135+
{name: "Content-Type", values: []HdrValue{{value: "text/html; charset=utf-8", state: HdrStateReceived}}},
136+
{name: "Content-Length", values: []HdrValue{{value: "82", state: HdrStateReceived}}},
137+
{name: "Cache-Control", values: []HdrValue{{value: "max-age=5", state: HdrStateReceived}}},
138+
{name: "Age", values: []HdrValue{{value: "0", state: HdrStateReceived}}},
139+
{name: "Via", values: []HdrValue{{value: "1.1 b736436225f7 (Varnish/7.5)", state: HdrStateReceived}}},
140+
{name: "Accept-Ranges", values: []HdrValue{{value: "bytes", state: HdrStateReceived}}},
141+
{name: "X-Greet", values: []HdrValue{}},
142+
{name: "Connection", values: []HdrValue{}},
143+
{name: "Transfer-Encoding", values: []HdrValue{}},
144+
}
145+
146+
testHeaders(t, tt3, ts.Transactions()[1].RespHeaders.GetSortedHeaders(), true)
147+
148+
tt4 := []testHeader{
149+
{name: "Date", values: []HdrValue{{value: "Fri, 01 Nov 2024 19:59:58 GMT", state: HdrStateReceived}}},
150+
{name: "Server", values: []HdrValue{{value: "Varnish", state: HdrStateReceived}}},
151+
{name: "X-Varnish", values: []HdrValue{{value: "2", state: HdrStateReceived}, {value: "262", state: HdrStateReceived}}},
152+
{name: "Content-Type", values: []HdrValue{{value: "text/html; charset=utf-8", state: HdrStateReceived}}},
153+
{name: "Content-Length", values: []HdrValue{{value: "82", state: HdrStateDeleted}}},
154+
{name: "Cache-Control", values: []HdrValue{{value: "max-age=5", state: HdrStateReceived}}},
155+
{name: "Age", values: []HdrValue{{value: "0", state: HdrStateReceived}}},
156+
{name: "Via", values: []HdrValue{{value: "1.1 b736436225f7 (Varnish/7.5)", state: HdrStateReceived}}},
157+
{name: "Accept-Ranges", values: []HdrValue{{value: "bytes", state: HdrStateReceived}}},
158+
{name: "X-Greet", values: []HdrValue{{value: "Hello", state: HdrStateAdded}}},
159+
{name: "Connection", values: []HdrValue{{value: "keep-alive", state: HdrStateAdded}}},
160+
{name: "Transfer-Encoding", values: []HdrValue{{value: "chunked", state: HdrStateAdded}}},
161+
}
162+
163+
testHeaders(t, tt4, ts.Transactions()[1].RespHeaders.GetSortedHeaders(), false)
164+
165+
ts, err = NewTransactionParser(strings.NewReader(assets.VCLCached)).Parse()
166+
if err != nil {
167+
t.Fatalf("vsl parser failed: %s", err)
168+
}
169+
170+
tt5 := []testHeader{
171+
{name: "Host", values: []HdrValue{{value: "varnishlog.iou.re", state: HdrStateReceived}}},
172+
{name: "Accept", values: []HdrValue{{value: "*/*", state: HdrStateReceived}}},
173+
{name: "Cached", values: []HdrValue{{value: "1", state: HdrStateReceived}}},
174+
{name: "User-Agent", values: []HdrValue{{value: "hurl/7.0.0", state: HdrStateReceived}}},
175+
{name: "X-Forwarded-For", values: []HdrValue{{value: "1.2.3.4, 192.168.65.1", state: HdrStateModified}}},
176+
{name: "Via", values: []HdrValue{{value: "1.1 e088e52945df (Varnish/7.7)", state: HdrStateAdded}}},
177+
{name: "Whoami", values: []HdrValue{{value: "1", state: HdrStateAdded}}},
178+
}
179+
180+
testHeaders(t, tt5, ts.Transactions()[0].ReqHeaders.GetSortedHeaders(), false)
181+
}
182+
183+
func testHeaders(t *testing.T, tt []testHeader, headers []Header, received bool) {
184+
want := []testHeader{}
185+
for _, v := range headers {
186+
th := testHeader{name: v.name, values: v.Values(received)}
187+
want = append(want, th)
188+
}
189+
190+
if len(want) != len(tt) {
191+
t.Fatalf("ReqHeaders len; want %d, got %d", len(want), len(tt))
192+
}
193+
194+
for i := range want {
195+
if want[i].name != tt[i].name {
196+
t.Errorf("ReqHeaders; want %v, got %v", want[i].name, tt[i].name)
197+
}
198+
if len(want[i].values) != len(tt[i].values) {
199+
t.Fatalf("ReqHeaders values len; %s; want %d, got %d", want[i].name, len(want[i].values), len(tt[i].values))
200+
}
201+
for j := range want[i].values {
202+
if want[i].values[j].value != tt[i].values[j].value || want[i].values[j].state != tt[i].values[j].state {
203+
t.Errorf("ReqHeaders; values[%d] %s; want %v, got %v", j, want[i].name, want[i].values[j], tt[i].values[j])
204+
}
205+
}
206+
}
207+
}

0 commit comments

Comments
 (0)