53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package gitrpc
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"connectrpc.com/connect"
|
|
|
|
"simplegit/common"
|
|
v1 "simplegit/gitrpc/v1"
|
|
"simplegit/state"
|
|
statectrl "simplegit/state/ctrl"
|
|
)
|
|
|
|
func TestCtrlListsReposAndRejectsInvalidCalls(t *testing.T) {
|
|
cfg := &common.Config{Root: t.TempDir(), DBUri: "sqlite://state.db"}
|
|
if err := cfg.Prepare(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
store, err := state.Open(cfg)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Cleanup(func() { _ = store.Engine().Close() })
|
|
if err := store.UpsertRepo("acme", "demo", true); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
server := NewServer(cfg, store)
|
|
resp, err := server.Ctrl(context.Background(), connect.NewRequest(&v1.CtrlRequest{Op: statectrl.OpListRepos}))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
var repos []statectrl.RepoRow
|
|
if err := json.Unmarshal(resp.Msg.Result, &repos); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(repos) != 1 || repos[0].Ns != "acme" || repos[0].Name != "demo" || !repos[0].IsPrivate {
|
|
t.Fatalf("unexpected repos: %+v", repos)
|
|
}
|
|
|
|
for _, req := range []*v1.CtrlRequest{
|
|
{Op: "sql", Args: []string{"DROP TABLE repo"}},
|
|
{Op: statectrl.OpGrantsForRepo, Args: []string{"missing-name"}},
|
|
} {
|
|
_, err := server.Ctrl(context.Background(), connect.NewRequest(req))
|
|
if connect.CodeOf(err) != connect.CodeInvalidArgument {
|
|
t.Fatalf("Ctrl(%q) code = %s, want invalid_argument: %v", req.Op, connect.CodeOf(err), err)
|
|
}
|
|
}
|
|
}
|