From 0b5050c967c7cfaec67d3102a63b9483b73f14b1 Mon Sep 17 00:00:00 2001 From: "David Trujillo Medina (Fedora)" Date: Fri, 20 Mar 2026 16:29:10 -0300 Subject: [PATCH 1/3] test: add Mockito dependencies for unit testing --- build.gradle.kts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index 39111d3..89ecb24 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -69,6 +69,8 @@ repositories { dependencies { testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") + testImplementation("org.mockito:mockito-junit-jupiter:5.11.0") + testImplementation("org.mockito:mockito-core:5.11.0") testRuntimeOnly("org.junit.platform:junit-platform-launcher") implementation("org.jetbrains:annotations:24.0.0") } From 57b22322f221d4c3753b3de559a38e442902e868 Mon Sep 17 00:00:00 2001 From: "David Trujillo Medina (Fedora)" Date: Fri, 20 Mar 2026 16:49:39 -0300 Subject: [PATCH 2/3] feat: add base interfaces for network simulation - Introduce `Tickable` interface for discrete time processing. - Add `Stats` interface for common node statistics reporting. - Create `NetworkNode` interface to encapsulate shared functionality for Router and Terminal nodes. - Add `PacketReceiver` interface for handling incoming packets. --- .../model/nodes/NetworkNode.java | 19 +++++++++++++++++++ .../model/nodes/PacketReceiver.java | 8 ++++++++ .../routersimulator/model/nodes/Tickable.java | 9 +++++++++ .../routersimulator/model/stats/Stats.java | 15 +++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 src/main/java/ar/edu/unc/david/routersimulator/model/nodes/NetworkNode.java create mode 100644 src/main/java/ar/edu/unc/david/routersimulator/model/nodes/PacketReceiver.java create mode 100644 src/main/java/ar/edu/unc/david/routersimulator/model/nodes/Tickable.java create mode 100644 src/main/java/ar/edu/unc/david/routersimulator/model/stats/Stats.java diff --git a/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/NetworkNode.java b/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/NetworkNode.java new file mode 100644 index 0000000..ad20e6d --- /dev/null +++ b/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/NetworkNode.java @@ -0,0 +1,19 @@ +package ar.edu.unc.david.routersimulator.model.nodes; + +import ar.edu.unc.david.routersimulator.model.IpAddress; +import ar.edu.unc.david.routersimulator.model.stats.RouterStats; +import ar.edu.unc.david.routersimulator.model.stats.Stats; +import ar.edu.unc.david.routersimulator.model.stats.TerminalStats; + +/** + * A node in the simulated network — either a {@link Router} or a {@link Terminal}. + * + *

Every node has an IP, can receive packets, advances per tick, and reports a common {@link + * Stats} snapshot. Node-specific stats are available by casting to {@link TerminalStats} or {@link + * RouterStats}. + */ +public interface NetworkNode extends PacketReceiver, Tickable { + IpAddress ip(); + + Stats collectStats(); +} diff --git a/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/PacketReceiver.java b/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/PacketReceiver.java new file mode 100644 index 0000000..3146f36 --- /dev/null +++ b/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/PacketReceiver.java @@ -0,0 +1,8 @@ +package ar.edu.unc.david.routersimulator.model.nodes; + +import ar.edu.unc.david.routersimulator.model.Packet; + +/** Any entity that accepts incoming {@link Packet}s into an input buffer. */ +public interface PacketReceiver { + boolean receivePacket(Packet packet); +} diff --git a/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/Tickable.java b/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/Tickable.java new file mode 100644 index 0000000..9b805f6 --- /dev/null +++ b/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/Tickable.java @@ -0,0 +1,9 @@ +package ar.edu.unc.david.routersimulator.model.nodes; + +/** + * Represents an entity that can be processed or updated in discrete time intervals or "ticks". + * Implementing classes define specific behavior to be executed during each tick. + */ +public interface Tickable { + void tick(long currentTick); +} diff --git a/src/main/java/ar/edu/unc/david/routersimulator/model/stats/Stats.java b/src/main/java/ar/edu/unc/david/routersimulator/model/stats/Stats.java new file mode 100644 index 0000000..f17fb7a --- /dev/null +++ b/src/main/java/ar/edu/unc/david/routersimulator/model/stats/Stats.java @@ -0,0 +1,15 @@ +package ar.edu.unc.david.routersimulator.model.stats; + +import ar.edu.unc.david.routersimulator.model.IpAddress; +import ar.edu.unc.david.routersimulator.model.nodes.Router; +import ar.edu.unc.david.routersimulator.model.nodes.Terminal; + +/** + * A common interface for stats snapshots from both {@link Router}s and {@link Terminal}s, to be + * used in the UI and elsewhere when only the common fields are relevant. + */ +public interface Stats { + IpAddress ip(); + + long packetsReceived(); +} From fc31728dd12a62bd243e269f8034042faefd5b74 Mon Sep 17 00:00:00 2001 From: "David Trujillo Medina (Fedora)" Date: Fri, 20 Mar 2026 16:52:14 -0300 Subject: [PATCH 3/3] refactor: remove unused imports in Stats and NetworkNode classes - Clean up unused imports from Router and Terminal-related classes. --- .../edu/unc/david/routersimulator/model/nodes/NetworkNode.java | 2 -- .../ar/edu/unc/david/routersimulator/model/stats/Stats.java | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/NetworkNode.java b/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/NetworkNode.java index ad20e6d..482dee8 100644 --- a/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/NetworkNode.java +++ b/src/main/java/ar/edu/unc/david/routersimulator/model/nodes/NetworkNode.java @@ -1,9 +1,7 @@ package ar.edu.unc.david.routersimulator.model.nodes; import ar.edu.unc.david.routersimulator.model.IpAddress; -import ar.edu.unc.david.routersimulator.model.stats.RouterStats; import ar.edu.unc.david.routersimulator.model.stats.Stats; -import ar.edu.unc.david.routersimulator.model.stats.TerminalStats; /** * A node in the simulated network — either a {@link Router} or a {@link Terminal}. diff --git a/src/main/java/ar/edu/unc/david/routersimulator/model/stats/Stats.java b/src/main/java/ar/edu/unc/david/routersimulator/model/stats/Stats.java index f17fb7a..c9c9d74 100644 --- a/src/main/java/ar/edu/unc/david/routersimulator/model/stats/Stats.java +++ b/src/main/java/ar/edu/unc/david/routersimulator/model/stats/Stats.java @@ -1,8 +1,6 @@ package ar.edu.unc.david.routersimulator.model.stats; import ar.edu.unc.david.routersimulator.model.IpAddress; -import ar.edu.unc.david.routersimulator.model.nodes.Router; -import ar.edu.unc.david.routersimulator.model.nodes.Terminal; /** * A common interface for stats snapshots from both {@link Router}s and {@link Terminal}s, to be