DS-Lab / src / test / java / dslab / monitoring / MonitoringClientTest.java
MonitoringClientTest.java
Raw
package dslab.monitoring;

import dslab.rmi.channel.DatagramReadOnlyChannel;
import dslab.util.MonitoringConfig;
import dslab.util.TransferServerConfig;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ErrorCollector;

import java.net.DatagramSocket;

import static dslab.TestObjects.*;
import static dslab.protocol.MessageBuilder.aMessage;
import static org.hamcrest.CoreMatchers.containsString;

public class MonitoringClientTest {

    private final ErrorCollector err = new ErrorCollector();

    @Test(timeout = 2000) //timeout because this test blocks forever if it fails
    public void shouldReportTwiceForMessageToTwoRecipients() throws Exception {

        //arrange
        var monitoring = new MonitoringClient(new TransferServerConfig("transfer-1"));
        var channel = new DatagramReadOnlyChannel(new DatagramSocket(new MonitoringConfig().udpPort()));

        //act
        monitoring.report(aMessage()
                .recipients(arthurAtEarthPlanet, trillianAtEarthPlanet)
                .sender(zaphodAtUniverZe)
                .build());

        //assert
        err.checkThat(channel.read(), containsString("zaphod@univer.ze"));
        err.checkThat(channel.read(), containsString("zaphod@univer.ze"));

        //cleanup
        channel.close();
    }
}