* Java 11 support: lazy-loading pattern * Java 11 support: layers pattern * Java 11 support: leader-election/lazy-loading patterns
This commit is contained in:
@ -51,13 +51,13 @@ public abstract class AbstractMessageManager implements MessageManager {
|
||||
*/
|
||||
protected Instance findNextInstance(int currentId) {
|
||||
Instance result = null;
|
||||
List<Integer> candidateList = instanceMap.keySet()
|
||||
var candidateList = instanceMap.keySet()
|
||||
.stream()
|
||||
.filter((i) -> i > currentId && instanceMap.get(i).isAlive())
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
if (candidateList.isEmpty()) {
|
||||
int index = instanceMap.keySet()
|
||||
var index = instanceMap.keySet()
|
||||
.stream()
|
||||
.filter((i) -> instanceMap.get(i).isAlive())
|
||||
.sorted()
|
||||
@ -65,7 +65,7 @@ public abstract class AbstractMessageManager implements MessageManager {
|
||||
.get(0);
|
||||
result = instanceMap.get(index);
|
||||
} else {
|
||||
int index = candidateList.get(0);
|
||||
var index = candidateList.get(0);
|
||||
result = instanceMap.get(index);
|
||||
}
|
||||
return result;
|
||||
|
@ -66,7 +66,7 @@ public class Message {
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
Message message = (Message) o;
|
||||
var message = (Message) o;
|
||||
return type == message.type && Objects.equals(content, message.content);
|
||||
}
|
||||
|
||||
|
@ -43,13 +43,13 @@ public class BullyApp {
|
||||
public static void main(String[] args) {
|
||||
|
||||
Map<Integer, Instance> instanceMap = new HashMap<>();
|
||||
MessageManager messageManager = new BullyMessageManager(instanceMap);
|
||||
var messageManager = new BullyMessageManager(instanceMap);
|
||||
|
||||
BullyInstance instance1 = new BullyInstance(messageManager, 1, 1);
|
||||
BullyInstance instance2 = new BullyInstance(messageManager, 2, 1);
|
||||
BullyInstance instance3 = new BullyInstance(messageManager, 3, 1);
|
||||
BullyInstance instance4 = new BullyInstance(messageManager, 4, 1);
|
||||
BullyInstance instance5 = new BullyInstance(messageManager, 5, 1);
|
||||
var instance1 = new BullyInstance(messageManager, 1, 1);
|
||||
var instance2 = new BullyInstance(messageManager, 2, 1);
|
||||
var instance3 = new BullyInstance(messageManager, 3, 1);
|
||||
var instance4 = new BullyInstance(messageManager, 4, 1);
|
||||
var instance5 = new BullyInstance(messageManager, 5, 1);
|
||||
|
||||
instanceMap.put(1, instance1);
|
||||
instanceMap.put(2, instance2);
|
||||
@ -59,11 +59,11 @@ public class BullyApp {
|
||||
|
||||
instance4.onMessage(new Message(MessageType.HEARTBEAT_INVOKE, ""));
|
||||
|
||||
final Thread thread1 = new Thread(instance1);
|
||||
final Thread thread2 = new Thread(instance2);
|
||||
final Thread thread3 = new Thread(instance3);
|
||||
final Thread thread4 = new Thread(instance4);
|
||||
final Thread thread5 = new Thread(instance5);
|
||||
final var thread1 = new Thread(instance1);
|
||||
final var thread2 = new Thread(instance2);
|
||||
final var thread3 = new Thread(instance3);
|
||||
final var thread4 = new Thread(instance4);
|
||||
final var thread5 = new Thread(instance5);
|
||||
|
||||
thread1.start();
|
||||
thread2.start();
|
||||
|
@ -51,8 +51,8 @@ public class BullyMessageManager extends AbstractMessageManager {
|
||||
*/
|
||||
@Override
|
||||
public boolean sendHeartbeatMessage(int leaderId) {
|
||||
Instance leaderInstance = instanceMap.get(leaderId);
|
||||
boolean alive = leaderInstance.isAlive();
|
||||
var leaderInstance = instanceMap.get(leaderId);
|
||||
var alive = leaderInstance.isAlive();
|
||||
return alive;
|
||||
}
|
||||
|
||||
@ -65,13 +65,12 @@ public class BullyMessageManager extends AbstractMessageManager {
|
||||
*/
|
||||
@Override
|
||||
public boolean sendElectionMessage(int currentId, String content) {
|
||||
List<Integer> candidateList = findElectionCandidateInstanceList(currentId);
|
||||
var candidateList = findElectionCandidateInstanceList(currentId);
|
||||
if (candidateList.isEmpty()) {
|
||||
return true;
|
||||
} else {
|
||||
Message electionMessage = new Message(MessageType.ELECTION_INVOKE, "");
|
||||
candidateList.stream()
|
||||
.forEach((i) -> instanceMap.get(i).onMessage(electionMessage));
|
||||
var electionMessage = new Message(MessageType.ELECTION_INVOKE, "");
|
||||
candidateList.stream().forEach((i) -> instanceMap.get(i).onMessage(electionMessage));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -85,7 +84,7 @@ public class BullyMessageManager extends AbstractMessageManager {
|
||||
*/
|
||||
@Override
|
||||
public boolean sendLeaderMessage(int currentId, int leaderId) {
|
||||
Message leaderMessage = new Message(MessageType.LEADER, String.valueOf(leaderId));
|
||||
var leaderMessage = new Message(MessageType.LEADER, String.valueOf(leaderId));
|
||||
instanceMap.keySet()
|
||||
.stream()
|
||||
.filter((i) -> i != currentId)
|
||||
@ -100,8 +99,8 @@ public class BullyMessageManager extends AbstractMessageManager {
|
||||
*/
|
||||
@Override
|
||||
public void sendHeartbeatInvokeMessage(int currentId) {
|
||||
Instance nextInstance = this.findNextInstance(currentId);
|
||||
Message heartbeatInvokeMessage = new Message(MessageType.HEARTBEAT_INVOKE, "");
|
||||
var nextInstance = this.findNextInstance(currentId);
|
||||
var heartbeatInvokeMessage = new Message(MessageType.HEARTBEAT_INVOKE, "");
|
||||
nextInstance.onMessage(heartbeatInvokeMessage);
|
||||
}
|
||||
|
||||
|
@ -43,13 +43,13 @@ public class RingApp {
|
||||
public static void main(String[] args) {
|
||||
|
||||
Map<Integer, Instance> instanceMap = new HashMap<>();
|
||||
MessageManager messageManager = new RingMessageManager(instanceMap);
|
||||
var messageManager = new RingMessageManager(instanceMap);
|
||||
|
||||
RingInstance instance1 = new RingInstance(messageManager, 1, 1);
|
||||
RingInstance instance2 = new RingInstance(messageManager, 2, 1);
|
||||
RingInstance instance3 = new RingInstance(messageManager, 3, 1);
|
||||
RingInstance instance4 = new RingInstance(messageManager, 4, 1);
|
||||
RingInstance instance5 = new RingInstance(messageManager, 5, 1);
|
||||
var instance1 = new RingInstance(messageManager, 1, 1);
|
||||
var instance2 = new RingInstance(messageManager, 2, 1);
|
||||
var instance3 = new RingInstance(messageManager, 3, 1);
|
||||
var instance4 = new RingInstance(messageManager, 4, 1);
|
||||
var instance5 = new RingInstance(messageManager, 5, 1);
|
||||
|
||||
instanceMap.put(1, instance1);
|
||||
instanceMap.put(2, instance2);
|
||||
@ -59,11 +59,11 @@ public class RingApp {
|
||||
|
||||
instance2.onMessage(new Message(MessageType.HEARTBEAT_INVOKE, ""));
|
||||
|
||||
final Thread thread1 = new Thread(instance1);
|
||||
final Thread thread2 = new Thread(instance2);
|
||||
final Thread thread3 = new Thread(instance3);
|
||||
final Thread thread4 = new Thread(instance4);
|
||||
final Thread thread5 = new Thread(instance5);
|
||||
final var thread1 = new Thread(instance1);
|
||||
final var thread2 = new Thread(instance2);
|
||||
final var thread3 = new Thread(instance3);
|
||||
final var thread4 = new Thread(instance4);
|
||||
final var thread5 = new Thread(instance5);
|
||||
|
||||
thread1.start();
|
||||
thread2.start();
|
||||
|
@ -62,7 +62,7 @@ public class RingInstance extends AbstractInstance {
|
||||
@Override
|
||||
protected void handleHeartbeatInvokeMessage() {
|
||||
try {
|
||||
boolean isLeaderAlive = messageManager.sendHeartbeatMessage(this.leaderId);
|
||||
var isLeaderAlive = messageManager.sendHeartbeatMessage(this.leaderId);
|
||||
if (isLeaderAlive) {
|
||||
LOGGER.info("Instance " + localId + "- Leader is alive. Start next heartbeat in 5 second.");
|
||||
Thread.sleep(HEARTBEAT_INTERVAL);
|
||||
@ -84,15 +84,14 @@ public class RingInstance extends AbstractInstance {
|
||||
*/
|
||||
@Override
|
||||
protected void handleElectionMessage(Message message) {
|
||||
String content = message.getContent();
|
||||
var content = message.getContent();
|
||||
LOGGER.info("Instance " + localId + " - Election Message: " + content);
|
||||
List<Integer> candidateList =
|
||||
Arrays.stream(content.trim().split(","))
|
||||
.map(Integer::valueOf)
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
var candidateList = Arrays.stream(content.trim().split(","))
|
||||
.map(Integer::valueOf)
|
||||
.sorted()
|
||||
.collect(Collectors.toList());
|
||||
if (candidateList.contains(localId)) {
|
||||
int newLeaderId = candidateList.get(0);
|
||||
var newLeaderId = candidateList.get(0);
|
||||
LOGGER.info("Instance " + localId + " - New leader should be " + newLeaderId + ".");
|
||||
messageManager.sendLeaderMessage(localId, newLeaderId);
|
||||
} else {
|
||||
@ -107,7 +106,7 @@ public class RingInstance extends AbstractInstance {
|
||||
*/
|
||||
@Override
|
||||
protected void handleLeaderMessage(Message message) {
|
||||
int newLeaderId = Integer.valueOf(message.getContent());
|
||||
var newLeaderId = Integer.valueOf(message.getContent());
|
||||
if (this.leaderId != newLeaderId) {
|
||||
LOGGER.info("Instance " + localId + " - Update leaderID");
|
||||
this.leaderId = newLeaderId;
|
||||
|
@ -49,8 +49,8 @@ public class RingMessageManager extends AbstractMessageManager {
|
||||
*/
|
||||
@Override
|
||||
public boolean sendHeartbeatMessage(int leaderId) {
|
||||
Instance leaderInstance = instanceMap.get(leaderId);
|
||||
boolean alive = leaderInstance.isAlive();
|
||||
var leaderInstance = instanceMap.get(leaderId);
|
||||
var alive = leaderInstance.isAlive();
|
||||
return alive;
|
||||
}
|
||||
|
||||
@ -64,8 +64,8 @@ public class RingMessageManager extends AbstractMessageManager {
|
||||
*/
|
||||
@Override
|
||||
public boolean sendElectionMessage(int currentId, String content) {
|
||||
Instance nextInstance = this.findNextInstance(currentId);
|
||||
Message electionMessage = new Message(MessageType.ELECTION, content);
|
||||
var nextInstance = this.findNextInstance(currentId);
|
||||
var electionMessage = new Message(MessageType.ELECTION, content);
|
||||
nextInstance.onMessage(electionMessage);
|
||||
return true;
|
||||
}
|
||||
@ -79,8 +79,8 @@ public class RingMessageManager extends AbstractMessageManager {
|
||||
*/
|
||||
@Override
|
||||
public boolean sendLeaderMessage(int currentId, int leaderId) {
|
||||
Instance nextInstance = this.findNextInstance(currentId);
|
||||
Message leaderMessage = new Message(MessageType.LEADER, String.valueOf(leaderId));
|
||||
var nextInstance = this.findNextInstance(currentId);
|
||||
var leaderMessage = new Message(MessageType.LEADER, String.valueOf(leaderId));
|
||||
nextInstance.onMessage(leaderMessage);
|
||||
return true;
|
||||
}
|
||||
@ -92,8 +92,8 @@ public class RingMessageManager extends AbstractMessageManager {
|
||||
*/
|
||||
@Override
|
||||
public void sendHeartbeatInvokeMessage(int currentId) {
|
||||
Instance nextInstance = this.findNextInstance(currentId);
|
||||
Message heartbeatInvokeMessage = new Message(MessageType.HEARTBEAT_INVOKE, "");
|
||||
var nextInstance = this.findNextInstance(currentId);
|
||||
var heartbeatInvokeMessage = new Message(MessageType.HEARTBEAT_INVOKE, "");
|
||||
nextInstance.onMessage(heartbeatInvokeMessage);
|
||||
}
|
||||
|
||||
|
@ -34,14 +34,14 @@ public class MessageTest {
|
||||
|
||||
@Test
|
||||
public void testGetType() {
|
||||
Message message = new Message(MessageType.HEARTBEAT, "");
|
||||
var message = new Message(MessageType.HEARTBEAT, "");
|
||||
assertEquals(MessageType.HEARTBEAT, message.getType());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetContent() {
|
||||
String content = "test";
|
||||
Message message = new Message(MessageType.HEARTBEAT, content);
|
||||
var content = "test";
|
||||
var message = new Message(MessageType.HEARTBEAT, content);
|
||||
assertEquals(content, message.getContent());
|
||||
}
|
||||
|
||||
|
@ -39,29 +39,29 @@ public class BullyMessageManagerTest {
|
||||
|
||||
@Test
|
||||
public void testSendHeartbeatMessage() {
|
||||
Instance instance1 = new BullyInstance(null, 1, 1);
|
||||
var instance1 = new BullyInstance(null, 1, 1);
|
||||
Map<Integer, Instance> instanceMap = Map.of(1, instance1);
|
||||
MessageManager messageManager = new BullyMessageManager(instanceMap);
|
||||
var messageManager = new BullyMessageManager(instanceMap);
|
||||
assertTrue(messageManager.sendHeartbeatMessage(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendElectionMessageNotAccepted() {
|
||||
try {
|
||||
Instance instance1 = new BullyInstance(null, 1, 1);
|
||||
Instance instance2 = new BullyInstance(null, 1, 2);
|
||||
Instance instance3 = new BullyInstance(null, 1, 3);
|
||||
Instance instance4 = new BullyInstance(null, 1, 4);
|
||||
var instance1 = new BullyInstance(null, 1, 1);
|
||||
var instance2 = new BullyInstance(null, 1, 2);
|
||||
var instance3 = new BullyInstance(null, 1, 3);
|
||||
var instance4 = new BullyInstance(null, 1, 4);
|
||||
Map<Integer, Instance> instanceMap = Map.of(1, instance1, 2, instance2, 3, instance3, 4, instance4);
|
||||
instance1.setAlive(false);
|
||||
MessageManager messageManager = new BullyMessageManager(instanceMap);
|
||||
boolean result = messageManager.sendElectionMessage(3, "3");
|
||||
Class instanceClass = AbstractInstance.class;
|
||||
Field messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
var messageManager = new BullyMessageManager(instanceMap);
|
||||
var result = messageManager.sendElectionMessage(3, "3");
|
||||
var instanceClass = AbstractInstance.class;
|
||||
var messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
messageQueueField.setAccessible(true);
|
||||
Message message2 = ((Queue<Message>) messageQueueField.get(instance2)).poll();
|
||||
int instance4QueueSize = ((Queue<Message>) messageQueueField.get(instance4)).size();
|
||||
Message expectedMessage = new Message(MessageType.ELECTION_INVOKE, "");
|
||||
var message2 = ((Queue<Message>) messageQueueField.get(instance2)).poll();
|
||||
var instance4QueueSize = ((Queue<Message>) messageQueueField.get(instance4)).size();
|
||||
var expectedMessage = new Message(MessageType.ELECTION_INVOKE, "");
|
||||
assertEquals(message2, expectedMessage);
|
||||
assertEquals(instance4QueueSize, 0);
|
||||
assertEquals(result, false);
|
||||
@ -72,34 +72,34 @@ public class BullyMessageManagerTest {
|
||||
|
||||
@Test
|
||||
public void testElectionMessageAccepted() {
|
||||
Instance instance1 = new BullyInstance(null, 1, 1);
|
||||
Instance instance2 = new BullyInstance(null, 1, 2);
|
||||
Instance instance3 = new BullyInstance(null, 1, 3);
|
||||
Instance instance4 = new BullyInstance(null, 1, 4);
|
||||
var instance1 = new BullyInstance(null, 1, 1);
|
||||
var instance2 = new BullyInstance(null, 1, 2);
|
||||
var instance3 = new BullyInstance(null, 1, 3);
|
||||
var instance4 = new BullyInstance(null, 1, 4);
|
||||
Map<Integer, Instance> instanceMap = Map.of(1, instance1, 2, instance2, 3, instance3, 4, instance4);
|
||||
instance1.setAlive(false);
|
||||
MessageManager messageManager = new BullyMessageManager(instanceMap);
|
||||
boolean result = messageManager.sendElectionMessage(2, "2");
|
||||
var messageManager = new BullyMessageManager(instanceMap);
|
||||
var result = messageManager.sendElectionMessage(2, "2");
|
||||
assertEquals(result, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendLeaderMessage() {
|
||||
try {
|
||||
Instance instance1 = new BullyInstance(null, 1, 1);
|
||||
Instance instance2 = new BullyInstance(null, 1, 2);
|
||||
Instance instance3 = new BullyInstance(null, 1, 3);
|
||||
Instance instance4 = new BullyInstance(null, 1, 4);
|
||||
var instance1 = new BullyInstance(null, 1, 1);
|
||||
var instance2 = new BullyInstance(null, 1, 2);
|
||||
var instance3 = new BullyInstance(null, 1, 3);
|
||||
var instance4 = new BullyInstance(null, 1, 4);
|
||||
Map<Integer, Instance> instanceMap = Map.of(1, instance1, 2, instance2, 3, instance3, 4, instance4);
|
||||
instance1.setAlive(false);
|
||||
MessageManager messageManager = new BullyMessageManager(instanceMap);
|
||||
var messageManager = new BullyMessageManager(instanceMap);
|
||||
messageManager.sendLeaderMessage(2, 2);
|
||||
Class instanceClass = AbstractInstance.class;
|
||||
Field messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
var instanceClass = AbstractInstance.class;
|
||||
var messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
messageQueueField.setAccessible(true);
|
||||
Message message3 = ((Queue<Message>) messageQueueField.get(instance3)).poll();
|
||||
Message message4 = ((Queue<Message>) messageQueueField.get(instance4)).poll();
|
||||
Message expectedMessage = new Message(MessageType.LEADER, "2");
|
||||
var message3 = ((Queue<Message>) messageQueueField.get(instance3)).poll();
|
||||
var message4 = ((Queue<Message>) messageQueueField.get(instance4)).poll();
|
||||
var expectedMessage = new Message(MessageType.LEADER, "2");
|
||||
assertEquals(message3, expectedMessage);
|
||||
assertEquals(message4, expectedMessage);
|
||||
} catch (IllegalAccessException | NoSuchFieldException e) {
|
||||
@ -110,17 +110,17 @@ public class BullyMessageManagerTest {
|
||||
@Test
|
||||
public void testSendHeartbeatInvokeMessage() {
|
||||
try {
|
||||
Instance instance1 = new BullyInstance(null, 1, 1);
|
||||
Instance instance2 = new BullyInstance(null, 1, 2);
|
||||
Instance instance3 = new BullyInstance(null, 1, 3);
|
||||
var instance1 = new BullyInstance(null, 1, 1);
|
||||
var instance2 = new BullyInstance(null, 1, 2);
|
||||
var instance3 = new BullyInstance(null, 1, 3);
|
||||
Map<Integer, Instance> instanceMap = Map.of(1, instance1, 2, instance2, 3, instance3);
|
||||
MessageManager messageManager = new BullyMessageManager(instanceMap);
|
||||
var messageManager = new BullyMessageManager(instanceMap);
|
||||
messageManager.sendHeartbeatInvokeMessage(2);
|
||||
Message message = new Message(MessageType.HEARTBEAT_INVOKE, "");
|
||||
Class instanceClass = AbstractInstance.class;
|
||||
Field messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
var message = new Message(MessageType.HEARTBEAT_INVOKE, "");
|
||||
var instanceClass = AbstractInstance.class;
|
||||
var messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
messageQueueField.setAccessible(true);
|
||||
Message messageSent = ((Queue<Message>) messageQueueField.get(instance3)).poll();
|
||||
var messageSent = ((Queue<Message>) messageQueueField.get(instance3)).poll();
|
||||
assertEquals(messageSent.getType(), message.getType());
|
||||
assertEquals(messageSent.getContent(), message.getContent());
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
|
@ -41,11 +41,11 @@ public class BullyinstanceTest {
|
||||
@Test
|
||||
public void testOnMessage() {
|
||||
try {
|
||||
final BullyInstance bullyInstance = new BullyInstance(null, 1, 1);
|
||||
Message bullyMessage = new Message(MessageType.HEARTBEAT, "");
|
||||
final var bullyInstance = new BullyInstance(null, 1, 1);
|
||||
var bullyMessage = new Message(MessageType.HEARTBEAT, "");
|
||||
bullyInstance.onMessage(bullyMessage);
|
||||
Class instanceClass = AbstractInstance.class;
|
||||
Field messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
var instanceClass = AbstractInstance.class;
|
||||
var messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
messageQueueField.setAccessible(true);
|
||||
assertEquals(bullyMessage, ((Queue<Message>) messageQueueField.get(bullyInstance)).poll());
|
||||
} catch (IllegalAccessException | NoSuchFieldException e) {
|
||||
@ -57,9 +57,9 @@ public class BullyinstanceTest {
|
||||
@Test
|
||||
public void testIsAlive() {
|
||||
try {
|
||||
final BullyInstance bullyInstance = new BullyInstance(null, 1, 1);
|
||||
Class instanceClass = AbstractInstance.class;
|
||||
Field aliveField = instanceClass.getDeclaredField("alive");
|
||||
final var bullyInstance = new BullyInstance(null, 1, 1);
|
||||
var instanceClass = AbstractInstance.class;
|
||||
var aliveField = instanceClass.getDeclaredField("alive");
|
||||
aliveField.setAccessible(true);
|
||||
aliveField.set(bullyInstance, false);
|
||||
assertFalse(bullyInstance.isAlive());
|
||||
@ -70,7 +70,7 @@ public class BullyinstanceTest {
|
||||
|
||||
@Test
|
||||
public void testSetAlive() {
|
||||
final BullyInstance bullyInstance = new BullyInstance(null, 1, 1);
|
||||
final var bullyInstance = new BullyInstance(null, 1, 1);
|
||||
bullyInstance.setAlive(false);
|
||||
assertFalse(bullyInstance.isAlive());
|
||||
}
|
||||
|
@ -41,11 +41,11 @@ public class RingInstanceTest {
|
||||
@Test
|
||||
public void testOnMessage() {
|
||||
try {
|
||||
final RingInstance ringInstance = new RingInstance(null, 1, 1);
|
||||
Message ringMessage = new Message(MessageType.HEARTBEAT, "");
|
||||
final var ringInstance = new RingInstance(null, 1, 1);
|
||||
var ringMessage = new Message(MessageType.HEARTBEAT, "");
|
||||
ringInstance.onMessage(ringMessage);
|
||||
Class ringInstanceClass = AbstractInstance.class;
|
||||
Field messageQueueField = ringInstanceClass.getDeclaredField("messageQueue");
|
||||
var ringInstanceClass = AbstractInstance.class;
|
||||
var messageQueueField = ringInstanceClass.getDeclaredField("messageQueue");
|
||||
messageQueueField.setAccessible(true);
|
||||
assertEquals(ringMessage, ((Queue<Message>) messageQueueField.get(ringInstance)).poll());
|
||||
} catch (IllegalAccessException | NoSuchFieldException e) {
|
||||
@ -56,9 +56,9 @@ public class RingInstanceTest {
|
||||
@Test
|
||||
public void testIsAlive() {
|
||||
try {
|
||||
final RingInstance ringInstance = new RingInstance(null, 1, 1);
|
||||
Class ringInstanceClass = AbstractInstance.class;
|
||||
Field aliveField = ringInstanceClass.getDeclaredField("alive");
|
||||
final var ringInstance = new RingInstance(null, 1, 1);
|
||||
var ringInstanceClass = AbstractInstance.class;
|
||||
var aliveField = ringInstanceClass.getDeclaredField("alive");
|
||||
aliveField.setAccessible(true);
|
||||
aliveField.set(ringInstance, false);
|
||||
assertFalse(ringInstance.isAlive());
|
||||
@ -69,7 +69,7 @@ public class RingInstanceTest {
|
||||
|
||||
@Test
|
||||
public void testSetAlive() {
|
||||
final RingInstance ringInstance = new RingInstance(null, 1, 1);
|
||||
final var ringInstance = new RingInstance(null, 1, 1);
|
||||
ringInstance.setAlive(false);
|
||||
assertFalse(ringInstance.isAlive());
|
||||
}
|
||||
|
@ -39,27 +39,27 @@ public class RingMessageManagerTest {
|
||||
|
||||
@Test
|
||||
public void testSendHeartbeatMessage() {
|
||||
Instance instance1 = new RingInstance(null, 1, 1);
|
||||
var instance1 = new RingInstance(null, 1, 1);
|
||||
Map<Integer, Instance> instanceMap = Map.of(1, instance1);
|
||||
MessageManager messageManager = new RingMessageManager(instanceMap);
|
||||
var messageManager = new RingMessageManager(instanceMap);
|
||||
assertTrue(messageManager.sendHeartbeatMessage(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendElectionMessage() {
|
||||
try {
|
||||
Instance instance1 = new RingInstance(null, 1, 1);
|
||||
Instance instance2 = new RingInstance(null, 1, 2);
|
||||
Instance instance3 = new RingInstance(null, 1, 3);
|
||||
var instance1 = new RingInstance(null, 1, 1);
|
||||
var instance2 = new RingInstance(null, 1, 2);
|
||||
var instance3 = new RingInstance(null, 1, 3);
|
||||
Map<Integer, Instance> instanceMap = Map.of(1, instance1, 2, instance2, 3, instance3);
|
||||
MessageManager messageManager = new RingMessageManager(instanceMap);
|
||||
String messageContent = "2";
|
||||
var messageManager = new RingMessageManager(instanceMap);
|
||||
var messageContent = "2";
|
||||
messageManager.sendElectionMessage(2, messageContent);
|
||||
Message ringMessage = new Message(MessageType.ELECTION, messageContent);
|
||||
Class instanceClass = AbstractInstance.class;
|
||||
Field messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
var ringMessage = new Message(MessageType.ELECTION, messageContent);
|
||||
var instanceClass = AbstractInstance.class;
|
||||
var messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
messageQueueField.setAccessible(true);
|
||||
Message ringMessageSent = ((Queue<Message>) messageQueueField.get(instance3)).poll();
|
||||
var ringMessageSent = ((Queue<Message>) messageQueueField.get(instance3)).poll();
|
||||
assertEquals(ringMessageSent.getType(), ringMessage.getType());
|
||||
assertEquals(ringMessageSent.getContent(), ringMessage.getContent());
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
@ -70,18 +70,18 @@ public class RingMessageManagerTest {
|
||||
@Test
|
||||
public void testSendLeaderMessage() {
|
||||
try {
|
||||
Instance instance1 = new RingInstance(null, 1, 1);
|
||||
Instance instance2 = new RingInstance(null, 1, 2);
|
||||
Instance instance3 = new RingInstance(null, 1, 3);
|
||||
var instance1 = new RingInstance(null, 1, 1);
|
||||
var instance2 = new RingInstance(null, 1, 2);
|
||||
var instance3 = new RingInstance(null, 1, 3);
|
||||
Map<Integer, Instance> instanceMap = Map.of(1, instance1, 2, instance2, 3, instance3);
|
||||
MessageManager messageManager = new RingMessageManager(instanceMap);
|
||||
String messageContent = "3";
|
||||
var messageManager = new RingMessageManager(instanceMap);
|
||||
var messageContent = "3";
|
||||
messageManager.sendLeaderMessage(2, 3);
|
||||
Message ringMessage = new Message(MessageType.LEADER, messageContent);
|
||||
Class instanceClass = AbstractInstance.class;
|
||||
Field messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
var ringMessage = new Message(MessageType.LEADER, messageContent);
|
||||
var instanceClass = AbstractInstance.class;
|
||||
var messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
messageQueueField.setAccessible(true);
|
||||
Message ringMessageSent = ((Queue<Message>) messageQueueField.get(instance3)).poll();
|
||||
var ringMessageSent = ((Queue<Message>) messageQueueField.get(instance3)).poll();
|
||||
assertEquals(ringMessageSent, ringMessage);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
fail("Error to access private field.");
|
||||
@ -91,17 +91,17 @@ public class RingMessageManagerTest {
|
||||
@Test
|
||||
public void testSendHeartbeatInvokeMessage() {
|
||||
try {
|
||||
Instance instance1 = new RingInstance(null, 1, 1);
|
||||
Instance instance2 = new RingInstance(null, 1, 2);
|
||||
Instance instance3 = new RingInstance(null, 1, 3);
|
||||
var instance1 = new RingInstance(null, 1, 1);
|
||||
var instance2 = new RingInstance(null, 1, 2);
|
||||
var instance3 = new RingInstance(null, 1, 3);
|
||||
Map<Integer, Instance> instanceMap = Map.of(1, instance1, 2, instance2, 3, instance3);
|
||||
MessageManager messageManager = new RingMessageManager(instanceMap);
|
||||
var messageManager = new RingMessageManager(instanceMap);
|
||||
messageManager.sendHeartbeatInvokeMessage(2);
|
||||
Message ringMessage = new Message(MessageType.HEARTBEAT_INVOKE, "");
|
||||
Class instanceClass = AbstractInstance.class;
|
||||
Field messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
var ringMessage = new Message(MessageType.HEARTBEAT_INVOKE, "");
|
||||
var instanceClass = AbstractInstance.class;
|
||||
var messageQueueField = instanceClass.getDeclaredField("messageQueue");
|
||||
messageQueueField.setAccessible(true);
|
||||
Message ringMessageSent = ((Queue<Message>) messageQueueField.get(instance3)).poll();
|
||||
var ringMessageSent = ((Queue<Message>) messageQueueField.get(instance3)).poll();
|
||||
assertEquals(ringMessageSent.getType(), ringMessage.getType());
|
||||
assertEquals(ringMessageSent.getContent(), ringMessage.getContent());
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
|
Reference in New Issue
Block a user