You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2006/11/20 10:07:43 UTC

svn commit: r477113 - in /james/server/trunk/src: conf/ java/org/apache/james/core/ java/org/apache/james/management/ java/org/apache/james/remotemanager/ java/org/apache/james/services/ java/org/apache/james/util/ java/org/apache/james/vut/ test/org/a...

Author: norman
Date: Mon Nov 20 01:07:39 2006
New Revision: 477113

URL: http://svn.apache.org/viewvc?view=rev&rev=477113
Log:
Add method which return all mappings to RemoteManager and management interfaces. See JAMES-706
Start to write junit tests
Move some utils methods from AbstractVirtualUserTable to VirtualUserTableUtil

Added:
    james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java   (with props)
    james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableStore.java   (with props)
Modified:
    james/server/trunk/src/conf/sqlResources.xml
    james/server/trunk/src/java/org/apache/james/core/DefaultVirtualUserTable.java
    james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java
    james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
    james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagement.java
    james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagementService.java
    james/server/trunk/src/java/org/apache/james/util/VirtualUserTableUtil.java
    james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java
    james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java
    james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java
    james/server/trunk/src/test/org/apache/james/remotemanager/RemoteManagerTest.java
    james/server/trunk/src/test/org/apache/james/vut/AbstractVirtualUserTableTest.java
    james/server/trunk/src/test/org/apache/james/vut/XMLVirtualUserTableTest.java

Modified: james/server/trunk/src/conf/sqlResources.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/src/conf/sqlResources.xml?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/conf/sqlResources.xml (original)
+++ james/server/trunk/src/conf/sqlResources.xml Mon Nov 20 01:07:39 2006
@@ -1002,6 +1002,8 @@
    
     <sql name="addMapping">insert into VirtualUserTable values(?,?,?) </sql>
     
+    <sql name="selectAllMappings">select * from VirtualUserTable </sql>
+    
     <sql name="selectDomains">select distinct domain from VirtualUserTable</sql>
     
     <sql name="selectDomain">select distinct domain from VirtualUserTable where domain = ? </sql>

Modified: james/server/trunk/src/java/org/apache/james/core/DefaultVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/core/DefaultVirtualUserTable.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/java/org/apache/james/core/DefaultVirtualUserTable.java (original)
+++ james/server/trunk/src/java/org/apache/james/core/DefaultVirtualUserTable.java Mon Nov 20 01:07:39 2006
@@ -22,6 +22,7 @@
 package org.apache.james.core;
 
 import java.util.Collection;
+import java.util.Map;
 
 import org.apache.avalon.framework.activity.Initializable;
 import org.apache.avalon.framework.service.ServiceException;
@@ -126,5 +127,12 @@
      */
     public boolean removeMapping(String user, String domain, String mapping) throws InvalidMappingException {
         return vut.removeMapping(user, domain, mapping);
+    }
+
+    /**
+     * @see org.apache.james.services.VirtualUserTableManagement#getAllMappings()
+     */
+    public Map getAllMappings() {
+        return vut.getAllMappings();
     }
 }

Modified: james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java (original)
+++ james/server/trunk/src/java/org/apache/james/management/VirtualUserTableManagement.java Mon Nov 20 01:07:39 2006
@@ -22,6 +22,7 @@
 package org.apache.james.management;
 
 import java.util.Collection;
+import java.util.Map;
 
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
@@ -177,5 +178,12 @@
         } catch (InvalidMappingException e) {
             throw new VirtualUserTableManagementException(e);
         }
+    }
+
+    /**
+     * @see org.apache.james.services.VirtualUserTableManagementService#getAllMappings(java.lang.String)
+     */
+    public Map getAllMappings(String virtualUserTable) throws VirtualUserTableManagementException{
+        return getTable(virtualUserTable).getAllMappings();
     }
 }

Modified: james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java (original)
+++ james/server/trunk/src/java/org/apache/james/remotemanager/RemoteManagerHandler.java Mon Nov 20 01:07:39 2006
@@ -30,6 +30,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 
 import javax.mail.internet.ParseException;
 
@@ -93,6 +94,7 @@
         "ADDMAPPING",
         "REMOVEMAPPING",
         "LISTMAPPING",
