package com.workshare.msnos.core;
import static com.workshare.msnos.core.CoreHelper.asPublicNetwork;
import static com.workshare.msnos.core.CoreHelper.asSet;
import static com.workshare.msnos.core.CoreHelper.fakeSystemTime;
import static com.workshare.msnos.core.CoreHelper.newAgentIden;
import static com.workshare.msnos.core.CoreHelper.randomUUID;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import java.util.Collections;
import java.util.Set;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.workshare.msnos.core.protocols.ip.BaseEndpoint;
import com.workshare.msnos.core.protocols.ip.Endpoint;
import com.workshare.msnos.core.protocols.ip.HttpEndpoint;
import com.workshare.msnos.core.protocols.ip.Network;
import com.workshare.msnos.soup.time.SystemTime;
public class RemoteAgentTest {
public static final Network NETWORK = asPublicNetwork("25.25.25.25");
private Cloud cloud;
@Before
public void before() throws Exception {
cloud = mock(Cloud.class);
}
@After
public void after() throws Exception {
SystemTime.reset();
}
@Test
public void shouldTouchWhenCreated() {
fakeSystemTime(12345L);
Set<Endpoint> endpoints = Collections.emptySet();
RemoteAgent agent = new RemoteAgent(randomUUID(), cloud, endpoints);
assertEquals(12345L, agent.getAccessTime());
}
@Test
public void shouldNotReturnHttpEndpointsIfNotPresent() {
Set<Endpoint> endpoints = Collections.emptySet();
RemoteAgent agent = new RemoteAgent(randomUUID(), cloud, endpoints);
assertEquals(0, agent.getEndpoints(Endpoint.Type.HTTP).size());
}
@Test
public void shouldNotReturnUDPEndpointsIfNotPresent() {
Set<Endpoint> endpoints = Collections.emptySet();
RemoteAgent agent = new RemoteAgent(randomUUID(), cloud, endpoints);
assertEquals(0, agent.getEndpoints(Endpoint.Type.UDP).size());
}
@Test
public void shouldReturnHttpEndpointsIfPresent() {
Iden iden = newAgentIden();
Endpoint http = newHttpEndpoint(iden);
RemoteAgent agent = new RemoteAgent(iden.getUUID(), cloud, asSet(http));
final Set<Endpoint> points = agent.getEndpoints(Endpoint.Type.HTTP);
assertEquals(1, points.size());
assertEquals(http, first(points));
}
@Test
public void shouldReturnUDPEndpointsIfPresent() {
Endpoint udp = new BaseEndpoint(Endpoint.Type.UDP, NETWORK);
RemoteAgent agent = new RemoteAgent(newAgentIden().getUUID(), cloud, asSet(udp));
final Set<Endpoint> points = agent.getEndpoints(Endpoint.Type.UDP);
assertEquals(1, points.size());
assertEquals(udp, first(points));
}
public static <T> T first(Set<T> set) {
return set.iterator().next();
}
public static HttpEndpoint newHttpEndpoint(Iden iden) {
return new HttpEndpoint(NETWORK, "http://foo", iden );
}
}