Beispiel #1
0
func TestDeleteTimer(t *testing.T) {
	st := store.New()
	timer := New(testPattern, OneMillisecond, st)
	defer timer.Close()

	never := "/timer/never/ticks"
	does := "/timer/does/tick"

	// Wait one minute to ensure it doesn't tick before
	// the following delete and assert.
	st.Ops <- store.Op{1, encodeTimer(never, 30*OneMillisecond)}

	st.Ops <- store.Op{2, encodeTimer(does, 60*OneMillisecond)}

	st.Ops <- store.Op{3, store.MustEncodeDel(never, store.Clobber)}

	// If the first timer failed to delete, it would come out first.
	assert.Equal(t, does, (<-timer.C).Path) // From seqn 2
}
Beispiel #2
0
func TestLockSimple(t *testing.T) {
	st := store.New()
	defer close(st.Ops)
	fp := &test.FakeProposer{Store: st}
	go Clean(fp.Store, fp)

	// start our session
	fp.Propose(store.MustEncodeSet("/session/a", "1.2.3.4:55", store.Clobber))

	// lock something for a
	fp.Propose(store.MustEncodeSet("/lock/x", "a", store.Missing))
	fp.Propose(store.MustEncodeSet("/lock/y", "b", store.Missing))
	fp.Propose(store.MustEncodeSet("/lock/z", "a", store.Missing))

	// watch the locks to be deleted
	ch := fp.Watch("/lock/*")

	// end the session
	fp.Propose(store.MustEncodeDel("/session/a", store.Clobber))

	// now that the session has ended, check all locks it owned are released
	assert.Equal(t, "/lock/x", (<-ch).Path)
	assert.Equal(t, "/lock/z", (<-ch).Path)
}
Beispiel #3
0
func TestMemberSimple(t *testing.T) {
	st := store.New()
	defer close(st.Ops)
	fp := &test.FakeProposer{Store: st}
	go Clean(fp.Store, fp)

	// start our session
	fp.Propose(store.MustEncodeSet("/session/a", "foo", store.Missing))

	keys := map[string]string{
		"/doozer/slot/0":    "a",
		"/doozer/members/a": "addr",
		"/doozer/info/a/x":  "a",
		"/doozer/info/a/y":  "b",
	}

	// join the cluster
	for k, p := range keys {
		fp.Propose(store.MustEncodeSet(k, p, store.Missing))
	}

	// watch the keys to be deleted
	ch := fp.Watch("/doozer/**")

	// end the session
	fp.Propose(store.MustEncodeDel("/session/a", store.Clobber))

	// now that the session has ended, check its membership is cleaned up
	for i := 0; i < len(keys); i++ {
		ev := <-ch
		_, ok := keys[ev.Path]
		keys[ev.Path] = "", false
		assert.T(t, ok)
		assert.Equal(t, "", ev.Body)
	}
}