summaryrefslogtreecommitdiff
path: root/src/main/java/examples/CreateMinimalRaftSimulation.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/examples/CreateMinimalRaftSimulation.java')
-rw-r--r--src/main/java/examples/CreateMinimalRaftSimulation.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/main/java/examples/CreateMinimalRaftSimulation.java b/src/main/java/examples/CreateMinimalRaftSimulation.java
new file mode 100644
index 0000000..62db468
--- /dev/null
+++ b/src/main/java/examples/CreateMinimalRaftSimulation.java
@@ -0,0 +1,86 @@
+package examples;
+
+import simulator.*;
+import core.*;
+import prefs.*;
+import events.*;
+import events.internal.*;
+import serialize.VSSerialize;
+import java.io.*;
+import java.lang.reflect.*;
+
+/**
+ * Creates a minimal Raft simulation with just protocol activations.
+ * This tests if the basic simulation saving/loading works.
+ */
+public class CreateMinimalRaftSimulation {
+
+ public static void main(String[] args) throws Exception {
+ System.out.println("=== Creating Minimal Raft Simulation ===\n");
+
+ // Initialize
+ VSDefaultPrefs prefs = new VSDefaultPrefs();
+ prefs.fillWithDefaults();
+ VSRegisteredEvents.init(prefs);
+
+ // Create simulator without GUI
+ VSSimulatorFrame frame = new VSSimulatorFrame(prefs, null);
+ VSSimulator simulator = new VSSimulator(prefs, frame);
+ frame.addSimulator(simulator);
+
+ // Access visualization via reflection
+ Field vizField = VSSimulator.class.getDeclaredField("simulatorVisualization");
+ vizField.setAccessible(true);
+ VSSimulatorVisualization viz = (VSSimulatorVisualization) vizField.get(simulator);
+
+ // Add 3 processes
+ Method addProcessMethod = VSSimulatorVisualization.class.getDeclaredMethod("addProcess");
+ addProcessMethod.setAccessible(true);
+ for (int i = 0; i < 3; i++) {
+ addProcessMethod.invoke(viz);
+ }
+
+ VSTaskManager taskManager = viz.getTaskManager();
+
+ // Create only one Raft server activation at time 0
+ System.out.println("Adding single Raft server activation on process 0...");
+ VSProtocolEvent serverEvent = new VSProtocolEvent();
+ serverEvent.setProtocolClassname("protocols.implementations.VSRaftProtocol");
+ serverEvent.isClientProtocol(false);
+ serverEvent.isProtocolActivation(true);
+
+ VSTask task = new VSTask(0, viz.getProcess(0), serverEvent, false);
+ taskManager.addTask(task);
+
+ // Save simulation
+ File outputFile = new File("saved-simulations/raft-minimal.dat");
+ outputFile.getParentFile().mkdirs();
+
+ VSSerialize serialize = new VSSerialize();
+ serialize.saveSimulator(outputFile.getAbsolutePath(), simulator);
+
+ frame.dispose();
+
+ System.out.println("\nSimulation saved to: " + outputFile.getAbsolutePath());
+ System.out.println("\nTo test:");
+ System.out.println("1. Run: java -jar target/ds-sim-1.0.1-SNAPSHOT.jar");
+ System.out.println("2. File → Open → saved-simulations/raft-minimal.dat");
+ System.out.println("3. Click Run button and check the logs");
+
+ // Try to immediately load it back to verify
+ System.out.println("\nVerifying saved file can be loaded...");
+ try {
+ VSSimulatorFrame frame2 = new VSSimulatorFrame(prefs, null);
+ VSSimulator loaded = serialize.openSimulator(outputFile.getAbsolutePath(), frame2);
+ if (loaded != null) {
+ System.out.println("✓ File loaded successfully!");
+ frame2.dispose();
+ } else {
+ System.out.println("✗ Failed to load file!");
+ }
+ } catch (Exception e) {
+ System.out.println("✗ Error loading file: " + e.getMessage());
+ e.printStackTrace();
+ }
+ }
+} \ No newline at end of file