Java 11 support for #984 #987 (l) (#1190)

* Java 11 support: lazy-loading pattern

* Java 11 support: layers pattern

* Java 11 support: leader-election/lazy-loading patterns
This commit is contained in:
Zhang WH
2020-03-23 02:02:45 +08:00
committed by GitHub
parent 0ad67c8726
commit 67edeb806d
23 changed files with 238 additions and 243 deletions

View File

@ -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());
}

View File

@ -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) {

View File

@ -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());
}

View File

@ -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());
}

View File

@ -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) {