Files
spore-ui/test/mock-configs.js
2025-09-17 22:22:11 +02:00

292 lines
7.2 KiB
JavaScript

/**
* Mock Configuration Presets
*
* Different scenarios for testing the SPORE UI with various conditions
*/
const mockConfigs = {
// Default healthy cluster
healthy: {
name: "Healthy Cluster",
description: "All nodes active and functioning normally",
nodes: [
{
ip: '192.168.1.100',
hostname: 'spore-node-1',
chipId: 12345678,
status: 'ACTIVE',
latency: 5
},
{
ip: '192.168.1.101',
hostname: 'spore-node-2',
chipId: 87654321,
status: 'ACTIVE',
latency: 8
},
{
ip: '192.168.1.102',
hostname: 'spore-node-3',
chipId: 11223344,
status: 'ACTIVE',
latency: 12
}
],
simulation: {
enableTimeProgression: true,
enableRandomFailures: false,
failureRate: 0.0,
updateInterval: 5000,
primaryNodeRotation: false,
rotationInterval: 30000
}
},
// Single node scenario
single: {
name: "Single Node",
description: "Only one node in the cluster",
nodes: [
{
ip: '192.168.1.100',
hostname: 'spore-node-1',
chipId: 12345678,
status: 'ACTIVE',
latency: 5
}
],
simulation: {
enableTimeProgression: true,
enableRandomFailures: false,
failureRate: 0.0,
updateInterval: 5000,
primaryNodeRotation: false,
rotationInterval: 30000
}
},
// Large cluster
large: {
name: "Large Cluster",
description: "Many nodes in the cluster",
nodes: [
{ ip: '192.168.1.100', hostname: 'spore-node-1', chipId: 12345678, status: 'ACTIVE', latency: 5 },
{ ip: '192.168.1.101', hostname: 'spore-node-2', chipId: 87654321, status: 'ACTIVE', latency: 8 },
{ ip: '192.168.1.102', hostname: 'spore-node-3', chipId: 11223344, status: 'ACTIVE', latency: 12 },
{ ip: '192.168.1.103', hostname: 'spore-node-4', chipId: 44332211, status: 'ACTIVE', latency: 15 },
{ ip: '192.168.1.104', hostname: 'spore-node-5', chipId: 55667788, status: 'ACTIVE', latency: 7 },
{ ip: '192.168.1.105', hostname: 'spore-node-6', chipId: 99887766, status: 'ACTIVE', latency: 20 },
{ ip: '192.168.1.106', hostname: 'spore-node-7', chipId: 11223355, status: 'ACTIVE', latency: 9 },
{ ip: '192.168.1.107', hostname: 'spore-node-8', chipId: 66778899, status: 'ACTIVE', latency: 11 }
],
simulation: {
enableTimeProgression: true,
enableRandomFailures: false,
failureRate: 0.0,
updateInterval: 5000,
primaryNodeRotation: true,
rotationInterval: 30000
}
},
// Degraded cluster with some failures
degraded: {
name: "Degraded Cluster",
description: "Some nodes are inactive or dead",
nodes: [
{
ip: '192.168.1.100',
hostname: 'spore-node-1',
chipId: 12345678,
status: 'ACTIVE',
latency: 5
},
{
ip: '192.168.1.101',
hostname: 'spore-node-2',
chipId: 87654321,
status: 'INACTIVE',
latency: 8
},
{
ip: '192.168.1.102',
hostname: 'spore-node-3',
chipId: 11223344,
status: 'DEAD',
latency: 12
},
{
ip: '192.168.1.103',
hostname: 'spore-node-4',
chipId: 44332211,
status: 'ACTIVE',
latency: 15
}
],
simulation: {
enableTimeProgression: true,
enableRandomFailures: true,
failureRate: 0.1,
updateInterval: 5000,
primaryNodeRotation: false,
rotationInterval: 30000
}
},
// High failure rate scenario
unstable: {
name: "Unstable Cluster",
description: "High failure rate with frequent node changes",
nodes: [
{
ip: '192.168.1.100',
hostname: 'spore-node-1',
chipId: 12345678,
status: 'ACTIVE',
latency: 5
},
{
ip: '192.168.1.101',
hostname: 'spore-node-2',
chipId: 87654321,
status: 'ACTIVE',
latency: 8
},
{
ip: '192.168.1.102',
hostname: 'spore-node-3',
chipId: 11223344,
status: 'ACTIVE',
latency: 12
}
],
simulation: {
enableTimeProgression: true,
enableRandomFailures: true,
failureRate: 0.3, // 30% chance of failures
updateInterval: 2000, // Update every 2 seconds
primaryNodeRotation: true,
rotationInterval: 15000 // Rotate every 15 seconds
}
},
// No nodes scenario
empty: {
name: "Empty Cluster",
description: "No nodes discovered",
nodes: [],
simulation: {
enableTimeProgression: false,
enableRandomFailures: false,
failureRate: 0.0,
updateInterval: 5000,
primaryNodeRotation: false,
rotationInterval: 30000
}
},
// Development scenario with custom settings
development: {
name: "Development Mode",
description: "Custom settings for development and testing",
nodes: [
{
ip: '192.168.1.100',
hostname: 'dev-node-1',
chipId: 12345678,
status: 'ACTIVE',
latency: 5
},
{
ip: '192.168.1.101',
hostname: 'dev-node-2',
chipId: 87654321,
status: 'ACTIVE',
latency: 8
}
],
simulation: {
enableTimeProgression: true,
enableRandomFailures: true,
failureRate: 0.05, // 5% failure rate
updateInterval: 3000, // Update every 3 seconds
primaryNodeRotation: true,
rotationInterval: 20000 // Rotate every 20 seconds
}
}
};
/**
* Get a mock configuration by name
* @param {string} configName - Name of the configuration preset
* @returns {Object} Mock configuration object
*/
function getMockConfig(configName = 'healthy') {
const config = mockConfigs[configName];
if (!config) {
console.warn(`Unknown mock config: ${configName}. Using 'healthy' instead.`);
return mockConfigs.healthy;
}
return config;
}
/**
* List all available mock configurations
* @returns {Array} Array of configuration names and descriptions
*/
function listMockConfigs() {
return Object.keys(mockConfigs).map(key => ({
name: key,
displayName: mockConfigs[key].name,
description: mockConfigs[key].description,
nodeCount: mockConfigs[key].nodes.length
}));
}
/**
* Create a custom mock configuration
* @param {Object} options - Configuration options
* @returns {Object} Custom mock configuration
*/
function createCustomConfig(options = {}) {
const defaultConfig = {
name: "Custom Configuration",
description: "User-defined mock configuration",
nodes: [
{
ip: '192.168.1.100',
hostname: 'custom-node-1',
chipId: 12345678,
status: 'ACTIVE',
latency: 5
}
],
simulation: {
enableTimeProgression: true,
enableRandomFailures: false,
failureRate: 0.0,
updateInterval: 5000,
primaryNodeRotation: false,
rotationInterval: 30000
}
};
// Merge with provided options
return {
...defaultConfig,
...options,
nodes: options.nodes || defaultConfig.nodes,
simulation: {
...defaultConfig.simulation,
...options.simulation
}
};
}
module.exports = {
mockConfigs,
getMockConfig,
listMockConfigs,
createCustomConfig
};