+        "LISTALLMAPPINGS",
         "QUIT",
         "SHUTDOWN"
     });
@@ -254,6 +256,7 @@
         } catch (NoSuchMethodException e) {
             return doUnknownCommand(rawCommand);
         } catch (Exception e) {
+            e.printStackTrace();
             writeLoggedFlushedResponse("could not execute command " + command);
         }
         return false;
@@ -509,6 +512,7 @@
         out.println("addmapping [table=virtualusertablename] user@domain mapping             add mapping for the given emailaddress");
         out.println("removemapping [table=virtualusertablename] user@domain mapping          remove mapping for the given emailaddress");
         out.println("listmapping [table=virtualusertablename] user@domain                    list all mappings for the given emailaddress");
+        out.println("listallmappings [table=virtualusertablename]                            list all mappings");
         out.println("listspool [spoolrepositoryname] ([header=name] [regex=value])           list all mails which reside in the spool and have an error state");
         out.println("flushspool [spoolrepositoryname] ([key] | [header=name] [regex=value])  try to resend the mail assing to the given key. If no key is given all mails get resend");
         out.println("deletespool [spoolrepositoryname] ([key] | [header=name] [regex=value]) delete the mail assign to the given key. If no key is given all mails get deleted");
@@ -1521,6 +1525,51 @@
         } catch (IllegalArgumentException e) {
             getLogger().error("Error on listing mapping: " + e);
             out.println("Error on listing mapping: " + e);
+            out.flush();
+        }
+        return true;
+    }
+    
+    private boolean doLISTALLMAPPINGS(String argument) {
+        String[] args = null;
+        String table = null;
+
+        if (argument != null)
+            args = argument.split(" ");
+
+        // check if the command was called correct
+        if (args != null && args.length > 1) {
+            writeLoggedFlushedResponse("Usage: LISTALLMAPPINGS [table=table]");
+            return true;
+        }
+
+        if (args != null && args[0].startsWith("table=")) {
+            table = args[0].substring("table=".length());
+       
+        } 
+        
+        try {
+            Map mappings = theConfigData.getVirtualUserTableManagement().getAllMappings(table);
+            if (mappings == null) {
+                out.println("No mappings found");
+                out.flush();
+            } else {
+                out.println("Mappings:");
+                
+                Iterator m = mappings.keySet().iterator();
+                while(m.hasNext()) {
+                    String key = m.next().toString();
+                    out.println(key + "  -> " + mappings.get(key));
+                }
+                out.flush();
+            }
+        } catch (VirtualUserTableManagementException e) {
+            getLogger().error("Error on listing all mapping: " + e);
+            out.println("Error on listing all mapping: " + e);
+            out.flush();
+        } catch (IllegalArgumentException e) {
+            getLogger().error("Error on listing all mapping: " + e);
+            out.println("Error on listing all mapping: " + e);
             out.flush();
         }
         return true;

Modified: james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagement.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagement.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagement.java (original)
+++ james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagement.java Mon Nov 20 01:07:39 2006
@@ -22,6 +22,7 @@
 package org.apache.james.services;
 
 import java.util.Collection;
+import java.util.Map;
 
 import org.apache.james.vut.InvalidMappingException;
 
@@ -130,4 +131,12 @@
      * @throws InvalidMappingException
      */
     public boolean removeMapping(String user, String domain, String mapping) throws InvalidMappingException;
+
+
+    /**
+     * Return a Map which holds all mappings
+     * 
+     * @return Map which holds all mappings
+     */
+    public Map getAllMappings();
 }

Modified: james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagementService.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagementService.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagementService.java (original)
+++ james/server/trunk/src/java/org/apache/james/services/VirtualUserTableManagementService.java Mon Nov 20 01:07:39 2006
@@ -22,6 +22,7 @@
 package org.apache.james.services;
 
 import java.util.Collection;
+import java.util.Map;
 
 import org.apache.james.management.VirtualUserTableManagementException;
 import org.apache.james.vut.InvalidMappingException;
