summaryrefslogtreecommitdiff
path: root/src/main/java/examples/CreateAndVerifyRaftSimulation.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/examples/CreateAndVerifyRaftSimulation.java')
-rw-r--r--src/main/java/examples/CreateAndVerifyRaftSimulation.java142
1 files changed, 0 insertions, 142 deletions
diff --git a/src/main/java/examples/CreateAndVerifyRaftSimulation.java b/src/main/java/examples/CreateAndVerifyRaftSimulation.java
deleted file mode 100644
index 126c37c..0000000
--- a/src/main/java/examples/CreateAndVerifyRaftSimulation.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package examples;
-
-import simulator.*;
-import core.*;
-import prefs.*;
-import events.*;
-import events.internal.*;
-import events.implementations.*;
-import serialize.VSSerialize;
-import java.io.*;
-
-/**
- * Creates a Raft simulation and verifies it can be loaded properly.
- */
-public class CreateAndVerifyRaftSimulation {
-
- private static final String RAFT_PROTOCOL = "protocols.implementations.VSRaftProtocol";
-
- public static void main(String[] args) throws Exception {
- System.out.println("=== Creating and Verifying Raft Simulation ===\n");
-
- // Initialize
- VSDefaultPrefs prefs = new VSDefaultPrefs();
- prefs.fillWithDefaults();
- VSRegisteredEvents.init(prefs);
-
- // Step 1: Create the simulation
- System.out.println("Step 1: Creating Raft simulation...");
-
- VSSimulatorFrame frame = new VSSimulatorFrame(prefs, null);
- VSSimulator simulator = new VSSimulator(prefs, frame);
- frame.addSimulator(simulator);
-
- // Access visualization
- java.lang.reflect.Field vizField = VSSimulator.class.getDeclaredField("simulatorVisualization");
- vizField.setAccessible(true);
- VSSimulatorVisualization viz = (VSSimulatorVisualization) vizField.get(simulator);
-
- // Add processes (5 total: 3 servers + 2 clients)
- while (viz.getNumProcesses() < 5) {
- java.lang.reflect.Method addProcessMethod = VSSimulatorVisualization.class.getDeclaredMethod("addProcess");
- addProcessMethod.setAccessible(true);
- addProcessMethod.invoke(viz);
- }
-
- VSTaskManager taskManager = viz.getTaskManager();
-
- // Add Raft server activations
- System.out.println(" - Adding 3 Raft servers");
- for (int i = 0; i < 3; i++) {
- VSProtocolEvent serverEvent = new VSProtocolEvent();
- serverEvent.setProtocolClassname(RAFT_PROTOCOL);
- serverEvent.isClientProtocol(false);
- serverEvent.isProtocolActivation(true);
-
- VSTask task = new VSTask(0, viz.getProcess(i), serverEvent, false);
- taskManager.addTask(task);
- }
-
- // Add Raft client activations
- System.out.println(" - Adding 2 Raft clients");
- for (int i = 3; i < 5; i++) {
- VSProtocolEvent clientEvent = new VSProtocolEvent();
- clientEvent.setProtocolClassname(RAFT_PROTOCOL);
- clientEvent.isClientProtocol(true);
- clientEvent.isProtocolActivation(true);
-
- // Stagger client starts
- VSTask task = new VSTask(200 + (i-3)*100, viz.getProcess(i), clientEvent, false);
- taskManager.addTask(task);
- }
-
- // Add some events
- System.out.println(" - Adding crash/recovery events");
-
- // Server 0 crashes at 1000, recovers at 1500
- VSProcessCrashEvent crash = new VSProcessCrashEvent();
- taskManager.addTask(new VSTask(1000, viz.getProcess(0), crash, false));
-
- VSProcessRecoverEvent recover = new VSProcessRecoverEvent();
- taskManager.addTask(new VSTask(1500, viz.getProcess(0), recover, false));
-
- // Save simulation
- File outputFile = new File("saved-simulations/raft-verified.dat");
- outputFile.getParentFile().mkdirs();
-
- VSSerialize serialize = new VSSerialize();
- serialize.saveSimulator(outputFile.getAbsolutePath(), simulator);
-
- frame.dispose();
-
- System.out.println(" ✓ Simulation saved to: " + outputFile.getName());
-
- // Step 2: Verify the simulation can be loaded
- System.out.println("\nStep 2: Loading and verifying simulation...");
-
- VSSimulatorFrame frame2 = new VSSimulatorFrame(prefs, null);
- VSSimulator loadedSim = serialize.openSimulator(outputFile.getAbsolutePath(), frame2);
-
- if (loadedSim == null) {
- System.err.println(" ✗ Failed to load simulation!");
- System.exit(1);
- }
-
- // Verify contents
- vizField = VSSimulator.class.getDeclaredField("simulatorVisualization");
- vizField.setAccessible(true);
- VSSimulatorVisualization loadedViz = (VSSimulatorVisualization) vizField.get(loadedSim);
-
- System.out.println(" ✓ Simulation loaded successfully");
- System.out.println(" - Processes: " + loadedViz.getNumProcesses());
-
- // Check tasks
- VSTaskManager loadedTaskManager = loadedViz.getTaskManager();
- java.lang.reflect.Field tasksField = VSTaskManager.class.getDeclaredField("tasks");
- tasksField.setAccessible(true);
- Object taskQueue = tasksField.get(loadedTaskManager);
- java.lang.reflect.Method sizeMethod = taskQueue.getClass().getMethod("size");
- int taskCount = (Integer) sizeMethod.invoke(taskQueue);
-
- System.out.println(" - Scheduled tasks: " + taskCount);
-
- frame2.dispose();
-
- // Step 3: Provide instructions
- System.out.println("\n=== Success! ===");
- System.out.println("\nTo run the Raft simulation:");
- System.out.println("1. Start the simulator:");
- System.out.println(" java -jar target/ds-sim-1.0.1-SNAPSHOT.jar");
- System.out.println("\n2. Load the simulation:");
- System.out.println(" File → Open → saved-simulations/raft-verified.dat");
- System.out.println("\n3. Run the simulation:");
- System.out.println(" Click the 'Run' button (▶)");
- System.out.println("\n4. What to look for:");
- System.out.println(" - Leader election messages (REQUEST_VOTE, VOTE_RESPONSE)");
- System.out.println(" - Heartbeats from leader (APPEND_ENTRIES)");
- System.out.println(" - Client requests and responses");
- System.out.println(" - Re-election when server 0 crashes at time 1000");
-
- System.exit(0);
- }
-} \ No newline at end of file