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

Function TestReadChangesOptionsFromJSON

rest/changes_test.go:28–86  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

26)
27
28func TestReadChangesOptionsFromJSON(t *testing.T) {
29
30 ctx := base.TestCtx(t)
31 h := &handler{}
32 h.server = NewServerContext(ctx, &StartupConfig{}, false)
33 defer h.server.Close(ctx)
34
35 // Basic case, no heartbeat, no timeout
36 optStr := `{"feed":"longpoll", "since": "123456:78", "limit":123, "style": "all_docs",
37 "include_docs": true, "filter": "Melitta", "channels": "ABC,BBC"}`
38 feed, options, filter, channelsArray, _, _, err := h.readChangesOptionsFromJSON([]byte(optStr))
39 assert.NoError(t, err)
40 assert.Equal(t, "longpoll", feed)
41
42 assert.Equal(t, uint64(78), options.Since.Seq)
43 assert.Equal(t, uint64(123456), options.Since.TriggeredBy)
44 assert.Equal(t, 123, options.Limit)
45 assert.Equal(t, true, options.Conflicts)
46 assert.Equal(t, true, options.IncludeDocs)
47 assert.Equal(t, uint64(kDefaultHeartbeatMS), options.HeartbeatMs)
48 assert.Equal(t, uint64(kDefaultTimeoutMS), options.TimeoutMs)
49
50 assert.Equal(t, "Melitta", filter)
51 assert.Equal(t, []string{"ABC", "BBC"}, channelsArray)
52
53 // Attempt to set heartbeat, timeout to valid values
54 optStr = `{"feed":"longpoll", "since": "1", "heartbeat":30000, "timeout":60000}`
55 _, options, _, _, _, _, err = h.readChangesOptionsFromJSON([]byte(optStr))
56 assert.NoError(t, err)
57 assert.Equal(t, uint64(30000), options.HeartbeatMs)
58 assert.Equal(t, uint64(60000), options.TimeoutMs)
59
60 // Attempt to set valid timeout, no heartbeat
61 optStr = `{"feed":"longpoll", "since": "1", "timeout":2000}`
62 _, options, _, _, _, _, err = h.readChangesOptionsFromJSON([]byte(optStr))
63 assert.NoError(t, err)
64 assert.Equal(t, uint64(2000), options.TimeoutMs)
65
66 // Disable heartbeat, timeout by explicitly setting to zero
67 optStr = `{"feed":"longpoll", "since": "1", "heartbeat":0, "timeout":0}`
68 _, options, _, _, _, _, err = h.readChangesOptionsFromJSON([]byte(optStr))
69 assert.NoError(t, err)
70 assert.Equal(t, uint64(0), options.HeartbeatMs)
71 assert.Equal(t, uint64(0), options.TimeoutMs)
72
73 // Attempt to set heartbeat less than minimum heartbeat, timeout greater than max timeout
74 optStr = `{"feed":"longpoll", "since": "1", "heartbeat":1000, "timeout":1000000}`
75 _, options, _, _, _, _, err = h.readChangesOptionsFromJSON([]byte(optStr))
76 assert.NoError(t, err)
77 assert.Equal(t, uint64(kMinHeartbeatMS), options.HeartbeatMs)
78 assert.Equal(t, uint64(kMaxTimeoutMS), options.TimeoutMs)
79
80 // Set max heartbeat in server context, attempt to set heartbeat greater than max
81 h.server.Config.Replicator.MaxHeartbeat = base.NewConfigDuration(time.Minute)
82 optStr = `{"feed":"longpoll", "since": "1", "heartbeat":90000}`
83 _, options, _, _, _, _, err = h.readChangesOptionsFromJSON([]byte(optStr))
84 assert.NoError(t, err)
85 assert.Equal(t, uint64(60000), options.HeartbeatMs)

Callers

nothing calls this directly

Calls 6

TestCtxFunction · 0.92
NewConfigDurationFunction · 0.92
NewServerContextFunction · 0.85
CloseMethod · 0.65
EqualMethod · 0.45

Tested by

no test coverage detected