(t *testing.T)
| 26 | ) |
| 27 | |
| 28 | func 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) |
nothing calls this directly
no test coverage detected