73 lines
2.2 KiB
Go
73 lines
2.2 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
"testing"
|
|
|
|
"git.julianfamily.org/keepassgo/internal/passwords"
|
|
"git.julianfamily.org/keepassgo/internal/session"
|
|
"git.julianfamily.org/keepassgo/internal/vault"
|
|
keepassgov1 "git.julianfamily.org/keepassgo/proto/keepassgo/v1"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/credentials/insecure"
|
|
)
|
|
|
|
func TestStartHostServesVaultLifecycleAndSyncsSessionState(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
lifecycle := &session.Manager{}
|
|
if err := lifecycle.Create(vault.Model{
|
|
Entries: []vault.Entry{
|
|
testAPITokenEntry(t),
|
|
{ID: "entry-1", Title: "Vault Console", Path: []string{"Root", "Internet"}},
|
|
},
|
|
}, vault.MasterKey{Password: "correct horse battery staple"}); err != nil {
|
|
t.Fatalf("Create() error = %v", err)
|
|
}
|
|
|
|
host, err := StartHost("127.0.0.1:0", lifecycle, passwords.DefaultProfiles(), nil, func() bool { return true })
|
|
if err != nil {
|
|
t.Fatalf("StartHost() error = %v", err)
|
|
}
|
|
defer func() { _ = host.Stop() }()
|
|
|
|
conn, err := grpc.NewClient("passthrough:///"+host.Address(),
|
|
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
|
grpc.WithContextDialer(func(context.Context, string) (net.Conn, error) {
|
|
return net.Dial("tcp", host.Address())
|
|
}),
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("grpc.NewClient() error = %v", err)
|
|
}
|
|
defer func() { _ = conn.Close() }()
|
|
|
|
client := keepassgov1.NewVaultServiceClient(conn)
|
|
statusResp, err := client.GetSessionStatus(tokenContext(defaultTestTokenSecret), &keepassgov1.GetSessionStatusRequest{})
|
|
if err != nil {
|
|
t.Fatalf("GetSessionStatus() error = %v", err)
|
|
}
|
|
if statusResp.Locked {
|
|
t.Fatal("GetSessionStatus().Locked = true, want false")
|
|
}
|
|
if !statusResp.Dirty {
|
|
t.Fatal("GetSessionStatus().Dirty = false, want true from dirty provider")
|
|
}
|
|
|
|
if err := lifecycle.Lock(); err != nil {
|
|
t.Fatalf("Lock() error = %v", err)
|
|
}
|
|
if err := host.SyncFromLifecycle(); err != nil {
|
|
t.Fatalf("SyncFromLifecycle() after lock error = %v", err)
|
|
}
|
|
|
|
statusResp, err = client.GetSessionStatus(tokenContext(defaultTestTokenSecret), &keepassgov1.GetSessionStatusRequest{})
|
|
if err != nil {
|
|
t.Fatalf("GetSessionStatus() after lock error = %v", err)
|
|
}
|
|
if !statusResp.Locked {
|
|
t.Fatal("GetSessionStatus().Locked = false, want true after lifecycle lock")
|
|
}
|
|
}
|