commit ff7c96caa312858fd253454993e363937155c608
parent d81a123473c20af8e83b0c78986b199d55bfeb91
Author: tobi <31960611+tsmethurst@users.noreply.github.com>
Date: Wed, 17 Nov 2021 13:40:09 +0100
Fix instance account not being created (#310)
* Rework 'CreateInstanceAccount' with better checking logic
* add test for create instance account
Diffstat:
2 files changed, 63 insertions(+), 6 deletions(-)
diff --git a/internal/db/bundb/admin.go b/internal/db/bundb/admin.go
@@ -178,18 +178,19 @@ func (a *adminDB) NewSignup(ctx context.Context, username string, reason string,
func (a *adminDB) CreateInstanceAccount(ctx context.Context) db.Error {
username := a.config.Host
- // check if instance account already exists
- existsQ := a.conn.
+ q := a.conn.
NewSelect().
Model(>smodel.Account{}).
Where("username = ?", username).
WhereGroup(" AND ", whereEmptyOrNull("domain"))
- count, err := existsQ.Count(ctx)
- if err != nil && count == 1 {
+
+ exists, err := a.conn.Exists(ctx, q)
+ if err != nil {
+ return err
+ }
+ if exists {
logrus.Infof("instance account %s already exists", username)
return nil
- } else if err != sql.ErrNoRows {
- return a.conn.ProcessError(err)
}
key, err := rsa.GenerateKey(rand.Reader, 2048)
diff --git a/internal/db/bundb/admin_test.go b/internal/db/bundb/admin_test.go
@@ -0,0 +1,56 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package bundb_test
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/suite"
+ "github.com/superseriousbusiness/gotosocial/testrig"
+)
+
+type AdminTestSuite struct {
+ BunDBStandardTestSuite
+}
+
+func (suite *AdminTestSuite) TestCreateInstanceAccount() {
+ // we need to take an empty db for this...
+ testrig.StandardDBTeardown(suite.db)
+ // ...with tables created but no data
+ testrig.CreateTestTables(suite.db)
+
+ // make sure there's no instance account in the db yet
+ acct, err := suite.db.GetInstanceAccount(context.Background(), suite.config.Host)
+ suite.Error(err)
+ suite.Nil(acct)
+
+ // create it
+ err = suite.db.CreateInstanceAccount(context.Background())
+ suite.NoError(err)
+
+ // and now check it exists
+ acct, err = suite.db.GetInstanceAccount(context.Background(), suite.config.Host)
+ suite.NoError(err)
+ suite.NotNil(acct)
+}
+
+func TestAdminTestSuite(t *testing.T) {
+ suite.Run(t, new(AdminTestSuite))
+}