package dslab.routing; import dslab.nameserver.INameserverRemote; import org.junit.Test; import static dslab.TestObjects.*; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; public class DomainNameResolverTest { @Test public void resolvesMailserverAddress() throws Exception { var rootRemote = rootRemote(); var marsPlanet = new Domain("mars.planet"); rootRemote.registerMailboxServer("mars.planet", "127.0.0.1:123"); var resolver = new DomainNameResolver(rootRemote); resolver.resolve(marsPlanet); assertEquals("127.0.0.1", marsPlanet.getAddress().getHostAddress()); assertEquals(123, marsPlanet.getPort()); } /** * The whole point of distributed address resolution for our mailservers is to avoid bottlenecks, i.e. * not to contact the root name server on every resolution attempt. Our impl therefore needs to cache * addresses once they are resolved */ @Test public void shouldCacheMailserverAddresses() throws Exception { var rootRemote = mock(INameserverRemote.class); when(rootRemote.getNameserver("planet")).thenReturn(planetRemote()); when(rootRemote.lookup("earth")).thenReturn("127.0.0.1:123"); var resolver = new DomainNameResolver(rootRemote); resolver.resolve(earthPlanet()); //actually resolve resolver.resolve(earthPlanet()); //get from cache verify(rootRemote, times(1)).getNameserver("planet"); } }