1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
package interop
import (
"bufio"
"io"
"os"
"path/filepath"
"strings"
"testing"
"github.com/marten-seemann/qpack"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
func TestInterop(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Interop Suite")
}
type request struct {
headers []qpack.HeaderField
}
type qif struct {
requests []request
}
var qifs map[string]qif
func readQIFs() {
qifDir := currentDir() + "/qifs/qifs"
Expect(qifDir).To(BeADirectory())
filepath.Walk(qifDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
_, filename := filepath.Split(path)
ext := filepath.Ext(filename)
name := filename[:len(filename)-len(ext)]
file, err := os.Open(path)
Expect(err).ToNot(HaveOccurred())
requests := parseRequests(file)
qifs[name] = qif{requests: requests}
return nil
})
}
func parseRequests(r io.Reader) []request {
lr := bufio.NewReader(r)
var reqs []request
for {
headers, done := parseRequest(lr)
if done {
break
}
reqs = append(reqs, request{headers})
}
return reqs
}
// Done means that we reached the end of the file
// The headers returned with this call will be empty and should be ignored.
func parseRequest(lr *bufio.Reader) ([]qpack.HeaderField, bool /* done reading */) {
var headers []qpack.HeaderField
for {
line, isPrefix, err := lr.ReadLine()
if err == io.EOF {
return headers, true
}
Expect(err).ToNot(HaveOccurred())
Expect(isPrefix).To(BeFalse())
if len(line) == 0 {
break
}
split := strings.Split(string(line), "\t")
Expect(split).To(Or(HaveLen(1), HaveLen(2)))
name := split[0]
var val string
if len(split) == 2 {
val = split[1]
}
headers = append(headers, qpack.HeaderField{Name: name, Value: val})
}
return headers, false
}
var _ = BeforeSuite(func() {
qifs = make(map[string]qif)
readQIFs()
})
|