sql: adds tests for InTransaction
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package sqlstore
|
package sqlstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/grafana/grafana/pkg/bus"
|
"github.com/grafana/grafana/pkg/bus"
|
||||||
@@ -11,7 +12,7 @@ func init() {
|
|||||||
bus.AddHandler("sql", GetApiKeys)
|
bus.AddHandler("sql", GetApiKeys)
|
||||||
bus.AddHandler("sql", GetApiKeyById)
|
bus.AddHandler("sql", GetApiKeyById)
|
||||||
bus.AddHandler("sql", GetApiKeyByName)
|
bus.AddHandler("sql", GetApiKeyByName)
|
||||||
bus.AddHandler("sql", DeleteApiKey)
|
bus.AddHandlerCtx("sql", DeleteApiKeyCtx)
|
||||||
bus.AddHandler("sql", AddApiKey)
|
bus.AddHandler("sql", AddApiKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,8 +23,8 @@ func GetApiKeys(query *m.GetApiKeysQuery) error {
|
|||||||
return sess.Find(&query.Result)
|
return sess.Find(&query.Result)
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeleteApiKey(cmd *m.DeleteApiKeyCommand) error {
|
func DeleteApiKeyCtx(ctx context.Context, cmd *m.DeleteApiKeyCommand) error {
|
||||||
return inTransaction(func(sess *DBSession) error {
|
return withDbSession(ctx, func(sess *DBSession) error {
|
||||||
var rawSql = "DELETE FROM api_key WHERE id=? and org_id=?"
|
var rawSql = "DELETE FROM api_key WHERE id=? and org_id=?"
|
||||||
_, err := sess.Exec(rawSql, cmd.Id, cmd.OrgId)
|
_, err := sess.Exec(rawSql, cmd.Id, cmd.OrgId)
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -250,6 +250,7 @@ func (ss *SqlStore) readConfig() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func InitTestDB(t *testing.T) *SqlStore {
|
func InitTestDB(t *testing.T) *SqlStore {
|
||||||
|
t.Helper()
|
||||||
sqlstore := &SqlStore{}
|
sqlstore := &SqlStore{}
|
||||||
sqlstore.skipEnsureAdmin = true
|
sqlstore.skipEnsureAdmin = true
|
||||||
sqlstore.Bus = bus.New()
|
sqlstore.Bus = bus.New()
|
||||||
|
|||||||
@@ -0,0 +1,64 @@
|
|||||||
|
package sqlstore
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/grafana/grafana/pkg/log"
|
||||||
|
"github.com/grafana/grafana/pkg/models"
|
||||||
|
|
||||||
|
. "github.com/smartystreets/goconvey/convey"
|
||||||
|
)
|
||||||
|
|
||||||
|
type testQuery struct {
|
||||||
|
result bool
|
||||||
|
}
|
||||||
|
|
||||||
|
var ProvokedError = errors.New("testing error.")
|
||||||
|
|
||||||
|
func TestTransaction(t *testing.T) {
|
||||||
|
InitTestDB(t)
|
||||||
|
|
||||||
|
Convey("InTransaction asdf asdf", t, func() {
|
||||||
|
ss := SqlStore{log: log.New("test-logger")}
|
||||||
|
|
||||||
|
cmd := &models.AddApiKeyCommand{Key: "secret-key", Name: "key", OrgId: 1}
|
||||||
|
|
||||||
|
err := AddApiKey(cmd)
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
|
||||||
|
deleteApiKeyCmd := &models.DeleteApiKeyCommand{Id: cmd.Result.Id, OrgId: 1}
|
||||||
|
|
||||||
|
Convey("can update key", func() {
|
||||||
|
err := ss.InTransaction(context.Background(), func(ctx context.Context) error {
|
||||||
|
return DeleteApiKeyCtx(ctx, deleteApiKeyCmd)
|
||||||
|
})
|
||||||
|
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
|
||||||
|
query := &models.GetApiKeyByIdQuery{ApiKeyId: cmd.Result.Id}
|
||||||
|
err = GetApiKeyById(query)
|
||||||
|
So(err, ShouldEqual, models.ErrInvalidApiKey)
|
||||||
|
})
|
||||||
|
|
||||||
|
Convey("wont update if one handler fails", func() {
|
||||||
|
err := ss.InTransaction(context.Background(), func(ctx context.Context) error {
|
||||||
|
err := DeleteApiKeyCtx(ctx, deleteApiKeyCmd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return ProvokedError
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
So(err, ShouldEqual, ProvokedError)
|
||||||
|
|
||||||
|
query := &models.GetApiKeyByIdQuery{ApiKeyId: cmd.Result.Id}
|
||||||
|
err = GetApiKeyById(query)
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
So(query.Result.Id, ShouldEqual, cmd.Result.Id)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user