Skip to content

Commit c6157ef

Browse files
committed
Add specs to ensure there are no "double reported" advisories.
* All advisory files must contain a unique CVE ID and GHSA ID *per* directory.
1 parent d7288e6 commit c6157ef

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

spec/advisories_spec.rb

+9
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
load File.join(File.dirname(__FILE__), 'spec_helper.rb')
22
require 'gem_advisory_example'
33
require 'ruby_advisory_example'
4+
require 'advisory_dir_example'
45

56
describe "gems" do
67
Dir.glob(File.join(File.dirname(__FILE__), '../gems/*/*')) do |path|
78
include_examples 'Gem Advisory', path
89
end
10+
11+
Dir.glob(File.join(File.dirname(__FILE__), '../gems/*')) do |dir|
12+
include_examples 'Advisory Directory', dir
13+
end
914
end
1015

1116
describe "rubies" do
1217
Dir.glob(File.join(File.dirname(__FILE__), '../rubies/*/*')) do |path|
1318
include_examples 'Rubies Advisory', path
1419
end
20+
21+
Dir.glob(File.join(File.dirname(__FILE__), '../rubies/*')) do |dir|
22+
include_examples 'Advisory Directory', dir
23+
end
1524
end

spec/advisory_dir_example.rb

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
require 'rspec'
2+
require 'date'
3+
4+
shared_examples_for "Advisory Directory" do |dir|
5+
describe dir do
6+
let(:advisory_paths) { Dir.glob(File.join(dir,'*.yml')) }
7+
let(:advisories) do
8+
advisory_paths.map do |path|
9+
YAML.safe_load_file(path, permitted_classes: [Date])
10+
end
11+
end
12+
13+
it "must not contain duplicate CVE IDs" do
14+
cve_ids = advisories.map { |advisory| advisory['cve'] }
15+
cve_ids.compact!
16+
17+
expect(cve_ids).to eq(cve_ids.uniq)
18+
end
19+
20+
it "must not contain duplicate GHSA IDs" do
21+
ghsa_ids = advisories.map { |advisory| advisory['ghsa'] }.compact
22+
ghsa_ids.compact!
23+
24+
expect(ghsa_ids).to eq(ghsa_ids.uniq)
25+
end
26+
end
27+
end

0 commit comments

Comments
 (0)