Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ __pycache__/
gen/
tree-sitter/
test/
modules/
/modules/
cloud-controlplane/
node_modules
25 changes: 25 additions & 0 deletions __tests__/docs-data/mock-master-data.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
products:
- displayName: "Basic Tier"
redpandaConfigProfileName: "test-tier-basic"
isPublic: true
cloudProvider: "testcloud"
advertisedMaxIngress: 1000000
advertisedMaxEgress: 2000000
advertisedMaxPartitionCount: 100
advertisedMaxClientCount: 50
- displayName: "Advanced Tier"
redpandaConfigProfileName: "test-tier-advanced"
isPublic: true
cloudProvider: "testcloud"
advertisedMaxIngress: 5000000
advertisedMaxEgress: 10000000
advertisedMaxPartitionCount: 1000
advertisedMaxClientCount: 500
- displayName: "Internal Tier"
redpandaConfigProfileName: "test-tier-internal"
isPublic: false
cloudProvider: "testcloud"
advertisedMaxIngress: 10000000
advertisedMaxEgress: 20000000
advertisedMaxPartitionCount: 2000
advertisedMaxClientCount: 1000
118 changes: 118 additions & 0 deletions __tests__/docs-data/mock-tier.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
config_profiles:
test-tier-basic:
cloud_provider: testcloud
machine_type: t2.micro
nodes_count: 1
connectors_machine_type: t2.nano
connectors_heap_size: 512M
connectors_tasks_per_pod: 2
utility_machine_type_name: t2.nano
utility_min_node_count: 1
utility_max_node_count: 1
redpanda_reserved_cpu_count: 0
cluster_config:
topic_partitions_per_shard: '10'
topic_memory_per_partition: '1024'
kafka_connections_max: '100'
max_concurrent_producer_ids: '100'
log_segment_size: '1048576'
log_segment_size_min: '524288'
log_segment_size_max: '1048576'
compacted_log_segment_size: '524288'
max_compacted_log_segment_size: '2097152'
disk_reservation_percent: '5'
retention_local_target_capacity_percent: '50'
cloud_storage_cache_size_percent: '10'
retention_local_target_ms_default: '60000'
cloud_storage_segment_max_upload_interval_sec: '600'
log_segment_ms_min: '10000'
rpc_server_listen_backlog: '50'
rpc_client_connections_per_peer: '5'
kafka_connection_rate_limit: '10'
kafka_throughput_limit_node_in_bps: '1000000'
kafka_throughput_limit_node_out_bps: '2000000'
rps_limit_topic_operations: '5'
rps_limit_acls_and_users_operations: '5'
rps_limit_node_management_operations: '1'
rps_limit_move_operations: '10'
rps_limit_configuration_operations: '1'
kafka_batch_max_bytes: '10240'
kafka_topics_max: '100'
test-tier-basic-v2:
cloud_provider: testcloud
machine_type: t2.small
nodes_count: 1
connectors_machine_type: t2.nano
connectors_heap_size: 512M
connectors_tasks_per_pod: 2
utility_machine_type_name: t2.nano
utility_min_node_count: 1
utility_max_node_count: 1
redpanda_reserved_cpu_count: 0
cluster_config:
topic_partitions_per_shard: '20'
topic_memory_per_partition: '2048'
kafka_connections_max: '200'
max_concurrent_producer_ids: '200'
log_segment_size: '2097152'
log_segment_size_min: '1048576'
log_segment_size_max: '2097152'
compacted_log_segment_size: '1048576'
max_compacted_log_segment_size: '4194304'
disk_reservation_percent: '5'
retention_local_target_capacity_percent: '50'
cloud_storage_cache_size_percent: '10'
retention_local_target_ms_default: '60000'
cloud_storage_segment_max_upload_interval_sec: '600'
log_segment_ms_min: '10000'
rpc_server_listen_backlog: '50'
rpc_client_connections_per_peer: '5'
kafka_connection_rate_limit: '10'
kafka_throughput_limit_node_in_bps: '2000000'
kafka_throughput_limit_node_out_bps: '4000000'
rps_limit_topic_operations: '5'
rps_limit_acls_and_users_operations: '5'
rps_limit_node_management_operations: '1'
rps_limit_move_operations: '10'
rps_limit_configuration_operations: '1'
kafka_batch_max_bytes: '10240'
kafka_topics_max: '100'
test-tier-advanced:
cloud_provider: testcloud
machine_type: t2.large
nodes_count: 5
connectors_machine_type: t2.medium
connectors_heap_size: 2G
connectors_tasks_per_pod: 10
utility_machine_type_name: t2.medium
utility_min_node_count: 2
utility_max_node_count: 5
redpanda_reserved_cpu_count: 1
cluster_config:
topic_partitions_per_shard: '100'
topic_memory_per_partition: '4096'
kafka_connections_max: '500'
max_concurrent_producer_ids: '500'
log_segment_size: '2097152'
log_segment_size_min: '1048576'
log_segment_size_max: '2097152'
compacted_log_segment_size: '1048576'
max_compacted_log_segment_size: '4194304'
disk_reservation_percent: '10'
retention_local_target_capacity_percent: '80'
cloud_storage_cache_size_percent: '20'
retention_local_target_ms_default: '120000'
cloud_storage_segment_max_upload_interval_sec: '1200'
log_segment_ms_min: '20000'
rpc_server_listen_backlog: '100'
rpc_client_connections_per_peer: '10'
kafka_connection_rate_limit: '20'
kafka_throughput_limit_node_in_bps: '5000000'
kafka_throughput_limit_node_out_bps: '10000000'
rps_limit_topic_operations: '20'
rps_limit_acls_and_users_operations: '20'
rps_limit_node_management_operations: '2'
rps_limit_move_operations: '50'
rps_limit_configuration_operations: '2'
kafka_batch_max_bytes: '20480'
kafka_topics_max: '500'
70 changes: 70 additions & 0 deletions __tests__/tools/cloud-tier-table.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
const path = require('path');
const fs = require('fs');
const { generateCloudTierTable } = require('../../tools/cloud-tier-table/generate-cloud-tier-table.js');

