database: changed Notification interface name

This commit is contained in:
Sida Chen 2018-09-11 14:24:09 -04:00
parent 6c69377343
commit ff9303905b
7 changed files with 27 additions and 39 deletions

View File

@ -167,9 +167,9 @@ type Session interface {
// always considered first page. // always considered first page.
FindVulnerabilityNotification(name string, limit int, oldVulnerabilityPage pagination.Token, newVulnerabilityPage pagination.Token) (noti VulnerabilityNotificationWithVulnerable, found bool, err error) FindVulnerabilityNotification(name string, limit int, oldVulnerabilityPage pagination.Token, newVulnerabilityPage pagination.Token) (noti VulnerabilityNotificationWithVulnerable, found bool, err error)
// MarkNotificationNotified marks a Notification as notified now, assuming // MarkNotificationAsRead marks a Notification as notified now, assuming
// the requested notification is in the database. // the requested notification is in the database.
MarkNotificationNotified(name string) error MarkNotificationAsRead(name string) error
// DeleteNotification removes a Notification in the database. // DeleteNotification removes a Notification in the database.
DeleteNotification(name string) error DeleteNotification(name string) error

View File

@ -43,7 +43,7 @@ type MockSession struct {
FctFindNewNotification func(lastNotified time.Time) (NotificationHook, bool, error) FctFindNewNotification func(lastNotified time.Time) (NotificationHook, bool, error)
FctFindVulnerabilityNotification func(name string, limit int, oldPage pagination.Token, newPage pagination.Token) ( FctFindVulnerabilityNotification func(name string, limit int, oldPage pagination.Token, newPage pagination.Token) (
vuln VulnerabilityNotificationWithVulnerable, ok bool, err error) vuln VulnerabilityNotificationWithVulnerable, ok bool, err error)
FctMarkNotificationNotified func(name string) error FctMarkNotificationAsRead func(name string) error
FctDeleteNotification func(name string) error FctDeleteNotification func(name string) error
FctUpdateKeyValue func(key, value string) error FctUpdateKeyValue func(key, value string) error
FctFindKeyValue func(key string) (string, bool, error) FctFindKeyValue func(key string) (string, bool, error)
@ -186,9 +186,9 @@ func (ms *MockSession) FindVulnerabilityNotification(name string, limit int, old
panic("required mock function not implemented") panic("required mock function not implemented")
} }
func (ms *MockSession) MarkNotificationNotified(name string) error { func (ms *MockSession) MarkNotificationAsRead(name string) error {
if ms.FctMarkNotificationNotified != nil { if ms.FctMarkNotificationAsRead != nil {
return ms.FctMarkNotificationNotified(name) return ms.FctMarkNotificationAsRead(name)
} }
panic("required mock function not implemented") panic("required mock function not implemented")
} }

View File

@ -289,23 +289,23 @@ func (tx *pgSession) FindVulnerabilityNotification(name string, limit int, oldPa
return noti, true, nil return noti, true, nil
} }
func (tx *pgSession) MarkNotificationNotified(name string) error { func (tx *pgSession) MarkNotificationAsRead(name string) error {
if name == "" { if name == "" {
return commonerr.NewBadRequestError("Empty notification name is not allowed") return commonerr.NewBadRequestError("Empty notification name is not allowed")
} }
r, err := tx.Exec(updatedNotificationNotified, name) r, err := tx.Exec(updatedNotificationAsRead, name)
if err != nil { if err != nil {
return handleError("updatedNotificationNotified", err) return handleError("updatedNotificationAsRead", err)
} }
affected, err := r.RowsAffected() affected, err := r.RowsAffected()
if err != nil { if err != nil {
return handleError("updatedNotificationNotified", err) return handleError("updatedNotificationAsRead", err)
} }
if affected <= 0 { if affected <= 0 {
return handleError("updatedNotificationNotified", errNotificationNotFound) return handleError("updatedNotificationAsRead", errNotificationNotFound)
} }
return nil return nil
} }

View File

