package eu.hgross.blaubot.test; import org.junit.Test; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import eu.hgross.blaubot.core.State; import eu.hgross.blaubot.core.acceptor.ConnectionMetaDataDTO; import eu.hgross.blaubot.admin.ACKPronouncePrinceAdminMessage; import eu.hgross.blaubot.admin.AbstractAdminMessage; import eu.hgross.blaubot.admin.BowDownToNewKingAdminMessage; import eu.hgross.blaubot.admin.CensusMessage; import eu.hgross.blaubot.admin.CloseRelayConnectionAdminMessage; import eu.hgross.blaubot.admin.DiscoveredDeviceAdminMessage; import eu.hgross.blaubot.admin.PrinceFoundAKingAdminMessage; import eu.hgross.blaubot.admin.PronouncePrinceAdminMessage; import eu.hgross.blaubot.admin.RelayAdminMessage; import eu.hgross.blaubot.admin.ServerConnectionAvailableAdminMessage; import eu.hgross.blaubot.admin.ServerConnectionDownAdminMessage; import eu.hgross.blaubot.messaging.BlaubotMessage; import static org.junit.Assert.assertTrue; /** * Testing the serialization and deserialization of {@link AbstractAdminMessage} * s to and from {@link BlaubotMessage}s. * * @author Henning Gross {@literal (mail.to@henning-gross.de)} * */ public class AdminMessagesTest { @Test public void testPrinceAdminMessage() { PronouncePrinceAdminMessage ppam = new PronouncePrinceAdminMessage("test", new ArrayList<ConnectionMetaDataDTO>()); assertSerialization(ppam, PronouncePrinceAdminMessage.class); } @Test public void testBowDownToNewKingMessage() { BowDownToNewKingAdminMessage adminMsg = new BowDownToNewKingAdminMessage("someUniqueDeviceId", new ArrayList<ConnectionMetaDataDTO>()); assertSerialization(adminMsg, BowDownToNewKingAdminMessage.class); } @Test public void testCensusMessage() { Map<String, State> censusMessages = new HashMap<String, State>(); censusMessages.put("aUniqueId", State.Prince); censusMessages.put("aUniqueId2", State.Peasant); censusMessages.put("aUniqueId3", State.Free); censusMessages.put("aUniqueId4", State.King); censusMessages.put("aUniqueId5", State.Stopped); CensusMessage adminMsg = new CensusMessage(censusMessages); assertSerialization(adminMsg, CensusMessage.class); } @Test public void testPrinceFoundAKingMessage() { PrinceFoundAKingAdminMessage adminMsg = new PrinceFoundAKingAdminMessage("foundKingUniqueId", new ArrayList<ConnectionMetaDataDTO>()); assertSerialization(adminMsg, PrinceFoundAKingAdminMessage.class); } @Test public void testAckPronouncePrinceMessage() { ArrayList<ConnectionMetaDataDTO> metaData = new ArrayList<>(); ACKPronouncePrinceAdminMessage adminMsg = new ACKPronouncePrinceAdminMessage("foundKingUniqueId", metaData); assertSerialization(adminMsg, ACKPronouncePrinceAdminMessage.class); } @Test public void testCloseRelayConnectionAdminMessage() { CloseRelayConnectionAdminMessage closeRelayConnectionAdminMessage = new CloseRelayConnectionAdminMessage("mediatorId"); assertSerialization(closeRelayConnectionAdminMessage, CloseRelayConnectionAdminMessage.class); } @Test public void testConnectionUpAdminMessage() { ServerConnectionAvailableAdminMessage availableAdminMessage = new ServerConnectionAvailableAdminMessage("mediatorId", "recipientId"); assertSerialization(availableAdminMessage, ServerConnectionAvailableAdminMessage.class); } @Test public void testConnectionDownAdminMessage() { ServerConnectionDownAdminMessage downAdminMessage = new ServerConnectionDownAdminMessage("mediatorId"); assertSerialization(downAdminMessage, ServerConnectionDownAdminMessage.class); } @Test public void testRelayAdminMessage() { BlaubotMessage anyMessage = new ServerConnectionDownAdminMessage("mdiatorId").toBlaubotMessage(); RelayAdminMessage relayAdminMessage = new RelayAdminMessage(anyMessage); assertSerialization(relayAdminMessage, RelayAdminMessage.class); } @Test public void testDiscoveredDeviceAdminMessage() { DiscoveredDeviceAdminMessage adminMessage = new DiscoveredDeviceAdminMessage("uniqueDeviceId", State.Free, new ArrayList<ConnectionMetaDataDTO>()); assertSerialization(adminMessage, DiscoveredDeviceAdminMessage.class); } private void assertSerialization(AbstractAdminMessage adminMsg, Class type) { BlaubotMessage bbm = adminMsg.toBlaubotMessage(); byte[] payload = bbm.getPayload(); BlaubotMessage deserialized = new BlaubotMessage(); deserialized.setPayload(payload); AbstractAdminMessage adminMsgDeserialized = null; try { adminMsgDeserialized = (AbstractAdminMessage) type.getConstructor(BlaubotMessage.class).newInstance(deserialized); } catch (Exception e) { throw new RuntimeException(e); } assertTrue(adminMsg.equals(adminMsgDeserialized)); } }