KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > james > mailboxmanager > impl > VirtualMailboxManagerTest


1 /****************************************************************
2  * Licensed to the Apache Software Foundation (ASF) under one *
3  * or more contributor license agreements. See the NOTICE file *
4  * distributed with this work for additional information *
5  * regarding copyright ownership. The ASF licenses this file *
6  * to you under the Apache License, Version 2.0 (the *
7  * "License"); you may not use this file except in compliance *
8  * with the License. You may obtain a copy of the License at *
9  * *
10  * http://www.apache.org/licenses/LICENSE-2.0 *
11  * *
12  * Unless required by applicable law or agreed to in writing, *
13  * software distributed under the License is distributed on an *
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
15  * KIND, either express or implied. See the License for the *
16  * specific language governing permissions and limitations *
17  * under the License. *
18  ****************************************************************/

19
20 package org.apache.james.mailboxmanager.impl;
21
22 import java.util.Arrays JavaDoc;
23 import java.util.HashSet JavaDoc;
24 import java.util.Map JavaDoc;
25 import java.util.Set JavaDoc;
26 import java.util.TreeMap JavaDoc;
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 JavaDoc[] 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 JavaDoc[] expected = { "#mail.t1.t2", "#mail.t1.t3", "#mail",
95                 "#mail.group.t5", "#mail.group.6", "#system.t1" };
96         String JavaDoc[] 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 JavaDoc[] { expected[0],
109                         expected[1], expected[2] })));
110
111         mailboxManagerMocks[1].expects(once()).method("list").with(args).will(
112                 returnValue(generateListResults(new String JavaDoc[] { expected[3],
113                         expected[4] })));
114
115         mailboxManagerMocks[2].expects(once()).method("list").with(args).will(
116                 returnValue(generateListResults(new String JavaDoc[] { expected[5] })));
117
118         addMountPoints(points, mailboxManagerFactories);
119
120         ListResult[] result = virtualMailboxManager.list("", "%", false);
121         assertEquals(expected.length, result.length);
122         assertEquals(new HashSet JavaDoc(Arrays.asList(expected)), toNamesSet(result));
123         System.out.println(toNamesSet(result));
124
125     }
126     
127     public void testSubscribe() throws MailboxManagerException {
128         String JavaDoc[] points = { "#mail" , "#mail.group", "#system"}; // ,
129
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 JavaDoc[] 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 JavaDoc[] points,
185             MailboxManagerFactory[] mailboxManagerFactories) {
186         Map JavaDoc mountMap = new TreeMap JavaDoc(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 JavaDoc toNamesSet(ListResult[] listResult) {
195         Set JavaDoc nameSet = new HashSet JavaDoc();
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 JavaDoc[] 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