@ -200,7 +200,7 @@ func TestFindNewNotification(t *testing.T) {
} }
// can't find the notified // can't find the notified
assert.Nil(t, tx.MarkNotificationNotified("test")) assert.Nil(t, tx.MarkNotificationAsRead("test"))
// if the notified time is before // if the notified time is before
noti, ok, err = tx.FindNewNotification(time.Now().Add(-time.Duration(10 * time.Second))) noti, ok, err = tx.FindNewNotification(time.Now().Add(-time.Duration(10 * time.Second)))
assert.Nil(t, err) assert.Nil(t, err)
@ -225,16 +225,16 @@ func TestFindNewNotification(t *testing.T) {
assert.False(t, ok) assert.False(t, ok)
} }
func TestMarkNotificationNotified(t *testing.T) { func TestMarkNotificationAsRead(t *testing.T) {
datastore, tx := openSessionForTest(t, "MarkNotificationNotified", true) datastore, tx := openSessionForTest(t, "MarkNotificationAsRead", true)
defer closeTest(t, datastore, tx) defer closeTest(t, datastore, tx)
// invalid case: notification doesn't exist // invalid case: notification doesn't exist
assert.NotNil(t, tx.MarkNotificationNotified("non-existing")) assert.NotNil(t, tx.MarkNotificationAsRead("non-existing"))
// valid case // valid case
assert.Nil(t, tx.MarkNotificationNotified("test")) assert.Nil(t, tx.MarkNotificationAsRead("test"))
// valid case // valid case
assert.Nil(t, tx.MarkNotificationNotified("test")) assert.Nil(t, tx.MarkNotificationAsRead("test"))
} }
func TestDeleteNotification(t *testing.T) { func TestDeleteNotification(t *testing.T) {

View File

@ -168,7 +168,7 @@ const (
INSERT INTO Vulnerability_Notification(name, created_at, old_vulnerability_id, new_vulnerability_id) INSERT INTO Vulnerability_Notification(name, created_at, old_vulnerability_id, new_vulnerability_id)
VALUES ($1, $2, $3, $4)` VALUES ($1, $2, $3, $4)`
updatedNotificationNotified = ` updatedNotificationAsRead = `
UPDATE Vulnerability_Notification UPDATE Vulnerability_Notification
SET notified_at = CURRENT_TIMESTAMP SET notified_at = CURRENT_TIMESTAMP
WHERE name = $1` WHERE name = $1`

View File

@ -16,7 +16,6 @@ package pgsql
import ( import (
"database/sql" "database/sql"
"encoding/json"
"errors" "errors"
"time" "time"
@ -220,17 +219,6 @@ func (tx *pgSession) insertVulnerabilities(vulnerabilities []database.Vulnerabil
return vulnIDs, nil return vulnIDs, nil
} }
// castMetadata marshals the given database.MetadataMap and unmarshals it again to make sure that
// everything has the interface{} type.
// It is required when comparing crafted MetadataMap against MetadataMap that we get from the
// database.
func castMetadata(m database.MetadataMap) database.MetadataMap {
c := make(database.MetadataMap)
j, _ := json.Marshal(m)
json.Unmarshal(j, &c)
return c
}
func (tx *pgSession) lockFeatureVulnerabilityCache() error { func (tx *pgSession) lockFeatureVulnerabilityCache() error {
_, err := tx.Exec(lockVulnerabilityAffects) _, err := tx.Exec(lockVulnerabilityAffects)
if err != nil { if err != nil {

View File

@ -93,7 +93,7 @@ func RunNotifier(config *notification.Config, datastore database.Datastore, stop
go func() { go func() {
success, interrupted := handleTask(*notification, stopper, config.Attempts) success, interrupted := handleTask(*notification, stopper, config.Attempts)
if success { if success {
err := markNotificationNotified(datastore, notification.Name) err := markNotificationAsRead(datastore, notification.Name)
if err != nil { if err != nil {
log.WithError(err).Error("Failed to mark notification notified") log.WithError(err).Error("Failed to mark notification notified")
} }
@ -196,14 +196,14 @@ func findNewNotification(datastore database.Datastore, renotifyInterval time.Dur
return tx.FindNewNotification(time.Now().Add(-renotifyInterval)) return tx.FindNewNotification(time.Now().Add(-renotifyInterval))
} }
func markNotificationNotified(datastore database.Datastore, name string) error { func markNotificationAsRead(datastore database.Datastore, name string) error {
tx, err := datastore.Begin() tx, err := datastore.Begin()
if err != nil { if err != nil {
log.WithError(err).Error("an error happens when beginning database transaction") log.WithError(err).Error("an error happens when beginning database transaction")
} }
defer tx.Rollback() defer tx.Rollback()
if err := tx.MarkNotificationNotified(name); err != nil { if err := tx.MarkNotificationAsRead(name); err != nil {
return err return err
} }
return tx.Commit() return tx.Commit()