package org.jolokia.discovery;
import java.io.IOException;
import java.net.DatagramPacket;
import java.util.Arrays;
import org.json.simple.JSONObject;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
/**
* @author roland
* @since 04.02.14
*/
public class DiscoveryMessageTest {
@Test(expectedExceptions = IllegalArgumentException.class,expectedExceptionsMessageRegExp = ".*maximum.*" + AbstractDiscoveryMessage.MAX_MSG_SIZE + ".*")
public void messageTooBig() {
AbstractDiscoveryMessage msg = new AbstractDiscoveryMessage() {};
msg.setType(AbstractDiscoveryMessage.MessageType.QUERY);
msg.setAgentDetails(getAgentDetailsLargerThan(AbstractDiscoveryMessage.MAX_MSG_SIZE));
msg.getData();
}
@Test
public void incomingIgnoredPayload() throws IOException {
DiscoveryIncomingMessage in = new DiscoveryIncomingMessage(createDatagramPacket(
"type", AbstractDiscoveryMessage.MessageType.RESPONSE.toString().toLowerCase(),
"blubber","bla",
"url","http://localhost:8080/jolokia",
"agent_id","test",
"secured",false));
String inS = in.toString();
assertFalse(inS.contains("blubber"));
assertTrue(inS.contains("url"));
AgentDetails details = in.getAgentDetails();
JSONObject json = details.toJSONObject();
assertEquals(json.get("secured"),false);
assertEquals(json.get("url"),"http://localhost:8080/jolokia");
assertNull(json.get("blubber"));
}
@Test(expectedExceptions = IOException.class,expectedExceptionsMessageRegExp = ".*type.*")
public void incomingNoType() throws IOException {
new DiscoveryIncomingMessage(createDatagramPacket());
}
@Test(expectedExceptions = IOException.class,expectedExceptionsMessageRegExp = ".*type.*bla.*")
public void incomingWrongType() throws IOException {
new DiscoveryIncomingMessage(createDatagramPacket("type","bla"));
}
@Test(expectedExceptions = IOException.class,expectedExceptionsMessageRegExp = ".*not.*parse.*")
public void incomingWithLargerBuf() throws IOException {
JSONObject data = new JSONObject();
data.put("type", AbstractDiscoveryMessage.MessageType.QUERY.toString());
String json = data.toJSONString();
byte[] largeBuf = Arrays.copyOf(json.getBytes(),json.length() + 512);
DiscoveryIncomingMessage in = new DiscoveryIncomingMessage(new DatagramPacket(largeBuf,largeBuf.length));
}
public DatagramPacket createDatagramPacket(Object ... vals) {
JSONObject data = new JSONObject();
for (int i = 0; i < vals.length; i+=2) {
data.put(vals[i],vals[i+1]);
}
String json = data.toJSONString();
return new DatagramPacket(json.getBytes(),json.getBytes().length);
}
private AgentDetails getAgentDetailsLargerThan(int size) {
AgentDetails details = new AgentDetails("test-id");
details.setServerInfo("test","test","test");
StringBuffer large = new StringBuffer();
for (int i = 0; i < size; i++) {
large.append("Y");
}
details.setUrl(large.toString());
details.setSecured(true);
return details;
}
}