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

Function testUserFunctionsCommon

db/functions/function_test.go:195–251  ·  view source on GitHub ↗

User function tests that work the same for admin and non-admin user:

(t *testing.T, ctx context.Context, db *db.Database)

Source from the content-addressed store, hash-verified

193
194// User function tests that work the same for admin and non-admin user:
195func testUserFunctionsCommon(t *testing.T, ctx context.Context, db *db.Database) {
196 // Basic call passing a parameter:
197 result, err := db.CallUserFunction(ctx, "square", map[string]any{"numero": 42}, true)
198 assert.NoError(t, err)
199 assert.EqualValues(t, 42*42, result)
200
201 // Function that calls a function:
202 result, err = db.CallUserFunction(ctx, "call_fn", nil, true)
203 assert.NoError(t, err)
204 assert.EqualValues(t, 7*7, result)
205
206 // `requireUser` test that passes:
207 result, err = db.CallUserFunction(ctx, "alice_only", nil, true)
208 assert.NoError(t, err)
209 assert.EqualValues(t, "OK", result)
210
211 // `requireChannel` test that passes:
212 result, err = db.CallUserFunction(ctx, "wonderland_only", nil, true)
213 assert.NoError(t, err)
214 assert.EqualValues(t, "OK", result)
215
216 // `requireRole` test that passes:
217 result, err = db.CallUserFunction(ctx, "hero_only", nil, true)
218 assert.NoError(t, err)
219 assert.EqualValues(t, "OK", result)
220
221 // Max call depth:
222 result, err = db.CallUserFunction(ctx, "factorial", map[string]any{"n": 20}, true)
223 assert.NoError(t, err)
224 assert.EqualValues(t, 2.43290200817664e+18, result)
225
226 // ERRORS:
227
228 // Missing a parameter:
229 _, err = db.CallUserFunction(ctx, "square", nil, true)
230 assertHTTPError(t, err, 400)
231 assert.ErrorContains(t, err, "numero")
232 assert.ErrorContains(t, err, "square")
233
234 // Extra parameter:
235 _, err = db.CallUserFunction(ctx, "square", map[string]any{"numero": 42, "number": 0}, true)
236 assertHTTPError(t, err, 400)
237 assert.ErrorContains(t, err, "number")
238 assert.ErrorContains(t, err, "square")
239
240 // Function throws an exception:
241 _, err = db.CallUserFunction(ctx, "exceptional", nil, true)
242 assert.ErrorContains(t, err, "oops")
243 assert.ErrorContains(t, err, "exceptional")
244 jserr := err.(*jsError)
245 assert.NotNil(t, jserr)
246
247 // Call depth limit:
248 _, err = db.CallUserFunction(ctx, "factorial", map[string]any{"n": kUserFunctionMaxCallDepth + 1}, true)
249 assert.ErrorContains(t, err, "User function recursion too deep")
250 assert.ErrorContains(t, err, "factorial")
251}
252

Callers 2

testUserFunctionsAsAdminFunction · 0.70
testUserFunctionsAsUserFunction · 0.70

Calls 2

CallUserFunctionMethod · 0.80
assertHTTPErrorFunction · 0.70

Tested by

no test coverage detected