DS-Lab / src / test / java / dslab / routing / DomainNameResolverTest.java
DomainNameResolverTest.java
Raw
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");
    }
}