MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / TestRequestPlusSkippedSequence

Function TestRequestPlusSkippedSequence

rest/changes_request_plus_test.go:23–63  ·  view source on GitHub ↗

TestRequirePlusSkippedSequence makes sure that a final skipped sequence in a request_plus request will not hang the request

(t *testing.T)

Source from the content-addressed store, hash-verified

21
22// TestRequirePlusSkippedSequence makes sure that a final skipped sequence in a request_plus request will not hang the request
23func TestRequestPlusSkippedSequence(t *testing.T) {
24
25 defer db.SuspendSequenceBatching()()
26 restTesterConfig := RestTesterConfig{SyncFn: channels.DocChannelsSyncFunction}
27
28 // JWT claim based grants do not support named collections
29 rt := NewRestTester(t, &restTesterConfig)
30 defer rt.Close()
31
32 const (
33 username = "alice"
34 channel = "foo"
35 )
36 rt.CreateUser(username, []string{channel})
37
38 // add a single document for the user
39 resp := rt.SendAdminRequest(http.MethodPut, "/{{.keyspace}}/doc1", fmt.Sprintf(`{"channels":"%s"}`, channel))
40 RequireStatus(t, resp, http.StatusCreated)
41 docSeq := rt.GetDocumentSequence("doc1")
42
43 rt.WaitForPendingChanges()
44
45 // add an unused sequence
46 unusedSeq, err := db.AllocateTestSequence(rt.GetDatabase())
47 require.NoError(t, err)
48
49 caughtUpCount := rt.GetDatabase().DbStats.CBLReplicationPull().NumPullReplCaughtUp.Value()
50
51 requestFinished := make(chan struct{})
52 // make sure this request doesn't hang
53 go func() {
54 defer close(requestFinished)
55 changes := rt.GetChanges(fmt.Sprintf("/{{.keyspace}}/_changes?since=%d&request_plus=true", docSeq), username)
56 require.Len(t, changes.Results, 0)
57 }()
58 require.NoError(t, rt.GetDatabase().WaitForCaughtUp(caughtUpCount+1))
59 // the request should finish once the sequence is released
60 err = db.ReleaseTestSequence(base.TestCtx(t), rt.GetDatabase(), unusedSeq)
61 require.NoError(t, err)
62 <-requestFinished
63}

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
CreateUserMethod · 0.95
SendAdminRequestMethod · 0.95
GetDocumentSequenceMethod · 0.95
WaitForPendingChangesMethod · 0.95
GetDatabaseMethod · 0.95
GetChangesMethod · 0.95
SuspendSequenceBatchingFunction · 0.92
AllocateTestSequenceFunction · 0.92
ReleaseTestSequenceFunction · 0.92
TestCtxFunction · 0.92
NewRestTesterFunction · 0.85

Tested by

no test coverage detected