/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.wordpress.salaboy.sensor.udp; import com.wordpress.salaboy.sensor.SensorDataParser; import com.wordpress.salaboy.sensor.SensorMessageProducer; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.ArrayList; import java.util.List; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.*; /** * * @author esteban */ public class UDPSensorServerTest { public final static int SERVER_PORT = 1555; public UDPSensorServerTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { } @After public void tearDown() { } /** * Test UDPSensorServer's life cycle. */ @Test public void testServer() throws Exception { String message = "FAKE_DATA"; MockSensorDataParser sensorDataParser = new MockSensorDataParser(); MockSensorMessageProducer sensorMessageProducer = new MockSensorMessageProducer(); //Creates a UDPSensorServer UDPSensorServer server = new UDPSensorServer(sensorDataParser, sensorMessageProducer); //server shouldn't be running assertFalse(server.isRunning()); //starts the server server.startService(InetAddress.getLocalHost().getHostAddress(), SERVER_PORT,message.getBytes().length); //Waits until the server is up Thread.sleep(500); //server should be running now assertTrue(server.isRunning()); //Test that the server is really running byte[] data = message.getBytes(); DatagramSocket datagramSocket = new DatagramSocket(); datagramSocket.send(new DatagramPacket(data, 0, data.length, InetAddress.getLocalHost(), SERVER_PORT)); datagramSocket.close(); Thread.sleep(1000); assertEquals(1, sensorDataParser.getParsedData().size()); assertEquals(message, sensorDataParser.getParsedData().get(0)); assertEquals(1, sensorMessageProducer.getInformedMessages().size()); assertEquals("1.0", sensorMessageProducer.getInformedMessages().get(0).toString()); //stops the server server.stopService(); //server shouldn't be running anymore assertFalse(server.isRunning()); } } class MockSensorDataParser implements SensorDataParser{ private List<String> parsedData = new ArrayList<String>(); @Override public double parseData(String data) { parsedData.add(data); return parsedData.size(); } public List<String> getParsedData() { return parsedData; } @Override public boolean isValidData(String data) { return true; } } class MockSensorMessageProducer extends SensorMessageProducer{ private List<Double> informedMessages = new ArrayList<Double>(); public MockSensorMessageProducer() { super(null); } @Override public void informMessage(double heartBeat) throws Exception { informedMessages.add(heartBeat); } public List<Double> getInformedMessages() { return informedMessages; } }