diff options
Diffstat (limited to 'dbstore/cpesearchrow_test.go')
-rw-r--r-- | dbstore/cpesearchrow_test.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/dbstore/cpesearchrow_test.go b/dbstore/cpesearchrow_test.go new file mode 100644 index 0000000..bfcfc61 --- /dev/null +++ b/dbstore/cpesearchrow_test.go @@ -0,0 +1,69 @@ +package dbstore + +import ( + "context" + "testing" +) + +// sqlite> select a.cpe23 from cpes a join (select cpe_id, min(rank) as rank from cpe_fts_all where cpe_fts_all match 'advisory' group by cpe_id) b on (b.cpe_id = a.cpe_id) order by b.rank; +// sqlite> select a.cpe23 from cpes a join (select cpe_id, min(rank) as rank from cpe_fts_all where cpe_fts_all match 'advisory AND book' group by cpe_id) b on (b.cpe_id = a.cpe_id) order by b.rank; +// cpe:2.3:a:\$0.99_kindle_books_project:\$0.99_kindle_books:6:*:*:*:*:android:*:* +// +// sqlite> select c.cpe_id, c.cpe23, a.rank from cpe_titles_fts a join cpe_titles b on (b.cpe_title_id = a.rowid) join cpes c on (c.cpe_id = b.cpe_id) where cpe_titles_fts match 'project' order by a.rank; +// 2|cpe:2.3:a:\@thi.ng\/egf_project:\@thi.ng\/egf:-:*:*:*:*:node.js:*:*|-0.775759508773217 +// 3|cpe:2.3:a:\@thi.ng\/egf_project:\@thi.ng\/egf:0.1.0:*:*:*:*:node.js:*:*|-0.66983333682734 +// 4|cpe:2.3:a:\@thi.ng\/egf_project:\@thi.ng\/egf:0.2.0:*:*:*:*:node.js:*:*|-0.66983333682734 +// 5|cpe:2.3:a:\@thi.ng\/egf_project:\@thi.ng\/egf:0.2.1:*:*:*:*:node.js:*:*|-0.66983333682734 +// 1|cpe:2.3:a:\$0.99_kindle_books_project:\$0.99_kindle_books:6:*:*:*:*:android:*:*|-0.545655647541265 +// +// sqlite> select a.cpe23 from cpes a join (select cpe_id, min(rank) as rank from cpe_fts_refs where cpe_fts_refs match 'advisory' group by cpe_id) b on (b.cpe_id = a.cpe_id) order by b.rank; +// cpe:2.3:a:\@thi.ng\/egf_project:\@thi.ng\/egf:-:*:*:*:*:node.js:*:* +// cpe:2.3:a:\@thi.ng\/egf_project:\@thi.ng\/egf:0.1.0:*:*:*:*:node.js:*:* +// cpe:2.3:a:\@thi.ng\/egf_project:\@thi.ng\/egf:0.2.0:*:*:*:*:node.js:*:* +// cpe:2.3:a:\@thi.ng\/egf_project:\@thi.ng\/egf:0.2.1:*:*:*:*:node.js:*:* +// cpe:2.3:a:360totalsecurity:360_total_security:12.1.0.1005:*:*:*:*:*:*:* +// cpe:2.3:a:\$0.99_kindle_books_project:\$0.99_kindle_books:6:*:*:*:*:android:*:* + +func TestUnmarshalCpeSearchRow(t *testing.T) { + tests := []struct { + name string + sql string + } {{ + name: "scan", + sql: "select true", + }, { + name: "titles", + sql: "select 1, 'asdf', 'bad', '[]', 0.0", + }, { + name: "titles", + sql: "select 1, 'asdf', '[]', 'bad', 0.0", + }} + + ctx := context.Background() + path := "./testdata/test-unmarshalcpesearchrow-fail.db" + + // create db + db, err := createTestDb(ctx, path) + if err != nil { + t.Error(err) + return + } + + for _, test := range(tests) { + t.Run(test.name, func(t *testing.T) { + // exec dummy query + rows, err := db.db.QueryContext(ctx, test.sql) + if err != nil { + t.Error(err) + return + } + + rows.Next() + + if got, err := unmarshalCpeSearchRow(rows); err == nil { + t.Errorf("got %v, exp error", got) + } + }) + } +} + |