@@ -140,4 +141,13 @@
      * @throws InvalidMappingException get thrown if an invalid argument was given
      */
     public boolean removeMapping(String virtualUserTable, String user, String domain, String mapping) throws VirtualUserTableManagementException;
+
+    /**
+     * Return a Map which holds all mappings
+     * 
+     * @param virtualUserTable The virtualUserTable 
+     * @return Map which holds all mappings
+     * @throws VirtualUserTableManagementException 
+     */
+    public Map getAllMappings(String virtualUserTable) throws VirtualUserTableManagementException;
 }

Modified: james/server/trunk/src/java/org/apache/james/util/VirtualUserTableUtil.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/util/VirtualUserTableUtil.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/java/org/apache/james/util/VirtualUserTableUtil.java (original)
+++ james/server/trunk/src/java/org/apache/james/util/VirtualUserTableUtil.java Mon Nov 20 01:07:39 2006
@@ -24,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 import java.util.StringTokenizer;
 
@@ -162,5 +163,45 @@
             map.add(tokenizer.nextToken().trim());
         }
         return map;
+    }
+     
+     /**
+      * Convert a raw mapping String to a Collection
+      * 
+      * @param rawMapping the mapping Strin
+      * @return map a collection which holds all mappings
+      */
+     public static ArrayList mappingToCollection(String rawMapping) {
+         ArrayList map = new ArrayList();
+         StringTokenizer tokenizer = new StringTokenizer(rawMapping,
+         VirtualUserTableUtil.getSeparator(rawMapping));
+
+         while (tokenizer.hasMoreTokens()) {
+             String raw = tokenizer.nextToken().trim();
+             map.add(raw);
+         }
+         return map;
+    }
+     
+
+     /**
+      * Convert a Collection which holds mappings to a raw mapping String
+      * 
+      * @param map the Collection
+      * @return mapping the mapping String
+      */
+     public static String CollectionToMapping(Collection map) {
+         StringBuffer mapping = new StringBuffer();
+     
+         Iterator mappings = map.iterator();
+     
+         while (mappings.hasNext()) {
+             mapping.append(mappings.next());
+         
+             if (mappings.hasNext()) {
+                 mapping.append(";");
+             }
+         }  
+         return mapping.toString();  
     }
 }

Modified: james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java (original)
+++ james/server/trunk/src/java/org/apache/james/vut/AbstractVirtualUserTable.java Mon Nov 20 01:07:39 2006
@@ -27,7 +27,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
-import java.util.StringTokenizer;
+import java.util.Map;
 
 import javax.mail.internet.ParseException;
 
