1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-19 08:26:23 -07:00

Replace parsed gochan version type with constant string and DB version passed by parameter with constant int

This commit is contained in:
Eggbertx 2025-04-22 17:03:52 -07:00
parent 414a66ecc9
commit c143596f80
31 changed files with 77 additions and 347 deletions

View file

@ -18,9 +18,6 @@ import (
type GCDatabaseUpdater struct {
options *common.MigrationOptions
db *gcsql.GCDB
// if the database version is less than TargetDBVer, it is assumed to be out of date, and the schema needs to be adjusted.
// It is expected to be set by the build script
TargetDBVer int
}
// IsMigratingInPlace implements common.DBMigrator.
@ -43,12 +40,12 @@ func (dbu *GCDatabaseUpdater) IsMigrated() (bool, error) {
if err != nil {
return false, err
}
if currentDatabaseVersion == dbu.TargetDBVer {
if currentDatabaseVersion == gcsql.DatabaseVersion {
return true, nil
}
if currentDatabaseVersion > dbu.TargetDBVer {
if currentDatabaseVersion > gcsql.DatabaseVersion {
return false, fmt.Errorf("database layout is ahead of current version (%d), target version: %d",
currentDatabaseVersion, dbu.TargetDBVer)
currentDatabaseVersion, gcsql.DatabaseVersion)
}
return false, nil
}
@ -124,7 +121,7 @@ func (dbu *GCDatabaseUpdater) MigrateDB() (migrated bool, err error) {
}
query := `UPDATE DBPREFIXdatabase_version SET version = ? WHERE component = 'gochan'`
_, err = dbu.db.ExecContextSQL(ctx, nil, query, dbu.TargetDBVer)
_, err = dbu.db.ExecContextSQL(ctx, nil, query, gcsql.DatabaseVersion)
if err != nil {
return false, err
}

View file

@ -85,7 +85,7 @@ func (m *Pre2021Migrator) renameTablesForInPlace() error {
}
}
if err = gcsql.CheckAndInitializeDatabase(m.config.DBtype, "4"); err != nil {
if err = gcsql.CheckAndInitializeDatabase(m.config.DBtype); err != nil {
errEv.Caller().Err(err).Msg("Error checking and initializing database")
return err
}

View file

@ -82,7 +82,7 @@ func setupMigrationTest(t *testing.T, outDir string, migrateInPlace bool) *Pre20
t.FailNow()
}
if !migrateInPlace {
if !assert.NoError(t, gcsql.CheckAndInitializeDatabase("sqlite3", "4")) {
if !assert.NoError(t, gcsql.CheckAndInitializeDatabase("sqlite3")) {
t.FailNow()
}
}

View file

@ -5,7 +5,6 @@ import (
"flag"
"log"
"os"
"strconv"
"github.com/gochan-org/gochan/cmd/gochan-migration/internal/common"
"github.com/gochan-org/gochan/cmd/gochan-migration/internal/gcupdate"
@ -16,9 +15,7 @@ import (
)
var (
versionStr string
migrator common.DBMigrator
dbVersionStr string
migrator common.DBMigrator
)
func cleanup() {
@ -46,7 +43,7 @@ func main() {
flag.StringVar(&options.OldChanConfig, "oldconfig", "", "The path to the old chan's configuration file")
flag.Parse()
err := config.InitConfig(versionStr)
err := config.InitConfig()
if err != nil {
log.Fatalln("Unable to initialize configuration:", err.Error())
}
@ -74,13 +71,7 @@ func main() {
switch options.ChanType {
case "gcupdate":
targetDBVer, err := strconv.Atoi(dbVersionStr)
if err != nil {
fatalEv.Err(err).Caller().Msg("Invalid database version string, unable to parse as integer")
}
migrator = &gcupdate.GCDatabaseUpdater{
TargetDBVer: targetDBVer,
}
migrator = &gcupdate.GCDatabaseUpdater{}
case "pre2021":
migrator = &pre2021.Pre2021Migrator{}
case "kusabax":
@ -97,7 +88,7 @@ func main() {
Bool("migratingInPlace", migratingInPlace).
Msg("Starting database migration")
if err = config.InitConfig(versionStr); err != nil {
if err = config.InitConfig(); err != nil {
fatalEv.Err(err).Caller().Msg("Unable to reload configuration")
}
sqlCfg := config.GetSQLConfig()
@ -112,7 +103,7 @@ func main() {
if err != nil {
fatalEv.Err(err).Caller().Msg("Failed to connect to the database")
}
if err = gcsql.CheckAndInitializeDatabase(sqlCfg.DBtype, dbVersionStr); err != nil {
if err = gcsql.CheckAndInitializeDatabase(sqlCfg.DBtype); err != nil {
fatalEv.Err(err).Caller().Msg("Unable to initialize the database")
}
}

View file

@ -25,11 +25,6 @@ import (
"github.com/gochan-org/gochan/pkg/server/serverutil"
)
var (
versionStr string
dbVersionStr string
)
func cleanup() {
gcsql.Close()
geoip.Close()
@ -37,13 +32,13 @@ func cleanup() {
}
func main() {
gcutil.LogInfo().Str("version", versionStr).Msg("Starting gochan")
gcutil.LogInfo().Str("version", config.GochanVersion).Msg("Starting gochan")
fatalEv := gcutil.LogFatal()
defer func() {
fatalEv.Discard()
cleanup()
}()
err := config.InitConfig(versionStr)
err := config.InitConfig()
if err != nil {
fatalEv.Err(err).Caller().
Str("jsonLocation", config.JSONLocation()).
@ -83,7 +78,7 @@ func main() {
Str("DBhost", systemCritical.DBhost).
Msg("Connected to database")
if err = gcsql.CheckAndInitializeDatabase(systemCritical.DBtype, dbVersionStr); err != nil {
if err = gcsql.CheckAndInitializeDatabase(systemCritical.DBtype); err != nil {
cleanup()
gcutil.LogFatal().Err(err).Msg("Failed to initialize the database")
}

View file

@ -26,7 +26,7 @@ func InitPlugin() error {
manage.RegisterManagePage("gochaninfo", "Gochan info", manage.AdminPerms, manage.NoJSON,
func(writer http.ResponseWriter, request *http.Request, staff *gcsql.Staff, wantsJSON bool, infoEv, errEv *zerolog.Event) (output interface{}, err error) {
return fmt.Sprintf(infoPage,
config.GetVersion().String(),
config.GochanVersion,
runtime.Version(),
runtime.GOOS,
config.GetSystemCriticalConfig().DBtype,

View file

@ -82,7 +82,7 @@ func TestBuildJS(t *testing.T) {
}
outDir := t.TempDir()
config.SetVersion("4.0.2")
config.InitTestConfig()
systemCriticalCfg := config.GetSystemCriticalConfig()
systemCriticalCfg.DocumentRoot = path.Join(outDir, "html")
systemCriticalCfg.TemplateDir = path.Join(testRoot, "templates")
@ -251,7 +251,7 @@ func TestBuildFrontPage(t *testing.T) {
}
t.Run(driver, func(t *testing.T) {
outDir := t.TempDir()
config.SetVersion("4.0.2")
config.InitTestConfig()
systemCriticalCfg := config.GetSystemCriticalConfig()
systemCriticalCfg.DocumentRoot = path.Join(outDir, "html")
systemCriticalCfg.TemplateDir = path.Join(testRoot, "templates")
@ -369,7 +369,7 @@ func (p *pageHeaderTestCase) runTest(t *testing.T, driver string) {
}
func TestBuildPageHeader(t *testing.T) {
config.SetVersion("4.0.2")
config.InitTestConfig()
_, err := testutil.GoToGochanRoot(t)
if !assert.NoError(t, err) {
return
@ -392,7 +392,7 @@ func TestBuildPageHeader(t *testing.T) {
}
func TestBuildPageFooter(t *testing.T) {
config.SetVersion("4.0.2")
config.InitTestConfig()
_, err := testutil.GoToGochanRoot(t)
if !assert.NoError(t, err) {
t.FailNow()

View file

@ -29,6 +29,8 @@ const (
DefaultSQLTimeout = 15
DefaultSQLMaxConns = 10
DefaultSQLConnMaxLifetimeMin = 3
GochanVersion = "4.1.0"
)
var (
@ -281,8 +283,7 @@ type SystemCriticalConfig struct {
// RandomSeed is a random string used for generating secure tokens. It will be generated if not set and must not be changed
RandomSeed string
Version *GochanVersion `json:"-"`
TimeZone int `json:"-"`
TimeZone int `json:"-"`
logLevel zerolog.Level
logLevelParsed bool
@ -920,7 +921,3 @@ func UpdateBoardConfig(dir string) error {
func DeleteBoardConfig(dir string) {
delete(boardConfigs, dir)
}
func GetVersion() *GochanVersion {
return cfg.Version
}

View file

@ -26,9 +26,7 @@ func TestValidJSON(t *testing.T) {
func TestValidateValues(t *testing.T) {
testutil.GoToGochanRoot(t)
if !assert.NoError(t, InitConfig("4.1.0")) {
t.FailNow()
}
InitConfig()
SetRandomSeed("test")
assert.NoError(t, cfg.ValidateValues())
@ -51,9 +49,7 @@ type webRootTest struct {
func TestWebPath(t *testing.T) {
testutil.GoToGochanRoot(t)
if !assert.NoError(t, InitConfig("4.1.0")) {
t.FailNow()
}
InitConfig()
testCases := []webRootTest{
{
webRoot: "/",

View file

@ -31,9 +31,7 @@ func (tC *preloadTest) run(t *testing.T) {
func TestPreload(t *testing.T) {
testutil.GoToGochanRoot(t)
if !assert.NoError(t, InitConfig("4.1.0")) {
t.FailNow()
}
InitTestConfig()
testCases := []preloadTest{
{
desc: "access system critical config from lua",

View file

@ -1,6 +1,8 @@
package config
import "github.com/gochan-org/gochan/pkg/gcutil/testutil"
import (
"github.com/gochan-org/gochan/pkg/gcutil/testutil"
)
func setDefaultCfgIfNotSet() {
if cfg == nil {
@ -8,12 +10,10 @@ func setDefaultCfgIfNotSet() {
}
}
// SetVersion should only be used for tests, where a config file wouldn't be loaded
func SetVersion(version string) {
// InitTestConfig should only be used for tests, where a config file wouldn't be loaded
func InitTestConfig() {
testutil.PanicIfNotTest()
setDefaultCfgIfNotSet()
cfg.Version = ParseVersion(version)
}
// SetTestTemplateDir sets the directory for templates, used only in testing. If it is not run via `go test`, it will panic.

View file

@ -72,7 +72,7 @@ func TakeOwnershipOfFile(f *os.File) error {
return f.Chown(uid, gid)
}
func loadConfig(versionStr string, searchPaths ...string) (err error) {
func loadConfig(searchPaths ...string) (err error) {
cfg = defaultGochanConfig
if testing.Testing() {
// create a dummy config for testing if we're using go test
@ -89,7 +89,6 @@ func loadConfig(versionStr string, searchPaths ...string) (err error) {
cfg.DBusername = "gochan"
cfg.SiteHost = "127.0.0.1"
cfg.RandomSeed = "test"
cfg.Version = ParseVersion(versionStr)
cfg.SiteSlogan = "Gochan testing"
cfg.Cooldowns = BoardCooldowns{0, 0, 0}
cfg.BanColors = map[string]string{
@ -121,12 +120,12 @@ func loadConfig(versionStr string, searchPaths ...string) (err error) {
}
// InitConfig loads and parses gochan.json on startup and verifies its contents
func InitConfig(versionStr string) (err error) {
func InitConfig() (err error) {
var searchPaths []string
if !testing.Testing() {
searchPaths = []string{"gochan.json", "/usr/local/etc/gochan/gochan.json", "/etc/gochan/gochan.json"}
}
if err = loadConfig(versionStr, searchPaths...); err != nil {
if err = loadConfig(searchPaths...); err != nil {
return err
}
@ -190,8 +189,6 @@ func InitConfig(versionStr string) (err error) {
_, zoneOffset := time.Now().Zone()
cfg.TimeZone = zoneOffset / 60 / 60
cfg.Version = ParseVersion(versionStr)
cfg.Version.Normalize()
return nil
}

View file

@ -1,93 +0,0 @@
// used for version parsing, printing, and comparison
package config
import (
"fmt"
)
const (
VersionEqual = 0
VersionNewer = 1
VersionOlder = -1
)
type GochanVersion struct {
Major int
Minor int
Revision int
Extra string
}
func ParseVersion(vStr string) *GochanVersion {
var v GochanVersion
fmt.Sscanf(vStr, "%d.%d.%d-%s", &v.Major, &v.Minor, &v.Revision, &v.Extra)
v.Normalize()
return &v
}
// Normalize checks to make sure that the version is legitimate, i.e. fields > 0
func (v *GochanVersion) Normalize() bool {
valid := true
if v.Major < 0 {
v.Major = 0
valid = false
}
if v.Minor < 0 {
v.Minor = 0
valid = false
}
if v.Revision < 0 {
v.Revision = 0
valid = false
}
if v.Revision+v.Minor+v.Major == 0 {
valid = false
}
return valid
}
// Compare compares v to v2 and returns 1 if it is newer, -1 if it older, and 0
// if they are equal
func (v *GochanVersion) Compare(v2 *GochanVersion) int {
v.Normalize()
v2.Normalize()
if v.Major > v2.Major {
return VersionNewer
}
if v.Major < v2.Major {
return VersionOlder
}
if v.Minor > v2.Minor {
return VersionNewer
}
if v.Minor < v2.Minor {
return VersionOlder
}
if v.Revision > v2.Revision {
return VersionNewer
}
if v.Revision < v2.Revision {
return VersionOlder
}
return VersionEqual
}
func (v *GochanVersion) CompareString(v2str string) int {
v.Normalize()
v2 := ParseVersion(v2str)
v2.Normalize()
return v.Compare(v2)
}
func (v *GochanVersion) String() string {
v.Normalize()
str := fmt.Sprintf("%d.%d", v.Major, v.Minor)
if v.Revision > 0 {
str += fmt.Sprintf(".%d", v.Revision)
}
if v.Extra != "" {
str += "-" + v.Extra
}
return str
}

View file

@ -1,134 +0,0 @@
// used for version parsing, printing, and comparison
package config
import (
"testing"
"github.com/stretchr/testify/assert"
)
type versionTestCase struct {
versionStr string
expectMajor int
expectMinor int
expectRevision int
expectExtra string
expectString string
expectInvalid bool
}
func (tC *versionTestCase) run(t *testing.T) {
version := ParseVersion(tC.versionStr)
valid := version.Normalize()
assert.NotEqual(t, tC.expectInvalid, valid)
if tC.expectInvalid {
return
}
assert.Equal(t, tC.expectMajor, version.Major)
assert.Equal(t, tC.expectMinor, version.Minor)
assert.Equal(t, tC.expectRevision, version.Revision)
assert.Equal(t, tC.expectExtra, version.Extra)
assert.Equal(t, tC.expectString, version.String())
}
func TestParseVersion(t *testing.T) {
tests := []versionTestCase{
{
versionStr: "1.2.3-extra",
expectMajor: 1,
expectMinor: 2,
expectRevision: 3,
expectExtra: "extra",
expectString: "1.2.3-extra",
},
{
versionStr: "1.2.3",
expectMajor: 1,
expectMinor: 2,
expectRevision: 3,
expectString: "1.2.3",
},
{
versionStr: "1.2",
expectMajor: 1,
expectMinor: 2,
expectString: "1.2",
},
{
versionStr: "1",
expectMajor: 1,
expectString: "1.0",
},
{
versionStr: "-1.-1.-1",
expectInvalid: true,
},
}
for _, tC := range tests {
t.Run(tC.versionStr, tC.run)
}
}
type versionCompareTestCase struct {
desc string
v1Str string
v2Str string
expectCmp int
}
func (tC *versionCompareTestCase) run(t *testing.T) {
v1 := ParseVersion(tC.v1Str)
cmp := v1.CompareString(tC.v2Str)
assert.Equal(t, tC.expectCmp, cmp)
}
func TestVersionCompare(t *testing.T) {
tests := []versionCompareTestCase{
{
desc: "v1 > v2 major",
v1Str: "3.0",
v2Str: "2.0",
expectCmp: 1,
},
{
desc: "v1 > v2 minor",
v1Str: "3.1",
v2Str: "3.0",
expectCmp: 1,
},
{
desc: "v1 > v2 revision",
v1Str: "3.1.1",
v2Str: "3.1",
expectCmp: 1,
},
{
desc: "v1 < v2 major",
v1Str: "2.0",
v2Str: "3.0",
expectCmp: -1,
},
{
desc: "v1 < v2 minor",
v1Str: "3.0",
v2Str: "3.1",
expectCmp: -1,
},
{
desc: "v1 < v2 revision",
v1Str: "3.1",
v2Str: "3.1.1",
expectCmp: -1,
},
{
desc: "v1 = v2",
v1Str: "3.1.1",
v2Str: "3.1.1",
expectCmp: 0,
},
}
for _, tC := range tests {
t.Run(tC.desc, tC.run)
}
}

View file

@ -109,7 +109,8 @@ func preloadLua() {
lState.PreloadModule("serverutil", serverutil.PreloadModule)
lState.PreloadModule("bbcode", posting.PreloadBBCodeModule)
lState.SetGlobal("_GOCHAN_VERSION", lua.LString(config.GetVersion().String()))
lState.SetGlobal("_GOCHAN_VERSION", lua.LString(config.GochanVersion))
lState.SetGlobal("_DATABASE_VERSION", lua.LNumber(gcsql.DatabaseVersion))
}
func LoadPlugins(paths []string) error {

View file

@ -39,7 +39,7 @@ return { ListenAddress = system_critical_cfg.ListenAddress, SiteSlogan = site_cf
)
func initPluginTests() {
config.SetVersion("4.0.2")
config.InitTestConfig()
initLua()
}
@ -48,7 +48,7 @@ func TestVersionFunction(t *testing.T) {
err := lState.DoString(versionStr)
assert.NoError(t, err)
testingVersionStr := lState.Get(-1).(lua.LString)
assert.EqualValues(t, config.GetVersion().String(), testingVersionStr)
assert.EqualValues(t, config.GochanVersion, testingVersionStr)
}
func TestStructPassing(t *testing.T) {
@ -75,9 +75,7 @@ func TestEventModule(t *testing.T) {
func TestConfigModule(t *testing.T) {
testutil.GoToGochanRoot(t)
if !assert.NoError(t, config.InitConfig("4.1.0")) {
t.FailNow()
}
config.InitConfig()
initPluginTests()
err := lState.DoString(configTestingStr)
assert.NoError(t, err)

View file

@ -21,6 +21,7 @@ import (
const (
// GochanVersionKeyConstant is the key value used in the version table of the database to store and receive the (database) version of base gochan
gochanVersionKeyConstant = "gochan"
DatabaseVersion = 5
UnsupportedSQLVersionMsg = `syntax error in SQL query, confirm you are using a supported driver and SQL server (error text: %s)`
mysqlConnStr = "%s:%s@tcp(%s)/%s?parseTime=true&collation=utf8mb4_unicode_ci"
postgresConnStr = "postgres://%s:%s@%s/%s?sslmode=disable"

View file

@ -27,7 +27,7 @@ func setupPostTest(t *testing.T, driver string) sqlmock.Sqlmock {
if !assert.NoError(t, err) {
t.FailNow()
}
config.SetVersion("4.0.0")
config.InitTestConfig()
config.SetTestDBConfig(driver, "localhost", "gochan", "gochan", "gochan", "")
gcdb, err := setupDBConn(setupSqlTestConfig(driver, "gochan", ""))

View file

@ -5,7 +5,6 @@ import (
"errors"
"fmt"
"path"
"strconv"
"github.com/gochan-org/gochan/pkg/config"
"github.com/gochan-org/gochan/pkg/gcutil"
@ -23,11 +22,10 @@ const (
var (
// ErrInvalidVersion is used when the db contains a database_version table
// but zero or more than one versions were found
ErrInvalidVersion = errors.New("database contains database_version table but zero or more than one versions were found")
ErrCorruptedDB = errors.New("database contains gochan prefixed tables but is missing versioning tables (possibly corrupted)")
ErrDeprecatedDB = errors.New("database layout is deprecated, please run gochan-migration -updatedb")
ErrInvalidDBVersion = errors.New("invalid version flag returned by GetCompleteDatabaseVersion()")
targetDatabaseVersion = -1
ErrInvalidVersion = errors.New("database contains database_version table but zero or more than one versions were found")
ErrCorruptedDB = errors.New("database contains gochan prefixed tables but is missing versioning tables (possibly corrupted)")
ErrDeprecatedDB = errors.New("database layout is deprecated, please run gochan-migration -updatedb")
ErrInvalidDBVersion = errors.New("invalid version flag returned by GetCompleteDatabaseVersion()")
)
func findSQLFile(filename string) string {
@ -63,10 +61,10 @@ func GetCompleteDatabaseVersion() (dbVersion, dbFlag int, err error) {
if versionError != nil {
return 0, 0, versionError
}
if databaseVersion < targetDatabaseVersion {
if databaseVersion < DatabaseVersion {
return databaseVersion, DBModernButBehind, nil
}
if databaseVersion > targetDatabaseVersion {
if databaseVersion > DatabaseVersion {
return databaseVersion, DBModernButAhead, nil
}
return databaseVersion, DBUpToDate, nil
@ -93,14 +91,7 @@ func GetCompleteDatabaseVersion() (dbVersion, dbFlag int, err error) {
}
// CheckAndInitializeDatabase checks the validity of the database and initialises it if it is empty
func CheckAndInitializeDatabase(dbType string, targetDbVersionStr string) (err error) {
if targetDatabaseVersion == -1 {
targetDatabaseVersion, err = strconv.Atoi(targetDbVersionStr)
if err != nil {
return err
}
}
func CheckAndInitializeDatabase(dbType string) (err error) {
dbVersion, versionFlag, err := GetCompleteDatabaseVersion()
if err != nil {
return err
@ -118,7 +109,7 @@ func CheckAndInitializeDatabase(dbType string, targetDbVersionStr string) (err e
err = ErrCorruptedDB
case DBModernButAhead:
// Uer might be running an old gochan version
err = fmt.Errorf("database layout is ahead of current version (%d), target version: %d", dbVersion, targetDatabaseVersion)
err = fmt.Errorf("database layout is ahead of current version (%d), target version: %d", dbVersion, DatabaseVersion)
default:
err = ErrInvalidDBVersion
}

View file

@ -18,7 +18,7 @@ func TestProvision(t *testing.T) {
if !assert.NoError(t, err) {
return
}
config.SetVersion("4.0.0")
config.InitTestConfig()
config.SetRandomSeed("test")
for _, driver := range testingDBDrivers {

View file

@ -201,7 +201,7 @@ var funcMap = template.FuncMap{
return style == config.GetBoardConfig("").DefaultStyle
},
"version": func() string {
return config.GetVersion().String()
return config.GochanVersion
},
}

View file

@ -181,7 +181,7 @@ func TestFormatFilesizeTmplFunc(t *testing.T) {
}
func TestFormatTimestampTmplFunc(t *testing.T) {
config.SetVersion("4.0.0")
config.InitTestConfig()
tmpl := template.Must(template.New("name").Funcs(funcMap).Parse("{{formatTimestamp .Time}}"))
buf := bytes.NewBuffer(nil)
@ -474,7 +474,7 @@ func TestMapTmplFunc(t *testing.T) {
}
func TestWebPathDirTmplFunc(t *testing.T) {
config.SetVersion("4.0.0")
config.InitTestConfig()
testCases := []struct {
desc string
tmplStr string
@ -524,7 +524,7 @@ func TestWebPathDirTmplFunc(t *testing.T) {
}
func TestMakeLoopTmplFunc(t *testing.T) {
config.SetVersion("4.0.0")
config.InitTestConfig()
testCases := []struct {
desc string
tmplStr string

View file

@ -378,7 +378,7 @@ var (
validationFunc: func(t *testing.T, reader io.Reader) {
ba, err := io.ReadAll(reader)
if assert.NoError(t, err) {
assert.Equal(t, `<footer>Powered by<a href="http://github.com/gochan-org/gochan/">Gochan 4.0</a><br /></footer></div></body></html>`, string(ba))
assert.Equal(t, `<footer>Powered by<a href="http://github.com/gochan-org/gochan/">Gochan `+config.GochanVersion+`</a><br /></footer></div></body></html>`, string(ba))
}
},
},

View file

@ -69,7 +69,7 @@ func runTemplateTestCases(t *testing.T, templateName string, testCases []templat
if !assert.NoError(t, err) {
return
}
config.SetVersion("4.0.0")
config.InitTestConfig()
config.SetTestDBConfig("mysql", "localhost", "gochan", "gochan", "gochan", "")
if !assert.NoError(t, gcsql.SetTestingDB("mysql", "gochan", "", db)) {
return

View file

@ -179,7 +179,7 @@ func embedTestRunner(t *testing.T, tc *embedTestCase, boardCfg *config.BoardConf
}
func TestAttachEmbed(t *testing.T) {
config.InitConfig("4.1.0")
config.InitTestConfig()
config.SetTestDBConfig("mysql", "localhost", "gochan", "gochan", "", "")
// Set up a board config with some embed matchers
@ -202,7 +202,7 @@ func TestAttachEmbed(t *testing.T) {
func TestOnlyAllowOneEmbed(t *testing.T) {
// verify that only one embed or file upload is allowed. Multiple files/uploading is on my to-do list,
// but for now, single upload/embedding is enforced.
config.InitConfig("4.1.0")
config.InitTestConfig()
config.SetTestDBConfig("mysql", "localhost", "gochan", "gochan", "", "")
boardCfg := &config.BoardConfig{
PostConfig: config.PostConfig{

View file

@ -13,7 +13,6 @@ import (
)
const (
versionStr = "4.0.0"
bbcodeMsgPreRender = `[b]Bold[/b] [i]Italics[/i] [u]Underline[/u] [url=https://gochan.org]URL[/url] [?]Spoiler[/?]
[code]Code[/code]
[hide]Hidden[/hide]`
@ -146,7 +145,7 @@ type diceRollerTestCase struct {
}
func TestBBCode(t *testing.T) {
config.SetVersion(versionStr)
config.InitTestConfig()
var testFmtr MessageFormatter
testFmtr.Init()
rendered := testFmtr.Compile(bbcodeMsgPreRender, "")
@ -154,7 +153,7 @@ func TestBBCode(t *testing.T) {
}
func TestLinks(t *testing.T) {
config.SetVersion(versionStr)
config.InitTestConfig()
var testFmtr MessageFormatter
testFmtr.Init()
rendered := urlRE.ReplaceAllStringFunc(linkTestPreRender, wrapLinksInURL)
@ -163,7 +162,7 @@ func TestLinks(t *testing.T) {
}
func TestNoDoubleTags(t *testing.T) {
config.SetVersion(versionStr)
config.InitTestConfig()
msgfmtr.Init()
_, warnEv, errEv := testutil.GetTestLogs(t)
rendered, err := FormatMessage(doubleTagPreRender, "", warnEv, errEv)
@ -172,7 +171,7 @@ func TestNoDoubleTags(t *testing.T) {
}
func TestLuaBBCode(t *testing.T) {
config.SetVersion(versionStr)
config.InitTestConfig()
msgfmtr.Init()
l := lua.NewState()
defer l.Close()
@ -203,7 +202,7 @@ func diceRollRunner(t *testing.T, tC *diceRollerTestCase) {
}
func TestDiceRoll(t *testing.T) {
config.SetVersion(versionStr)
config.InitTestConfig()
msgfmtr.Init()
for _, tC := range diceTestCases {
t.Run(tC.desc, func(t *testing.T) {
@ -216,7 +215,7 @@ func TestDiceRoll(t *testing.T) {
}
func TestHashTags(t *testing.T) {
config.SetVersion(versionStr)
config.InitTestConfig()
msgfmtr.Init()
_, warnEv, errEv := testutil.GetTestLogs(t)
msg := `[#tag]
@ -248,7 +247,7 @@ test]
}
func TestWorksafe(t *testing.T) {
config.SetVersion(versionStr)
config.InitTestConfig()
msgfmtr.Init()
_, warnEv, errEv := testutil.GetTestLogs(t)
boardConfig := config.GetBoardConfig("test")

View file

@ -14,7 +14,7 @@ type parseNameTestCase struct {
}
func TestParseName(t *testing.T) {
config.SetVersion("4.1")
config.InitTestConfig()
boardConfig := config.GetBoardConfig("test")
boardConfig.ReservedTrips = map[string]string{
"reserved": "TripOut",

View file

@ -17,14 +17,13 @@ import (
)
func TestServeJSON(t *testing.T) {
_, err := testutil.GoToGochanRoot(t)
if !assert.NoError(t, err) {
t.Fatalf("Failed to get current working directory: %v", err)
return
}
config.SetVersion("4.0.1")
config.InitTestConfig()
config.SetRandomSeed("test")
writer := httptest.NewRecorder()
@ -73,7 +72,7 @@ func TestServeErrorPage(t *testing.T) {
if !assert.NoError(t, err, "Unable to switch to gochan root directory") {
return
}
config.SetVersion("4.0.1")
config.InitTestConfig()
config.SetTestTemplateDir("templates")
if !assert.NoError(t, gctemplates.InitTemplates()) {
return
@ -100,8 +99,7 @@ func TestServeErrorPage(t *testing.T) {
}
func TestServeError(t *testing.T) {
config.SetVersion("4.0.1")
config.InitTestConfig()
tests := []struct {
name string
@ -129,7 +127,7 @@ func TestServeError(t *testing.T) {
err: "page not found",
wantsJSON: false,
data: nil,
expected: "<!doctype html><meta charset=utf-8><title>Error :c</title><h1>Error</h1><p>page not found<hr><address>Site powered by Gochan 4.0.1</address>",
expected: "<!doctype html><meta charset=utf-8><title>Error :c</title><h1>Error</h1><p>page not found<hr><address>Site powered by Gochan " + config.GochanVersion + "</address>",
},
}

View file

@ -13,8 +13,7 @@ import (
)
func TestServeFile(t *testing.T) {
config.SetVersion("4.0.1")
config.InitTestConfig()
tempDir, err := os.MkdirTemp("", "testservefile")
if err != nil {
@ -51,8 +50,7 @@ func TestServeFile(t *testing.T) {
}
func TestServeFile_NotFound(t *testing.T) {
config.SetVersion("4.0.1")
config.InitTestConfig()
// Create a temporary directory for testing
tempDir, err := os.MkdirTemp("", "testservefile")

View file

@ -50,7 +50,7 @@ type checkRefererTestCase struct {
}
func TestCheckReferer(t *testing.T) {
config.SetVersion("4.0.0")
config.InitTestConfig()
systemCriticalConfig := config.GetSystemCriticalConfig()
req, err := http.NewRequest("GET", "https://gochan.org", nil)
if !assert.NoError(t, err) {

View file

@ -82,7 +82,7 @@ func TestCanMinify(t *testing.T) {
desc: "don't minify HTML or JS",
},
}
config.SetVersion("4.0.0")
config.InitTestConfig()
siteCfg := config.GetSiteConfig()
for _, tC := range testCases {
t.Run(tC.desc, func(t *testing.T) {
@ -153,7 +153,7 @@ func TestMinifyWriter(t *testing.T) {
expectOutput: unminifiedJSON,
},
}
config.SetVersion("4.0.0")
config.InitTestConfig()
siteCfg := config.GetSiteConfig()
buf := new(bytes.Buffer)
var err error
@ -212,7 +212,7 @@ func TestMinifyTemplate(t *testing.T) {
return
}
config.SetTestTemplateDir("templates")
config.SetVersion("4.0.0")
config.InitTestConfig()
tmplRefStringTests := []testCaseMinifyTemplate{
{
@ -254,7 +254,7 @@ func TestMinifyTemplate(t *testing.T) {
mediaType: "text/html",
isTmplRef: true,
},
expectWriterString: `<!doctype html><meta charset=utf-8><title>Error</title><h1>Error</h1><p>Error<hr><address>Site powered by Gochan 4.0</address>`,
expectWriterString: `<!doctype html><meta charset=utf-8><title>Error</title><h1>Error</h1><p>Error<hr><address>Site powered by Gochan ` + config.GochanVersion + `</address>`,
},
{
testCaseCanMinify: testCaseCanMinify{
@ -279,7 +279,7 @@ func TestMinifyTemplate(t *testing.T) {
<body>
<h1>Error</h1>
<p>Error</p>
<hr><address>Site powered by Gochan 4.0</address>
<hr><address>Site powered by Gochan ` + config.GochanVersion + `</address>
</body>
</html>`,
},