Skip to content

Commit

Permalink
csaf-vex: Add experiment with txtar
Browse files Browse the repository at this point in the history
To be squashed

Signed-off-by: crozzy <joseph.crosland@gmail.com>
  • Loading branch information
crozzy committed Jan 4, 2024
1 parent 9badbbe commit fbfbf82
Show file tree
Hide file tree
Showing 3 changed files with 557 additions and 543 deletions.
83 changes: 44 additions & 39 deletions rhel/vex/fetcher_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,67 +4,73 @@ import (
"bufio"
"bytes"
"context"
"fmt"
"io"
"net/http"
"net/http/httptest"
"net/textproto"
"os"
"path/filepath"
"testing"

"github.com/quay/zlog"
"golang.org/x/tools/txtar"

"github.com/quay/claircore/pkg/csaf"
)

func parseFilenameHeaders(data []byte) (string, http.Header, error) {
pf, h, _ := bytes.Cut(data, []byte{' '})
compressedFilepath := bytes.TrimSuffix(pf, []byte{'\n'})
h = bytes.ReplaceAll(h, []byte(`\n`), []byte{'\n'})
// Do headers
tp := textproto.NewReader(bufio.NewReader(bytes.NewReader(h)))
hdr, err := tp.ReadMIMEHeader()
if err != nil && err != io.EOF {
return "", nil, err
}
return string(compressedFilepath), http.Header(hdr), nil
}

func serveSecDB(t *testing.T) (string, *http.Client) {
mux := http.NewServeMux()
mux.HandleFunc("/archive_latest.txt", func(w http.ResponseWriter, _ *http.Request) {
_, err := w.Write([]byte("csaf_vex_2023-10-31.tar.zst"))
if err != nil {
t.Fatal(err)
}
})
mux.HandleFunc("/csaf_vex_2023-10-31.tar.zst", func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("last-modified", "Mon, 11 Dec 2023 00:00:00 UTC")
f, err := os.Open("testdata/server/csaf_vex_2023-10-31.tar.zst")
if err != nil {
t.Fatal(err)
}
if _, err := io.Copy(w, f); err != nil {
t.Fatal(err)
}
})
mux.HandleFunc("/changes.csv", func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("etag", "something")
_, err := w.Write([]byte(`"2023/cve-2023-0030.json","2023-12-10T00:00:00+00:00"
"2023/cve-2023-0044.json","2023-12-12T00:00:00+00:00"
"2023/cve-2023-0118.json","2023-12-12T00:00:00+00:00"
`))
if err != nil {
t.Fatal(err)
archive, err := txtar.ParseFile("testdata/server.txt")
if err != nil {
t.Fatal(err)
}
relFilepath, headers, err := parseFilenameHeaders(archive.Comment)
if err != nil {
t.Fatal(err)
}
filename := filepath.Base(relFilepath)
mux.HandleFunc("/"+filename, func(w http.ResponseWriter, _ *http.Request) {
for k, v := range headers {
w.Header().Set(k, v[0])
}
})
mux.HandleFunc("/2023/cve-2023-0030.json", func(w http.ResponseWriter, _ *http.Request) {
t.Fatal("should not be called as compressed data is newer than this entry")
})
mux.HandleFunc("/2023/cve-2023-0044.json", func(w http.ResponseWriter, _ *http.Request) {
f, err := os.Open("testdata/server/2023/cve-2023-0044.json")

f, err := os.Open("testdata/" + relFilepath)
if err != nil {
t.Fatal(err)
}
if _, err := io.Copy(w, f); err != nil {
t.Fatal(err)
}
})
mux.HandleFunc("/2023/cve-2023-0118.json", func(w http.ResponseWriter, _ *http.Request) {
f, err := os.Open("testdata/server/2023/cve-2023-0118.json")
for _, f := range archive.Files {
urlPath, headers, err := parseFilenameHeaders([]byte(f.Name))
if err != nil {
t.Fatal(err)
}
if _, err := io.Copy(w, f); err != nil {
t.Fatal(err)
}
})
fi := f
mux.HandleFunc(urlPath, func(w http.ResponseWriter, _ *http.Request) {
for k, v := range headers {
w.Header().Set(k, v[0])
}
_, err := w.Write(bytes.TrimSuffix(fi.Data, []byte{'\n'}))
if err != nil {
t.Fatal(err)
}
})
}

srv := httptest.NewServer(mux)
t.Cleanup(srv.Close)
Expand Down Expand Up @@ -110,11 +116,10 @@ func TestFactory(t *testing.T) {
lnCt := 0
r := bufio.NewReader(data)
for b, err := r.ReadBytes('\n'); err == nil; b, err = r.ReadBytes('\n') {
c, err := csaf.ParseCSAF(b)
_, err := csaf.ParseCSAF(b)
if err != nil {
t.Error(err)
}
fmt.Println(c.Document.Tracking.ID)
lnCt++
}
if lnCt != expectedLnCt {
Expand Down

0 comments on commit fbfbf82

Please sign in to comment.