Skip to content

Commit 412309a

Browse files
committed
fix: correct Module struct field types for crdb and dependencies
The fixture tests revealed that crdb and dependencies fields were incorrectly typed. The API returns empty objects {} when these features are not used, not boolean/array values. Changes: - crdb: Option<bool> → Option<Value> (handles {} empty objects) - dependencies: Option<Vec<Value>> → Option<Value> (handles {} empty objects) All 8 fixture validation tests now pass (previously 7/8 with 1 ignored). This fix was discovered by the fixture-based testing approach - exactly the type of bug it's designed to catch.
1 parent c2aae7b commit 412309a

File tree

9 files changed

+24
-17
lines changed

9 files changed

+24
-17
lines changed

crates/redis-enterprise/src/modules.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,13 @@ pub struct Module {
3838
/// Redis command used to configure this module
3939
pub config_command: Option<String>,
4040

41-
/// Whether the module supports CRDB (Conflict-free Replicated Database)
42-
pub crdb: Option<bool>,
41+
/// CRDB (Conflict-free Replicated Database) configuration
42+
/// The API returns an empty object {} for modules without CRDB support
43+
pub crdb: Option<Value>,
4344

44-
/// List of other modules this module depends on
45-
pub dependencies: Option<Vec<Value>>,
45+
/// Module dependencies
46+
/// The API returns an empty object {} for modules without dependencies
47+
pub dependencies: Option<Value>,
4648

4749
/// Contact email address of the module author
4850
pub email: Option<String>,

crates/redis-enterprise/tests/fixture_validation_tests.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
//! These tests use real API responses captured from a Redis Enterprise cluster
44
//! to validate that our Rust type definitions accurately match the actual API.
55
//!
6-
//! ## Known Issues Found
6+
//! ## Fixed Issues
77
//!
8-
//! - Module struct has type mismatch: bigstore_version_2_support should be bool, not map
8+
//! - Module struct had type mismatches: crdb and dependencies were incorrectly typed
9+
//! They should be Option<Value> to handle empty objects {} from API
910
10-
use redis_enterprise::{ClusterInfo, Database, License, Node, User};
11+
use redis_enterprise::{ClusterInfo, Database, License, Module, Node, User};
1112
use serde_json::Value;
1213

1314
#[test]
@@ -48,12 +49,16 @@ fn test_users_list_from_fixture() {
4849
}
4950

5051
#[test]
51-
#[ignore = "Known type mismatch - bigstore_version_2_support should be bool not map"]
5252
fn test_modules_list_from_fixture() {
5353
let fixture = include_str!("fixtures/modules_list.json");
54-
// This will fail until Module struct is fixed
55-
let _modules: Vec<serde_json::Value> =
54+
let modules: Vec<Module> =
5655
serde_json::from_str(fixture).expect("Failed to deserialize modules list");
56+
57+
assert!(!modules.is_empty(), "Should have modules");
58+
59+
let module = &modules[0];
60+
assert!(!module.uid.is_empty(), "Module should have UID");
61+
assert!(module.module_name.is_some(), "Module should have name");
5762
}
5863

5964
#[test]

crates/redis-enterprise/tests/fixtures/bdbs_stats.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"bootstrap_status":{"end_time":"2025-10-14T00:01:22Z","start_time":"2025-10-14T00:01:06Z","state":"completed"},"local_node_info":{"architecture":"aarch64","available_addresses":[{"address":"192.168.16.2","format":"ipv4","if_name":"eth0","private":true}],"bigredis_storage_path":"/var/opt/redislabs/flash","bridge_interfaces":[],"cnm_version_sha":"0a10f782e6842207e291da7e26893a62dc085170","cores":14,"ephemeral_storage_path":"/var/opt/redislabs/tmp","ephemeral_storage_size":1081100128256.0,"fips_enabled":false,"os_family":"ubuntu","os_name":"ubuntu","os_semantic_version":"22.04","os_version":"Ubuntu 22.04.5 LTS","persistent_storage_path":"/var/opt/redislabs/persist","persistent_storage_size":1081100128256.0,"short_hostname":"f3256ead51ab","software_version":"100.0.21-16135","supported_bigstore_drivers":["rocksdb"],"supported_database_versions":[{"db_type":"redis","major":true,"redis_version":"7.4","version":"7.4.2"},{"db_type":"redis","major":true,"redis_version":"7.2","version":"7.2.7"},{"db_type":"redis","major":true,"redis_version":"6.2","version":"6.2.13"},{"db_type":"memcached","version":"1.4.17"},{"db_type":"redis","major":true,"redis_version":"8.0","version":"8.0.0"}],"total_memory":8217473024,"uid":"1","uptime":89}}
1+
{"bootstrap_status":{"end_time":"2025-10-14T00:01:22Z","start_time":"2025-10-14T00:01:06Z","state":"completed"},"local_node_info":{"architecture":"aarch64","available_addresses":[{"address":"192.168.16.2","format":"ipv4","if_name":"eth0","private":true}],"bigredis_storage_path":"/var/opt/redislabs/flash","bridge_interfaces":[],"cnm_version_sha":"0a10f782e6842207e291da7e26893a62dc085170","cores":14,"ephemeral_storage_path":"/var/opt/redislabs/tmp","ephemeral_storage_size":1081100128256.0,"fips_enabled":false,"os_family":"ubuntu","os_name":"ubuntu","os_semantic_version":"22.04","os_version":"Ubuntu 22.04.5 LTS","persistent_storage_path":"/var/opt/redislabs/persist","persistent_storage_size":1081100128256.0,"short_hostname":"f3256ead51ab","software_version":"100.0.21-16135","supported_bigstore_drivers":["rocksdb"],"supported_database_versions":[{"db_type":"redis","major":true,"redis_version":"7.4","version":"7.4.2"},{"db_type":"redis","major":true,"redis_version":"7.2","version":"7.2.7"},{"db_type":"redis","major":true,"redis_version":"6.2","version":"6.2.13"},{"db_type":"memcached","version":"1.4.17"},{"db_type":"redis","major":true,"redis_version":"8.0","version":"8.0.0"}],"total_memory":8217473024,"uid":"1","uptime":413}}

