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.SearchEngineUtil;
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},
172                            new Filter[] {filter});
173    
174                    // Verify
175    
176                    try {
177                            DBUpgrader.verify();
178                    }
179                    catch (Exception e) {
180                            _log.error(e, e);
181                    }
182            }
183    
184            public static void initPermissions() {
185                    try {
186                            PortalInstances.addCompanyId(TestPropsValues.getCompanyId());
187    
188                            setUser(TestPropsValues.getUser());
189                    }
190                    catch (Exception e) {
191                            _log.error(e, e);
192                    }
193            }
194    
195            public static void initServices() {
196    
197                    // Thread locals
198    
199                    _setThreadLocals();
200    
201                    // Search engine
202    
203                    try {
204                            SearchEngineUtil.initialize(TestPropsValues.getCompanyId());
205                    }
206                    catch (Exception e) {
207                            _log.error(e, e);
208                    }
209            }
210    
211            public static void initStaticServices() {
212    
213                    // Indexers
214    
215                    PortalRegisterTestUtil.registerIndexers();
216    
217                    // Messaging
218    
219                    if (TestPropsValues.DL_FILE_ENTRY_PROCESSORS_TRIGGER_SYNCHRONOUSLY) {
220                            ServiceDependencyManager serviceDependencyManager =
221                                    new ServiceDependencyManager();
222    
223                            Filter audioProcessorFilter = _registerDestinationFilter(
224                                    DestinationNames.DOCUMENT_LIBRARY_AUDIO_PROCESSOR);
225                            Filter imageProcessFilter = _registerDestinationFilter(
226                                    DestinationNames.DOCUMENT_LIBRARY_IMAGE_PROCESSOR);
227                            Filter pdfProcessorFilter = _registerDestinationFilter(
228                                    DestinationNames.DOCUMENT_LIBRARY_PDF_PROCESSOR);
229                            Filter rawMetaDataProcessorFilter = _registerDestinationFilter(
230                                    DestinationNames.DOCUMENT_LIBRARY_RAW_METADATA_PROCESSOR);
231                            Filter videoProcessorFilter = _registerDestinationFilter(
232                                    DestinationNames.DOCUMENT_LIBRARY_VIDEO_PROCESSOR);
233    
234                            serviceDependencyManager.registerDependencies(
235                                    audioProcessorFilter, imageProcessFilter, pdfProcessorFilter,
236                                    rawMetaDataProcessorFilter, videoProcessorFilter);
237    
238                            serviceDependencyManager.waitForDependencies();
239    
240                            _replaceWithSynchronousDestination(
241                                    DestinationNames.DOCUMENT_LIBRARY_AUDIO_PROCESSOR);
242                            _replaceWithSynchronousDestination(
243                                    DestinationNames.DOCUMENT_LIBRARY_IMAGE_PROCESSOR);
244                            _replaceWithSynchronousDestination(
245                                    DestinationNames.DOCUMENT_LIBRARY_PDF_PROCESSOR);
246                            _replaceWithSynchronousDestination(
247                                    DestinationNames.DOCUMENT_LIBRARY_RAW_METADATA_PROCESSOR);
248                            _replaceWithSynchronousDestination(
249                                    DestinationNames.DOCUMENT_LIBRARY_VIDEO_PROCESSOR);
250                    }
251    
252                    // Class names
253    
254                    _checkClassNames();
255    
256                    // Resource actions
257    
258                    try {
259                            _checkResourceActions();
260                    }
261                    catch (Exception e) {
262                            _log.error(e, e);
263                    }
264    
265                    // Workflow
266    
267                    PortalRegisterTestUtil.registerWorkflowHandlers();
268    
269                    // Company
270    
271                    try {
272                            CompanyLocalServiceUtil.checkCompany(
273                                    TestPropsValues.COMPANY_WEB_ID);
274                    }
275                    catch (Exception e) {
276                            _log.error(e, e);
277                    }
278            }
279    
280            public static Date newDate() throws Exception {
281                    return new Date();
282            }
283    
284            public static Date newDate(int month, int day, int year) throws Exception {
285                    Calendar calendar = new GregorianCalendar();
286    
287                    calendar.set(Calendar.MONTH, month);
288                    calendar.set(Calendar.DATE, day);
289                    calendar.set(Calendar.YEAR, year);
290    
291                    return calendar.getTime();
292            }
293    
294            public static void setUser(User user) throws Exception {
295                    if (user == null) {
296                            return;
297                    }
298    
299                    PrincipalThreadLocal.setName(user.getUserId());
300    
301                    PermissionChecker permissionChecker =
302                            PermissionCheckerFactoryUtil.create(user);
303    
304                    PermissionThreadLocal.setPermissionChecker(permissionChecker);
305            }
306    
307            private static void _checkClassNames() {
308                    PortalUtil.getClassNameId(LiferayRepository.class.getName());
309            }
310    
311            private static void _checkResourceActions() throws Exception {
312                    for (int i = 0; i < 200; i++) {
313                            String portletId = String.valueOf(i);
314    
315                            Portlet portlet = new PortletImpl();
316    
317                            portlet.setPortletId(portletId);
318                            portlet.setPortletModes(new HashMap<String, Set<String>>());
319    
320                            List<String> portletActions =
321                                    ResourceActionsUtil.getPortletResourceActions(portletId);
322    
323                            ResourceActionLocalServiceUtil.checkResourceActions(
324                                    portletId, portletActions);
325    
326                            List<String> modelNames =
327                                    ResourceActionsUtil.getPortletModelResources(portletId);
328    
329                            for (String modelName : modelNames) {
330                                    List<String> modelActions =
331                                            ResourceActionsUtil.getModelResourceActions(modelName);
332    
333                                    ResourceActionLocalServiceUtil.checkResourceActions(
334                                            modelName, modelActions);
335                            }
336                    }
337            }
338    
339            private static Filter _registerDestinationFilter(String destinationName) {
340                    Registry registry = RegistryUtil.getRegistry();
341    
342                    return registry.getFilter(
343                            "(&(destination.name=" + destinationName +
344                                    ")(objectClass=" + Destination.class.getName() + "))");
345            }
346    
347            private static void _replaceWithSynchronousDestination(String name) {
348                    BaseDestination baseDestination = new SynchronousDestination();
349    
350                    baseDestination.setName(name);
351    
352                    MessageBus messageBus = MessageBusUtil.getMessageBus();
353    
354                    messageBus.replace(baseDestination);
355            }
356    
357            private static void _setThreadLocals() {
358                    LocaleThreadLocal.setThemeDisplayLocale(new Locale("en", "US"));
359    
360                    ServiceContext serviceContext = new ServiceContext();
361    
362                    serviceContext.setPathMain("path");
363                    serviceContext.setPortalURL("http://tests:8080");
364    
365                    ServiceContextThreadLocal.pushServiceContext(serviceContext);
366            }
367    
368            private static final Log _log = LogFactoryUtil.getLog(
369                    ServiceTestUtil.class);
370    
371    }