You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-06 02:15:48 +03:00
* churn(test): use redislabs/client-libs-test for testing This switches our testing infrastructure from redis/redis-stack to redislabs/client-libs-test Docker image across all packages. This change also updates the default Docker version from 7.4.0-v1 to 8.0-M04-pre. * churn(test): verify CONFIG SET / GET compatibility with Redis 8 - Add tests for Redis 8 search configuration settings - Deprecate Redis Search CONFIG commands in favor of standard CONFIG - Test read-only config restrictions for Redis 8 * churn(test): handle Redis 8 coordinate precision in GEOPOS - Update GEOPOS tests to handle increased precision in Redis 8 (17 decimal places vs 14) - Add precision-aware coordinate comparison helper - Add comprehensive test suite for coordinate comparison function * test(search): adapt SUGGET tests for Redis 8 empty results - Update tests to expect empty array ([]) instead of null for SUGGET variants - Affects sugGet, sugGetWithPayloads, sugGetWithScores, and sugGetWithScoresWithPayloads * test(search): support Redis 8 INFO indexes_all field - Add indexes_all field introduced in Redis 8 to index definition test * refactor!(search): simplify PROFILE commands to return raw response - BREAKING CHANGE: FT.PROFILE now returns raw response, letting users implement their own parsing * test: improve version-specific test coverage - Add `testWithClientIfVersionWithinRange` method to run tests for specific Redis versions - Refactor TestUtils to handle version comparisons more accurately - Update test utilities across Redis modules to run tests against multiple versions, and not against latest only
310 lines
8.0 KiB
TypeScript
310 lines
8.0 KiB
TypeScript
import { strict as assert } from 'node:assert';
|
|
import testUtils, { GLOBAL } from '../test-utils';
|
|
import INFO, { InfoReply } from './INFO';
|
|
import { SCHEMA_FIELD_TYPE } from './CREATE';
|
|
import { parseArgs } from '@redis/client/lib/commands/generic-transformers';
|
|
|
|
describe('INFO', () => {
|
|
it('transformArguments', () => {
|
|
assert.deepEqual(
|
|
parseArgs(INFO, 'index'),
|
|
['FT.INFO', 'index']
|
|
);
|
|
});
|
|
|
|
testUtils.testWithClientIfVersionWithinRange([[8], 'LATEST'], 'client.ft.info', async client => {
|
|
|
|
await client.ft.create('index', {
|
|
field: SCHEMA_FIELD_TYPE.TEXT
|
|
});
|
|
const ret = await client.ft.info('index');
|
|
// effectively testing that stopwords_list is not in ret
|
|
assert.deepEqual(
|
|
ret,
|
|
{
|
|
index_name: 'index',
|
|
index_options: [],
|
|
index_definition: Object.create(null, {
|
|
|
|
indexes_all: {
|
|
value: 'false',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
|
|
default_score: {
|
|
value: '1',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
key_type: {
|
|
value: 'HASH',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
prefixes: {
|
|
value: [''],
|
|
configurable: true,
|
|
enumerable: true
|
|
}
|
|
}),
|
|
attributes: [Object.create(null, {
|
|
identifier: {
|
|
value: 'field',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
attribute: {
|
|
value: 'field',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
type: {
|
|
value: 'TEXT',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
WEIGHT: {
|
|
value: '1',
|
|
configurable: true,
|
|
enumerable: true
|
|
}
|
|
})],
|
|
num_docs: 0,
|
|
max_doc_id: 0,
|
|
num_terms: 0,
|
|
num_records: 0,
|
|
inverted_sz_mb: 0,
|
|
vector_index_sz_mb: 0,
|
|
total_inverted_index_blocks: 0,
|
|
offset_vectors_sz_mb: 0,
|
|
doc_table_size_mb: 0,
|
|
sortable_values_size_mb: 0,
|
|
key_table_size_mb: 0,
|
|
records_per_doc_avg: NaN,
|
|
bytes_per_record_avg: NaN,
|
|
cleaning: 0,
|
|
offsets_per_term_avg: NaN,
|
|
offset_bits_per_record_avg: NaN,
|
|
geoshapes_sz_mb: 0,
|
|
hash_indexing_failures: 0,
|
|
indexing: 0,
|
|
percent_indexed: 1,
|
|
number_of_uses: 1,
|
|
tag_overhead_sz_mb: 0,
|
|
text_overhead_sz_mb: 0,
|
|
total_index_memory_sz_mb: 0,
|
|
total_indexing_time: 0,
|
|
gc_stats: {
|
|
bytes_collected: 0,
|
|
total_ms_run: 0,
|
|
total_cycles: 0,
|
|
average_cycle_time_ms: NaN,
|
|
last_run_time_ms: 0,
|
|
gc_numeric_trees_missed: 0,
|
|
gc_blocks_denied: 0
|
|
},
|
|
cursor_stats: {
|
|
global_idle: 0,
|
|
global_total: 0,
|
|
index_capacity: 128,
|
|
index_total: 0
|
|
},
|
|
}
|
|
);
|
|
|
|
}, GLOBAL.SERVERS.OPEN);
|
|
|
|
testUtils.testWithClientIfVersionWithinRange([[7, 4, 2], [7, 4, 2]], 'client.ft.info', async client => {
|
|
|
|
await client.ft.create('index', {
|
|
field: SCHEMA_FIELD_TYPE.TEXT
|
|
});
|
|
const ret = await client.ft.info('index');
|
|
// effectively testing that stopwords_list is not in ret
|
|
assert.deepEqual(
|
|
ret,
|
|
{
|
|
index_name: 'index',
|
|
index_options: [],
|
|
index_definition: Object.create(null, {
|
|
default_score: {
|
|
value: '1',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
key_type: {
|
|
value: 'HASH',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
prefixes: {
|
|
value: [''],
|
|
configurable: true,
|
|
enumerable: true
|
|
}
|
|
}),
|
|
attributes: [Object.create(null, {
|
|
identifier: {
|
|
value: 'field',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
attribute: {
|
|
value: 'field',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
type: {
|
|
value: 'TEXT',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
WEIGHT: {
|
|
value: '1',
|
|
configurable: true,
|
|
enumerable: true
|
|
}
|
|
})],
|
|
num_docs: 0,
|
|
max_doc_id: 0,
|
|
num_terms: 0,
|
|
num_records: 0,
|
|
inverted_sz_mb: 0,
|
|
vector_index_sz_mb: 0,
|
|
total_inverted_index_blocks: 0,
|
|
offset_vectors_sz_mb: 0,
|
|
doc_table_size_mb: 0,
|
|
sortable_values_size_mb: 0,
|
|
key_table_size_mb: 0,
|
|
records_per_doc_avg: NaN,
|
|
bytes_per_record_avg: NaN,
|
|
cleaning: 0,
|
|
offsets_per_term_avg: NaN,
|
|
offset_bits_per_record_avg: NaN,
|
|
geoshapes_sz_mb: 0,
|
|
hash_indexing_failures: 0,
|
|
indexing: 0,
|
|
percent_indexed: 1,
|
|
number_of_uses: 1,
|
|
tag_overhead_sz_mb: 0,
|
|
text_overhead_sz_mb: 0,
|
|
total_index_memory_sz_mb: 0,
|
|
total_indexing_time: 0,
|
|
gc_stats: {
|
|
bytes_collected: 0,
|
|
total_ms_run: 0,
|
|
total_cycles: 0,
|
|
average_cycle_time_ms: NaN,
|
|
last_run_time_ms: 0,
|
|
gc_numeric_trees_missed: 0,
|
|
gc_blocks_denied: 0
|
|
},
|
|
cursor_stats: {
|
|
global_idle: 0,
|
|
global_total: 0,
|
|
index_capacity: 128,
|
|
index_total: 0
|
|
},
|
|
}
|
|
);
|
|
|
|
}, GLOBAL.SERVERS.OPEN);
|
|
|
|
testUtils.testWithClientIfVersionWithinRange([[7, 2, 0], [7, 2, 0]], 'client.ft.info', async client => {
|
|
|
|
await client.ft.create('index', {
|
|
field: SCHEMA_FIELD_TYPE.TEXT
|
|
});
|
|
const ret = await client.ft.info('index');
|
|
// effectively testing that stopwords_list is not in ret
|
|
assert.deepEqual(
|
|
ret,
|
|
{
|
|
index_name: 'index',
|
|
index_options: [],
|
|
index_definition: Object.create(null, {
|
|
default_score: {
|
|
value: '1',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
key_type: {
|
|
value: 'HASH',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
prefixes: {
|
|
value: [''],
|
|
configurable: true,
|
|
enumerable: true
|
|
}
|
|
}),
|
|
attributes: [Object.create(null, {
|
|
identifier: {
|
|
value: 'field',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
attribute: {
|
|
value: 'field',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
type: {
|
|
value: 'TEXT',
|
|
configurable: true,
|
|
enumerable: true
|
|
},
|
|
WEIGHT: {
|
|
value: '1',
|
|
configurable: true,
|
|
enumerable: true
|
|
}
|
|
})],
|
|
num_docs: "0",
|
|
max_doc_id: "0",
|
|
num_terms: "0",
|
|
num_records: "0",
|
|
inverted_sz_mb: 0,
|
|
vector_index_sz_mb: 0,
|
|
total_inverted_index_blocks: "0",
|
|
offset_vectors_sz_mb: 0,
|
|
doc_table_size_mb: 0,
|
|
sortable_values_size_mb: 0,
|
|
key_table_size_mb: 0,
|
|
records_per_doc_avg: NaN,
|
|
bytes_per_record_avg: NaN,
|
|
cleaning: 0,
|
|
offsets_per_term_avg: NaN,
|
|
offset_bits_per_record_avg: NaN,
|
|
geoshapes_sz_mb: 0,
|
|
hash_indexing_failures: "0",
|
|
indexing: "0",
|
|
percent_indexed: 1,
|
|
number_of_uses: 1,
|
|
tag_overhead_sz_mb: 0,
|
|
text_overhead_sz_mb: 0,
|
|
total_index_memory_sz_mb: 0,
|
|
total_indexing_time: 0,
|
|
gc_stats: {
|
|
bytes_collected: 0,
|
|
total_ms_run: 0,
|
|
total_cycles: 0,
|
|
average_cycle_time_ms: NaN,
|
|
last_run_time_ms: 0,
|
|
gc_numeric_trees_missed: 0,
|
|
gc_blocks_denied: 0
|
|
},
|
|
cursor_stats: {
|
|
global_idle: 0,
|
|
global_total: 0,
|
|
index_capacity: 128,
|
|
index_total: 0
|
|
},
|
|
}
|
|
);
|
|
|
|
}, GLOBAL.SERVERS.OPEN);
|
|
});
|