@@ -202,7 +202,7 @@
      */
     public boolean addMapping(String user, String domain, String mapping) throws InvalidMappingException {
         String map = mapping.toLowerCase();
-    
+        
         if (map.startsWith(VirtualUserTable.ERROR_PREFIX)) {
             return addErrorMapping(user,domain,map.substring(VirtualUserTable.ERROR_PREFIX.length()));
         } else if (map.startsWith(VirtualUserTable.REGEX_PREFIX)) {
@@ -228,44 +228,19 @@
     }
     
     /**
-     * Convert a raw mapping String to a Collection
-     * 
-     * @param rawMapping the mapping Strin
-     * @return map a collection which holds all mappings
-     */
-    protected ArrayList mappingToCollection(String rawMapping) {
-        ArrayList map = new ArrayList();
-        StringTokenizer tokenizer = new StringTokenizer(rawMapping,
-        VirtualUserTableUtil.getSeparator(rawMapping));
-
-        while (tokenizer.hasMoreTokens()) {
-            String raw = tokenizer.nextToken().trim();
-            map.add(raw);
-        }
-        return map;
-   }
-    
-
-    /**
-     * Convert a Collection which holds mappings to a raw mapping String
-     * 
-     * @param map the Collection
-     * @return mapping the mapping String
+     * @see org.apache.james.services.VirtualUserTableManagement#getAllMappings()
      */
-    protected String CollectionToMapping(Collection map) {
-        StringBuffer mapping = new StringBuffer();
+    public Map getAllMappings() {
+        int count = 0;
+        Map mappings = getAllMappingsInternal();
     
-        Iterator mappings = map.iterator();
+        if (mappings != null) {
+            count = mappings.size();
+        }
+        getLogger().debug("Retrieve all mappings. Mapping count: " + count);
+        return mappings;
+    }
     
-        while (mappings.hasNext()) {
-            mapping.append(mappings.next());
-        
-            if (mappings.hasNext()) {
-                mapping.append(";");
-            }
-        }  
-        return mapping.toString();  
-   }
     
    private boolean checkMapping(String user,String domain, String mapping) {
        Collection mappings = getUserDomainMappings(user,domain);
@@ -388,4 +363,11 @@
      * @return Collection which hold the mappings
      */
     protected abstract Collection getUserDomainMappingsInternal(String user, String domain);
+
+    /**
+     * Return a Map which holds all Mappings
+     * 
+     * @return Map
+     */
+    protected abstract Map getAllMappingsInternal();
 }

Modified: james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java (original)
+++ james/server/trunk/src/java/org/apache/james/vut/JDBCVirtualUserTable.java Mon Nov 20 01:07:39 2006
@@ -46,6 +46,7 @@
 import org.apache.james.services.FileSystem;
 import org.apache.james.util.JDBCUtil;
 import org.apache.james.util.SqlResources;
+import org.apache.james.util.VirtualUserTableUtil;
 
 /**
  * 
@@ -293,7 +294,7 @@
 
         if (map != null && map.size() > 1) {
             map.remove(mapping);
-            return updateMapping(newUser,newDomain,CollectionToMapping(map));
+            return updateMapping(newUser,newDomain,VirtualUserTableUtil.CollectionToMapping(map));
         } else {
             return removeRawMapping(newUser,newDomain,mapping);
         }
@@ -311,7 +312,7 @@
         if (map != null && map.size() != 0) {
             map.add(regex);
         
-            return updateMapping(newUser,newDomain,CollectionToMapping(map));
+            return updateMapping(newUser,newDomain,VirtualUserTableUtil.CollectionToMapping(map));
         }
         return addRawMapping(newUser,newDomain,regex);
     }
@@ -489,7 +490,7 @@
                 mappingStmt.setString(2, domain);
                 mappingRS = mappingStmt.executeQuery();
                 if (mappingRS.next()) {
-                    return mappingToCollection(mappingRS.getString(1));
+                    return VirtualUserTableUtil.mappingToCollection(mappingRS.getString(1));
                 }
             } finally {
                 theJDBCUtil.closeJDBCResultSet(mappingRS);
@@ -571,6 +572,43 @@
             theJDBCUtil.closeJDBCConnection(conn);
         }
         return false;
+    }
+
+    /**
+     * @see org.apache.james.vut.AbstractVirtualUserTable#getAllMappingsInternal()
+     */
+    public Map getAllMappingsInternal() {
+        Connection conn = null;
+        PreparedStatement mappingStmt = null;
+        HashMap mapping = new HashMap();
+        
+        try {
+            conn = dataSourceComponent.getConnection();
+            mappingStmt = conn.prepareStatement(sqlQueries.getSqlString("selectAllMappings", true));
+
+            ResultSet mappingRS = null;
+            try {
+                mappingRS = mappingStmt.executeQuery();
+                while(mappingRS.next()) {
+                    String user = mappingRS.getString(1);
+                    String domain = mappingRS.getString(2);
+                    String map = mappingRS.getString(3);
+                    
+                    mapping.put(user + "@" + domain,map);
+                }
+                
+                if (mapping.size() > 0 ) return mapping;
+            } finally {
+                theJDBCUtil.closeJDBCResultSet(mappingRS);
+            }
+            
+        } catch (SQLException sqle) {
+            getLogger().error("Error accessing database", sqle);
+        } finally {
+            theJDBCUtil.closeJDBCStatement(mappingStmt);
+            theJDBCUtil.closeJDBCConnection(conn);
+        }
+        return null;
     }
 }
 

