Store lint warnings in the database

This commit adds the relevant tables and code to store lint warnings in the
database.

Currently, only lint checkers which don't require access to the network will
be run, as this allows the processing to happen without network access. Also,
this functionality won't work in older versions of Guix which don't expose the
lint warnings in a compatible way.
This commit is contained in:
Christopher Baines 2019-08-31 12:11:58 +01:00
parent bf469504eb
commit 6b9977f62e
11 changed files with 487 additions and 48 deletions

View file

@ -0,0 +1,37 @@
(define-module (tests model-lint-checker)
#:use-module (srfi srfi-64)
#:use-module (ice-9 match)
#:use-module (guix-data-service database)
#:use-module (guix-data-service model lint-checker))
(test-begin "test-model-lint-checker")
(define data
'((name-1 "description-1" #t)
(name-2 "description-2" #f)))
(with-postgresql-connection
"test-model-lint-checker"
(lambda (conn)
(test-assert "single insert"
(with-postgresql-transaction
conn
(lambda (conn)
(match (lint-checkers->lint-checker-ids conn data)
(((? string? id1) (? string? id2))
#t)))
#:always-rollback? #t))
(test-assert "double insert"
(with-postgresql-transaction
conn
(lambda (conn)
(match (lint-checkers->lint-checker-ids conn data)
(((? string? id1) (? string? id2))
(match (lint-checkers->lint-checker-ids conn data)
(((? string? second-id1) (? string? second-id2))
(and (string=? id1 second-id1)
(string=? id2 second-id2)))))))
#:always-rollback? #t))))
(test-end)

View file

@ -0,0 +1,57 @@
(define-module (tests model-lint-warning-message)
#:use-module (srfi srfi-64)
#:use-module (ice-9 match)
#:use-module (guix-data-service database)
#:use-module (guix-data-service model lint-warning-message))
(test-begin "test-model-lint-warning-message")
(define data
'(("en" . "Test message")
("es" . "Test message in Spanish")))
(with-postgresql-connection
"test-model-lint-checker"
(lambda (conn)
(test-assert "single insert"
(with-postgresql-transaction
conn
(lambda (conn)
(match (lint-warning-message-data->lint-warning-message-ids conn data)
(((? string? id1) (? string? id2))
#t)))
#:always-rollback? #t))
(test-assert "double insert"
(with-postgresql-transaction
conn
(lambda (conn)
(match (lint-warning-message-data->lint-warning-message-ids conn data)
(((? string? id1) (? string? id2))
(match (lint-warning-message-data->lint-warning-message-ids conn data)
(((? string? second-id1) (? string? second-id2))
(and (string=? id1 second-id1)
(string=? id2 second-id2)))))))
#:always-rollback? #t))
(test-assert "single set insert"
(with-postgresql-transaction
conn
(lambda (conn)
(match (lint-warning-message-data->lint-warning-message-set-id conn data)
((? string? id1)
#t)))
#:always-rollback? #t))
(test-assert "double set insert"
(with-postgresql-transaction
conn
(lambda (conn)
(match (lint-warning-message-data->lint-warning-message-set-id conn data)
((? string? id)
(match (lint-warning-message-data->lint-warning-message-set-id conn data)
((? string? second-id)
(string=? id second-id))))))
#:always-rollback? #t))))
(test-end)