crates/redis-enterprise/tests/fixtures/cluster_stats.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"accept_servers":true,"addr":"192.168.16.2","architecture":"aarch64","bigredis_storage_path":"/var/opt/redislabs/flash","bigstore_enabled":false,"cores":14,"ephemeral_storage_path":"/var/opt/redislabs/tmp","ephemeral_storage_size":1081100128256.0,"external_addr":[],"fips_enabled":false,"flash_shard_count":0,"max_listeners":100,"max_redis_forks":-1,"max_redis_servers":100,"max_slave_full_syncs":-1,"os_family":"ubuntu","os_name":"ubuntu","os_semantic_version":"22.04","os_version":"Ubuntu 22.04.5 LTS","persistent_storage_path":"/var/opt/redislabs/persist","persistent_storage_size":1081100128256.0,"rack_id":"","ram_shard_count":1,"second_rack_id":"","shard_count":1,"shard_list":[1],"software_version":"100.0.21-16135","status":"active","supported_database_versions":[{"db_type":"redis","major":true,"redis_version":"7.4","version":"7.4.2"},{"db_type":"redis","major":true,"redis_version":"7.2","version":"7.2.7"},{"db_type":"redis","major":true,"redis_version":"6.2","version":"6.2.13"},{"db_type":"memcached","version":"1.4.17"},{"db_type":"redis","major":true,"redis_version":"8.0","version":"8.0.0"}],"total_memory":8217473024,"uid":1,"uptime":88,"use_internal_ipv6":false}
1+
{"accept_servers":true,"addr":"192.168.16.2","architecture":"aarch64","bigredis_storage_path":"/var/opt/redislabs/flash","bigstore_enabled":false,"cores":14,"ephemeral_storage_path":"/var/opt/redislabs/tmp","ephemeral_storage_size":1081100128256.0,"external_addr":[],"fips_enabled":false,"flash_shard_count":0,"max_listeners":100,"max_redis_forks":-1,"max_redis_servers":100,"max_slave_full_syncs":-1,"os_family":"ubuntu","os_name":"ubuntu","os_semantic_version":"22.04","os_version":"Ubuntu 22.04.5 LTS","persistent_storage_path":"/var/opt/redislabs/persist","persistent_storage_size":1081100128256.0,"rack_id":"","ram_shard_count":1,"second_rack_id":"","shard_count":1,"shard_list":[1],"software_version":"100.0.21-16135","status":"active","supported_database_versions":[{"db_type":"redis","major":true,"redis_version":"7.4","version":"7.4.2"},{"db_type":"redis","major":true,"redis_version":"7.2","version":"7.2.7"},{"db_type":"redis","major":true,"redis_version":"6.2","version":"6.2.13"},{"db_type":"memcached","version":"1.4.17"},{"db_type":"redis","major":true,"redis_version":"8.0","version":"8.0.0"}],"total_memory":8217473024,"uid":1,"uptime":412,"use_internal_ipv6":false}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"accept_servers":true,"addr":"192.168.16.2","architecture":"aarch64","bigredis_storage_path":"/var/opt/redislabs/flash","bigstore_enabled":false,"cores":14,"ephemeral_storage_path":"/var/opt/redislabs/tmp","ephemeral_storage_size":1081100128256.0,"external_addr":[],"fips_enabled":false,"flash_shard_count":0,"max_listeners":100,"max_redis_forks":-1,"max_redis_servers":100,"max_slave_full_syncs":-1,"os_family":"ubuntu","os_name":"ubuntu","os_semantic_version":"22.04","os_version":"Ubuntu 22.04.5 LTS","persistent_storage_path":"/var/opt/redislabs/persist","persistent_storage_size":1081100128256.0,"rack_id":"","ram_shard_count":1,"second_rack_id":"","shard_count":1,"shard_list":[1],"software_version":"100.0.21-16135","status":"active","supported_database_versions":[{"db_type":"redis","major":true,"redis_version":"7.4","version":"7.4.2"},{"db_type":"redis","major":true,"redis_version":"7.2","version":"7.2.7"},{"db_type":"redis","major":true,"redis_version":"6.2","version":"6.2.13"},{"db_type":"memcached","version":"1.4.17"},{"db_type":"redis","major":true,"redis_version":"8.0","version":"8.0.0"}],"total_memory":8217473024,"uid":1,"uptime":88,"use_internal_ipv6":false}]
1+
[{"accept_servers":true,"addr":"192.168.16.2","architecture":"aarch64","bigredis_storage_path":"/var/opt/redislabs/flash","bigstore_enabled":false,"cores":14,"ephemeral_storage_path":"/var/opt/redislabs/tmp","ephemeral_storage_size":1081100128256.0,"external_addr":[],"fips_enabled":false,"flash_shard_count":0,"max_listeners":100,"max_redis_forks":-1,"max_redis_servers":100,"max_slave_full_syncs":-1,"os_family":"ubuntu","os_name":"ubuntu","os_semantic_version":"22.04","os_version":"Ubuntu 22.04.5 LTS","persistent_storage_path":"/var/opt/redislabs/persist","persistent_storage_size":1081100128256.0,"rack_id":"","ram_shard_count":1,"second_rack_id":"","shard_count":1,"shard_list":[1],"software_version":"100.0.21-16135","status":"active","supported_database_versions":[{"db_type":"redis","major":true,"redis_version":"7.4","version":"7.4.2"},{"db_type":"redis","major":true,"redis_version":"7.2","version":"7.2.7"},{"db_type":"redis","major":true,"redis_version":"6.2","version":"6.2.13"},{"db_type":"memcached","version":"1.4.17"},{"db_type":"redis","major":true,"redis_version":"8.0","version":"8.0.0"}],"total_memory":8217473024,"uid":1,"uptime":412,"use_internal_ipv6":false}]

crates/redis-enterprise/tests/fixtures/nodes_stats.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"assigned_slots":"0-16383","bdb_uid":1,"detailed_status":"ok","loading":{"status":"idle"},"node_uid":"1","redis_info":{},"report_timestamp":"2025-10-14T00:01:55Z","role":"master","status":"active","uid":"1"}]
1+
[{"assigned_slots":"0-16383","bdb_uid":1,"detailed_status":"ok","loading":{"status":"idle"},"node_uid":"1","redis_info":{},"report_timestamp":"2025-10-14T00:07:15Z","role":"master","status":"active","uid":"1"}]

0 commit comments

Comments
 (0)