Modified: james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java (original)
+++ james/server/trunk/src/java/org/apache/james/vut/XMLVirtualUserTable.java Mon Nov 20 01:07:39 2006
@@ -59,7 +59,7 @@
         
         while (keys.hasNext()) {
             String key = keys.next().toString();
-            Collection values = mappingToCollection(mappings.get(key).toString());
+            Collection values = VirtualUserTableUtil.mappingToCollection(mappings.get(key).toString());
             
             String[] args1 = key.split("@");
             if (args1 != null && args1.length == 2) {
@@ -110,7 +110,7 @@
     public Collection getUserDomainMappingsInternal(String user, String domain) {
         Object maps = mappings.get(user + "@" + domain);
         if (maps != null) {
-            return mappingToCollection(maps.toString());
+            return VirtualUserTableUtil.mappingToCollection(maps.toString());
         } else {
             return null;
         }
@@ -128,5 +128,16 @@
      */
     public boolean containsDomain(String domain) {
         return domains.contains(domain);
+    }
+
+    /**
+     * @see org.apache.james.vut.AbstractVirtualUserTable#getAllMappingsInternal()
+     */
+    public Map getAllMappingsInternal() {
+        if (mappings.size() > 0) {
+                return mappings;
+        } else {
+            return null;
+        }
     }
 }

Modified: james/server/trunk/src/test/org/apache/james/remotemanager/RemoteManagerTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/remotemanager/RemoteManagerTest.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/test/org/apache/james/remotemanager/RemoteManagerTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/remotemanager/RemoteManagerTest.java Mon Nov 20 01:07:39 2006
@@ -25,18 +25,22 @@
 import org.apache.avalon.cornerstone.services.threads.ThreadManager;
 import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.commons.net.telnet.TelnetClient;
+import org.apache.james.management.VirtualUserTableManagement;
 import org.apache.james.services.AbstractDNSServer;
 import org.apache.james.services.DNSServer;
 import org.apache.james.services.JamesConnectionManager;
 import org.apache.james.services.MailServer;
 import org.apache.james.services.UsersRepository;
 import org.apache.james.services.UsersStore;
+import org.apache.james.services.VirtualUserTableManagementService;
 import org.apache.james.test.mock.avalon.MockLogger;
 import org.apache.james.test.mock.avalon.MockServiceManager;
 import org.apache.james.test.mock.avalon.MockSocketManager;
 import org.apache.james.test.mock.avalon.MockThreadManager;
 import org.apache.james.test.mock.james.MockMailServer;
 import org.apache.james.test.mock.james.MockUsersStore;
+import org.apache.james.test.mock.james.MockVirtualUserTableManagementImpl;
+import org.apache.james.test.mock.james.MockVirtualUserTableStore;
 import org.apache.james.test.util.Util;
 import org.apache.james.userrepository.MockUsersRepository;
 import org.apache.james.util.InternetPrintWriter;
@@ -73,6 +77,7 @@
     protected TelnetClient m_telnetClient;
     private MockUsersRepository m_mockUsersRepository;
     private MockMailServer mailServer;
+    private static final String VUT_TABLE = "VUT";
 
     protected void setUp() throws Exception {
         m_remoteManager = new RemoteManager();
@@ -169,6 +174,12 @@
         serviceManager.put(SocketManager.ROLE, new MockSocketManager(m_remoteManagerListenerPort));
         serviceManager.put(ThreadManager.ROLE, new MockThreadManager());
         serviceManager.put(DNSServer.ROLE, setUpDNSServer());
+        
+        MockVirtualUserTableStore vutStore = new MockVirtualUserTableStore(); 
+        VirtualUserTableManagement vutManagement = new VirtualUserTableManagement();
+        vutManagement.setVirtualUserTableStore(vutStore);
+        vutManagement.setDefaultVirtualUserTable(new MockVirtualUserTableManagementImpl());
+        serviceManager.put(VirtualUserTableManagementService.ROLE, vutManagement);
         return serviceManager;
     }
     
@@ -515,5 +526,78 @@
         assertFalse("password not changed to pWD2: "+lastLine, m_mockUsersRepository.test("testPwdUser", "pwd2"));
         assertTrue("password not changed to pWD2: "+lastLine, m_mockUsersRepository.test("testPwdUser", "pWD2"));
         
+    }
+    
+    public void testAddMapping() throws IOException {
+        String lastLine;
+        finishSetUp(m_testConfiguration);
+        connect();
+        login();
+        
+        sendCommand("addmapping test@test junit");
+        lastLine = getLastLine(readAnswer());
+        assertTrue("Add mapping", lastLine.endsWith("true"));
+        
+        sendCommand("addmapping test@test junit");
+        lastLine = getLastLine(readAnswer());
+        assertTrue("Not add mapping... allready exists",lastLine.endsWith("false"));
+    }
+    
+    public void testRemoveMapping() throws IOException {
+        String lastLine;
+        finishSetUp(m_testConfiguration);
+        connect();
+        login();
+        
+        sendCommand("addmapping test@test junit");
+        lastLine = getLastLine(readAnswer());
+        assertTrue("Add mapping", lastLine.endsWith("true"));
+        
+        sendCommand("removemapping test@test junit");
+        lastLine = getLastLine(readAnswer());
+        assertTrue("remove mapping",lastLine.endsWith("true"));
+        
+        sendCommand("removemapping test@test junit");
+        lastLine = getLastLine(readAnswer());
+        assertTrue("Not remove mapping... mapping not exists",lastLine.endsWith("false"));
+    }
+    
+    public void testListAllMappings() throws IOException {
+        String lastLine;
+        finishSetUp(m_testConfiguration);
+        connect();
+        login();
+
+        sendCommand("addmapping test@test junit");
+        lastLine = getLastLine(readAnswer());
+        assertTrue("Add mapping", lastLine.endsWith("true"));
+        
+        sendCommand("addmapping test2@test junit2");
+        lastLine = getLastLine(readAnswer());
+        assertTrue("Add mapping", lastLine.endsWith("true"));
+       
+        sendCommand("listallmappings");
+        List answer = readAnswer(3);
+        assertTrue("Read first mapping", answer.get(1).toString().endsWith("junit"));
+        assertTrue("Read second mapping line", answer.get(2).toString().endsWith("junit2"));
+    }
+    
+    public void testListMapping() throws IOException {
+        String lastLine;
+        finishSetUp(m_testConfiguration);
+        connect();
+        login();
+
+        sendCommand("addmapping test@test junit");
+        lastLine = getLastLine(readAnswer());
+        assertTrue("Add mapping", lastLine.endsWith("true"));
+        
+        sendCommand("addmapping test2@test junit2");
+        lastLine = getLastLine(readAnswer());
+        assertTrue("Add mapping", lastLine.endsWith("true"));
+       
+        sendCommand("listmapping test@test");
+        lastLine = readAnswer(2).get(1).toString();
+        assertTrue("list mapping", lastLine.endsWith("junit"));
     }
 }

