vuln-list-update/cwe/cwe_test.go
Simarpreet Singh 319f079602
cwe: Add initial logic to download and save CWE files (#40)
* cwe: Add initial logic to download and save CWE files

Signed-off-by: Simarpreet Singh <simar@linux.com>

* cwe: Add logic to parse and save XML data as file

Signed-off-by: Simarpreet Singh <simar@linux.com>

* cwe: Dont save XML file as output

Signed-off-by: Simarpreet Singh <simar@linux.com>

* cwe: Save each CWE-ID as a JSON document

Signed-off-by: Simarpreet Singh <simar@linux.com>

* cwe: Address nits

Signed-off-by: Simarpreet Singh <simar@linux.com>
2020-08-04 14:01:18 -07:00

91 lines
2.2 KiB
Go

package cwe
import (
"io"
"io/ioutil"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/assert"
)
func TestUpdate(t *testing.T) {
testCases := []struct {
name string
inputZipFile string
expectedOuptutXMLFile string
expectedOutputJSONFile string
expectedError string
cweServerUrl string
}{
{
name: "happy path",
inputZipFile: "goldens/good-small-cwe.xml.zip",
expectedOuptutXMLFile: "goldens/good-small-cwe.xml",
expectedOutputJSONFile: "goldens/good-small-cwe.json",
},
{
name: "sad path, corrupt xml file in zip",
inputZipFile: "goldens/corrupt.xml.zip",
expectedError: "XML syntax error",
},
{
name: "sad path, invalid zip file",
inputZipFile: "goldens/bad.xml.zip",
expectedError: "not a valid zip file",
},
{
name: "sad path, too many files in archive",
inputZipFile: "goldens/toomanyfiles.xml.zip",
expectedError: "too many files in archive",
},
{
name: "sad path, unreachable CWE service",
expectedError: "failed to fetch cwe data",
cweServerUrl: "http://foo/bar/baz",
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
var cweURL string
if tc.cweServerUrl != "" {
cweURL = tc.cweServerUrl
} else {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
b, _ := ioutil.ReadFile(tc.inputZipFile)
_, _ = io.WriteString(w, string(b))
}))
cweURL = ts.URL
defer func() {
ts.Close()
}()
}
dir, _ := ioutil.TempDir("", "TestUpdate-*")
defer func() {
_ = os.RemoveAll(dir)
}()
c := NewCWEWithConfig(cweURL, filepath.Join(dir), 0)
err := c.Update()
switch {
case tc.expectedError != "":
require.Error(t, err, tc.name)
default:
// CWE-209.json is one file within good-small-cwe.xml.zip
gotJSON, err := ioutil.ReadFile(filepath.Join(dir, "CWE-209.json"))
require.NoError(t, err, tc.name)
wantJSON, _ := ioutil.ReadFile(tc.expectedOutputJSONFile)
assert.JSONEq(t, string(wantJSON), string(gotJSON), tc.name)
}
})
}
}