package cpematch import ( "compress/gzip" "encoding/json" "os" "reflect" "testing" ) func TestMatchesUnmarshal(t *testing.T) { // expected data exp := Matches { Matches: []Match { Match { Cpe23Uri: "cpe:2.3:a:101_project:101:*:*:*:*:*:node.js:*:*", VersionStartIncluding: "1.0.0", VersionEndIncluding: "1.6.3", Names: []Name { Name { Cpe23Uri: "cpe:2.3:a:101_project:101:1.0.0:*:*:*:*:node.js:*:*", }, Name { Cpe23Uri: "cpe:2.3:a:101_project:101:1.1.0:*:*:*:*:node.js:*:*", }, Name { Cpe23Uri: "cpe:2.3:a:101_project:101:1.1.1:*:*:*:*:node.js:*:*", }, }, }, Match { Cpe23Uri: "cpe:2.3:a:1password:1password:*:*:*:*:*:macos:*:*", VersionStartIncluding: "7.7.0", VersionEndExcluding: "7.8.7", Names: []Name { Name { Cpe23Uri: "cpe:2.3:a:1password:1password:7.7.0:*:*:*:*:macos:*:*", }, }, }, Match { Cpe23Uri: "cpe:2.3:a:zimbra:collaboration:*:*:*:*:*:*:*:*", VersionStartExcluding: "8.8.0", VersionEndExcluding: "8.8.15", Names: []Name { Name { Cpe23Uri: "cpe:2.3:a:zimbra:collaboration:8.8.6:*:*:*:*:*:*:*", }, Name { Cpe23Uri: "cpe:2.3:a:zimbra:collaboration:8.8.7:*:*:*:*:*:*:*", }, Name { Cpe23Uri: "cpe:2.3:a:zimbra:collaboration:8.8.8:-:*:*:*:*:*:*", }, Name { Cpe23Uri: "cpe:2.3:a:zimbra:collaboration:8.8.8:p1:*:*:*:*:*:*", }, }, }, }, } // open test data f, err := os.Open("testdata/test-0.json.gz") if err != nil { t.Error(err) return } defer f.Close() // create gzip reader gz, err := gzip.NewReader(f) if err != nil { t.Error(err) return } defer gz.Close() // create json decoder d := json.NewDecoder(gz) var got Matches // decode match data, check for error if err := d.Decode(&got); err != nil { t.Error(err) return } // check for match if !reflect.DeepEqual(got, exp) { t.Errorf("got \"%v\", exp \"%v\"", got, exp) } }