You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by rj...@apache.org on 2008/03/31 13:54:27 UTC

svn commit: r642969 - in /directory/sandbox/slp/src/test: ./ java/ java/org/ java/org/apache/ java/org/apache/directory/ java/org/apache/directory/server/ java/org/apache/directory/server/slp/ java/org/apache/directory/server/slp/messages/

Author: rjan
Date: Mon Mar 31 04:54:25 2008
New Revision: 642969

URL: http://svn.apache.org/viewvc?rev=642969&view=rev
Log:
added the message test. Resolves JIRA issue DIRSERVER-1133.

Added:
    directory/sandbox/slp/src/test/
    directory/sandbox/slp/src/test/java/
    directory/sandbox/slp/src/test/java/org/
    directory/sandbox/slp/src/test/java/org/apache/
    directory/sandbox/slp/src/test/java/org/apache/directory/
    directory/sandbox/slp/src/test/java/org/apache/directory/server/
    directory/sandbox/slp/src/test/java/org/apache/directory/server/slp/
    directory/sandbox/slp/src/test/java/org/apache/directory/server/slp/messages/
    directory/sandbox/slp/src/test/java/org/apache/directory/server/slp/messages/MessageTest.java

Added: directory/sandbox/slp/src/test/java/org/apache/directory/server/slp/messages/MessageTest.java
URL: http://svn.apache.org/viewvc/directory/sandbox/slp/src/test/java/org/apache/directory/server/slp/messages/MessageTest.java?rev=642969&view=auto
==============================================================================
--- directory/sandbox/slp/src/test/java/org/apache/directory/server/slp/messages/MessageTest.java (added)
+++ directory/sandbox/slp/src/test/java/org/apache/directory/server/slp/messages/MessageTest.java Mon Mar 31 04:54:25 2008
@@ -0,0 +1,412 @@
+package org.apache.directory.server.slp.messages;
+
+import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.directory.server.slp.ServiceLocationException;
+import org.apache.directory.server.slp.ServiceType;
+import org.apache.directory.server.slp.ServiceURL;
+import org.apache.directory.server.slp.codec.SLPProtocolCodecFactory;
+import org.apache.mina.common.ConnectFuture;
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.LoggingFilter;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.transport.socket.nio.DatagramAcceptor;
+import org.apache.mina.transport.socket.nio.DatagramConnector;
+import org.apache.mina.transport.socket.nio.SocketAcceptor;
+import org.apache.mina.transport.socket.nio.SocketConnector;
+
+
+import junit.framework.TestCase;
+
+public class MessageTest extends TestCase implements IoHandler {
+
+    private SocketAcceptor acceptor;
+
+    private DatagramAcceptor udpAcceptor;
+
+    private SocketConnector connector;
+
+    private DatagramConnector udpConnector;
+
+    private IoSession clientSession;
+
+    private final Locale locale = new Locale("en");
+
+    private final String[] attrs = new String[] { "one", "two", "three" };
+
+    private final String[] responders = new String[] { "192.168.1.1",
+            "10.1.9.201" };
+
+    private final String[] scopes = new String[] { "default", "special",
+            "hidden" };
+
+    private final String[] tags = new String[] { "attr1", "attr3" };
+
+    private final ServiceURL url;
+
+    private final ServiceURL[] urls;
+
+    private final String predicate = "(&(resolution>300)(color=true))";
+
+    private final ServiceType[] serviceTypes;
+
+    private List queue = new ArrayList();
+
+    private boolean udp = false;
+
+    public MessageTest() throws ServiceLocationException {
+        url = new ServiceURL("service:test://localhost",
+                ServiceURL.LIFETIME_DEFAULT);
+        urls = new ServiceURL[] {
+                new ServiceURL("service:test://localhost",
+                        ServiceURL.LIFETIME_DEFAULT),
+                new ServiceURL("service:test2://localhost",
+                        ServiceURL.LIFETIME_MAXIMUM),
+                new ServiceURL("service:test3://localhost",
+                        ServiceURL.LIFETIME_PERMANENT) };
+
+        serviceTypes = new ServiceType[] {
+                new ServiceType("service:osgi:test"),
+                new ServiceType("service:one:two"),
+                new ServiceType("service:dummy"),
+                new ServiceType("service:none") };
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        acceptor = new SocketAcceptor();
+        acceptor.getFilterChain().addLast("logger", new LoggingFilter());
+        acceptor.getFilterChain().addLast("protocol",
+                new ProtocolCodecFilter(new SLPProtocolCodecFactory()));
+        acceptor.bind(new InetSocketAddress(10000), this);
+
+        udpAcceptor = new DatagramAcceptor();
+        udpAcceptor.getFilterChain().addLast("logger", new LoggingFilter());
+        udpAcceptor.getFilterChain().addLast("protocol",
+                new ProtocolCodecFilter(new SLPProtocolCodecFactory()));
+        udpAcceptor.bind(new InetSocketAddress(10000), this);
+
+        connector = new SocketConnector();
+        connector.getFilterChain().addLast("logger", new LoggingFilter());
+        connector.getFilterChain().addLast("protocol",
+                new ProtocolCodecFilter(new SLPProtocolCodecFactory()));
+        udpConnector = new DatagramConnector();
+        udpConnector.getFilterChain().addLast("logger", new LoggingFilter());
+        udpConnector.getFilterChain().addLast("protocol",
+                new ProtocolCodecFilter(new SLPProtocolCodecFactory()));
+
+        final ConnectFuture connectFuture;
+        if (udp) {
+            connectFuture = udpConnector.connect(new InetSocketAddress(
+                    "localhost", 10000), this);
+        } else {
+            connectFuture = connector.connect(new InetSocketAddress(
+                    "localhost", 10000), this);
+        }
+        while (!connectFuture.isConnected()) {
+
+        }
+        clientSession = connectFuture.getSession();
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        acceptor.unbindAll();
+    }
+
+    public void testAttributeReplyMessage() throws InterruptedException {
+        final AttributeReplyMessage msg = new AttributeReplyMessage();
+        msg.setLocale(locale);
+        msg.setXid((short) 100);
+        msg.setAttributes(attrs);
+        msg.setErrorCode((short) 1);
+        clientSession.write(msg);
+
+        final AbstractSLPMessage msg2 = waitForMessage();
+
+        assertTrue(msg2 instanceof AttributeReplyMessage);
+        final AttributeReplyMessage rcv = (AttributeReplyMessage) msg2;
+
+        assertEquals(rcv.getLocale(), msg.getLocale());
+        assertEquals(rcv.xid, 100);
+        assertEquals(rcv.getAttributes(), msg.getAttributes());
+        assertEquals(rcv.getErrorCode(), 1);
+    }
+
+    public void testAttributeRequestMessage() throws Exception {
+        final AttributeRequestMessage msg = new AttributeRequestMessage();
+        msg.setLocale(locale);
+        msg.setXid((short) 100);
+        msg.setPrevResponders(responders);
+        msg.setServiceURL(url);
+        msg.setScopes(scopes);
+        msg.setTags(tags);
+        clientSession.write(msg);
+
+        final AbstractSLPMessage msg2 = waitForMessage();
+        assertTrue(msg2 instanceof AttributeRequestMessage);
+        final AttributeRequestMessage rcv = (AttributeRequestMessage) msg2;
+
+        assertEquals(rcv.getLocale(), msg.getLocale());
+        assertEquals(rcv.xid, 100);
+        assertEquals(rcv.getPrevResponders(), responders);
+        assertEquals(rcv.getServiceUrl(), url);
+        assertEquals(rcv.getScopes(), scopes);
+        assertEquals(rcv.getTags(), tags);
+    }
+
+    public void testServiceAcknowledgementMessage() throws Exception {
+        final ServiceAcknowledgementMessage msg = new ServiceAcknowledgementMessage();
+        msg.setLocale(locale);
+        msg.setXid((short) 1000);
+        msg.setErrorCode((short) 10);
+
+        clientSession.write(msg);
+
+        final AbstractSLPMessage msg2 = waitForMessage();
+        assertTrue(msg2 instanceof ServiceAcknowledgementMessage);
+        final ServiceAcknowledgementMessage rcv = (ServiceAcknowledgementMessage) msg2;
+
+        assertEquals(rcv.getLocale(), msg.getLocale());
+        assertEquals(rcv.xid, 1000);
+        assertEquals(rcv.getErrorCode(), 10);
+    }
+
+    public void testDAAdvertisementMessage() throws Exception {
+        final DAAdvertisementMessage msg = new DAAdvertisementMessage();
+        msg.setLocale(locale);
+        msg.setXid((short) 1000);
+        msg.setErrorCode((short) 10);
+        msg.setAttributes(attrs);
+        msg.setScopes(scopes);
+        msg.setServiceURL(url);
+        msg.setStatelessBootTimestamp(111);
+
+        clientSession.write(msg);
+
+        final AbstractSLPMessage msg2 = waitForMessage();
+        assertTrue(msg2 instanceof DAAdvertisementMessage);
+        final DAAdvertisementMessage rcv = (DAAdvertisementMessage) msg2;
+
+        assertEquals(rcv.getLocale(), msg.getLocale());
+        assertEquals(rcv.xid, 1000);
+        assertEquals(rcv.getErrorCode(), 10);
+        assertEquals(rcv.getAttributes(), attrs);
+        assertEquals(rcv.getScopes(), scopes);
+        assertEquals(rcv.getServiceURL(), url);
+        assertEquals(rcv.getStatelessBootTimestamp(), 111);
+    }
+
+    public void testServiceDeregistrationMessage() throws Exception {
+        final ServiceDeregistrationMessage msg = new ServiceDeregistrationMessage();
+        msg.setLocale(locale);
+        msg.setXid((short) 1000);
+        msg.setScopes(scopes);
+        msg.setServiceURL(url);
+        msg.setTags(tags);
+
+        clientSession.write(msg);
+
+        final AbstractSLPMessage msg2 = waitForMessage();
+        assertTrue(msg2 instanceof ServiceDeregistrationMessage);
+        final ServiceDeregistrationMessage rcv = (ServiceDeregistrationMessage) msg2;
+
+        assertEquals(rcv.getLocale(), msg.getLocale());
+        assertEquals(rcv.xid, 1000);
+        assertEquals(rcv.getScopes(), scopes);
+        assertEquals(rcv.getServiceURL(), url);
+        assertEquals(rcv.getTags(), tags);
+    }
+
+    public void testServiceRegistrationMessage() throws Exception {
+        final ServiceRegistrationMessage msg = new ServiceRegistrationMessage();
+
+        msg.setLocale(locale);
+        msg.setXid((short) 1000);
+        msg.setScopes(scopes);
+        msg.setAttrList(attrs);
+        msg.setServiceType(url.getServiceType());
+        msg.setServiceURL(url);
+
+        clientSession.write(msg);
+
+        final AbstractSLPMessage msg2 = waitForMessage();
+        assertTrue(msg2 instanceof ServiceRegistrationMessage);
+        final ServiceRegistrationMessage rcv = (ServiceRegistrationMessage) msg2;
+
+        assertEquals(rcv.getLocale(), msg.getLocale());
+        assertEquals(rcv.xid, 1000);
+        assertEquals(rcv.getScopes(), scopes);
+        assertEquals(rcv.getAttrList(), attrs);
+        assertEquals(rcv.getServiceType(), url.getServiceType());
+        assertEquals(rcv.getServiceURL(), url);
+    }
+
+    public void testServiceReplyMessage() throws Exception {
+        final ServiceReplyMessage msg = new ServiceReplyMessage();
+
+        msg.setLocale(locale);
+        msg.setXid((short) 1000);
+        msg.setErrorCode((short) 1);
+        msg.setServiceURLs(urls);
+
+        clientSession.write(msg);
+
+        final AbstractSLPMessage msg2 = waitForMessage();
+        assertTrue(msg2 instanceof ServiceReplyMessage);
+        final ServiceReplyMessage rcv = (ServiceReplyMessage) msg2;
+
+        assertEquals(rcv.getLocale(), msg.getLocale());
+        assertEquals(rcv.xid, 1000);
+        assertEquals(rcv.getErrorCode(), 1);
+        assertEquals(rcv.getServiceURLs(), urls);
+    }
+
+    public void testServiceRequestMessage() throws Exception {
+        final ServiceRequestMessage msg = new ServiceRequestMessage();
+
+        msg.setLocale(locale);
+        msg.setXid((short) 1000);
+        msg.setPredicate(predicate);
+        msg.setPrevResponders(responders);
+        msg.setScopes(scopes);
+        msg.setServiceType(url.getServiceType());
+
+        clientSession.write(msg);
+
+        final AbstractSLPMessage msg2 = waitForMessage();
+        assertTrue(msg2 instanceof ServiceRequestMessage);
+        final ServiceRequestMessage rcv = (ServiceRequestMessage) msg2;
+
+        assertEquals(rcv.getLocale(), msg.getLocale());
+        assertEquals(rcv.xid, 1000);
+        assertEquals(rcv.getPredicate(), predicate);
+        assertEquals(rcv.getPrevResponders(), responders);
+        assertEquals(rcv.getScopes(), scopes);
+        assertEquals(rcv.getServiceType(), url.getServiceType());
+    }
+
+    public void testServiceTypeReplyMessage() throws Exception {
+        final ServiceTypeReplyMessage msg = new ServiceTypeReplyMessage();
+
+        msg.setLocale(locale);
+        msg.setXid((short) 1000);
+        msg.setErrorCode((short) 1);
+        msg.setServiceTypes(serviceTypes);
+
+        clientSession.write(msg);
+
+        final AbstractSLPMessage msg2 = waitForMessage();
+        assertTrue(msg2 instanceof ServiceTypeReplyMessage);
+        final ServiceTypeReplyMessage rcv = (ServiceTypeReplyMessage) msg2;
+
+        assertEquals(rcv.getLocale(), msg.getLocale());
+        assertEquals(rcv.xid, 1000);
+        assertEquals(rcv.getErrorCode(), 1);
+        assertEquals(rcv.getServiceTypes(), serviceTypes);
+    }
+
+    public void testServiceTypeRequestMessage() throws Exception {
+        final ServiceTypeRequestMessage msg = new ServiceTypeRequestMessage();
+
+        msg.setLocale(locale);
+        msg.setXid((short) 1000);
+        msg.setPrevResponders(responders);
+        msg.setScopes(scopes);
+        msg.setNamingAuthority("IANA");
+
+        clientSession.write(msg);
+
+        final AbstractSLPMessage msg2 = waitForMessage();
+        assertTrue(msg2 instanceof ServiceTypeRequestMessage);
+        final ServiceTypeRequestMessage rcv = (ServiceTypeRequestMessage) msg2;
+
+        assertEquals(rcv.getLocale(), msg.getLocale());
+        assertEquals(rcv.xid, 1000);
+        assertEquals(rcv.getPrevResponders(), responders);
+        assertEquals(rcv.getScopes(), scopes);
+        assertEquals(rcv.getNamingAuthority(), "IANA");
+    }
+
+    public static void assertEquals(String[] sa1, String[] sa2) {
+        assertEquals(sa1.length, sa2.length);
+        for (int i = 0; i < sa1.length; i++) {
+            assertEquals(sa1[i], sa2[i]);
+        }
+    }
+
+    public static void assertEquals(ServiceURL url1, ServiceURL url2) {
+        assertEquals(url1.toString(), url2.toString());
+    }
+
+    public static void assertEquals(ServiceURL[] urls1, ServiceURL[] urls2) {
+        assertEquals(urls1.length, urls2.length);
+        for (int i = 0; i < urls1.length; i++) {
+            assertEquals(urls1[i], urls2[i]);
+        }
+    }
+
+    public static void assertEquals(ServiceType[] st1, ServiceType[] st2) {
+        assertEquals(st1.length, st2.length);
+        for (int i = 0; i < st1.length; i++) {
+            assertEquals(st1[i].toString(), st2[i].toString());
+        }
+    }
+
+    public void exceptionCaught(IoSession session, Throwable cause)
+            throws Exception {
+        cause.printStackTrace();
+        fail(cause.getMessage());
+    }
+
+    public void messageReceived(IoSession session, Object message)
+            throws Exception {
+        System.out.println("RECEIVED " + message);
+        synchronized (queue) {
+            queue.add(message);
+            queue.notifyAll();
+        }
+
+    }
+
+    public void messageSent(IoSession session, Object message) throws Exception {
+        System.out.println("SENT MESSAGE " + message);
+    }
+
+    public void sessionClosed(IoSession session) throws Exception {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void sessionCreated(IoSession session) throws Exception {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void sessionIdle(IoSession session, IdleStatus status)
+            throws Exception {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void sessionOpened(IoSession session) throws Exception {
+        // TODO Auto-generated method stub
+
+    }
+
+    private final AbstractSLPMessage waitForMessage()
+            throws InterruptedException {
+        synchronized (queue) {
+            while (queue.isEmpty()) {
+                queue.wait();
+            }
+            return (AbstractSLPMessage) queue.remove(0);
+        }
+    }
+
+}