Added: james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java?view=auto&rev=477113
==============================================================================
--- james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java (added)
+++ james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java Mon Nov 20 01:07:39 2006
@@ -0,0 +1,137 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+
+package org.apache.james.test.mock.james;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.james.services.VirtualUserTable;
+import org.apache.james.services.VirtualUserTableManagement;
+import org.apache.james.util.VirtualUserTableUtil;
+import org.apache.james.vut.ErrorMappingException;
+import org.apache.james.vut.InvalidMappingException;
+
+public class MockVirtualUserTableManagementImpl implements VirtualUserTableManagement {
+
+    HashMap store = new HashMap();
+    
+    public boolean addAddressMapping(String user, String domain, String address) throws InvalidMappingException {
+        return addRawMapping(user,domain,address);
+    }
+
+    public boolean addErrorMapping(String user, String domain, String error) throws InvalidMappingException {
+        return addRawMapping(user,domain,VirtualUserTable.ERROR_PREFIX + error);
+    }
+
+    public boolean addMapping(String user, String domain, String mapping) throws InvalidMappingException {
+        if (mapping.startsWith(VirtualUserTable.ERROR_PREFIX)){
+            return addErrorMapping(user,domain,mapping.substring(VirtualUserTable.ERROR_PREFIX.length()));
+        } else if (mapping.startsWith(VirtualUserTable.REGEX_PREFIX)) {
+            return addErrorMapping(user,domain,mapping.substring(VirtualUserTable.REGEX_PREFIX.length()));
+        } else {
+            return addAddressMapping(user,domain,mapping);
+        }
+    }
+
+    public boolean addRegexMapping(String user, String domain, String regex) throws InvalidMappingException {
+        return addRawMapping(user,domain,VirtualUserTable.REGEX_PREFIX + regex);
+    }
+
+    public Map getAllMappings() {
+        if (store.size() > 0) {
+            return store;
+        } else {
+            return null;
+        }
+    }
+
+    public Collection getUserDomainMappings(String user, String domain) throws InvalidMappingException {
+        String mapping = (String) store.get(user + "@" + domain);
+        if (mapping != null) {
+            return VirtualUserTableUtil.mappingToCollection(mapping);
+        } else {
+            return null;
+        }
+    }
+
+    public boolean removeAddressMapping(String user, String domain, String address) throws InvalidMappingException {
+        return removeRawMapping(user,domain,address);
+    }
+
+    public boolean removeErrorMapping(String user, String domain, String error) throws InvalidMappingException {
+        return removeRawMapping(user,domain,VirtualUserTable.ERROR_PREFIX + error);
+    }
+
+    public boolean removeMapping(String user, String domain, String mapping) throws InvalidMappingException {
+        if (mapping.startsWith(VirtualUserTable.ERROR_PREFIX)){
+            return removeErrorMapping(user,domain,mapping.substring(VirtualUserTable.ERROR_PREFIX.length()));
+        } else if (mapping.startsWith(VirtualUserTable.REGEX_PREFIX)) {
+            return removeErrorMapping(user,domain,mapping.substring(VirtualUserTable.REGEX_PREFIX.length()));
+        } else {
+            return removeAddressMapping(user,domain,mapping);
+        }
+    }
+
+    public boolean removeRegexMapping(String user, String domain, String regex) throws InvalidMappingException {
+        return removeRawMapping(user,domain,VirtualUserTable.REGEX_PREFIX + regex);
+    }
+
+    public Collection getMappings(String user, String domain) throws ErrorMappingException {
+        throw new UnsupportedOperationException("Not implemented yet");
+    }
+    
+    private boolean addRawMapping(String user,String domain, String mapping) {
+        Collection map;
+        String key = user + "@" + domain;
+        String mappings = (String) store.get(key);
+    
+        if (mappings != null) {
+            map = VirtualUserTableUtil.mappingToCollection(mappings);
+            
+            if (map.contains(mapping)) {
+                return false;       
+            } else {
+                map.add(mapping);
+                store.put(key, VirtualUserTableUtil.CollectionToMapping(map));
+                return true;
+            }
+        } else {
+            store.put(key, mapping);
+            return true;
+        }
+    }
+    
+    private boolean removeRawMapping(String user,String domain, String mapping) {
+        Collection map;
+        String key = user + "@" + domain;
+        String mappings = (String) store.get(key);
+        if (mappings != null) {
+            map = VirtualUserTableUtil.mappingToCollection(mappings);
+            if (map.remove(mapping)) {
+                store.put(key, VirtualUserTableUtil.CollectionToMapping(map));
+                return true;
+            }
+        }
+        return false;
+    }
+
+}