describe('generateCloudTierTable', () => {
it('should generate a markdown table from mock YAML using public tiers', async () => {
const input = path.resolve(__dirname, '../docs-data/mock-tier.yml');
const masterDataPath = path.resolve(__dirname, '../docs-data/mock-master-data.yaml');
const result = await generateCloudTierTable({
input,
output: '',
format: 'md',
template: undefined,
masterData: masterDataPath
});
expect(result).toContain('| Tier | Cloud Provider | Machine Type | Number of Nodes');
expect(result).toContain('Basic Tier');
expect(result).toContain('Advanced Tier');
expect(result).not.toContain('Internal Tier'); // Should not include non-public tiers
});

it('should only include public tiers from master-data', async () => {
const input = path.resolve(__dirname, '../docs-data/mock-tier.yml');
const masterDataPath = path.resolve(__dirname, '../docs-data/mock-master-data.yaml');
const result = await generateCloudTierTable({
input,
output: '',
format: 'md',
template: undefined,
masterData: masterDataPath
});
expect(result).toContain('Basic Tier');
expect(result).toContain('Advanced Tier');
expect(result).not.toContain('Internal Tier'); // isPublic: false should be excluded
});

it('should use display names from master-data instead of config profile names', async () => {
const input = path.resolve(__dirname, '../docs-data/mock-tier.yml');
const masterDataPath = path.resolve(__dirname, '../docs-data/mock-master-data.yaml');
const result = await generateCloudTierTable({
input,
output: '',
format: 'md',
template: undefined,
masterData: masterDataPath
});
expect(result).toContain('Basic Tier'); // displayName from master-data
expect(result).toContain('Advanced Tier'); // displayName from master-data
expect(result).not.toContain('test-tier-basic'); // config profile name should not appear
expect(result).not.toContain('test-tier-advanced'); // config profile name should not appear
});

it('should include advertised limits from master-data', async () => {
const input = path.resolve(__dirname, '../docs-data/mock-tier.yml');
const masterDataPath = path.resolve(__dirname, '../docs-data/mock-master-data.yaml');
const result = await generateCloudTierTable({
input,
output: '',
format: 'md',
template: undefined,
masterData: masterDataPath
});
expect(result).toContain('Max Ingress (bps)');
expect(result).toContain('Max Egress (bps)');
expect(result).toContain('Max Partitions');
expect(result).toContain('Max Client Connections');
expect(result).toContain('1000000'); // Basic tier ingress
expect(result).toContain('5000000'); // Advanced tier ingress
});
});
Loading