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 <[email protected]>
  • Loading branch information
crozzy committed Jan 3, 2024
1 parent 9badbbe commit 758d6a4
Show file tree
Hide file tree
Showing 3 changed files with 564 additions and 540 deletions.
87 changes: 51 additions & 36 deletions rhel/vex/fetcher_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,67 +4,82 @@ import (
"bufio"
"bytes"
"context"
"errors"
"fmt"
"io"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"strings"
"testing"

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

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

func parseFilenameHeaders(data string) (string, map[string]string, error) {
lines := strings.Split(data, "|")
if len(lines) < 1 {
return "", nil, errors.New("unexpected description of compressed file in testdata/server.txt")
}
compressedFilepath := strings.TrimSuffix(lines[0], "\n")
// Do headers
headers := map[string]string{}
for i := 1; i < len(lines); i++ {
h := strings.TrimSuffix(lines[i], "\n")
hkv := strings.Split(h, "_")
if len(hkv) != 2 {
return "", nil, errors.New("headers must be in the format key:value")
}
headers[hkv[0]] = hkv[1]
}
return compressedFilepath, headers, 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)
v, err := os.ReadFile("testdata/server.txt")
if err != nil {
t.Fatal(err)
}
archive := txtar.Parse(v)
relFilepath, headers, err := parseFilenameHeaders(string(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)
}
})
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(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)
}
_, 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
Loading

0 comments on commit 758d6a4

Please sign in to comment.