Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use CodeQL CLI Test Runner instead of RSpec #3

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
1 change: 1 addition & 0 deletions .codeqlmanifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"provide": [
"ql/src/qlpack.yml",
"ql/test/qlpack.yml",
"extractor/codeql-extractor.yml"
],
"ignore": [
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,12 @@ jobs:
run: |
bundle exec rake spec:ci

- name: Run CodeQL Tests
working-directory: ./codeql-ruby
run: |
bundle exec rake install
$GITHUB_WORKSPACE/codeql/codeql test run -vvvvv ql/test

# - name: Setup tmate session
# uses: mxschmitt/action-tmate@v2

Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
# rspec failure tracking
.rspec_status

# CodeQL test runner databases
*.testproj

.cache/

TODOS.md
2 changes: 1 addition & 1 deletion extractor/codeql-extractor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ file_types:
display_name: Ruby
extensions:
- .rb
legacy_qltest_extraction: false
legacy_qltest_extraction: true
15 changes: 15 additions & 0 deletions extractor/tools/index.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/sh

####################################################################################
#
# Required for running `codeql test run my/test/dir`
# when legacy_qltest_extraction is set to true in ruby/codeql-extractor.yml
#
#
# FIXME: figure out what "non-legacy" test extraction looks like and how it works
#
####################################################################################

set -eu

codeql_ruby $@
3 changes: 3 additions & 0 deletions ql/test/base_unsafe_script/example.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
| 1 | This is a leaf node. |
| ARGV | This is a leaf node. |
| eval | This is a leaf node. |
4 changes: 4 additions & 0 deletions ql/test/leaf_node_location/example.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
| leaf_node_location.rb:1:0:1:4 | LeafNode | puts | leaf_node_location.rb:1 |
| leaf_node_location.rb:1:0:1:4 | LeafNode | puts | leaf_node_location.rb:1 |
| leaf_node_location.rb:1:6:1:40 | LeafNode | this file contains some leaf nodes | leaf_node_location.rb:1 |
| leaf_node_location.rb:1:6:1:40 | LeafNode | this file contains some leaf nodes | leaf_node_location.rb:1 |
5 changes: 5 additions & 0 deletions ql/test/qlpack.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
name: codeql-ruby-tests
version: 0.0.0
libraryPathDependencies:
- codeql-ruby
extractor: ruby
14 changes: 14 additions & 0 deletions ql/test/script_with_require/example.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
| . | This is a leaf node. |
| ./required_file | This is a leaf node. |
| @fullpath | This is a leaf node. |
| File | This is a leaf node. |
| RequiredFile | This is a leaf node. |
| __FILE__ | This is a leaf node. |
| attr_reader | This is a leaf node. |
| expand_path | This is a leaf node. |
| fullpath | This is a leaf node. |
| initialize | This is a leaf node. |
| new | This is a leaf node. |
| puts | This is a leaf node. |
| require_relative | This is a leaf node. |
| rf | This is a leaf node. |
3 changes: 0 additions & 3 deletions spec/base_unsafe_script/qlpack.yml

This file was deleted.

23 changes: 1 addition & 22 deletions spec/codeql_ruby_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,11 @@
expect(CodeqlRuby::VERSION).not_to be nil
end

it "extracts a db, runs a query, and generates JSON results" do
results = CodeqlRunner.results_for_db('base_unsafe_script')
tuples = results.dig('#select', 'tuples')

expect(tuples).to include(['eval', 'This is a leaf node.'])
end

it "extracts a directory as a db and queries it" do
results = CodeqlRunner.results_for_db('script_with_require')
tuples = results.dig('#select', 'tuples')

expect(tuples).to include(['RequiredFile', 'This is a leaf node.'])
end

it "extracts a file to relevant trap structures" do
filepath = File.expand_path(File.join(File.dirname(__FILE__), 'script_with_require', 'script_with_require.rb'))
filepath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'ql', 'test', 'script_with_require', 'script_with_require.rb'))
ef = CodeqlRuby::ExtractorFile.new(filepath)
results = ef.to_trap

expect(results).to be_a(String)
end

it "extracts Location info from LeafNodes" do
results = CodeqlRunner.results_for_db('leaf_node_location')
tuples = results.dig('#select', 'tuples')

expect(tuples).to include([{'label'=>'LeafNode'}, 'puts', 'leaf_node_location.rb:1'])
end
end
3 changes: 0 additions & 3 deletions spec/leaf_node_location/qlpack.yml

This file was deleted.

3 changes: 0 additions & 3 deletions spec/script_with_require/qlpack.yml

This file was deleted.