1 19 20 package org.apache.james.mailboxmanager.impl; 21 22 import java.util.Arrays ; 23 import java.util.HashSet ; 24 import java.util.Map ; 25 import java.util.Set ; 26 import java.util.TreeMap ; 27 28 import org.apache.james.mailboxmanager.ListResult; 29 import org.apache.james.mailboxmanager.MailboxManagerException; 30 import org.apache.james.mailboxmanager.impl.VirtualMailboxManagerFactory.LengthComparator; 31 import org.apache.james.mailboxmanager.manager.MailboxManager; 32 import org.apache.james.mailboxmanager.manager.MailboxManagerFactory; 33 import org.apache.james.mailboxmanager.mock.MockUser; 34 import org.apache.james.services.User; 35 import org.jmock.Mock; 36 import org.jmock.MockObjectTestCase; 37 import org.jmock.core.Constraint; 38 import org.jmock.core.constraint.IsEqual; 39 import org.jmock.core.constraint.IsSame; 40 41 public class VirtualMailboxManagerTest extends MockObjectTestCase { 42 43 protected User user = new MockUser(); 44 45 protected VirtualMailboxManager virtualMailboxManager; 46 47 public void setUp() { 48 virtualMailboxManager = new VirtualMailboxManager(); 49 virtualMailboxManager.setUser(user); 50 } 51 52 public void testGetMailboxManager() throws MailboxManagerException { 53 String [] points = { "#mail", "#mail.t1.t2", "#mail.t1", "#user", 54 "#user.t1.t2.t3" }; 55 MailboxManager[] manager = new MailboxManager[] { 56 (MailboxManager) mock(MailboxManager.class).proxy(), 57 (MailboxManager) mock(MailboxManager.class).proxy(), 58 (MailboxManager) mock(MailboxManager.class).proxy(), 59 (MailboxManager) mock(MailboxManager.class).proxy(), 60 (MailboxManager) mock(MailboxManager.class).proxy() }; 61 Mock[] mailboxManagerFactoryMocks = createMailboxManagerFactoryMocks( 62 manager, 2); 63 MailboxManagerFactory[] mailboxManagerFactories = proxyFactoryMocks(mailboxManagerFactoryMocks); 64 65 addMountPoints(points, mailboxManagerFactories); 66 assertSame(manager[0], virtualMailboxManager 67 .getMailboxManager("#mail.t3")); 68 assertSame(manager[0], virtualMailboxManager.getMailboxManager("#mail")); 69 assertSame(manager[1], virtualMailboxManager 70 .getMailboxManager("#mail.t1.t2")); 71 assertSame(manager[1], virtualMailboxManager 72 .getMailboxManager("#mail.t1.t2.t4")); 73 assertSame(manager[2], virtualMailboxManager 74 .getMailboxManager("#mail.t1")); 75 assertSame(manager[2], virtualMailboxManager 76 .getMailboxManager("#mail.t1.t3")); 77 assertSame(manager[3], virtualMailboxManager.getMailboxManager("#user")); 78 assertSame(manager[3], virtualMailboxManager 79 .getMailboxManager("#user.t2")); 80 assertSame(manager[4], virtualMailboxManager 81 .getMailboxManager("#user.t1.t2.t3")); 82 assertSame(manager[4], virtualMailboxManager 83 .getMailboxManager("#user.t1.t2.t3.t4")); 84 try { 85 virtualMailboxManager.getMailboxManager("#other"); 86 fail("should throw exception"); 87 } catch (MailboxManagerException e) { 88 } 89 90 91 } 92 93 public void testList() throws MailboxManagerException { 94 String [] expected = { "#mail.t1.t2", "#mail.t1.t3", "#mail", 95 "#mail.group.t5", "#mail.group.6", "#system.t1" }; 96 String [] points = { "#mail", "#mail.group", "#system" }; 97 Mock[] mailboxManagerMocks = { mock(MailboxManager.class), 98 mock(MailboxManager.class), mock(MailboxManager.class) }; 99 MailboxManager[] mailboxManager = proxyMocks(mailboxManagerMocks); 100 Mock[] mailboxManagerFactoryMocks = createMailboxManagerFactoryMocks( 101 mailboxManager, 1); 102 MailboxManagerFactory[] mailboxManagerFactories = proxyFactoryMocks(mailboxManagerFactoryMocks); 103 104 Constraint[] args = { new IsEqual(""), new IsEqual("%"), 105 new IsEqual(Boolean.FALSE) }; 106 107 mailboxManagerMocks[0].expects(once()).method("list").with(args).will( 108 returnValue(generateListResults(new String [] { expected[0], 109 expected[1], expected[2] }))); 110 111 mailboxManagerMocks[1].expects(once()).method("list").with(args).will( 112 returnValue(generateListResults(new String [] { expected[3], 113 expected[4] }))); 114 115 mailboxManagerMocks[2].expects(once()).method("list").with(args).will( 116 returnValue(generateListResults(new String [] { expected[5] }))); 117 118 addMountPoints(points, mailboxManagerFactories); 119 120 ListResult[] result = virtualMailboxManager.list("", "%", false); 121 assertEquals(expected.length, result.length); 122 assertEquals(new HashSet (Arrays.asList(expected)), toNamesSet(result)); 123 System.out.println(toNamesSet(result)); 124 125 } 126 127 public void testSubscribe() throws MailboxManagerException { 128 String [] points = { "#mail" , "#mail.group", "#system"}; Mock[] mailboxManagerMocks = createMailboxManagerMocks(points.length); 130 MailboxManager[] mailboxManager = proxyMocks(mailboxManagerMocks); 131 Mock[] mailboxManagerFactoryMocks = createMailboxManagerFactoryMocks( 132 mailboxManager, 1); 133 MailboxManagerFactory[] mailboxManagerFactories = proxyFactoryMocks(mailboxManagerFactoryMocks); 134 addMountPoints(points, mailboxManagerFactories); 135 136 String [] subscribe= {"#mail.user1.Trash","#mail.group.test","#system.go"}; 137 for (int i = 0; i < subscribe.length; i++) { 138 Constraint[] args; 139 args=new Constraint[] {eq(subscribe[i]),eq(true)}; 140 mailboxManagerMocks[i].expects(once()).method("setSubscription").with(args).isVoid(); 141 142 virtualMailboxManager.setSubscription(subscribe[i],true); 143 } 144 145 146 } 147 148 protected Mock[] createMailboxManagerMocks(int count) { 149 Mock[] mocks = new Mock[count]; 150 for (int i = 0; i < mocks.length; i++) { 151 mocks[i]=mock(MailboxManager.class); 152 } 153 return mocks; 154 } 155 156 protected Mock[] createMailboxManagerFactoryMocks(MailboxManager[] manager, 157 int expected) { 158 Mock[] mocks = new Mock[manager.length]; 159 for (int i = 0; i < mocks.length; i++) { 160 mocks[i] = mock(MailboxManagerFactory.class); 161 mocks[i].expects(exactly(expected)).method( 162 "getMailboxManagerInstance").with(new IsSame(user)).will( 163 returnValue(manager[i])); 164 } 165 return mocks; 166 } 167 168 protected static MailboxManager[] proxyMocks(Mock[] mocks) { 169 MailboxManager[] managers = new MailboxManager[mocks.length]; 170 for (int i = 0; i < mocks.length; i++) { 171 managers[i] = (MailboxManager) mocks[i].proxy(); 172 } 173 return managers; 174 } 175 176 protected static MailboxManagerFactory[] proxyFactoryMocks(Mock[] mocks) { 177 MailboxManagerFactory[] factories = new MailboxManagerFactory[mocks.length]; 178 for (int i = 0; i < mocks.length; i++) { 179 factories[i] = (MailboxManagerFactory) mocks[i].proxy(); 180 } 181 return factories; 182 } 183 184 protected void addMountPoints(String [] points, 185 MailboxManagerFactory[] mailboxManagerFactories) { 186 Map mountMap = new TreeMap (new LengthComparator()); 187 for (int i = 0; i < mailboxManagerFactories.length; i++) { 188 189 mountMap.put(points[i], mailboxManagerFactories[i]); 190 } 191 virtualMailboxManager.setMountMap(mountMap); 192 } 193 194 protected static Set toNamesSet(ListResult[] listResult) { 195 Set nameSet = new HashSet (); 196 for (int i = 0; i < listResult.length; i++) { 197 nameSet.add(listResult[i].getName()); 198 } 199 return nameSet; 200 } 201 202 protected static ListResult[] generateListResults(String [] names) { 203 ListResult[] result = new ListResult[names.length]; 204 for (int i = 0; i < names.length; i++) { 205 result[i] = new ListResultImpl(names[i], "."); 206 } 207 return result; 208 } 209 210 } 211 | Popular Tags |