func (*suite) TestRendezvousWaitBeforeDone(c *gc.C) { m := meeting.New() id, err := m.NewRendezvous([]byte("first data")) c.Assert(err, gc.IsNil) c.Assert(id, gc.Not(gc.Equals), "") waitDone := make(chan struct{}) go func() { data0, data1, err := m.Wait(id) c.Check(err, gc.IsNil) c.Check(string(data0), gc.Equals, "first data") c.Check(string(data1), gc.Equals, "second data") close(waitDone) }() time.Sleep(10 * time.Millisecond) err = m.Done(id, []byte("second data")) c.Assert(err, gc.IsNil) select { case <-waitDone: case <-time.After(2 * time.Second): c.Errorf("timed out waiting for rendezvous") } // Check that item has now been deleted. data0, data1, err := m.Wait(id) c.Assert(data0, gc.IsNil) c.Assert(data1, gc.IsNil) c.Assert(err, gc.ErrorMatches, `rendezvous ".*" not found`) }
// New returns a new handler that services an identity-providing // service. This acts as a login service and can discharge third-party caveats // for users. func New(p Params) (http.Handler, error) { svc, err := bakery.NewService(p.Service) if err != nil { return nil, err } h := &handler{ svc: svc, users: p.Users, place: &place{meeting.New()}, } mux := http.NewServeMux() httpbakery.AddDischargeHandler(mux, "/", svc, h.checkThirdPartyCaveat) mux.Handle("/user/", mkHandler(handleJSON(h.userHandler))) mux.HandleFunc("/login", h.loginHandler) mux.Handle("/question", mkHandler(handleJSON(h.questionHandler))) mux.Handle("/wait", mkHandler(handleJSON(h.waitHandler))) mux.HandleFunc("/loginattempt", h.loginAttemptHandler) return mux, nil }
func (*suite) TestRendezvousDoneBeforeWait(c *gc.C) { m := meeting.New() id, err := m.NewRendezvous([]byte("first data")) c.Assert(err, gc.IsNil) c.Assert(id, gc.Not(gc.Equals), "") err = m.Done(id, []byte("second data")) c.Assert(err, gc.IsNil) err = m.Done(id, []byte("other second data")) c.Assert(err, gc.ErrorMatches, `rendezvous ".*" done twice`) data0, data1, err := m.Wait(id) c.Assert(err, gc.IsNil) c.Assert(string(data0), gc.Equals, "first data") c.Assert(string(data1), gc.Equals, "second data") // Check that item has now been deleted. data0, data1, err = m.Wait(id) c.Assert(data0, gc.IsNil) c.Assert(data1, gc.IsNil) c.Assert(err, gc.ErrorMatches, `rendezvous ".*" not found`) }