Propchange: james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableManagementImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableStore.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableStore.java?view=auto&rev=477113
==============================================================================
--- james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableStore.java (added)
+++ james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableStore.java Mon Nov 20 01:07:39 2006
@@ -0,0 +1,49 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+
+
+package org.apache.james.test.mock.james;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.apache.james.services.VirtualUserTable;
+import org.apache.james.services.VirtualUserTableStore;
+
+public class MockVirtualUserTableStore implements VirtualUserTableStore {
+    HashMap tableStore = new HashMap();
+    
+    public VirtualUserTable getTable(String name) {
+        return (VirtualUserTable) tableStore.get(name);
+    }
+
+    public Iterator getTableNames() {
+        return tableStore.keySet().iterator();
+    }
+    
+    public void addTable(String tableName) {
+        tableStore.put(tableName, new MockVirtualUserTableManagementImpl());
+    }
+    
+    public void removeTable(String tableName) {
+        tableStore.remove(tableName);
+    }
+    
+}

Propchange: james/server/trunk/src/test/org/apache/james/test/mock/james/MockVirtualUserTableStore.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: james/server/trunk/src/test/org/apache/james/vut/AbstractVirtualUserTableTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/vut/AbstractVirtualUserTableTest.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/test/org/apache/james/vut/AbstractVirtualUserTableTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/vut/AbstractVirtualUserTableTest.java Mon Nov 20 01:07:39 2006
@@ -58,7 +58,8 @@
             assertTrue("Added virtual mapping", virtualUserTable.addRegexMapping(user, domain, regex));
             assertTrue("Added virtual mapping", virtualUserTable.addRegexMapping(user, domain, regex2));
 
