(t *testing.T)
| 298 | } |
| 299 | |
| 300 | func TestRoleAccessQuery(t *testing.T) { |
| 301 | db, ctx := setupTestDB(t) |
| 302 | defer db.Close(ctx) |
| 303 | collection, ctx := GetSingleDatabaseCollectionWithUser(ctx, t, db) |
| 304 | |
| 305 | collection.ChannelMapper = channels.NewChannelMapper(ctx, |
| 306 | `function(doc, oldDoc) { |
| 307 | role(doc.accessUser, "role:" + doc.accessChannel) |
| 308 | }`, db.Options.JavascriptTimeout) |
| 309 | // Add docs with access grants assignment |
| 310 | for i := 1; i <= 5; i++ { |
| 311 | _, _, err := collection.Put(ctx, fmt.Sprintf("accessTest%d", i), Body{"accessUser": "user1", "accessChannel": fmt.Sprintf("channel%d", i)}) |
| 312 | assert.NoError(t, err, "Put accessTest doc") |
| 313 | } |
| 314 | |
| 315 | // Standard query |
| 316 | username := "user1" |
| 317 | results, queryErr := collection.QueryRoleAccess(base.TestCtx(t), username) |
| 318 | assert.NoError(t, queryErr, "Query error") |
| 319 | var row map[string]interface{} |
| 320 | rowCount := 0 |
| 321 | for results.Next(ctx, &row) { |
| 322 | rowCount++ |
| 323 | } |
| 324 | assert.Equal(t, 5, rowCount) |
| 325 | assert.NoError(t, results.Close()) |
| 326 | |
| 327 | // Attempt to introduce syntax errors. Each of these should return zero rows and no error. |
| 328 | // Validates select clause protection |
| 329 | usernames := []string{"user1'", "user1?", "user1 ! user2$"} |
| 330 | // usernames = append(usernames, "user1`AND") // TODO: MB-50619 - broken until Server 7.1.0 |
| 331 | for _, username := range usernames { |
| 332 | results, queryErr = collection.QueryRoleAccess(base.TestCtx(t), username) |
| 333 | assert.NoError(t, queryErr, "Query error") |
| 334 | rowCount = 0 |
| 335 | for results.Next(ctx, &row) { |
| 336 | rowCount++ |
| 337 | } |
| 338 | assert.Equal(t, 0, rowCount) |
| 339 | assert.NoError(t, results.Close()) |
| 340 | } |
| 341 | } |
| 342 | |
| 343 | func countQueryResults(ctx context.Context, results sgbucket.QueryResultIterator) int { |
| 344 |
nothing calls this directly
no test coverage detected