Compare commits
2 Commits
49e6bb1e9d
...
250ff79eeb
| Author | SHA1 | Date | |
|---|---|---|---|
| 250ff79eeb | |||
| 4dfe260953 |
@@ -1,89 +1,81 @@
|
|||||||
package fuzz
|
package fuzz
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sync"
|
|
||||||
|
|
||||||
"gorm.io/driver/sqlite"
|
"gorm.io/driver/sqlite"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"gorm.io/gorm/logger"
|
"gorm.io/gorm/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
fuzzDBOnce sync.Once
|
|
||||||
fuzzDB *gorm.DB
|
|
||||||
fuzzDBErr error
|
|
||||||
)
|
|
||||||
|
|
||||||
func GetFuzzDB() (*gorm.DB, error) {
|
func GetFuzzDB() (*gorm.DB, error) {
|
||||||
fuzzDBOnce.Do(func() {
|
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{
|
||||||
dbName := "file:memdb_fuzz?mode=memory&cache=shared&_journal_mode=WAL&_synchronous=NORMAL"
|
Logger: logger.Default.LogMode(logger.Silent),
|
||||||
fuzzDB, fuzzDBErr = gorm.Open(sqlite.Open(dbName), &gorm.Config{
|
|
||||||
Logger: logger.Default.LogMode(logger.Silent),
|
|
||||||
})
|
|
||||||
if fuzzDBErr == nil {
|
|
||||||
fuzzDBErr = fuzzDB.Exec(`
|
|
||||||
CREATE TABLE IF NOT EXISTS users (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
username TEXT UNIQUE NOT NULL,
|
|
||||||
email TEXT UNIQUE NOT NULL,
|
|
||||||
password TEXT NOT NULL,
|
|
||||||
email_verified INTEGER DEFAULT 0 NOT NULL,
|
|
||||||
email_verified_at DATETIME,
|
|
||||||
email_verification_token TEXT,
|
|
||||||
email_verification_sent_at DATETIME,
|
|
||||||
password_reset_token TEXT,
|
|
||||||
password_reset_sent_at DATETIME,
|
|
||||||
password_reset_expires_at DATETIME,
|
|
||||||
locked INTEGER DEFAULT 0,
|
|
||||||
session_version INTEGER DEFAULT 1 NOT NULL,
|
|
||||||
created_at DATETIME,
|
|
||||||
updated_at DATETIME,
|
|
||||||
deleted_at DATETIME
|
|
||||||
);
|
|
||||||
CREATE TABLE IF NOT EXISTS posts (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
title TEXT NOT NULL,
|
|
||||||
url TEXT UNIQUE,
|
|
||||||
content TEXT,
|
|
||||||
author_id INTEGER,
|
|
||||||
author_name TEXT,
|
|
||||||
up_votes INTEGER DEFAULT 0,
|
|
||||||
down_votes INTEGER DEFAULT 0,
|
|
||||||
score INTEGER DEFAULT 0,
|
|
||||||
created_at DATETIME,
|
|
||||||
updated_at DATETIME,
|
|
||||||
deleted_at DATETIME,
|
|
||||||
FOREIGN KEY(author_id) REFERENCES users(id)
|
|
||||||
);
|
|
||||||
CREATE TABLE IF NOT EXISTS votes (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
user_id INTEGER,
|
|
||||||
post_id INTEGER NOT NULL,
|
|
||||||
type TEXT NOT NULL,
|
|
||||||
vote_hash TEXT,
|
|
||||||
created_at DATETIME,
|
|
||||||
updated_at DATETIME,
|
|
||||||
FOREIGN KEY(user_id) REFERENCES users(id),
|
|
||||||
FOREIGN KEY(post_id) REFERENCES posts(id)
|
|
||||||
);
|
|
||||||
CREATE TABLE IF NOT EXISTS account_deletion_requests (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
user_id INTEGER NOT NULL,
|
|
||||||
token_hash TEXT UNIQUE NOT NULL,
|
|
||||||
expires_at DATETIME NOT NULL,
|
|
||||||
created_at DATETIME,
|
|
||||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
|
||||||
);
|
|
||||||
CREATE TABLE IF NOT EXISTS refresh_tokens (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
user_id INTEGER NOT NULL,
|
|
||||||
token_hash TEXT UNIQUE NOT NULL,
|
|
||||||
expires_at DATETIME NOT NULL,
|
|
||||||
created_at DATETIME,
|
|
||||||
FOREIGN KEY(user_id) REFERENCES users(id)
|
|
||||||
);
|
|
||||||
`).Error
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
return fuzzDB, fuzzDBErr
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = db.Exec(`
|
||||||
|
CREATE TABLE IF NOT EXISTS users (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
username TEXT UNIQUE NOT NULL,
|
||||||
|
email TEXT UNIQUE NOT NULL,
|
||||||
|
password TEXT NOT NULL,
|
||||||
|
email_verified INTEGER DEFAULT 0 NOT NULL,
|
||||||
|
email_verified_at DATETIME,
|
||||||
|
email_verification_token TEXT,
|
||||||
|
email_verification_sent_at DATETIME,
|
||||||
|
password_reset_token TEXT,
|
||||||
|
password_reset_sent_at DATETIME,
|
||||||
|
password_reset_expires_at DATETIME,
|
||||||
|
locked INTEGER DEFAULT 0,
|
||||||
|
session_version INTEGER DEFAULT 1 NOT NULL,
|
||||||
|
created_at DATETIME,
|
||||||
|
updated_at DATETIME,
|
||||||
|
deleted_at DATETIME
|
||||||
|
);
|
||||||
|
CREATE TABLE IF NOT EXISTS posts (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
title TEXT NOT NULL,
|
||||||
|
url TEXT UNIQUE,
|
||||||
|
content TEXT,
|
||||||
|
author_id INTEGER,
|
||||||
|
author_name TEXT,
|
||||||
|
up_votes INTEGER DEFAULT 0,
|
||||||
|
down_votes INTEGER DEFAULT 0,
|
||||||
|
score INTEGER DEFAULT 0,
|
||||||
|
created_at DATETIME,
|
||||||
|
updated_at DATETIME,
|
||||||
|
deleted_at DATETIME,
|
||||||
|
FOREIGN KEY(author_id) REFERENCES users(id)
|
||||||
|
);
|
||||||
|
CREATE TABLE IF NOT EXISTS votes (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
user_id INTEGER,
|
||||||
|
post_id INTEGER NOT NULL,
|
||||||
|
type TEXT NOT NULL,
|
||||||
|
vote_hash TEXT,
|
||||||
|
created_at DATETIME,
|
||||||
|
updated_at DATETIME,
|
||||||
|
FOREIGN KEY(user_id) REFERENCES users(id),
|
||||||
|
FOREIGN KEY(post_id) REFERENCES posts(id)
|
||||||
|
);
|
||||||
|
CREATE TABLE IF NOT EXISTS account_deletion_requests (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
token_hash TEXT UNIQUE NOT NULL,
|
||||||
|
expires_at DATETIME NOT NULL,
|
||||||
|
created_at DATETIME,
|
||||||
|
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||||
|
);
|
||||||
|
CREATE TABLE IF NOT EXISTS refresh_tokens (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
token_hash TEXT UNIQUE NOT NULL,
|
||||||
|
expires_at DATETIME NOT NULL,
|
||||||
|
created_at DATETIME,
|
||||||
|
FOREIGN KEY(user_id) REFERENCES users(id)
|
||||||
|
);
|
||||||
|
`).Error
|
||||||
|
|
||||||
|
return db, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1704,8 +1704,11 @@ func TestGetFuzzDB(t *testing.T) {
|
|||||||
if err2 != nil {
|
if err2 != nil {
|
||||||
t.Fatalf("Second GetFuzzDB call failed: %v", err2)
|
t.Fatalf("Second GetFuzzDB call failed: %v", err2)
|
||||||
}
|
}
|
||||||
if db2 != db {
|
if db2 == nil {
|
||||||
t.Fatal("GetFuzzDB should return the same database instance")
|
t.Fatal("Second GetFuzzDB returned nil database")
|
||||||
|
}
|
||||||
|
if db2 == db {
|
||||||
|
t.Fatal("GetFuzzDB should return a new database instance for each call")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user