Skip to content

Add Corpus model

Aditya Tiwari requested to merge 341484-add-fuzz-corpus-model into master

What does this MR do and why?

Fuzz:Corpus model will hold the information about the corpus that we need to show on the corpus management page.

Describe in detail what your merge request does and why.

Database changes

Migration and Rollback
─>$ rails db:rollback
== 20211005063723 AddForeignKeyToCorpusesOnPackage: reverting =================
-- transaction_open?()
   -> 0.0000s
-- remove_foreign_key(:coverage_fuzzing_corpuses, {:column=>:package_id})
   -> 0.0104s
== 20211005063723 AddForeignKeyToCorpusesOnPackage: reverted (0.0343s) ========

== 20211005063616 AddForeignKeyToCorpusesOnUser: reverting ====================
-- transaction_open?()
   -> 0.0000s
-- remove_foreign_key(:coverage_fuzzing_corpuses, {:column=>:user_id})
   -> 0.0045s
== 20211005063616 AddForeignKeyToCorpusesOnUser: reverted (0.0088s) ===========

== 20211005063519 AddForeignKeyToCorpusesOnProject: reverting =================
-- transaction_open?()
   -> 0.0000s
-- remove_foreign_key(:coverage_fuzzing_corpuses, {:column=>:project_id})
   -> 0.0033s
== 20211005063519 AddForeignKeyToCorpusesOnProject: reverted (0.0067s) ========

== 20211004062942 CreateCoverageFuzzingCorpuses: reverting ====================
-- drop_table(:coverage_fuzzing_corpuses, {})
   -> 0.0032s
== 20211004062942 CreateCoverageFuzzingCorpuses: reverted (0.0056s) ===========
╰─>$ rails db:migrate
== 20211004062942 CreateCoverageFuzzingCorpuses: migrating ====================
-- create_table(:coverage_fuzzing_corpuses, {})
   -> 0.0121s
== 20211004062942 CreateCoverageFuzzingCorpuses: migrated (0.0121s) ===========

== 20211005063519 AddForeignKeyToCorpusesOnProject: migrating =================
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:coverage_fuzzing_corpuses)
   -> 0.0037s
-- transaction_open?()
   -> 0.0000s
-- execute("ALTER TABLE coverage_fuzzing_corpuses\nADD CONSTRAINT fk_204d40056a\nFOREIGN KEY (project_id)\nREFERENCES projects (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0021s
-- execute("SET statement_timeout TO 0")
   -> 0.0005s
-- execute("ALTER TABLE coverage_fuzzing_corpuses VALIDATE CONSTRAINT fk_204d40056a;")
   -> 0.0122s
-- execute("RESET statement_timeout")
   -> 0.0005s
== 20211005063519 AddForeignKeyToCorpusesOnProject: migrated (0.0382s) ========

== 20211005063616 AddForeignKeyToCorpusesOnUser: migrating ====================
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:coverage_fuzzing_corpuses)
   -> 0.0023s
-- transaction_open?()
   -> 0.0000s
-- execute("ALTER TABLE coverage_fuzzing_corpuses\nADD CONSTRAINT fk_29f6f15f82\nFOREIGN KEY (user_id)\nREFERENCES users (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0014s
-- execute("ALTER TABLE coverage_fuzzing_corpuses VALIDATE CONSTRAINT fk_29f6f15f82;")
   -> 0.0069s
== 20211005063616 AddForeignKeyToCorpusesOnUser: migrated (0.0142s) ===========

== 20211005063723 AddForeignKeyToCorpusesOnPackage: migrating =================
-- transaction_open?()
   -> 0.0000s
-- foreign_keys(:coverage_fuzzing_corpuses)
   -> 0.0019s
-- transaction_open?()
   -> 0.0000s
-- execute("ALTER TABLE coverage_fuzzing_corpuses\nADD CONSTRAINT fk_ef5ebf339f\nFOREIGN KEY (package_id)\nREFERENCES packages_packages (id)\nON DELETE CASCADE\nNOT VALID;\n")
   -> 0.0010s
-- execute("ALTER TABLE coverage_fuzzing_corpuses VALIDATE CONSTRAINT fk_ef5ebf339f;")
   -> 0.0066s
== 20211005063723 AddForeignKeyToCorpusesOnPackage: migrated (0.0131s) ========
Query
[43] pry(main)> AppSec::Fuzzing::Coverage::Corpus.where(package_id: 1).explain
  AppSec::Fuzzing::Coverage::Corpus Load (0.4ms)  SELECT "coverage_fuzzing_corpuses".* FROM "coverage_fuzzing_corpuses" WHERE "coverage_fuzzing_corpuses"."package_id" = 1 /*application:console,db_config_name:main,line:/lib/gitlab/database/load_balancing/connection_proxy.rb:99:in `block in read_using_load_balancer'*/
=> EXPLAIN for: SELECT "coverage_fuzzing_corpuses".* FROM "coverage_fuzzing_corpuses" WHERE "coverage_fuzzing_corpuses"."package_id" = 1 /*application:console,db_config_name:main,line:/lib/gitlab/database/load_balancing/connection_proxy.rb:99:in `block in read_using_load_balancer'*/
                                                           QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------
 Index Scan using index_coverage_fuzzing_corpuses_on_package_id on coverage_fuzzing_corpuses  (cost=0.15..5.24 rows=5 width=56)
   Index Cond: (package_id = 1)
(2 rows)

These are strongly recommended to assist reviewers and reduce the time to merge your change.

How to set up and validate locally

Numbered steps to set up and validate the change are strongly suggested.

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Related to #341484 (closed)

Edited by Mayra Cabrera

Merge request reports