1 19 20 package org.apache.james.mailboxmanager.impl; 21 22 import java.io.IOException ; 23 import java.util.ArrayList ; 24 import java.util.Arrays ; 25 import java.util.HashSet ; 26 import java.util.List ; 27 import java.util.Map ; 28 import java.util.Set ; 29 30 import org.apache.avalon.cornerstone.services.store.Store; 31 import org.apache.avalon.framework.configuration.Configuration; 32 import org.apache.avalon.framework.configuration.ConfigurationException; 33 import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; 34 import org.apache.avalon.framework.service.ServiceManager; 35 import org.apache.james.mailboxmanager.mailstore.MailStoreMailboxManagerFactory; 36 import org.apache.james.mailboxmanager.manager.MailboxManagerFactory; 37 import org.apache.james.mailboxmanager.mock.MockMailboxManagerFactory; 38 import org.apache.james.mailboxmanager.torque.TorqueMailboxManagerFactory; 39 import org.apache.james.services.FileSystem; 40 import org.apache.james.test.mock.avalon.MockLogger; 41 import org.apache.james.test.mock.james.MockFileSystem; 42 import org.jmock.Mock; 43 import org.jmock.MockObjectTestCase; 44 import org.xml.sax.SAXException ; 45 46 public class VirtualMailboxManagerFactoryTest extends MockObjectTestCase { 47 48 VirtualMailboxManagerFactory virtualMailboxManagerFactory; 49 50 public void setUp() { 51 virtualMailboxManagerFactory = new VirtualMailboxManagerFactory(); 52 } 53 54 public void testReadConf() throws ConfigurationException, SAXException , 55 IOException { 56 Configuration confFile = new DefaultConfigurationBuilder() 57 .buildFromFile("src/conf/james-config.xml"); 58 Configuration conf = confFile.getChild("mailboxmanager", false).getChild("factory",false); 59 VirtualMailboxManagerFactory vmm = new VirtualMailboxManagerFactory(); 60 vmm.enableLogging(new MockLogger()); 61 vmm.configure(conf); 62 } 63 64 public void testVirtualRepositoryMix() throws Exception { 65 Configuration confFile = new DefaultConfigurationBuilder() 66 .build(getClass() 67 .getResourceAsStream( 68 "/org/apache/james/mailboxmanager/testdata/VirtualRepositoryMix.xml")); 69 Configuration conf = confFile.getChild("mailboxmanager", false).getChild("factory",false); 70 71 72 73 VirtualMailboxManagerFactory virtualMailboxManagerFactory = new VirtualMailboxManagerFactory(); 74 virtualMailboxManagerFactory.enableLogging(new MockLogger()); 75 virtualMailboxManagerFactory.configure(conf); 76 virtualMailboxManagerFactory.service(getMockService()); 77 79 String [] expected = { "#system", "#user1", "#user2", "#user3", "#mail", 80 "#user" }; 81 List resultList = new ArrayList (virtualMailboxManagerFactory 82 .getMountMap().keySet()); 83 List expectedList = Arrays.asList(expected); 84 assertEquals(expectedList, resultList); 85 86 MailboxManagerFactory[] factories = new MailboxManagerFactory[expected.length]; 87 for (int i = 0; i < factories.length; i++) { 88 factories[i] = (MailboxManagerFactory) virtualMailboxManagerFactory 89 .getMountMap().get(expected[i]); 90 } 91 92 assertSame(factories[1], factories[5]); 93 assertSame(factories[2], factories[3]); 94 assertNotSame(factories[1], factories[2]); 95 assertNotSame(factories[1], factories[0]); 96 assertNotSame(factories[0], factories[4]); 97 98 MockMailboxManagerFactory mockFactory1 = (MockMailboxManagerFactory) factories[1]; 99 MockMailboxManagerFactory mockFactory2 = (MockMailboxManagerFactory) factories[2]; 100 101 Configuration[] mounts = conf.getChild( 102 "mounts", false).getChildren("mount"); 103 104 assertEquals(mounts[0].getChild("target", false), 105 mockFactory1.configuration); 106 assertEquals(mounts[1].getChild("target", false), 107 mockFactory2.configuration); 108 109 112 assertTrue(factories[0] instanceof MailStoreMailboxManagerFactory); 113 assertTrue(factories[4] instanceof TorqueMailboxManagerFactory); 114 115 } 116 117 118 public void testVirtualRepositoryMixWithInit() throws Exception { 119 Configuration confFile = new DefaultConfigurationBuilder() 120 .build(getClass() 121 .getResourceAsStream( 122 "/org/apache/james/mailboxmanager/testdata/VirtualRepositoryMix.xml")); 123 Configuration conf = confFile.getChild("mailboxmanager-without-torque", false).getChild("factory",false); 124 125 126 VirtualMailboxManagerFactory virtualMailboxManagerFactory = new VirtualMailboxManagerFactory(); 127 virtualMailboxManagerFactory.enableLogging(new MockLogger()); 128 virtualMailboxManagerFactory.configure(conf); 129 virtualMailboxManagerFactory.service(getMockService()); 130 virtualMailboxManagerFactory.initialize(); 131 132 String [] expected = { "#system", "#user1", "#user2", "#user3", "#mail", 133 "#user" }; 134 List resultList = new ArrayList (virtualMailboxManagerFactory 135 .getMountMap().keySet()); 136 List expectedList = Arrays.asList(expected); 137 assertEquals(expectedList, resultList); 138 139 MailboxManagerFactory[] factories = new MailboxManagerFactory[expected.length]; 140 for (int i = 0; i < factories.length; i++) { 141 factories[i] = (MailboxManagerFactory) virtualMailboxManagerFactory 142 .getMountMap().get(expected[i]); 143 } 144 145 assertSame(factories[1], factories[5]); 146 assertSame(factories[2], factories[3]); 147 assertNotSame(factories[1], factories[2]); 148 assertNotSame(factories[1], factories[0]); 149 assertNotSame(factories[0], factories[4]); 150 151 MockMailboxManagerFactory mockFactory1 = (MockMailboxManagerFactory) factories[1]; 152 MockMailboxManagerFactory mockFactory2 = (MockMailboxManagerFactory) factories[2]; 153 MockMailboxManagerFactory mockFactory4 = (MockMailboxManagerFactory) factories[4]; 154 155 Configuration[] mounts = conf.getChild( 156 "mounts", false).getChildren("mount"); 157 158 assertEquals(mounts[0].getChild("target", false), 159 mockFactory1.configuration); 160 assertEquals(mounts[1].getChild("target", false), 161 mockFactory2.configuration); 162 assertEquals(mounts[3].getChild("target", false), 163 mockFactory4.configuration); 164 165 assertEquals(1, mockFactory1.init); 166 assertEquals(1, mockFactory2.init); 167 assertEquals(1, mockFactory4.init); 168 169 assertTrue(factories[0] instanceof MailStoreMailboxManagerFactory); 170 171 172 } 173 174 175 public void testMountMap() { 176 Map mountMap = virtualMailboxManagerFactory.getMountMap(); 177 String [] expected = { "xaaa", "xaab", "zaa", "b", "c" }; 178 mountMap.put("c", "x"); 179 mountMap.put("xaaa", "x"); 180 mountMap.put("xaab", "x"); 181 mountMap.put("zaa", "x"); 182 mountMap.put("b", "x"); 183 List resultList = new ArrayList (mountMap.keySet()); 184 List expectedList = Arrays.asList(expected); 185 assertEquals(expectedList, resultList); 186 } 187 188 protected static Set toSet(Object [] o) { 189 return new HashSet (Arrays.asList(o)); 190 } 191 192 protected ServiceManager getMockService() { 193 Mock mockService = mock(ServiceManager.class); 194 mockService.expects(atMostOnce()).method("lookup").with(eq(FileSystem.ROLE)) 195 .will(returnValue(new MockFileSystem())); 196 mockService.expects(atMostOnce()).method("lookup").with(eq(Store.ROLE)).will( 197 returnValue(null)); 198 return (ServiceManager) mockService.proxy(); 199 } 200 201 } 202 | Popular Tags |