-            assertTrue("Two mappings",virtualUserTable.getMappings(user, domain).size() == 2);
+            assertEquals("Two mappings",virtualUserTable.getMappings(user, domain).size(), 2);           
+            assertEquals("One mappingline",virtualUserTable.getAllMappings().size(),1);
             
             // Test DomainList implementations!
             assertEquals("Four domains",virtualUserTable.getDomains().size(), 4);
@@ -75,6 +76,8 @@
 
             assertTrue("remove virtual mapping", virtualUserTable.removeRegexMapping(user, domain, regex2));
             assertNull("No mapping",virtualUserTable.getMappings(user, domain));
+            assertNull("No mappings",virtualUserTable.getAllMappings());
+            
         } catch (InvalidMappingException e) {
             fail("Storing failed");
         }
@@ -96,7 +99,8 @@
             assertTrue("Added virtual mapping", virtualUserTable.addAddressMapping(user, domain, address));
             assertTrue("Added virtual mapping", virtualUserTable.addAddressMapping(user, domain, address2));
 
-            assertTrue("Two mappings",virtualUserTable.getMappings(user, domain).size() == 2);
+            assertEquals("Two mappings",virtualUserTable.getMappings(user, domain).size(),2);
+            assertEquals("One mappingline",virtualUserTable.getAllMappings().size(),1);
         
             assertTrue("remove virtual mapping", virtualUserTable.removeAddressMapping(user, domain, address));
         
@@ -109,6 +113,8 @@
 
             assertTrue("remove virtual mapping", virtualUserTable.removeAddressMapping(user, domain, address2));
             assertNull("No mapping",virtualUserTable.getMappings(user, domain));
+            assertNull("No mappings",virtualUserTable.getAllMappings());
+            
         } catch (InvalidMappingException e) {
             fail("Storing failed");
         }
@@ -126,6 +132,7 @@
             assertNull("No mapping",virtualUserTable.getMappings(user, domain));
         
             assertTrue("Added virtual mapping", virtualUserTable.addErrorMapping(user, domain, error));
+            assertEquals("One mappingline",virtualUserTable.getAllMappings().size(),1);
 
             try {
                 virtualUserTable.getMappings(user, domain);
@@ -136,11 +143,12 @@
 
             assertTrue("remove virtual mapping", virtualUserTable.removeErrorMapping(user, domain, error));
             assertNull("No mapping",virtualUserTable.getMappings(user, domain));
+            assertNull("No mappings",virtualUserTable.getAllMappings());
+            
         } catch (InvalidMappingException e) {
              fail("Storing failed");
         }
 
-    
     }
 
 }

Modified: james/server/trunk/src/test/org/apache/james/vut/XMLVirtualUserTableTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/test/org/apache/james/vut/XMLVirtualUserTableTest.java?view=diff&rev=477113&r1=477112&r2=477113
==============================================================================
--- james/server/trunk/src/test/org/apache/james/vut/XMLVirtualUserTableTest.java (original)
+++ james/server/trunk/src/test/org/apache/james/vut/XMLVirtualUserTableTest.java Mon Nov 20 01:07:39 2006
@@ -89,6 +89,7 @@
     public void testGetMappings() throws ErrorMappingException {
         assertEquals("Found 2 mappings", table.getMappings(user, domain).size(), 2);
         assertEquals("Found 2 domains", table.getDomains().size(),2);
+        assertEquals("Found 2 mapping line", table.getAllMappings().size(),2);
     }
     
     public void testGetUserMappings() throws ErrorMappingException, InvalidMappingException {



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org