(t *testing.T)
| 181 | } |
| 182 | |
| 183 | func TestAllDocsQuery(t *testing.T) { |
| 184 | |
| 185 | db, ctx := setupTestDB(t) |
| 186 | defer db.Close(ctx) |
| 187 | collection, ctx := GetSingleDatabaseCollectionWithUser(ctx, t, db) |
| 188 | |
| 189 | // Add docs with channel assignment |
| 190 | for i := 1; i <= 10; i++ { |
| 191 | _, _, err := collection.Put(ctx, fmt.Sprintf("allDocsTest%d", i), Body{"channels": []string{"ABC"}}) |
| 192 | assert.NoError(t, err, "Put allDocsTest doc") |
| 193 | } |
| 194 | |
| 195 | // Standard query |
| 196 | startKey := "a" |
| 197 | endKey := "" |
| 198 | results, queryErr := collection.QueryAllDocs(base.TestCtx(t), startKey, endKey) |
| 199 | assert.NoError(t, queryErr, "Query error") |
| 200 | var row map[string]interface{} |
| 201 | rowCount := 0 |
| 202 | for results.Next(ctx, &row) { |
| 203 | t.Logf("row[%d]: %v", rowCount, row) |
| 204 | rowCount++ |
| 205 | } |
| 206 | assert.Equal(t, 10, rowCount) |
| 207 | assert.NoError(t, results.Close()) |
| 208 | |
| 209 | // Attempt to invalidate standard query |
| 210 | startKey = "a' AND 1=0\x00" |
| 211 | endKey = "" |
| 212 | results, queryErr = collection.QueryAllDocs(base.TestCtx(t), startKey, endKey) |
| 213 | assert.NoError(t, queryErr, "Query error") |
| 214 | rowCount = 0 |
| 215 | for results.Next(ctx, &row) { |
| 216 | t.Logf("row[%d]: %v", rowCount, row) |
| 217 | rowCount++ |
| 218 | } |
| 219 | assert.Equal(t, 10, rowCount) |
| 220 | assert.NoError(t, results.Close()) |
| 221 | |
| 222 | // Attempt to invalidate statement to add row to resultset |
| 223 | startKey = `a' UNION ALL SELECT TOSTRING(BASE64_DECODE("SW52YWxpZERhdGE=")) as id;` + "\x00" |
| 224 | endKey = "" |
| 225 | results, queryErr = collection.QueryAllDocs(base.TestCtx(t), startKey, endKey) |
| 226 | assert.NoError(t, queryErr, "Query error") |
| 227 | rowCount = 0 |
| 228 | for results.Next(ctx, &row) { |
| 229 | t.Logf("row[%d]: %v", rowCount, row) |
| 230 | assert.NotEqual(t, row["id"], "InvalidData") |
| 231 | rowCount++ |
| 232 | } |
| 233 | assert.Equal(t, 10, rowCount) |
| 234 | assert.NoError(t, results.Close()) |
| 235 | |
| 236 | // Attempt to create syntax error |
| 237 | startKey = `a'1` |
| 238 | endKey = "" |
| 239 | results, queryErr = collection.QueryAllDocs(base.TestCtx(t), startKey, endKey) |
| 240 | assert.NoError(t, queryErr, "Query error") |
nothing calls this directly
no test coverage detected