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.jcr.JCRFactoryUtil;
018    import com.liferay.portal.kernel.log.Log;
019    import com.liferay.portal.kernel.log.LogFactoryUtil;
020    import com.liferay.portal.kernel.messaging.BaseDestination;
021    import com.liferay.portal.kernel.messaging.Destination;
022    import com.liferay.portal.kernel.messaging.DestinationNames;
023    import com.liferay.portal.kernel.messaging.MessageBus;
024    import com.liferay.portal.kernel.messaging.MessageBusUtil;
025    import com.liferay.portal.kernel.messaging.SynchronousDestination;
026    import com.liferay.portal.kernel.messaging.sender.SynchronousMessageSender;
027    import com.liferay.portal.kernel.scheduler.SchedulerEngineHelper;
028    import com.liferay.portal.kernel.scheduler.SchedulerEngineHelperUtil;
029    import com.liferay.portal.kernel.search.SearchEngineUtil;
030    import com.liferay.portal.kernel.test.util.RoleTestUtil;
031    import com.liferay.portal.kernel.test.util.TestPropsValues;
032    import com.liferay.portal.kernel.util.FileUtil;
033    import com.liferay.portal.kernel.util.LocaleThreadLocal;
034    import com.liferay.portal.kernel.util.PropsKeys;
035    import com.liferay.portal.model.Portlet;
036    import com.liferay.portal.model.Role;
037    import com.liferay.portal.model.User;
038    import com.liferay.portal.model.impl.PortletImpl;
039    import com.liferay.portal.repository.liferayrepository.LiferayRepository;
040    import com.liferay.portal.security.auth.PrincipalThreadLocal;
041    import com.liferay.portal.security.permission.PermissionChecker;
042    import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
043    import com.liferay.portal.security.permission.PermissionThreadLocal;
044    import com.liferay.portal.security.permission.ResourceActionsUtil;
045    import com.liferay.portal.service.CompanyLocalServiceUtil;
046    import com.liferay.portal.service.ResourceActionLocalServiceUtil;
047    import com.liferay.portal.service.ServiceContext;
048    import com.liferay.portal.service.ServiceContextThreadLocal;
049    import com.liferay.portal.tools.DBUpgrader;
050    import com.liferay.portal.util.PortalInstances;
051    import com.liferay.portal.util.PortalUtil;
052    import com.liferay.portal.util.PropsUtil;
053    import com.liferay.portal.util.PropsValues;
054    import com.liferay.registry.Filter;
055    import com.liferay.registry.Registry;
056    import com.liferay.registry.RegistryUtil;
057    import com.liferay.registry.dependency.ServiceDependencyListener;
058    import com.liferay.registry.dependency.ServiceDependencyManager;
059    
060    import java.util.Calendar;
061    import java.util.Date;
062    import java.util.GregorianCalendar;
063    import java.util.HashMap;
064    import java.util.List;
065    import java.util.Locale;
066    import java.util.Set;
067    
068    /**
069     * @author Brian Wing Shun Chan
070     * @author Michael Young
071     * @author Alexander Chow
072     * @author Manuel de la Pe??a
073     */
074    public class ServiceTestUtil {
075    
076            public static final int THREAD_COUNT = 25;
077    
078            /**
079             * @deprecated As of 7.0.0
080             */
081            @Deprecated
082            public static void addResourcePermission(
083                            Role role, String resourceName, int scope, String primKey,
084                            String actionId)
085                    throws Exception {
086    
087                    RoleTestUtil.addResourcePermission(
088                            role, resourceName, scope, primKey, actionId);
089            }
090    
091            /**
092             * @deprecated As of 7.0.0
093             */
094            @Deprecated
095            public static void addResourcePermission(
096                            String roleName, String resourceName, int scope, String primKey,
097                            String actionId)
098                    throws Exception {
099    
100                    RoleTestUtil.addResourcePermission(
101                            roleName, resourceName, scope, primKey, actionId);
102            }
103    
104            /**
105             * @deprecated As of 7.0.0
106             */
107            @Deprecated
108            public static Role addRole(String roleName, int roleType) throws Exception {
109                    return RoleTestUtil.addRole(roleName, roleType);
110            }
111    
112            /**
113             * @deprecated As of 7.0.0
114             */
115            @Deprecated
116            public static Role addRole(
117                            String roleName, int roleType, String resourceName, int scope,
118                            String primKey, String actionId)
119                    throws Exception {
120    
121                    return RoleTestUtil.addRole(
122                            roleName, roleType, resourceName, scope, primKey, actionId);
123            }
124    
125            public static void destroyServices() {
126                    _deleteDirectories();
127            }
128    
129            public static void initPermissions() {
130                    try {
131                            PortalInstances.addCompanyId(TestPropsValues.getCompanyId());
132    
133                            setUser(TestPropsValues.getUser());
134                    }
135                    catch (Exception e) {
136                            _log.error(e, e);
137                    }
138            }
139    
140            public static void initMainServletServices() {
141    
142                    // Upgrade
143    
144                    try {
145                            DBUpgrader.upgrade();
146                    }
147                    catch (Throwable t) {
148                            _log.error(t, t);
149                    }
150    
151                    // Messaging
152    
153                    MessageBusUtil messageBusUtil = new MessageBusUtil();
154    
155                    messageBusUtil.setSynchronousMessageSenderMode(
156                            SynchronousMessageSender.Mode.DEFAULT);
157    
158                    // Scheduler
159    
160                    ServiceDependencyManager schedulerServiceDependencyManager =
161                            new ServiceDependencyManager();
162    
163                    schedulerServiceDependencyManager.addServiceDependencyListener(
164                            new ServiceDependencyListener() {
165    
166                                    @Override
167                                    public void dependenciesFulfilled() {
168                                            try {
169                                                    SchedulerEngineHelperUtil.start();
170                                            }
171                                            catch (Exception e) {
172                                                    _log.error(e, e);
173                                            }
174                                    }
175    
176                                    @Override
177                                    public void destroy() {
178                                    }
179    
180                            });
181    
182                    final Registry registry = RegistryUtil.getRegistry();
183    
184                    Filter filter = registry.getFilter(
185                            "(objectClass=com.liferay.portal.scheduler.quartz.internal." +
186                                    "QuartzSchemaManager)");
187    
188                    schedulerServiceDependencyManager.registerDependencies(
189                            new Class[] {SchedulerEngineHelper.class},
190                            new Filter[] {filter});
191    
192                    // Verify
193    
194                    try {
195                            DBUpgrader.verify();
196                    }
197                    catch (Exception e) {
198                            _log.error(e, e);
199                    }
200            }
201    
202            private static Filter _registerDestinationFilter(String destinationName) {
203                    Registry registry = RegistryUtil.getRegistry();
204    
205                    return registry.getFilter(
206                            "(&(destination.name=" + destinationName +
207                                    ")(objectClass=" + Destination.class.getName() + "))");
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                    // Trash
265    
266                    PortalRegisterTestUtil.registerTrashHandlers();
267    
268                    // Workflow
269    
270                    PortalRegisterTestUtil.registerWorkflowHandlers();
271    
272                    // Asset renderers
273    
274                    PortalRegisterTestUtil.registerAssetRendererFactories();
275    
276                    // Company
277    
278                    try {
279                            CompanyLocalServiceUtil.checkCompany(
280                                    TestPropsValues.COMPANY_WEB_ID);
281                    }
282                    catch (Exception e) {
283                            _log.error(e, e);
284                    }
285            }
286    
287            public static void initServices() {
288    
289                    // JCR
290    
291                    try {
292                            JCRFactoryUtil.prepare();
293                    }
294                    catch (Exception e) {
295                            _log.error(e, e);
296                    }
297    
298                    // Thread locals
299    
300                    _setThreadLocals();
301    
302                    // Directories
303    
304                    _deleteDirectories();
305    
306                    // Search engine
307    
308                    try {
309                            SearchEngineUtil.initialize(TestPropsValues.getCompanyId());
310                    }
311                    catch (Exception e) {
312                            _log.error(e, e);
313                    }
314            }
315    
316            public static Date newDate() throws Exception {
317                    return new Date();
318            }
319    
320            public static Date newDate(int month, int day, int year) throws Exception {
321                    Calendar calendar = new GregorianCalendar();
322    
323                    calendar.set(Calendar.MONTH, month);
324                    calendar.set(Calendar.DATE, day);
325                    calendar.set(Calendar.YEAR, year);
326    
327                    return calendar.getTime();
328            }
329    
330            public static void setUser(User user) throws Exception {
331                    if (user == null) {
332                            return;
333                    }
334    
335                    PrincipalThreadLocal.setName(user.getUserId());
336    
337                    PermissionChecker permissionChecker =
338                            PermissionCheckerFactoryUtil.create(user);
339    
340                    PermissionThreadLocal.setPermissionChecker(permissionChecker);
341            }
342    
343            private static void _checkClassNames() {
344                    PortalUtil.getClassNameId(LiferayRepository.class.getName());
345            }
346    
347            private static void _checkResourceActions() throws Exception {
348                    for (int i = 0; i < 200; i++) {
349                            String portletId = String.valueOf(i);
350    
351                            Portlet portlet = new PortletImpl();
352    
353                            portlet.setPortletId(portletId);
354                            portlet.setPortletModes(new HashMap<String, Set<String>>());
355    
356                            List<String> portletActions =
357                                    ResourceActionsUtil.getPortletResourceActions(portletId);
358    
359                            ResourceActionLocalServiceUtil.checkResourceActions(
360                                    portletId, portletActions);
361    
362                            List<String> modelNames =
363                                    ResourceActionsUtil.getPortletModelResources(portletId);
364    
365                            for (String modelName : modelNames) {
366                                    List<String> modelActions =
367                                            ResourceActionsUtil.getModelResourceActions(modelName);
368    
369                                    ResourceActionLocalServiceUtil.checkResourceActions(
370                                            modelName, modelActions);
371                            }
372                    }
373            }
374    
375            private static void _deleteDirectories() {
376                    FileUtil.deltree(PropsValues.DL_STORE_FILE_SYSTEM_ROOT_DIR);
377    
378                    FileUtil.deltree(
379                            PropsUtil.get(PropsKeys.JCR_JACKRABBIT_REPOSITORY_ROOT));
380            }
381    
382            private static void _replaceWithSynchronousDestination(String name) {
383                    BaseDestination baseDestination = new SynchronousDestination();
384    
385                    baseDestination.setName(name);
386    
387                    MessageBus messageBus = MessageBusUtil.getMessageBus();
388    
389                    messageBus.replace(baseDestination);
390            }
391    
392            private static void _setThreadLocals() {
393                    LocaleThreadLocal.setThemeDisplayLocale(new Locale("en", "US"));
394    
395                    ServiceContext serviceContext = new ServiceContext();
396    
397                    serviceContext.setPathMain("path");
398                    serviceContext.setPortalURL("http://tests:8080");
399    
400                    ServiceContextThreadLocal.pushServiceContext(serviceContext);
401            }
402    
403            private static final Log _log = LogFactoryUtil.getLog(
404                    ServiceTestUtil.class);
405    
406    }