diff --git a/framework/src/test/java/org/tron/common/backup/BackupManagerTest.java b/framework/src/test/java/org/tron/common/backup/BackupManagerTest.java new file mode 100644 index 00000000000..8a5ff4f4bc2 --- /dev/null +++ b/framework/src/test/java/org/tron/common/backup/BackupManagerTest.java @@ -0,0 +1,90 @@ +package org.tron.common.backup; + +import java.lang.reflect.Field; +import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ScheduledExecutorService; +import org.junit.Assert; +import org.junit.Test; +import org.tron.common.backup.message.KeepAliveMessage; +import org.tron.common.backup.socket.UdpEvent; +import org.tron.common.parameter.CommonParameter; +import org.tron.core.Constant; +import org.tron.core.config.args.Args; + +public class BackupManagerTest { + + @Test + public void test() throws Exception { + String[] a = new String[0]; + Args.setParam(a, Constant.TESTNET_CONF); + CommonParameter parameter = CommonParameter.getInstance(); + parameter.setBackupPriority(8); + List members = new ArrayList<>(); + members.add("127.0.0.2"); + parameter.setBackupMembers(members); + + BackupManager manager = new BackupManager(); + + Field field = manager.getClass().getDeclaredField("localIp"); + field.setAccessible(true); + field.set(manager, "127.0.0.1"); + + Assert.assertEquals(manager.getStatus(), BackupManager.BackupStatusEnum.MASTER); + + field = manager.getClass().getDeclaredField("executorService"); + field.setAccessible(true); + ScheduledExecutorService executorService = (ScheduledExecutorService) field.get(manager); + manager.init(); + executorService.shutdown(); + Assert.assertEquals(manager.getStatus(), BackupManager.BackupStatusEnum.INIT); + + /* ip not in the members */ + manager.setStatus(BackupManager.BackupStatusEnum.INIT); + KeepAliveMessage message = new KeepAliveMessage(false, 6); + InetSocketAddress address = new InetSocketAddress("127.0.0.3", 1000); + UdpEvent event = new UdpEvent(message, address); + manager.handleEvent(event); + Assert.assertEquals(manager.getStatus(), BackupManager.BackupStatusEnum.INIT); + + /* ip not the member */ + address = new InetSocketAddress("127.0.0.3", 1000); + message = new KeepAliveMessage(false, 6); + event = new UdpEvent(message, address); + manager.handleEvent(event); + Assert.assertEquals(manager.getStatus(), BackupManager.BackupStatusEnum.INIT); + + /* keepAliveMessage.getFlag() || peerPriority > priority */ + address = new InetSocketAddress("127.0.0.2", 1000); + message = new KeepAliveMessage(false, 6); + event = new UdpEvent(message, address); + manager.handleEvent(event); + Assert.assertEquals(manager.getStatus(), BackupManager.BackupStatusEnum.INIT); + + /* keepAliveMessage.getFlag() || peerPriority > priority */ + message = new KeepAliveMessage(false, 10); + event = new UdpEvent(message, address); + manager.handleEvent(event); + Assert.assertEquals(manager.getStatus(), BackupManager.BackupStatusEnum.SLAVER); + + /* keepAliveMessage.getFlag() || peerPriority > priority */ + manager.setStatus(BackupManager.BackupStatusEnum.INIT); + message = new KeepAliveMessage(true, 6); + event = new UdpEvent(message, address); + manager.handleEvent(event); + Assert.assertEquals(manager.getStatus(), BackupManager.BackupStatusEnum.SLAVER); + + manager.setStatus(BackupManager.BackupStatusEnum.MASTER); + message = new KeepAliveMessage(false, 10); + event = new UdpEvent(message, address); + manager.handleEvent(event); + Assert.assertEquals(manager.getStatus(), BackupManager.BackupStatusEnum.MASTER); + + message = new KeepAliveMessage(true, 10); + event = new UdpEvent(message, address); + manager.handleEvent(event); + Assert.assertEquals(manager.getStatus(), BackupManager.BackupStatusEnum.SLAVER); + + } +} diff --git a/framework/src/test/java/org/tron/common/backup/KeepAliveMessageTest.java b/framework/src/test/java/org/tron/common/backup/KeepAliveMessageTest.java new file mode 100644 index 00000000000..a93e044db03 --- /dev/null +++ b/framework/src/test/java/org/tron/common/backup/KeepAliveMessageTest.java @@ -0,0 +1,32 @@ +package org.tron.common.backup; + +import static org.tron.common.backup.message.UdpMessageTypeEnum.BACKUP_KEEP_ALIVE; + +import org.junit.Test; +import org.testng.Assert; +import org.tron.common.backup.message.KeepAliveMessage; +import org.tron.protos.Discover; + +public class KeepAliveMessageTest { + + @Test + public void test() throws Exception { + KeepAliveMessage m1 = new KeepAliveMessage(true, 10); + Assert.assertTrue(m1.getFlag()); + Assert.assertEquals(m1.getPriority(), 10); + Assert.assertEquals(m1.getType(), BACKUP_KEEP_ALIVE); + Assert.assertEquals(m1.getFrom(), null); + Assert.assertEquals(m1.getTimestamp(), 0); + Assert.assertEquals(m1.getData().length + 1, m1.getSendData().length); + + + Discover.BackupMessage backupMessage = Discover.BackupMessage.newBuilder() + .setFlag(true).setPriority(10).build(); + KeepAliveMessage m2 = new KeepAliveMessage(backupMessage.toByteArray()); + Assert.assertTrue(m2.getFlag()); + Assert.assertEquals(m2.getPriority(), 10); + Assert.assertEquals(m2.getType(), BACKUP_KEEP_ALIVE); + + Assert.assertEquals(m2.getMessageId().getBytes(), m1.getMessageId().getBytes()); + } +} diff --git a/framework/src/test/java/org/tron/common/backup/UdpMessageTypeEnumTest.java b/framework/src/test/java/org/tron/common/backup/UdpMessageTypeEnumTest.java new file mode 100644 index 00000000000..e3ded4a23e5 --- /dev/null +++ b/framework/src/test/java/org/tron/common/backup/UdpMessageTypeEnumTest.java @@ -0,0 +1,23 @@ +package org.tron.common.backup; + +import static org.tron.common.backup.message.UdpMessageTypeEnum.BACKUP_KEEP_ALIVE; +import static org.tron.common.backup.message.UdpMessageTypeEnum.UNKNOWN; + +import org.junit.Test; +import org.testng.Assert; +import org.tron.common.backup.message.UdpMessageTypeEnum; + +public class UdpMessageTypeEnumTest { + + @Test + public void test() { + UdpMessageTypeEnum type = UdpMessageTypeEnum.fromByte((byte) 5); + Assert.assertEquals(type.getType(), (byte) 0x05); + Assert.assertEquals(type, BACKUP_KEEP_ALIVE); + + + type = UdpMessageTypeEnum.fromByte((byte) 1); + Assert.assertEquals(type.getType(), (byte) 0xFF); + Assert.assertEquals(type, UNKNOWN); + } +}