Skip to content
Open
Show file tree
Hide file tree
Changes from all 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:
- name: "Basic Tier"
redpandaConfigProfileName: "test-tier-basic"
isPublic: true
cloudProvider: "testcloud"
advertisedMaxIngress: 1000000
advertisedMaxEgress: 2000000
advertisedMaxPartitionCount: 100
advertisedMaxClientCount: 50
- name: "Advanced Tier"
redpandaConfigProfileName: "test-tier-advanced"
isPublic: true
cloudProvider: "testcloud"
advertisedMaxIngress: 5000000
advertisedMaxEgress: 10000000
advertisedMaxPartitionCount: 1000
advertisedMaxClientCount: 500
- name: "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 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'); // name from master-data
expect(result).toContain('Advanced Tier'); // name 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