mirror of
https://github.com/gocsaf/csaf.git
synced 2025-12-22 11:55:40 +01:00
Extend links test
This commit is contained in:
parent
3ba29f94de
commit
8e4e508073
3 changed files with 316 additions and 1 deletions
67
cmd/csaf_aggregator/client_test.go
Normal file
67
cmd/csaf_aggregator/client_test.go
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
// This file is Free Software under the MIT License
|
||||
// without warranty, see README.md and LICENSES/MIT.txt for details.
|
||||
//
|
||||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
// SPDX-FileCopyrightText: 2022 German Federal Office for Information Security (BSI) <https://www.bsi.bund.de>
|
||||
// Software-Engineering: 2022 Intevation GmbH <https://intevation.de>
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"io"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/csaf-poc/csaf_distribution/v3/util"
|
||||
)
|
||||
|
||||
func Test_downloadJSON(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
statusCode int
|
||||
contentType string
|
||||
wantErr error
|
||||
}{
|
||||
{
|
||||
name: "status ok, application/json",
|
||||
statusCode: http.StatusOK,
|
||||
contentType: "application/json",
|
||||
wantErr: nil,
|
||||
},
|
||||
{
|
||||
name: "status found, application/json",
|
||||
statusCode: http.StatusFound,
|
||||
contentType: "application/json",
|
||||
wantErr: errNotFound,
|
||||
},
|
||||
{
|
||||
name: "status ok, application/xml",
|
||||
statusCode: http.StatusOK,
|
||||
contentType: "application/xml",
|
||||
wantErr: errNotFound,
|
||||
},
|
||||
}
|
||||
|
||||
t.Parallel()
|
||||
for _, testToRun := range tests {
|
||||
test := testToRun
|
||||
t.Run(test.name, func(tt *testing.T) {
|
||||
tt.Parallel()
|
||||
found := func(r io.Reader) error {
|
||||
return nil
|
||||
}
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Add("Content-Type", test.contentType)
|
||||
w.WriteHeader(test.statusCode)
|
||||
}))
|
||||
defer server.Close()
|
||||
hClient := http.Client{}
|
||||
client := util.Client(&hClient)
|
||||
if gotErr := downloadJSON(client, server.URL, found); gotErr != test.wantErr {
|
||||
t.Errorf("downloadJSON: Expected %q but got %q.", test.wantErr, gotErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -10,8 +10,12 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/csaf-poc/csaf_distribution/v3/util"
|
||||
)
|
||||
|
||||
const page0 = `<html>
|
||||
|
|
@ -31,7 +35,6 @@ const page0 = `<html>
|
|||
</html>`
|
||||
|
||||
func TestLinksOnPage(t *testing.T) {
|
||||
|
||||
var links []string
|
||||
|
||||
err := linksOnPage(
|
||||
|
|
@ -58,3 +61,78 @@ func TestLinksOnPage(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Test_listed(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
badDirs util.Set[string]
|
||||
path string
|
||||
want bool
|
||||
}{
|
||||
{
|
||||
name: "listed path",
|
||||
badDirs: util.Set[string]{},
|
||||
path: "/white/avendor-advisory-0004.json",
|
||||
want: true,
|
||||
},
|
||||
{
|
||||
name: "badDirs contains path",
|
||||
badDirs: util.Set[string]{"/white/": {}},
|
||||
path: "/white/avendor-advisory-0004.json",
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: "not found",
|
||||
badDirs: util.Set[string]{},
|
||||
path: "/not-found/resource.json",
|
||||
want: false,
|
||||
},
|
||||
{
|
||||
name: "badDirs does not contain path",
|
||||
badDirs: util.Set[string]{"/bad-dir/": {}},
|
||||
path: "/white/avendor-advisory-0004.json",
|
||||
want: true,
|
||||
},
|
||||
{
|
||||
name: "unlisted path",
|
||||
badDirs: util.Set[string]{},
|
||||
path: "/white/avendor-advisory-0004-not-listed.json",
|
||||
want: false,
|
||||
},
|
||||
}
|
||||
|
||||
t.Parallel()
|
||||
for _, testToRun := range tests {
|
||||
test := testToRun
|
||||
t.Run(test.name, func(tt *testing.T) {
|
||||
tt.Parallel()
|
||||
serverURL := ""
|
||||
fs := http.FileServer(http.Dir("../../testdata/simple-directory-feed"))
|
||||
server := httptest.NewTLSServer(fs)
|
||||
defer server.Close()
|
||||
|
||||
serverURL = server.URL
|
||||
|
||||
hClient := server.Client()
|
||||
client := util.Client(hClient)
|
||||
|
||||
pgs := pages{}
|
||||
cfg := config{RemoteValidator: "", RemoteValidatorCache: ""}
|
||||
p, err := newProcessor(&cfg)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
p.client = client
|
||||
|
||||
badDirs := util.Set[string]{}
|
||||
for dir := range test.badDirs {
|
||||
badDirs.Add(serverURL + dir)
|
||||
}
|
||||
|
||||
got, _ := pgs.listed(serverURL+test.path, p, badDirs)
|
||||
if got != test.want {
|
||||
t.Errorf("%q: Expected %t but got %t.", test.name, test.want, got)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
170
testdata/simple-directory-feed/white/avendor-advisory-0004-not-listed.json
vendored
Normal file
170
testdata/simple-directory-feed/white/avendor-advisory-0004-not-listed.json
vendored
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
{
|
||||
"document": {
|
||||
"category": "csaf_vex",
|
||||
"csaf_version": "2.0",
|
||||
"distribution": {
|
||||
"tlp": {
|
||||
"label": "WHITE",
|
||||
"url": "https://www.first.org/tlp/v1/"
|
||||
}
|
||||
},
|
||||
"notes": [
|
||||
{
|
||||
"category": "summary",
|
||||
"title": "Test document summary",
|
||||
"text": "Auto generated test CSAF document"
|
||||
}
|
||||
],
|
||||
"publisher": {
|
||||
"category": "vendor",
|
||||
"name": "ACME Inc.",
|
||||
"namespace": "https://www.example.com"
|
||||
},
|
||||
"title": "Test CSAF document",
|
||||
"tracking": {
|
||||
"current_release_date": "2020-00-00T00:00:00Z",
|
||||
"generator": {
|
||||
"date": "2020-00-00T00:00:00Z",
|
||||
"engine": {
|
||||
"name": "csaf-tool",
|
||||
"version": "0.3.2"
|
||||
}
|
||||
},
|
||||
"id": "Avendor-advisory-0004",
|
||||
"initial_release_date": "2020-00-00T00:00:00Z",
|
||||
"revision_history": [
|
||||
{
|
||||
"date": "2020-00-00T00:00:00Z",
|
||||
"number": "1",
|
||||
"summary": "Initial version"
|
||||
}
|
||||
],
|
||||
"status": "final",
|
||||
"version": "1"
|
||||
}
|
||||
},
|
||||
"product_tree": {
|
||||
"branches": [
|
||||
{
|
||||
"category": "vendor",
|
||||
"name": "AVendor",
|
||||
"branches": [
|
||||
{
|
||||
"category": "product_name",
|
||||
"name": "product_1",
|
||||
"branches": [
|
||||
{
|
||||
"category": "product_version",
|
||||
"name": "1.1",
|
||||
"product": {
|
||||
"name": "AVendor product_1 1.1",
|
||||
"product_id": "CSAFPID_0001"
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "product_version",
|
||||
"name": "1.2",
|
||||
"product": {
|
||||
"name": "AVendor product_1 1.2",
|
||||
"product_id": "CSAFPID_0002"
|
||||
}
|
||||
},
|
||||
{
|
||||
"category": "product_version",
|
||||
"name": "2.0",
|
||||
"product": {
|
||||
"name": "AVendor product_1 2.0",
|
||||
"product_id": "CSAFPID_0003"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"category": "vendor",
|
||||
"name": "AVendor1",
|
||||
"branches": [
|
||||
{
|
||||
"category": "product_name",
|
||||
"name": "product_2",
|
||||
"branches": [
|
||||
{
|
||||
"category": "product_version",
|
||||
"name": "1",
|
||||
"product": {
|
||||
"name": "AVendor1 product_2 1",
|
||||
"product_id": "CSAFPID_0004"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"category": "vendor",
|
||||
"name": "AVendor",
|
||||
"branches": [
|
||||
{
|
||||
"category": "product_name",
|
||||
"name": "product_3",
|
||||
"branches": [
|
||||
{
|
||||
"category": "product_version",
|
||||
"name": "2022H2",
|
||||
"product": {
|
||||
"name": "AVendor product_3 2022H2",
|
||||
"product_id": "CSAFPID_0005"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"vulnerabilities": [
|
||||
{
|
||||
"cve": "CVE-2020-1234",
|
||||
"notes": [
|
||||
{
|
||||
"category": "description",
|
||||
"title": "CVE description",
|
||||
"text": "https://nvd.nist.gov/vuln/detail/CVE-2020-1234"
|
||||
}
|
||||
],
|
||||
"product_status": {
|
||||
"under_investigation": ["CSAFPID_0001"]
|
||||
},
|
||||
"threats": [
|
||||
{
|
||||
"category": "impact",
|
||||
"details": "Customers should upgrade to the latest version of the product",
|
||||
"date": "2020-00-00T00:00:00Z",
|
||||
"product_ids": ["CSAFPID_0001"]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cve": "CVE-2020-9876",
|
||||
"notes": [
|
||||
{
|
||||
"category": "description",
|
||||
"title": "CVE description",
|
||||
"text": "https://nvd.nist.gov/vuln/detail/CVE-2020-9876"
|
||||
}
|
||||
],
|
||||
"product_status": {
|
||||
"under_investigation": ["CSAFPID_0001"]
|
||||
},
|
||||
"threats": [
|
||||
{
|
||||
"category": "impact",
|
||||
"details": "Still under investigation",
|
||||
"date": "2020-00-00T00:00:00Z",
|
||||
"product_ids": ["CSAFPID_0001"]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue