(t *testing.T)
| 249 | } |
| 250 | |
| 251 | func TestAccessQuery(t *testing.T) { |
| 252 | |
| 253 | if base.TestsDisableGSI() { |
| 254 | t.Skip("This test is Couchbase Server and UseViews=false only") |
| 255 | } |
| 256 | |
| 257 | db, ctx := setupTestDB(t) |
| 258 | defer db.Close(ctx) |
| 259 | collection, ctx := GetSingleDatabaseCollectionWithUser(ctx, t, db) |
| 260 | |
| 261 | collection.ChannelMapper = channels.NewChannelMapper(ctx, |
| 262 | `function(doc, oldDoc) { |
| 263 | access(doc.accessUser, doc.accessChannel) |
| 264 | }`, |
| 265 | db.Options.JavascriptTimeout) |
| 266 | // Add docs with access grants assignment |
| 267 | for i := 1; i <= 5; i++ { |
| 268 | _, _, err := collection.Put(ctx, fmt.Sprintf("accessTest%d", i), Body{"accessUser": "user1", "accessChannel": fmt.Sprintf("channel%d", i)}) |
| 269 | assert.NoError(t, err, "Put accessTest doc") |
| 270 | } |
| 271 | |
| 272 | // Standard query |
| 273 | username := "user1" |
| 274 | results, queryErr := collection.QueryAccess(base.TestCtx(t), username) |
| 275 | assert.NoError(t, queryErr, "Query error") |
| 276 | var row map[string]interface{} |
| 277 | rowCount := 0 |
| 278 | for results.Next(ctx, &row) { |
| 279 | rowCount++ |
| 280 | } |
| 281 | assert.Equal(t, 5, rowCount) |
| 282 | assert.NoError(t, results.Close()) |
| 283 | |
| 284 | // Attempt to introduce syntax errors. Each of these should return zero rows and no error. |
| 285 | // Validates select clause protection |
| 286 | usernames := []string{"user1'", "user1?", "user1 ! user2$"} |
| 287 | // usernames = append(usernames, "user1`AND") // TODO: MB-50619 - broken until Server 7.1.0 |
| 288 | for _, username := range usernames { |
| 289 | results, queryErr = collection.QueryAccess(base.TestCtx(t), username) |
| 290 | assert.NoError(t, queryErr, "Query error") |
| 291 | rowCount = 0 |
| 292 | for results.Next(ctx, &row) { |
| 293 | rowCount++ |
| 294 | } |
| 295 | assert.Equal(t, 0, rowCount) |
| 296 | assert.NoError(t, results.Close()) |
| 297 | } |
| 298 | } |
| 299 | |
| 300 | func TestRoleAccessQuery(t *testing.T) { |
| 301 | db, ctx := setupTestDB(t) |
nothing calls this directly
no test coverage detected