func NewSecretUIProtocol(g *libkb.GlobalContext) rpc.Protocol { return keybase1.SecretUiProtocol(&SecretUIServer{g.UI.GetSecretUI()}) }
func TestSecretUI(t *testing.T) { tc := setupTest(t, "secret_ui") tc1 := cloneContext(tc) tc2 := cloneContext(tc) // Make sure we're not using G anywhere in our tests. libkb.G.LocalDb = nil defer tc.Cleanup() stopCh := make(chan error) svc := service.NewService(tc.G, false) startCh := svc.GetStartChannel() go func() { err := svc.Run() if err != nil { t.Logf("Running the service produced an error: %v", err) } stopCh <- err }() // Wait for the server to start up <-startCh var err error check := func() { if err != nil { t.Fatal(err) } } sui := newSecretUI() cli, xp, err := client.GetRPCClientWithContext(tc2.G) check() srv := rpc.NewServer(xp, nil) err = srv.Register(keybase1.SecretUiProtocol(sui)) check() ncli := keybase1.DelegateUiCtlClient{Cli: cli} err = ncli.RegisterSecretUI(context.TODO()) check() // run login command loginCmdUI := &loginCmdUI{ Contextified: libkb.NewContextified(tc2.G), } tc2.G.SetUI(loginCmdUI) cmd := client.NewCmdLoginRunner(tc2.G) err = cmd.Run() if err == nil { t.Fatal("login worked, when it should have failed") } // check that delegate ui was called: if !sui.getKeybasePassphrase { t.Logf("secret ui: %+v", sui) t.Error("delegate secret UI GetKeybasePassphrase was not called during login cmd") } stopper := client.NewCmdCtlStopRunner(tc1.G) if err := stopper.Run(); err != nil { t.Errorf("Error in stopping service: %v", err) } // If the server failed, it's also an error err = <-stopCh check() }