001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.service.test;
016    
017    import com.liferay.portal.kernel.log.Log;
018    import com.liferay.portal.kernel.log.LogFactoryUtil;
019    import com.liferay.portal.kernel.messaging.BaseDestination;
020    import com.liferay.portal.kernel.messaging.Destination;
021    import com.liferay.portal.kernel.messaging.DestinationNames;
022    import com.liferay.portal.kernel.messaging.MessageBus;
023    import com.liferay.portal.kernel.messaging.MessageBusUtil;
024    import com.liferay.portal.kernel.messaging.SynchronousDestination;
025    import com.liferay.portal.kernel.messaging.sender.SynchronousMessageSender;
026    import com.liferay.portal.kernel.scheduler.SchedulerEngineHelper;
027    import com.liferay.portal.kernel.scheduler.SchedulerEngineHelperUtil;
028    import com.liferay.portal.kernel.search.SearchEngineHelperUtil;
029    import com.liferay.portal.kernel.test.util.RoleTestUtil;
030    import com.liferay.portal.kernel.test.util.TestPropsValues;
031    import com.liferay.portal.kernel.util.LocaleThreadLocal;
032    import com.liferay.portal.model.Portlet;
033    import com.liferay.portal.model.Role;
034    import com.liferay.portal.model.User;
035    import com.liferay.portal.model.impl.PortletImpl;
036    import com.liferay.portal.repository.liferayrepository.LiferayRepository;
037    import com.liferay.portal.security.auth.PrincipalThreadLocal;
038    import com.liferay.portal.security.permission.PermissionChecker;
039    import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
040    import com.liferay.portal.security.permission.PermissionThreadLocal;
041    import com.liferay.portal.security.permission.ResourceActionsUtil;
042    import com.liferay.portal.service.CompanyLocalServiceUtil;
043    import com.liferay.portal.service.ResourceActionLocalServiceUtil;
044    import com.liferay.portal.service.ServiceContext;
045    import com.liferay.portal.service.ServiceContextThreadLocal;
046    import com.liferay.portal.tools.DBUpgrader;
047    import com.liferay.portal.util.PortalInstances;
048    import com.liferay.portal.util.PortalUtil;
049    import com.liferay.registry.Filter;
050    import com.liferay.registry.Registry;
051    import com.liferay.registry.RegistryUtil;
052    import com.liferay.registry.dependency.ServiceDependencyListener;
053    import com.liferay.registry.dependency.ServiceDependencyManager;
054    
055    import java.util.Calendar;
056    import java.util.Date;
057    import java.util.GregorianCalendar;
058    import java.util.HashMap;
059    import java.util.List;
060    import java.util.Locale;
061    import java.util.Set;
062    
063    /**
064     * @author Brian Wing Shun Chan
065     * @author Michael Young
066     * @author Alexander Chow
067     * @author Manuel de la Pe??a
068     */
069    public class ServiceTestUtil {
070    
071            public static final int RETRY_COUNT = 10;
072    
073            public static final int THREAD_COUNT = 10;
074    
075            /**
076             * @deprecated As of 7.0.0
077             */
078            @Deprecated
079            public static void addResourcePermission(
080                            Role role, String resourceName, int scope, String primKey,
081                            String actionId)
082                    throws Exception {
083    
084                    RoleTestUtil.addResourcePermission(
085                            role, resourceName, scope, primKey, actionId);
086            }
087    
088            /**
089             * @deprecated As of 7.0.0
090             */
091            @Deprecated
092            public static void addResourcePermission(
093                            String roleName, String resourceName, int scope, String primKey,
094                            String actionId)
095                    throws Exception {
096    
097                    RoleTestUtil.addResourcePermission(
098                            roleName, resourceName, scope, primKey, actionId);
099            }
100    
101            /**
102             * @deprecated As of 7.0.0
103             */
104            @Deprecated
105            public static Role addRole(String roleName, int roleType) throws Exception {
106                    return RoleTestUtil.addRole(roleName, roleType);
107            }
108    
109            /**
110             * @deprecated As of 7.0.0
111             */
112            @Deprecated
113            public static Role addRole(
114                            String roleName, int roleType, String resourceName, int scope,
115                            String primKey, String actionId)
116                    throws Exception {
117    
118                    return RoleTestUtil.addRole(
119                            roleName, roleType, resourceName, scope, primKey, actionId);
120            }
121    
122            public static void initMainServletServices() {
123    
124                    // Upgrade
125    
126                    try {
127                            DBUpgrader.upgrade();
128                    }
129                    catch (Throwable t) {
130                            _log.error(t, t);
131                    }
132    
133                    // Messaging
134    
135                    MessageBusUtil messageBusUtil = new MessageBusUtil();
136    
137                    messageBusUtil.setSynchronousMessageSenderMode(
138                            SynchronousMessageSender.Mode.DEFAULT);
139    
140                    // Scheduler
141    
142                    ServiceDependencyManager schedulerServiceDependencyManager =
143                            new ServiceDependencyManager();
144    
145                    schedulerServiceDependencyManager.addServiceDependencyListener(
146                            new ServiceDependencyListener() {
147    
148                                    @Override
149                                    public void dependenciesFulfilled() {
150                                            try {
151                                                    SchedulerEngineHelperUtil.start();
152                                            }
153                                            catch (Exception e) {
154                                                    _log.error(e, e);
155                                            }
156                                    }
157    
158                                    @Override
159                                    public void destroy() {
160                                    }
161    
162                            });
163    
164                    final Registry registry = RegistryUtil.getRegistry();
165    
166                    Filter filter = registry.getFilter(
167                            "(objectClass=com.liferay.portal.scheduler.quartz.internal." +
168                                    "QuartzSchemaManager)");
169    
170                    schedulerServiceDependencyManager.registerDependencies(
171                            new Class[] {SchedulerEngineHelper.class}, new Filter[] {filter});
172    
173                    // Verify
174    
175                    try {
176                            DBUpgrader.verify();
177                    }
178                    catch (Exception e) {
179                            _log.error(e, e);
180                    }
181            }
182    
183            public static void initPermissions() {
184                    try {
185                            PortalInstances.addCompanyId(TestPropsValues.getCompanyId());
186    
187                            setUser(TestPropsValues.getUser());
188                    }
189                    catch (Exception e) {
190                            _log.error(e, e);
191                    }
192            }
193    
194            public static void initServices() {
195    
196                    // Thread locals
197    
198                    _setThreadLocals();
199    
200                    // Search engine
201    
202                    try {
203                            SearchEngineHelperUtil.initialize(TestPropsValues.getCompanyId());
204                    }
205                    catch (Exception e) {
206                            _log.error(e, e);
207                    }
208            }
209    
210            public static void initStaticServices() {
211    
212                    // Indexers
213    
214                    PortalRegisterTestUtil.registerIndexers();
215    
216                    // Messaging
217    
218                    if (TestPropsValues.DL_FILE_ENTRY_PROCESSORS_TRIGGER_SYNCHRONOUSLY) {
219                            ServiceDependencyManager serviceDependencyManager =
220                                    new ServiceDependencyManager();
221    
222                            Filter audioProcessorFilter = _registerDestinationFilter(
223                                    DestinationNames.DOCUMENT_LIBRARY_AUDIO_PROCESSOR);
224                            Filter imageProcessFilter = _registerDestinationFilter(
225                                    DestinationNames.DOCUMENT_LIBRARY_IMAGE_PROCESSOR);
226                            Filter pdfProcessorFilter = _registerDestinationFilter(
227                                    DestinationNames.DOCUMENT_LIBRARY_PDF_PROCESSOR);
228                            Filter rawMetaDataProcessorFilter = _registerDestinationFilter(
229                                    DestinationNames.DOCUMENT_LIBRARY_RAW_METADATA_PROCESSOR);
230                            Filter videoProcessorFilter = _registerDestinationFilter(
231                                    DestinationNames.DOCUMENT_LIBRARY_VIDEO_PROCESSOR);
232    
233                            serviceDependencyManager.registerDependencies(
234                                    audioProcessorFilter, imageProcessFilter, pdfProcessorFilter,
235                                    rawMetaDataProcessorFilter, videoProcessorFilter);
236    
237                            serviceDependencyManager.waitForDependencies();
238    
239                            _replaceWithSynchronousDestination(
240                                    DestinationNames.DOCUMENT_LIBRARY_AUDIO_PROCESSOR);
241                            _replaceWithSynchronousDestination(
242                                    DestinationNames.DOCUMENT_LIBRARY_IMAGE_PROCESSOR);
243                            _replaceWithSynchronousDestination(
244                                    DestinationNames.DOCUMENT_LIBRARY_PDF_PROCESSOR);
245                            _replaceWithSynchronousDestination(
246                                    DestinationNames.DOCUMENT_LIBRARY_RAW_METADATA_PROCESSOR);
247                            _replaceWithSynchronousDestination(
248                                    DestinationNames.DOCUMENT_LIBRARY_VIDEO_PROCESSOR);
249                    }
250    
251                    // Class names
252    
253                    _checkClassNames();
254    
255                    // Resource actions
256    
257                    try {
258                            _checkResourceActions();
259                    }
260                    catch (Exception e) {
261                            _log.error(e, e);
262                    }
263    
264                    // Workflow
265    
266                    PortalRegisterTestUtil.registerWorkflowHandlers();
267    
268                    // Company
269    
270                    try {
271                            CompanyLocalServiceUtil.checkCompany(
272                                    TestPropsValues.COMPANY_WEB_ID);
273                    }
274                    catch (Exception e) {
275                            _log.error(e, e);
276                    }
277            }
278    
279            public static Date newDate() throws Exception {
280                    return new Date();
281            }
282    
283            public static Date newDate(int month, int day, int year) throws Exception {
284                    Calendar calendar = new GregorianCalendar();
285    
286                    calendar.set(Calendar.MONTH, month);
287                    calendar.set(Calendar.DATE, day);
288                    calendar.set(Calendar.YEAR, year);
289    
290                    return calendar.getTime();
291            }
292    
293            public static void setUser(User user) throws Exception {
294                    if (user == null) {
295                            return;
296                    }
297    
298                    PrincipalThreadLocal.setName(user.getUserId());
299    
300                    PermissionChecker permissionChecker =
301                            PermissionCheckerFactoryUtil.create(user);
302    
303                    PermissionThreadLocal.setPermissionChecker(permissionChecker);
304            }
305    
306            private static void _checkClassNames() {
307                    PortalUtil.getClassNameId(LiferayRepository.class.getName());
308            }
309    
310            private static void _checkResourceActions() throws Exception {
311                    for (int i = 0; i < 200; i++) {
312                            String portletId = String.valueOf(i);
313    
314                            Portlet portlet = new PortletImpl();
315    
316                            portlet.setPortletId(portletId);
317                            portlet.setPortletModes(new HashMap<String, Set<String>>());
318    
319                            List<String> portletActions =
320                                    ResourceActionsUtil.getPortletResourceActions(portletId);
321    
322                            ResourceActionLocalServiceUtil.checkResourceActions(
323                                    portletId, portletActions);
324    
325                            List<String> modelNames =
326                                    ResourceActionsUtil.getPortletModelResources(portletId);
327    
328                            for (String modelName : modelNames) {
329                                    List<String> modelActions =
330                                            ResourceActionsUtil.getModelResourceActions(modelName);
331    
332                                    ResourceActionLocalServiceUtil.checkResourceActions(
333                                            modelName, modelActions);
334                            }
335                    }
336            }
337    
338            private static Filter _registerDestinationFilter(String destinationName) {
339                    Registry registry = RegistryUtil.getRegistry();
340    
341                    return registry.getFilter(
342                            "(&(destination.name=" + destinationName +
343                                    ")(objectClass=" + Destination.class.getName() + "))");
344            }
345    
346            private static void _replaceWithSynchronousDestination(String name) {
347                    BaseDestination baseDestination = new SynchronousDestination();
348    
349                    baseDestination.setName(name);
350    
351                    MessageBus messageBus = MessageBusUtil.getMessageBus();
352    
353                    messageBus.replace(baseDestination);
354            }
355    
356            private static void _setThreadLocals() {
357                    LocaleThreadLocal.setThemeDisplayLocale(new Locale("en", "US"));
358    
359                    ServiceContext serviceContext = new ServiceContext();
360    
361                    serviceContext.setPathMain("path");
362                    serviceContext.setPortalURL("http://tests:8080");
363    
364                    ServiceContextThreadLocal.pushServiceContext(serviceContext);
365            }
366    
367            private static final Log _log = LogFactoryUtil.getLog(
368                    ServiceTestUtil.class);
369    
370    }