From 374f6666261ba5245016c467542f592b7b3c83d0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Mon, 11 May 2015 10:06:03 +0200 Subject: [PATCH] make UserSession non static UserSession is now an interface the old UserSession has been split into ServerUserSession (implements the lazy loading of credentials directly from DAOs) and ThreadLocalUserSession (implements the thread local management) add UserSessionRule for UserSession management in unit test with support for ServerTester DoPrivileged now restores the user session which was in ThreadLocal before it ran move MockUserSession to server.tester package --- .../benchmark/IssueIndexBenchmarkTest.java | 30 +- .../server/activity/ActivityService.java | 6 +- .../server/activity/ws/ActivityMapping.java | 4 +- .../server/activity/ws/SearchAction.java | 7 +- .../server/batch/GlobalRepositoryAction.java | 5 +- .../org/sonar/server/batch/IssuesAction.java | 18 +- .../server/batch/ProjectRepositoryLoader.java | 13 +- .../org/sonar/server/batch/UsersAction.java | 15 +- .../server/component/ComponentService.java | 31 +- .../component/ws/ComponentAppAction.java | 23 +- .../ws/ProvisionedProjectsAction.java | 10 +- .../server/component/ws/SearchAction.java | 15 +- .../computation/ws/HistoryWsAction.java | 11 +- .../computation/ws/SubmitReportWsAction.java | 9 +- .../dashboard/ws/DashboardsShowAction.java | 9 +- .../sonar/server/debt/DebtModelBackup.java | 12 +- .../server/debt/DebtModelOperations.java | 10 +- .../sonar/server/design/ws/ShowAction.java | 17 +- .../server/duplication/ws/ShowAction.java | 11 +- .../issue/InternalRubyIssueService.java | 74 ++-- .../server/issue/IssueBulkChangeService.java | 6 +- .../server/issue/IssueChangelogFormatter.java | 18 +- .../server/issue/IssueChangelogService.java | 12 +- .../org/sonar/server/issue/IssueQuery.java | 26 +- .../sonar/server/issue/IssueQueryService.java | 14 +- .../org/sonar/server/issue/IssueService.java | 55 +-- .../sonar/server/issue/SetSeverityAction.java | 13 +- .../sonar/server/issue/TransitionAction.java | 16 +- .../sonar/server/issue/filter/AppAction.java | 21 +- .../server/issue/filter/FavoritesAction.java | 9 +- .../sonar/server/issue/filter/ShowAction.java | 9 +- .../sonar/server/issue/index/IssueIndex.java | 36 +- .../server/issue/ws/IssueActionsWriter.java | 13 +- .../server/issue/ws/IssueShowAction.java | 29 +- .../sonar/server/issue/ws/SearchAction.java | 36 +- .../permission/InternalPermissionService.java | 30 +- .../InternalPermissionTemplateService.java | 26 +- .../permission/PermissionTemplateUpdater.java | 23 +- .../server/platform/ServerComponents.java | 21 +- .../org/sonar/server/platform/ws/L10nWs.java | 15 +- .../platform/ws/SystemInfoWsAction.java | 7 +- .../plugins/ws/CancelAllPluginsWsAction.java | 6 +- .../plugins/ws/InstallPluginsWsAction.java | 6 +- .../plugins/ws/UninstallPluginsWsAction.java | 6 +- .../plugins/ws/UpdatePluginsWsAction.java | 6 +- .../server/qualitygate/QualityGates.java | 57 ++-- .../server/qualityprofile/QProfileLoader.java | 7 +- .../qualityprofile/QProfileProjectLookup.java | 20 +- .../qualityprofile/QProfileService.java | 31 +- .../server/qualityprofile/QProfiles.java | 21 +- .../server/qualityprofile/RuleActivator.java | 9 +- .../ws/BulkRuleActivationActions.java | 6 +- .../ws/ProjectAssociationActions.java | 14 +- .../ws/QProfileChangeParentAction.java | 6 +- .../qualityprofile/ws/QProfileCopyAction.java | 6 +- .../ws/QProfileCreateAction.java | 12 +- .../ws/QProfileDeleteAction.java | 8 +- .../ws/QProfileProjectsAction.java | 15 +- .../ws/QProfileRenameAction.java | 6 +- .../ws/QProfileRestoreAction.java | 11 +- .../ws/QProfileSetDefaultAction.java | 6 +- .../sonar/server/rule/DefaultRuleFinder.java | 9 +- .../sonar/server/rule/RubyRuleService.java | 20 +- .../org/sonar/server/rule/RuleService.java | 21 +- .../org/sonar/server/rule/ws/AppAction.java | 15 +- .../org/sonar/server/rule/ws/RuleMapping.java | 4 +- .../sonar/server/rule/ws/SearchAction.java | 5 +- .../org/sonar/server/search/QueryContext.java | 12 +- .../sonar/server/search/ws/BaseMapping.java | 8 +- .../search/ws/SearchRequestHandler.java | 7 +- .../sonar/server/source/ws/HashAction.java | 13 +- .../sonar/server/source/ws/IndexAction.java | 9 +- .../sonar/server/source/ws/LinesAction.java | 11 +- .../org/sonar/server/source/ws/RawAction.java | 11 +- .../org/sonar/server/source/ws/ScmAction.java | 11 +- .../sonar/server/source/ws/ShowAction.java | 9 +- .../sonar/server/test/CoverageService.java | 15 +- .../test/ws/TestsCoveredFilesAction.java | 11 +- .../sonar/server/test/ws/TestsListAction.java | 16 +- .../java/org/sonar/server/ui/JRubyI18n.java | 24 +- .../java/org/sonar/server/ui/ViewProxy.java | 15 +- .../main/java/org/sonar/server/ui/Views.java | 13 +- .../ui/ws/ComponentNavigationAction.java | 19 +- .../server/ui/ws/GlobalNavigationAction.java | 9 +- .../ui/ws/SettingsNavigationAction.java | 7 +- .../server/user/AbstractUserSession.java | 178 ++++++++++ .../server/user/AnonymousUserSession.java | 56 ++++ .../sonar/server/user/DefaultUserService.java | 5 +- .../org/sonar/server/user/DoPrivileged.java | 60 +++- .../sonar/server/user/RubyUserSession.java | 44 ++- .../sonar/server/user/ServerUserSession.java | 140 ++++++++ .../server/user/ThreadLocalUserSession.java | 149 +++++++++ .../org/sonar/server/user/UserSession.java | 271 ++------------- .../sonar/server/user/UserSessionFilter.java | 20 +- .../server/user/ws/ChangePasswordAction.java | 6 +- .../sonar/server/user/ws/CreateAction.java | 8 +- .../server/user/ws/CurrentUserAction.java | 9 +- .../server/user/ws/DeactivateAction.java | 6 +- .../sonar/server/user/ws/UpdateAction.java | 6 +- .../org/sonar/server/ws/WebServiceEngine.java | 15 +- .../server/activity/ActivityServiceTest.java | 12 +- .../ws/ActivitiesWebServiceMediumTest.java | 7 +- .../org/sonar/server/batch/BatchWsTest.java | 10 +- .../batch/GlobalRepositoryActionTest.java | 15 +- .../sonar/server/batch/IssuesActionTest.java | 32 +- .../ProjectRepositoryLoaderMediumTest.java | 71 ++-- .../sonar/server/batch/UsersActionTest.java | 9 +- .../ComponentCleanerServiceMediumTest.java | 9 +- .../component/ComponentServiceMediumTest.java | 45 +-- .../component/ws/ComponentAppActionTest.java | 32 +- .../server/component/ws/ComponentsWsTest.java | 6 +- .../ws/ProvisionedProjectsActionTest.java | 21 +- .../server/component/ws/SearchActionTest.java | 19 +- .../ws/HistoryWsActionMediumTest.java | 12 +- .../ws/SubmitReportWsActionTest.java | 20 +- .../org/sonar/server/debt/DebtMediumTest.java | 9 +- .../server/debt/DebtModelBackupTest.java | 49 +-- .../server/debt/DebtModelOperationsTest.java | 15 +- .../server/design/ws/DependenciesWsTest.java | 3 +- .../server/design/ws/ShowActionTest.java | 21 +- .../duplication/ws/DuplicationsWsTest.java | 6 +- .../server/duplication/ws/ShowActionTest.java | 18 +- .../sonar/server/issue/ActionServiceTest.java | 11 +- .../sonar/server/issue/AssignActionTest.java | 10 +- .../sonar/server/issue/CommentActionTest.java | 14 +- .../issue/InternalRubyIssueServiceTest.java | 83 +++-- .../IssueBulkChangeServiceMediumTest.java | 15 +- .../issue/IssueBulkChangeServiceTest.java | 2 +- .../issue/IssueChangelogFormatterTest.java | 12 +- .../issue/IssueChangelogServiceTest.java | 20 +- .../issue/IssueCommentServiceMediumTest.java | 16 +- .../server/issue/IssueCommentServiceTest.java | 52 +-- .../server/issue/IssueQueryServiceTest.java | 24 +- .../sonar/server/issue/IssueQueryTest.java | 19 +- .../server/issue/IssueServiceMediumTest.java | 62 ++-- .../server/issue/IssuesFinderSortTest.java | 25 +- .../sonar/server/issue/PlanActionTest.java | 16 +- .../server/issue/SetSeverityActionTest.java | 26 +- .../server/issue/TransitionActionTest.java | 20 +- .../actionplan/ActionPlanServiceTest.java | 8 +- .../server/issue/filter/AppActionTest.java | 26 +- .../issue/filter/FavoritesActionTest.java | 16 +- .../issue/filter/IssueFilterServiceTest.java | 29 +- .../issue/filter/IssueFilterWriterTest.java | 11 +- .../issue/filter/IssueFilterWsTest.java | 6 +- .../server/issue/filter/ShowActionTest.java | 15 +- .../server/issue/index/IssueIndexTest.java | 303 ++++++++--------- .../issue/ws/IssueActionsWriterTest.java | 24 +- .../server/issue/ws/IssueShowActionTest.java | 39 +-- .../ws/SearchActionComponentsMediumTest.java | 21 +- .../issue/ws/SearchActionMediumTest.java | 31 +- .../InternalPermissionServiceMediumTest.java | 21 +- ...InternalPermissionTemplateServiceTest.java | 29 +- .../PermissionTemplateUpdaterTest.java | 26 +- .../sonar/server/platform/ws/L10nWsTest.java | 22 +- .../platform/ws/SystemInfoWsActionTest.java | 21 +- .../server/platform/ws/SystemWsTest.java | 3 +- .../ws/CancelAllPluginsWsActionTest.java | 15 +- .../ws/InstallPluginsWsActionTest.java | 11 +- .../ws/UninstallPluginsWsActionTest.java | 20 +- .../plugins/ws/UpdatePluginsWsActionTest.java | 11 +- .../server/qualitygate/QualityGatesTest.java | 45 ++- .../ActiveRuleBackendMediumTest.java | 4 + .../QProfileBackuperMediumTest.java | 4 + .../QProfileComparisonMediumTest.java | 4 + .../QProfileCopierMediumTest.java | 4 + .../qualityprofile/QProfileExportersTest.java | 3 + .../QProfileFactoryMediumTest.java | 8 +- .../QProfileProjectOperationsMediumTest.java | 12 +- .../QProfileResetMediumTest.java | 4 + .../QProfileServiceMediumTest.java | 35 +- .../server/qualityprofile/QProfilesTest.java | 16 +- .../RuleActivatorMediumTest.java | 22 +- .../QProfileChangeParentActionMediumTest.java | 12 +- .../ws/QProfileCompareActionMediumTest.java | 4 + .../ws/QProfileCopyActionTest.java | 18 +- .../ws/QProfileCreateActionMediumTest.java | 14 +- .../ws/QProfileCreateActionTest.java | 9 +- .../ws/QProfileDeleteActionTest.java | 23 +- .../ws/QProfileExportActionTest.java | 6 +- .../QProfileInheritanceActionMediumTest.java | 4 + .../ws/QProfileProjectsActionTest.java | 9 +- .../ws/QProfileRenameActionTest.java | 19 +- .../ws/QProfileRestoreActionTest.java | 16 +- .../ws/QProfileSetDefaultActionTest.java | 17 +- .../ws/QProfilesWsMediumTest.java | 10 +- .../qualityprofile/ws/QProfilesWsTest.java | 27 +- .../rule/DefaultRuleFinderMediumTest.java | 3 + .../server/rule/RegisterRulesMediumTest.java | 29 +- .../server/rule/RubyRuleServiceTest.java | 20 +- .../server/rule/RuleBackendMediumTest.java | 5 +- .../server/rule/RuleCreatorMediumTest.java | 3 + .../server/rule/RuleDeleterMediumTest.java | 3 + .../sonar/server/rule/RuleOperationsTest.java | 11 +- .../server/rule/RuleServiceMediumTest.java | 45 +-- .../server/rule/RuleUpdaterMediumTest.java | 47 ++- .../rule/index/RuleIndexMediumTest.java | 199 +++++------ .../sonar/server/rule/ws/AppActionTest.java | 12 +- .../rule/ws/CreateActionMediumTest.java | 26 +- .../sonar/server/rule/ws/RuleMappingTest.java | 18 +- .../rule/ws/RulesWebServiceMediumTest.java | 35 +- .../server/rule/ws/ShowActionMediumTest.java | 38 +-- .../rule/ws/UpdateActionMediumTest.java | 14 +- .../sonar/server/search/QueryContextTest.java | 11 +- .../server/search/SearchClientMediumTest.java | 4 + .../server/source/ws/HashActionTest.java | 15 +- .../server/source/ws/IndexActionTest.java | 14 +- .../server/source/ws/LinesActionTest.java | 25 +- .../sonar/server/source/ws/RawActionTest.java | 10 +- .../sonar/server/source/ws/ScmActionTest.java | 25 +- .../server/source/ws/ShowActionTest.java | 20 +- .../sonar/server/source/ws/SourcesWsTest.java | 14 +- .../server/test/CoverageServiceTest.java | 21 +- .../test/ws/TestsCoveredFilesActionTest.java | 12 +- .../server/test/ws/TestsListActionTest.java | 28 +- .../org/sonar/server/test/ws/TestsWsTest.java | 8 +- .../AnonymousMockUserSession.java} | 21 +- .../sonar/server/tester/MockUserSession.java | 153 +++++++++ .../{user => tester}/MockUserSessionTest.java | 5 +- .../sonar/server/tester/UserSessionRule.java | 316 ++++++++++++++++++ .../org/sonar/server/ui/JRubyI18nTest.java | 11 +- .../org/sonar/server/ui/ViewProxyTest.java | 69 ++-- .../java/org/sonar/server/ui/ViewsTest.java | 18 +- .../ui/ws/ComponentNavigationActionTest.java | 67 ++-- .../ui/ws/GlobalNavigationActionTest.java | 31 +- .../ui/ws/SettingsNavigationActionTest.java | 29 +- .../server/user/DefaultUserServiceTest.java | 16 +- .../sonar/server/user/DoPrivilegedTest.java | 14 +- .../sonar/server/user/MockUserSession.java | 130 ------- .../server/user/RubyUserSessionTest.java | 27 +- ...onTest.java => ServerUserSessionTest.java} | 123 ++----- .../user/ThreadLocalUserSessionTest.java | 65 ++++ .../server/user/UserSessionFilterTest.java | 38 ++- .../user/ws/ChangePasswordActionTest.java | 11 +- .../server/user/ws/CreateActionTest.java | 13 +- .../server/user/ws/CurrentUserActionTest.java | 10 +- .../server/user/ws/DeactivateActionTest.java | 14 +- .../server/user/ws/UpdateActionTest.java | 13 +- .../org/sonar/server/user/ws/UsersWsTest.java | 15 +- .../view/index/ViewIndexerMediumTest.java | 12 +- .../sonar/server/ws/WebServiceEngineTest.java | 23 +- 241 files changed, 3659 insertions(+), 2516 deletions(-) create mode 100644 server/sonar-server/src/main/java/org/sonar/server/user/AbstractUserSession.java create mode 100644 server/sonar-server/src/main/java/org/sonar/server/user/AnonymousUserSession.java create mode 100644 server/sonar-server/src/main/java/org/sonar/server/user/ServerUserSession.java create mode 100644 server/sonar-server/src/main/java/org/sonar/server/user/ThreadLocalUserSession.java rename server/sonar-server/src/test/java/org/sonar/server/{user/UserSessionTestUtils.java => tester/AnonymousMockUserSession.java} (67%) create mode 100644 server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSession.java rename server/sonar-server/src/test/java/org/sonar/server/{user => tester}/MockUserSessionTest.java (89%) create mode 100644 server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java delete mode 100644 server/sonar-server/src/test/java/org/sonar/server/user/MockUserSession.java rename server/sonar-server/src/test/java/org/sonar/server/user/{UserSessionTest.java => ServerUserSessionTest.java} (62%) create mode 100644 server/sonar-server/src/test/java/org/sonar/server/user/ThreadLocalUserSessionTest.java diff --git a/server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/IssueIndexBenchmarkTest.java b/server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/IssueIndexBenchmarkTest.java index 460b785d64b..4791fe3915f 100644 --- a/server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/IssueIndexBenchmarkTest.java +++ b/server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/IssueIndexBenchmarkTest.java @@ -24,8 +24,15 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Iterators; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import java.util.Arrays; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Timer; +import java.util.concurrent.atomic.AtomicLong; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.math.RandomUtils; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.slf4j.Logger; @@ -43,14 +50,7 @@ import org.sonar.server.issue.index.IssueDoc; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; - -import java.util.Arrays; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Timer; -import java.util.concurrent.atomic.AtomicLong; +import org.sonar.server.tester.UserSessionRule; public class IssueIndexBenchmarkTest { @@ -60,8 +60,10 @@ public class IssueIndexBenchmarkTest { final static int FILES_PER_PROJECT = 100; final static int ISSUES_PER_FILE = 100; + @ClassRule + public static ServerTester tester = new ServerTester(); @Rule - public ServerTester tester = new ServerTester(); + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); @Rule public Benchmark benchmark = new Benchmark(); @@ -122,11 +124,11 @@ public class IssueIndexBenchmarkTest { } private void benchmarkQueries() { - MockUserSession.set().setUserGroups("sonar-users"); - benchmarkQuery("all issues", IssueQuery.builder().build()); - benchmarkQuery("project issues", IssueQuery.builder().projectUuids(Arrays.asList("PROJECT33")).build()); - benchmarkQuery("file issues", IssueQuery.builder().componentUuids(Arrays.asList("FILE333")).build()); - benchmarkQuery("various", IssueQuery.builder() + userSessionRule.setUserGroups("sonar-users"); + benchmarkQuery("all issues", IssueQuery.builder(userSessionRule).build()); + benchmarkQuery("project issues", IssueQuery.builder(userSessionRule).projectUuids(Arrays.asList("PROJECT33")).build()); + benchmarkQuery("file issues", IssueQuery.builder(userSessionRule).componentUuids(Arrays.asList("FILE333")).build()); + benchmarkQuery("various", IssueQuery.builder(userSessionRule) .resolutions(Arrays.asList(Issue.RESOLUTION_FIXED)) .assigned(true) .build()); diff --git a/server/sonar-server/src/main/java/org/sonar/server/activity/ActivityService.java b/server/sonar-server/src/main/java/org/sonar/server/activity/ActivityService.java index 6d5c5626bd8..81d7779ada4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/activity/ActivityService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/activity/ActivityService.java @@ -32,16 +32,18 @@ public class ActivityService { private final DbClient dbClient; private final ActivityIndexer indexer; + private final UserSession userSession; - public ActivityService(DbClient dbClient, ActivityIndexer indexer) { + public ActivityService(DbClient dbClient, ActivityIndexer indexer, UserSession userSession) { this.dbClient = dbClient; this.indexer = indexer; + this.userSession = userSession; } public void save(Activity activity) { ActivityDto dto = new ActivityDto() .setKey(Uuids.create()) - .setAuthor(UserSession.get().login()) + .setAuthor(userSession.login()) .setAction(activity.getAction()) .setMessage(activity.getMessage()) .setData(KeyValueFormat.format(activity.getData())) diff --git a/server/sonar-server/src/main/java/org/sonar/server/activity/ws/ActivityMapping.java b/server/sonar-server/src/main/java/org/sonar/server/activity/ws/ActivityMapping.java index 07a756335cf..0ca7823b1df 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/activity/ws/ActivityMapping.java +++ b/server/sonar-server/src/main/java/org/sonar/server/activity/ws/ActivityMapping.java @@ -26,13 +26,15 @@ import org.sonar.server.search.QueryContext; import org.sonar.server.search.ws.BaseMapping; import java.util.Map; +import org.sonar.server.user.UserSession; /** * Conversion between {@link org.sonar.server.activity.index.ActivityDoc} and WS JSON response */ public class ActivityMapping extends BaseMapping { - public ActivityMapping() { + public ActivityMapping(UserSession userSession) { + super(userSession); map("type", ActivityIndexDefinition.FIELD_TYPE); map("action", ActivityIndexDefinition.FIELD_ACTION); mapDateTime("createdAt", ActivityIndexDefinition.FIELD_CREATED_AT); diff --git a/server/sonar-server/src/main/java/org/sonar/server/activity/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/activity/ws/SearchAction.java index 0bb0647f753..1600f943c5c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/activity/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/activity/ws/SearchAction.java @@ -31,6 +31,7 @@ import org.sonar.server.activity.index.ActivityQuery; import org.sonar.server.es.SearchOptions; import org.sonar.server.es.SearchResult; import org.sonar.server.search.QueryContext; +import org.sonar.server.user.UserSession; public class SearchAction implements RequestHandler { @@ -39,10 +40,12 @@ public class SearchAction implements RequestHandler { private final ActivityIndex activityIndex; private final ActivityMapping docToJsonMapping; + private final UserSession userSession; - public SearchAction(ActivityIndex activityIndex, ActivityMapping docToJsonMapping) { + public SearchAction(ActivityIndex activityIndex, ActivityMapping docToJsonMapping, UserSession userSession) { this.activityIndex = activityIndex; this.docToJsonMapping = docToJsonMapping; + this.userSession = userSession; } void define(WebService.NewController controller) { @@ -73,7 +76,7 @@ public class SearchAction implements RequestHandler { JsonWriter json = response.newJsonWriter().beginObject(); options.writeJson(json, results.getTotal()); - writeActivities(results, json, new QueryContext().setFieldsToReturn(request.paramAsStrings(WebService.Param.FIELDS))); + writeActivities(results, json, new QueryContext(userSession).setFieldsToReturn(request.paramAsStrings(WebService.Param.FIELDS))); json.endObject().close(); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalRepositoryAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalRepositoryAction.java index 0e19a80fce6..9f76061023a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalRepositoryAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/GlobalRepositoryAction.java @@ -40,10 +40,12 @@ public class GlobalRepositoryAction implements BatchAction { private final DbClient dbClient; private final PropertiesDao propertiesDao; + private final UserSession userSession; - public GlobalRepositoryAction(DbClient dbClient, PropertiesDao propertiesDao) { + public GlobalRepositoryAction(DbClient dbClient, PropertiesDao propertiesDao, UserSession userSession) { this.dbClient = dbClient; this.propertiesDao = propertiesDao; + this.userSession = userSession; } @Override @@ -57,7 +59,6 @@ public class GlobalRepositoryAction implements BatchAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession userSession = UserSession.get(); boolean hasScanPerm = userSession.hasGlobalPermission(GlobalPermissions.SCAN_EXECUTION); boolean hasPreviewPerm = userSession.hasGlobalPermission(GlobalPermissions.PREVIEW_EXECUTION); if (!hasPreviewPerm && !hasScanPerm) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/IssuesAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/IssuesAction.java index a0e9bf40c67..16b3c4b0bec 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/IssuesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/IssuesAction.java @@ -20,6 +20,11 @@ package org.sonar.server.batch; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import org.sonar.api.resources.Scopes; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; @@ -35,12 +40,6 @@ import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.plugins.MimeTypes; import org.sonar.server.user.UserSession; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - import static com.google.common.collect.Maps.newHashMap; public class IssuesAction implements BatchAction { @@ -48,12 +47,13 @@ public class IssuesAction implements BatchAction { private static final String PARAM_KEY = "key"; private final DbClient dbClient; - private final IssueIndex issueIndex; + private final UserSession userSession; - public IssuesAction(DbClient dbClient, IssueIndex issueIndex) { + public IssuesAction(DbClient dbClient, IssueIndex issueIndex, UserSession userSession) { this.dbClient = dbClient; this.issueIndex = issueIndex; + this.userSession = userSession; } @Override @@ -73,7 +73,7 @@ public class IssuesAction implements BatchAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkGlobalPermission(GlobalPermissions.PREVIEW_EXECUTION); + userSession.checkGlobalPermission(GlobalPermissions.PREVIEW_EXECUTION); final String moduleKey = request.mandatoryParam(PARAM_KEY); response.stream().setMediaType(MimeTypes.PROTOBUF); diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectRepositoryLoader.java b/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectRepositoryLoader.java index 7a912db9bae..c34159404e4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectRepositoryLoader.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/ProjectRepositoryLoader.java @@ -75,18 +75,20 @@ public class ProjectRepositoryLoader { private final QProfileLoader qProfileLoader; private final RuleService ruleService; private final Languages languages; + private final UserSession userSession; public ProjectRepositoryLoader(DbClient dbClient, QProfileFactory qProfileFactory, QProfileLoader qProfileLoader, RuleService ruleService, - Languages languages) { + Languages languages, UserSession userSession) { this.dbClient = dbClient; this.qProfileFactory = qProfileFactory; this.qProfileLoader = qProfileLoader; this.ruleService = ruleService; this.languages = languages; + this.userSession = userSession; } public ProjectRepositories load(ProjectRepositoryQuery query) { - boolean hasScanPerm = UserSession.get().hasGlobalPermission(GlobalPermissions.SCAN_EXECUTION); + boolean hasScanPerm = userSession.hasGlobalPermission(GlobalPermissions.SCAN_EXECUTION); checkPermission(query.isPreview()); DbSession session = dbClient.openSession(false); @@ -97,7 +99,7 @@ public class ProjectRepositoryLoader { // Current project/module can be null when analysing a new project if (module != null) { // Scan permission is enough to analyze all projects but preview permission is limited to projects user can access - if (query.isPreview() && !UserSession.get().hasProjectPermissionByUuid(UserRole.USER, module.projectUuid())) { + if (query.isPreview() && !userSession.hasProjectPermissionByUuid(UserRole.USER, module.projectUuid())) { throw new ForbiddenException("You're not authorized to access to project '" + module.name() + "', please contact your SonarQube administrator."); } @@ -238,7 +240,7 @@ public class ProjectRepositoryLoader { for (org.sonar.batch.protocol.input.QProfile qProfile : ref.qProfiles()) { // Load all rules of the profile language (only needed fields are loaded) Map languageRules = ruleByRuleKey(ruleService.search(new RuleQuery().setLanguages(newArrayList(qProfile.language())), - new QueryContext().setLimit(100).setFieldsToReturn(newArrayList( + new QueryContext(userSession).setLimit(100).setFieldsToReturn(newArrayList( RuleNormalizer.RuleField.KEY.field(), RuleNormalizer.RuleField.NAME.field(), RuleNormalizer.RuleField.INTERNAL_KEY.field(), RuleNormalizer.RuleField.TEMPLATE_KEY.field() )).setScroll(true)) .scroll()); @@ -277,7 +279,7 @@ public class ProjectRepositoryLoader { } private void addManualRules(ProjectRepositories ref) { - Result ruleSearchResult = ruleService.search(new RuleQuery().setRepositories(newArrayList(RuleKey.MANUAL_REPOSITORY_KEY)), new QueryContext().setScroll(true) + Result ruleSearchResult = ruleService.search(new RuleQuery().setRepositories(newArrayList(RuleKey.MANUAL_REPOSITORY_KEY)), new QueryContext(userSession).setScroll(true) .setFieldsToReturn(newArrayList(RuleNormalizer.RuleField.KEY.field(), RuleNormalizer.RuleField.NAME.field()))); Iterator rules = ruleSearchResult.scroll(); while (rules.hasNext()) { @@ -304,7 +306,6 @@ public class ProjectRepositoryLoader { } private void checkPermission(boolean preview) { - UserSession userSession = UserSession.get(); boolean hasScanPerm = userSession.hasGlobalPermission(GlobalPermissions.SCAN_EXECUTION); boolean hasPreviewPerm = userSession.hasGlobalPermission(GlobalPermissions.PREVIEW_EXECUTION); if (!hasPreviewPerm && !hasScanPerm) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java b/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java index 520ce7e6757..46f2c0d1671 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/batch/UsersAction.java @@ -20,6 +20,10 @@ package org.sonar.server.batch; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Iterator; +import java.util.List; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; @@ -30,19 +34,16 @@ import org.sonar.server.user.UserSession; import org.sonar.server.user.index.UserDoc; import org.sonar.server.user.index.UserIndex; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Iterator; -import java.util.List; - public class UsersAction implements BatchAction { private static final String PARAM_LOGINS = "logins"; private final UserIndex userIndex; + private final UserSession userSession; - public UsersAction(UserIndex userIndex) { + public UsersAction(UserIndex userIndex, UserSession userSession) { this.userIndex = userIndex; + this.userSession = userSession; } @Override @@ -62,7 +63,7 @@ public class UsersAction implements BatchAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkGlobalPermission(GlobalPermissions.PREVIEW_EXECUTION); + userSession.checkGlobalPermission(GlobalPermissions.PREVIEW_EXECUTION); List logins = request.mandatoryParamAsStrings(PARAM_LOGINS); response.stream().setMediaType(MimeTypes.PROTOBUF); diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ComponentService.java b/server/sonar-server/src/main/java/org/sonar/server/component/ComponentService.java index c4263a25b16..5dad5622ad0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/ComponentService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ComponentService.java @@ -24,6 +24,15 @@ import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.collect.Collections2; import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; +import org.sonar.api.ServerComponent; import org.sonar.api.ServerSide; import org.sonar.api.i18n.I18n; import org.sonar.api.resources.Scopes; @@ -41,16 +50,6 @@ import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.permission.InternalPermissionService; import org.sonar.server.user.UserSession; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; - import static com.google.common.collect.Lists.newArrayList; @ServerSide @@ -62,14 +61,16 @@ public class ComponentService { private final I18n i18n; private final ResourceIndexerDao resourceIndexerDao; private final InternalPermissionService permissionService; + private final UserSession userSession; public ComponentService(DbClient dbClient, ResourceKeyUpdaterDao resourceKeyUpdaterDao, I18n i18n, ResourceIndexerDao resourceIndexerDao, - InternalPermissionService permissionService) { + InternalPermissionService permissionService, UserSession userSession) { this.dbClient = dbClient; this.resourceKeyUpdaterDao = resourceKeyUpdaterDao; this.i18n = i18n; this.resourceIndexerDao = resourceIndexerDao; this.permissionService = permissionService; + this.userSession = userSession; } public ComponentDto getByKey(String key) { @@ -114,7 +115,7 @@ public class ComponentService { DbSession session = dbClient.openSession(false); try { ComponentDto projectOrModule = getByKey(session, projectOrModuleKey); - UserSession.get().checkProjectUuidPermission(UserRole.ADMIN, projectOrModule.projectUuid()); + userSession.checkProjectUuidPermission(UserRole.ADMIN, projectOrModule.projectUuid()); resourceKeyUpdaterDao.updateKey(projectOrModule.getId(), newKey); session.commit(); @@ -128,7 +129,7 @@ public class ComponentService { DbSession session = dbClient.openSession(false); try { ComponentDto project = getByKey(projectKey); - UserSession.get().checkProjectUuidPermission(UserRole.ADMIN, project.projectUuid()); + userSession.checkProjectUuidPermission(UserRole.ADMIN, project.projectUuid()); return resourceKeyUpdaterDao.checkModuleKeysBeforeRenaming(project.getId(), stringToReplace, replacementString); } finally { session.close(); @@ -140,7 +141,7 @@ public class ComponentService { DbSession session = dbClient.openSession(true); try { ComponentDto project = getByKey(session, projectKey); - UserSession.get().checkProjectUuidPermission(UserRole.ADMIN, project.projectUuid()); + userSession.checkProjectUuidPermission(UserRole.ADMIN, project.projectUuid()); resourceKeyUpdaterDao.bulkUpdateKey(session, project.getId(), stringToReplace, replacementString); session.commit(); } finally { @@ -149,7 +150,7 @@ public class ComponentService { } public String create(NewComponent newComponent) { - UserSession.get().checkGlobalPermission(GlobalPermissions.PROVISIONING); + userSession.checkGlobalPermission(GlobalPermissions.PROVISIONING); DbSession session = dbClient.openSession(false); try { diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java index e08f7aa136a..83aa5dd8f1d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/ComponentAppAction.java @@ -20,6 +20,10 @@ package org.sonar.server.component.ws; +import java.util.List; +import java.util.Map; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; import org.apache.commons.lang.BooleanUtils; import org.sonar.api.i18n.I18n; import org.sonar.api.measures.CoreMetrics; @@ -41,12 +45,6 @@ import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.user.UserSession; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.List; -import java.util.Map; - import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Maps.newHashMap; @@ -63,11 +61,13 @@ public class ComponentAppAction implements RequestHandler { private final Durations durations; private final I18n i18n; + private final UserSession userSession; - public ComponentAppAction(DbClient dbClient, Durations durations, I18n i18n) { + public ComponentAppAction(DbClient dbClient, Durations durations, I18n i18n, UserSession userSession) { this.dbClient = dbClient; this.durations = durations; this.i18n = i18n; + this.userSession = userSession; } void define(WebService.NewController controller) { @@ -92,7 +92,6 @@ public class ComponentAppAction implements RequestHandler { @Override public void handle(Request request, Response response) { String componentUuid = request.mandatoryParam(PARAM_UUID); - UserSession userSession = UserSession.get(); JsonWriter json = response.newJsonWriter(); json.beginObject(); @@ -211,16 +210,16 @@ public class ComponentAppAction implements RequestHandler { value = metric.getBestValue(); } if (metricType.equals(Metric.ValueType.FLOAT) && value != null) { - return i18n.formatDouble(UserSession.get().locale(), value); + return i18n.formatDouble(userSession.locale(), value); } if (metricType.equals(Metric.ValueType.INT) && value != null) { - return i18n.formatInteger(UserSession.get().locale(), value.intValue()); + return i18n.formatInteger(userSession.locale(), value.intValue()); } if (metricType.equals(Metric.ValueType.PERCENT) && value != null) { - return i18n.formatDouble(UserSession.get().locale(), value) + "%"; + return i18n.formatDouble(userSession.locale(), value) + "%"; } if (metricType.equals(Metric.ValueType.WORK_DUR) && value != null) { - return durations.format(UserSession.get().locale(), durations.create(value.longValue()), Durations.DurationFormat.SHORT); + return durations.format(userSession.locale(), durations.create(value.longValue()), Durations.DurationFormat.SHORT); } if ((metricType.equals(Metric.ValueType.STRING) || metricType.equals(Metric.ValueType.RATING)) && data != null) { return data; diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/ProvisionedProjectsAction.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/ProvisionedProjectsAction.java index cbc15b86377..7acf67b055d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/ws/ProvisionedProjectsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/ProvisionedProjectsAction.java @@ -39,12 +39,14 @@ import java.util.Date; import java.util.List; public class ProvisionedProjectsAction implements ProjectsAction { - private final DbClient dbClient; - private static final List POSSIBLE_FIELDS = Arrays.asList("uuid", "key", "name", "creationDate"); - public ProvisionedProjectsAction(DbClient dbClient) { + private final DbClient dbClient; + private final UserSession userSession; + + public ProvisionedProjectsAction(DbClient dbClient, UserSession userSession) { this.dbClient = dbClient; + this.userSession = userSession; } @Override @@ -68,7 +70,7 @@ public class ProvisionedProjectsAction implements ProjectsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkGlobalPermission(UserRole.ADMIN, "You need admin rights."); + userSession.checkGlobalPermission(UserRole.ADMIN, "You need admin rights."); SearchOptions options = new SearchOptions().setPage( request.mandatoryParamAsInt(Param.PAGE), request.mandatoryParamAsInt(Param.PAGE_SIZE) diff --git a/server/sonar-server/src/main/java/org/sonar/server/component/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/component/ws/SearchAction.java index 482390c8344..2ac0799b78b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/component/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/component/ws/SearchAction.java @@ -21,6 +21,9 @@ package org.sonar.server.component.ws; import com.google.common.collect.Sets; +import java.util.Collection; +import java.util.List; +import java.util.Set; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.RequestHandler; import org.sonar.api.server.ws.Response; @@ -35,10 +38,6 @@ import org.sonar.server.db.DbClient; import org.sonar.server.es.SearchOptions; import org.sonar.server.user.UserSession; -import java.util.Collection; -import java.util.List; -import java.util.Set; - import static com.google.common.collect.Sets.newLinkedHashSet; import static org.sonar.api.server.ws.WebService.Param.PAGE; import static org.sonar.api.server.ws.WebService.Param.PAGE_SIZE; @@ -50,9 +49,11 @@ public class SearchAction implements RequestHandler { private static final String PARAM_COMPONENT_UUID = "componentUuid"; private final DbClient dbClient; + private final UserSession userSession; - public SearchAction(DbClient dbClient) { + public SearchAction(DbClient dbClient, UserSession userSession) { this.dbClient = dbClient; + this.userSession = userSession; } void define(WebService.NewController controller) { @@ -91,10 +92,10 @@ public class SearchAction implements RequestHandler { DbSession session = dbClient.openSession(false); try { ComponentDto componentDto = dbClient.componentDao().getByUuid(session, viewOrSubUuid); - UserSession.get().checkProjectUuidPermission(UserRole.USER, componentDto.projectUuid()); + userSession.checkProjectUuidPermission(UserRole.USER, componentDto.projectUuid()); Set projectIds = newLinkedHashSet(dbClient.componentIndexDao().selectProjectIdsFromQueryAndViewOrSubViewUuid(session, query, componentDto.uuid())); - Collection authorizedProjectIds = dbClient.authorizationDao().keepAuthorizedProjectIds(session, projectIds, UserSession.get().userId(), UserRole.USER); + Collection authorizedProjectIds = dbClient.authorizationDao().keepAuthorizedProjectIds(session, projectIds, userSession.userId(), UserRole.USER); SearchOptions options = new SearchOptions(); options.setPage(request.mandatoryParamAsInt(PAGE), request.mandatoryParamAsInt(PAGE_SIZE)); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/HistoryWsAction.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/HistoryWsAction.java index 82135a2c15f..0bb4d2b1155 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/HistoryWsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/HistoryWsAction.java @@ -20,6 +20,8 @@ package org.sonar.server.computation.ws; +import java.util.Arrays; +import java.util.Map; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.RequestHandler; import org.sonar.api.server.ws.Response; @@ -35,18 +37,17 @@ import org.sonar.server.es.SearchResult; import org.sonar.server.issue.ws.IssuesWs; import org.sonar.server.user.UserSession; -import java.util.Arrays; -import java.util.Map; - // FIXME replace by api/activities/search public class HistoryWsAction implements ComputationWsAction, RequestHandler { public static final String PARAM_TYPE = "type"; private final ActivityIndex activityIndex; + private final UserSession userSession; - public HistoryWsAction(ActivityIndex activityIndex) { + public HistoryWsAction(ActivityIndex activityIndex, UserSession userSession) { this.activityIndex = activityIndex; + this.userSession = userSession; } @Override @@ -63,7 +64,7 @@ public class HistoryWsAction implements ComputationWsAction, RequestHandler { @Override public void handle(Request request, Response response) { - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); ActivityQuery query = new ActivityQuery(); query.setTypes(Arrays.asList(Activity.Type.ANALYSIS_REPORT.name())); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/SubmitReportWsAction.java b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/SubmitReportWsAction.java index 7a7c54d001d..2c1347e956f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/ws/SubmitReportWsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/ws/SubmitReportWsAction.java @@ -20,6 +20,7 @@ package org.sonar.server.computation.ws; +import java.io.InputStream; import org.apache.commons.io.IOUtils; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.RequestHandler; @@ -30,8 +31,6 @@ import org.sonar.server.computation.ComputationThreadLauncher; import org.sonar.server.computation.ReportQueue; import org.sonar.server.user.UserSession; -import java.io.InputStream; - public class SubmitReportWsAction implements ComputationWsAction, RequestHandler { public static final String ACTION = "submit_report"; @@ -40,10 +39,12 @@ public class SubmitReportWsAction implements ComputationWsAction, RequestHandler private final ReportQueue queue; private final ComputationThreadLauncher workerLauncher; + private final UserSession userSession; - public SubmitReportWsAction(ReportQueue queue, ComputationThreadLauncher workerLauncher) { + public SubmitReportWsAction(ReportQueue queue, ComputationThreadLauncher workerLauncher, UserSession userSession) { this.queue = queue; this.workerLauncher = workerLauncher; + this.userSession = userSession; } @Override @@ -68,7 +69,7 @@ public class SubmitReportWsAction implements ComputationWsAction, RequestHandler @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkGlobalPermission(GlobalPermissions.SCAN_EXECUTION); + userSession.checkGlobalPermission(GlobalPermissions.SCAN_EXECUTION); String projectKey = request.mandatoryParam(PARAM_PROJECT_KEY); InputStream reportData = request.paramAsInputStream(PARAM_REPORT_DATA); try { diff --git a/server/sonar-server/src/main/java/org/sonar/server/dashboard/ws/DashboardsShowAction.java b/server/sonar-server/src/main/java/org/sonar/server/dashboard/ws/DashboardsShowAction.java index 035ad011da9..1c053863f4b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/dashboard/ws/DashboardsShowAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/dashboard/ws/DashboardsShowAction.java @@ -20,6 +20,7 @@ package org.sonar.server.dashboard.ws; import com.google.common.collect.ListMultimap; +import java.util.Collection; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; @@ -33,16 +34,16 @@ import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.user.UserSession; -import java.util.Collection; - public class DashboardsShowAction implements DashboardsAction { private static final String PARAM_KEY = "key"; private final DbClient dbClient; + private final UserSession userSession; - public DashboardsShowAction(DbClient dbClient) { + public DashboardsShowAction(DbClient dbClient, UserSession userSession) { this.dbClient = dbClient; + this.userSession = userSession; } @Override @@ -61,7 +62,7 @@ public class DashboardsShowAction implements DashboardsAction { public void handle(Request request, Response response) throws Exception { DbSession dbSession = dbClient.openSession(false); try { - Integer userId = UserSession.get().userId(); + Integer userId = userSession.userId(); DashboardDto dashboard = dbClient.dashboardDao().getAllowedByKey(dbSession, request.mandatoryParamAsLong(PARAM_KEY), userId != null ? userId.longValue() : null); if (dashboard == null) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java b/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java index 920ca9e3ccc..560363f81cb 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java +++ b/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelBackup.java @@ -45,7 +45,6 @@ import org.sonar.server.debt.DebtModelXMLExporter.RuleDebt; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.rule.RuleDefinitionsLoader; import org.sonar.server.rule.RuleOperations; -import org.sonar.server.user.UserSession; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -53,6 +52,7 @@ import javax.annotation.Nullable; import java.io.Reader; import java.util.Date; import java.util.List; +import org.sonar.server.user.UserSession; import static com.google.common.collect.Lists.newArrayList; @@ -70,18 +70,19 @@ public class DebtModelBackup { private final DebtModelXMLExporter debtModelXMLExporter; private final RuleDefinitionsLoader defLoader; private final System2 system2; + private final UserSession userSession; public DebtModelBackup(DbClient dbClient, DebtModelOperations debtModelOperations, RuleOperations ruleOperations, DebtModelPluginRepository debtModelPluginRepository, DebtCharacteristicsXMLImporter characteristicsXMLImporter, DebtRulesXMLImporter rulesXMLImporter, - DebtModelXMLExporter debtModelXMLExporter, RuleDefinitionsLoader defLoader) { + DebtModelXMLExporter debtModelXMLExporter, RuleDefinitionsLoader defLoader, UserSession userSession) { this(dbClient, debtModelOperations, ruleOperations, debtModelPluginRepository, characteristicsXMLImporter, rulesXMLImporter, debtModelXMLExporter, - defLoader, System2.INSTANCE); + defLoader, System2.INSTANCE, userSession); } @VisibleForTesting DebtModelBackup(DbClient dbClient, DebtModelOperations debtModelOperations, RuleOperations ruleOperations, DebtModelPluginRepository debtModelPluginRepository, DebtCharacteristicsXMLImporter characteristicsXMLImporter, DebtRulesXMLImporter rulesXMLImporter, - DebtModelXMLExporter debtModelXMLExporter, RuleDefinitionsLoader defLoader, System2 system2) { + DebtModelXMLExporter debtModelXMLExporter, RuleDefinitionsLoader defLoader, System2 system2, UserSession userSession) { this.dbClient = dbClient; this.debtModelOperations = debtModelOperations; this.ruleOperations = ruleOperations; @@ -91,6 +92,7 @@ public class DebtModelBackup { this.debtModelXMLExporter = debtModelXMLExporter; this.defLoader = defLoader; this.system2 = system2; + this.userSession = userSession; } public String backup() { @@ -426,7 +428,7 @@ public class DebtModelBackup { } private void checkPermission() { - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelOperations.java b/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelOperations.java index 2b15c2160be..dcfd747e0b0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelOperations.java +++ b/server/sonar-server/src/main/java/org/sonar/server/debt/DebtModelOperations.java @@ -50,15 +50,17 @@ public class DebtModelOperations { private final DbClient dbClient; private final System2 system2; + private final UserSession userSession; - public DebtModelOperations(DbClient dbClient) { - this(dbClient, System2.INSTANCE); + public DebtModelOperations(DbClient dbClient, UserSession userSession) { + this(dbClient, System2.INSTANCE, userSession); } @VisibleForTesting - DebtModelOperations(DbClient dbClient, System2 system2) { + DebtModelOperations(DbClient dbClient, System2 system2, UserSession userSession) { this.dbClient = dbClient; this.system2 = system2; + this.userSession = userSession; } public DebtCharacteristic create(String name, @Nullable Integer parentId) { @@ -262,7 +264,7 @@ public class DebtModelOperations { } private void checkPermission() { - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); } private static DebtCharacteristic toCharacteristic(CharacteristicDto dto) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/design/ws/ShowAction.java b/server/sonar-server/src/main/java/org/sonar/server/design/ws/ShowAction.java index bf2882e6027..7e3878981a8 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/design/ws/ShowAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/design/ws/ShowAction.java @@ -21,6 +21,11 @@ package org.sonar.server.design.ws; import com.google.common.io.Resources; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; @@ -33,21 +38,17 @@ import org.sonar.server.db.DbClient; import org.sonar.server.user.UserSession; import org.sonar.server.user.ws.BaseUsersWsAction; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - public class ShowAction implements BaseUsersWsAction { private static final String PARAM_FROM_PARENT_UUID = "fromParentUuid"; private static final String PARAM_TO_PARENT_UUID = "toParentUuid"; private final DbClient dbClient; + private final UserSession userSession; - public ShowAction(DbClient dbClient) { + public ShowAction(DbClient dbClient, UserSession userSession) { this.dbClient = dbClient; + this.userSession = userSession; } @Override @@ -79,7 +80,7 @@ public class ShowAction implements BaseUsersWsAction { try { ComponentDto fromParent = dbClient.componentDao().getByUuid(session, fromParentUuid); ComponentDto project = dbClient.componentDao().getByUuid(session, fromParent.projectUuid()); - UserSession.get().checkProjectUuidPermission(UserRole.USER, project.uuid()); + userSession.checkProjectUuidPermission(UserRole.USER, project.uuid()); List fileDependencies = dbClient.fileDependencyDao().selectFromParents(session, fromParentUuid, toParentUuid, project.getId()); writeResponse(response, fileDependencies, componentsByUuid(session, fileDependencies)); diff --git a/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/ShowAction.java b/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/ShowAction.java index 5f18d58f81f..a4e7a1ac10f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/ShowAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/duplication/ws/ShowAction.java @@ -22,6 +22,8 @@ package org.sonar.server.duplication.ws; import com.google.common.base.Preconditions; import com.google.common.io.Resources; +import java.util.List; +import javax.annotation.CheckForNull; import org.sonar.api.measures.CoreMetrics; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.RequestHandler; @@ -39,9 +41,6 @@ import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.measure.persistence.MeasureDao; import org.sonar.server.user.UserSession; -import javax.annotation.CheckForNull; -import java.util.List; - public class ShowAction implements RequestHandler { private final DbClient dbClient; @@ -49,13 +48,15 @@ public class ShowAction implements RequestHandler { private final MeasureDao measureDao; private final DuplicationsParser parser; private final DuplicationsJsonWriter duplicationsJsonWriter; + private final UserSession userSession; - public ShowAction(DbClient dbClient, ComponentDao componentDao, MeasureDao measureDao, DuplicationsParser parser, DuplicationsJsonWriter duplicationsJsonWriter) { + public ShowAction(DbClient dbClient, ComponentDao componentDao, MeasureDao measureDao, DuplicationsParser parser, DuplicationsJsonWriter duplicationsJsonWriter, UserSession userSession) { this.dbClient = dbClient; this.componentDao = componentDao; this.measureDao = measureDao; this.parser = parser; this.duplicationsJsonWriter = duplicationsJsonWriter; + this.userSession = userSession; } void define(WebService.NewController controller) { @@ -87,7 +88,7 @@ public class ShowAction implements RequestHandler { fileKey = componentDao.getByUuid(session, fileUuid).key(); } - UserSession.get().checkComponentPermission(UserRole.CODEVIEWER, fileKey); + userSession.checkComponentPermission(UserRole.CODEVIEWER, fileKey); try { ComponentDto component = findComponent(fileKey, session); diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java index db59c14e026..f6f0058ad10 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/InternalRubyIssueService.java @@ -26,6 +26,12 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Map; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; import org.apache.commons.lang.StringUtils; import org.sonar.api.ServerSide; import org.sonar.api.issue.ActionPlan; @@ -54,14 +60,6 @@ import org.sonar.server.user.UserSession; import org.sonar.server.util.RubyUtils; import org.sonar.server.util.Validation; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; - import static com.google.common.collect.Lists.newArrayList; /** @@ -91,6 +89,7 @@ public class InternalRubyIssueService { private final ActionService actionService; private final IssueFilterService issueFilterService; private final IssueBulkChangeService issueBulkChangeService; + private final UserSession userSession; public InternalRubyIssueService( IssueService issueService, @@ -98,7 +97,8 @@ public class InternalRubyIssueService { IssueCommentService commentService, IssueChangelogService changelogService, ActionPlanService actionPlanService, ResourceDao resourceDao, ActionService actionService, - IssueFilterService issueFilterService, IssueBulkChangeService issueBulkChangeService) { + IssueFilterService issueFilterService, IssueBulkChangeService issueBulkChangeService, + UserSession userSession) { this.issueService = issueService; this.issueQueryService = issueQueryService; this.commentService = commentService; @@ -108,6 +108,7 @@ public class InternalRubyIssueService { this.actionService = actionService; this.issueFilterService = issueFilterService; this.issueBulkChangeService = issueBulkChangeService; + this.userSession = userSession; } public Issue getIssueByKey(String issueKey) { @@ -202,7 +203,7 @@ public class InternalRubyIssueService { public Result addComment(String issueKey, String text) { Result result = Result.of(); try { - result.set(commentService.addComment(issueKey, text, UserSession.get())); + result.set(commentService.addComment(issueKey, text, userSession)); } catch (Exception e) { result.addError(e.getMessage()); } @@ -210,13 +211,13 @@ public class InternalRubyIssueService { } public IssueComment deleteComment(String commentKey) { - return commentService.deleteComment(commentKey, UserSession.get()); + return commentService.deleteComment(commentKey, userSession); } public Result editComment(String commentKey, String newText) { Result result = Result.of(); try { - result.set(commentService.editComment(commentKey, newText, UserSession.get())); + result.set(commentService.editComment(commentKey, newText, userSession)); } catch (Exception e) { result.addError(e.getMessage()); } @@ -259,27 +260,27 @@ public class InternalRubyIssueService { } public Collection findOpenActionPlans(String projectKey) { - return actionPlanService.findOpenByProjectKey(projectKey, UserSession.get()); + return actionPlanService.findOpenByProjectKey(projectKey, userSession); } public ActionPlan findActionPlan(String actionPlanKey) { - return actionPlanService.findByKey(actionPlanKey, UserSession.get()); + return actionPlanService.findByKey(actionPlanKey, userSession); } public List findActionPlanStats(String projectKey) { - return actionPlanService.findActionPlanStats(projectKey, UserSession.get()); + return actionPlanService.findActionPlanStats(projectKey, userSession); } public Result createActionPlan(Map parameters) { Result result = createActionPlanResult(parameters); if (result.ok()) { - result.set(actionPlanService.create(result.get(), UserSession.get())); + result.set(actionPlanService.create(result.get(), userSession)); } return result; } public Result updateActionPlan(String key, Map parameters) { - DefaultActionPlan existingActionPlan = (DefaultActionPlan) actionPlanService.findByKey(key, UserSession.get()); + DefaultActionPlan existingActionPlan = (DefaultActionPlan) actionPlanService.findByKey(key, userSession); if (existingActionPlan == null) { Result result = Result.of(); result.addError(Result.Message.ofL10n(ACTION_PLANS_ERRORS_ACTION_PLAN_DOES_NOT_EXIST_MESSAGE, key)); @@ -290,7 +291,7 @@ public class InternalRubyIssueService { DefaultActionPlan actionPlan = (DefaultActionPlan) result.get(); actionPlan.setKey(existingActionPlan.key()); actionPlan.setUserLogin(existingActionPlan.userLogin()); - result.set(actionPlanService.update(actionPlan, UserSession.get())); + result.set(actionPlanService.update(actionPlan, userSession)); } return result; } @@ -299,7 +300,7 @@ public class InternalRubyIssueService { public Result closeActionPlan(String actionPlanKey) { Result result = createResultForExistingActionPlan(actionPlanKey); if (result.ok()) { - result.set(actionPlanService.setStatus(actionPlanKey, ActionPlan.STATUS_CLOSED, UserSession.get())); + result.set(actionPlanService.setStatus(actionPlanKey, ActionPlan.STATUS_CLOSED, userSession)); } return result; } @@ -307,7 +308,7 @@ public class InternalRubyIssueService { public Result openActionPlan(String actionPlanKey) { Result result = createResultForExistingActionPlan(actionPlanKey); if (result.ok()) { - result.set(actionPlanService.setStatus(actionPlanKey, ActionPlan.STATUS_OPEN, UserSession.get())); + result.set(actionPlanService.setStatus(actionPlanKey, ActionPlan.STATUS_OPEN, userSession)); } return result; } @@ -315,7 +316,7 @@ public class InternalRubyIssueService { public Result deleteActionPlan(String actionPlanKey) { Result result = createResultForExistingActionPlan(actionPlanKey); if (result.ok()) { - actionPlanService.delete(actionPlanKey, UserSession.get()); + actionPlanService.delete(actionPlanKey, userSession); } return result; } @@ -351,7 +352,7 @@ public class InternalRubyIssueService { if (result.ok()) { DefaultActionPlan actionPlan = DefaultActionPlan.create(name) .setDescription(description) - .setUserLogin(UserSession.get().login()) + .setUserLogin(userSession.login()) .setDeadLine(deadLine); // Can only set project on creation @@ -408,7 +409,7 @@ public class InternalRubyIssueService { public Result executeAction(String issueKey, String actionKey) { Result result = Result.of(); try { - result.set(actionService.execute(issueKey, actionKey, UserSession.get())); + result.set(actionService.execute(issueKey, actionKey, userSession)); } catch (Exception e) { result.addError(e.getMessage()); } @@ -437,12 +438,11 @@ public class InternalRubyIssueService { * Never return null */ public IssueFilterDto findIssueFilter(Long id) { - return issueFilterService.find(id, UserSession.get()); + return issueFilterService.find(id, userSession); } public boolean isUserAuthorized(IssueFilterDto issueFilter) { try { - UserSession userSession = UserSession.get(); String user = issueFilterService.getLoggedLogin(userSession); issueFilterService.verifyCurrentUserCanReadFilter(issueFilter, user); return true; @@ -452,7 +452,7 @@ public class InternalRubyIssueService { } public boolean canUserShareIssueFilter() { - return issueFilterService.canShareFilter(UserSession.get()); + return issueFilterService.canShareFilter(userSession); } public String serializeFilterQuery(Map filterQuery) { @@ -483,7 +483,7 @@ public class InternalRubyIssueService { * Execute issue filter from existing filter with optional overridable parameters */ public IssueFilterService.IssueFilterResult execute(Long issueFilterId, Map overrideProps) { - IssueFilterDto issueFilter = issueFilterService.find(issueFilterId, UserSession.get()); + IssueFilterDto issueFilter = issueFilterService.find(issueFilterId, userSession); Map props = issueFilterService.deserializeIssueFilterQuery(issueFilter); overrideProps(props, overrideProps); return execute(props); @@ -499,7 +499,7 @@ public class InternalRubyIssueService { * List user issue filter */ public List findIssueFiltersForCurrentUser() { - return issueFilterService.findByUser(UserSession.get()); + return issueFilterService.findByUser(userSession); } /** @@ -507,7 +507,7 @@ public class InternalRubyIssueService { */ public IssueFilterDto createIssueFilter(Map parameters) { IssueFilterDto result = createIssueFilterResultForNew(parameters); - return issueFilterService.save(result, UserSession.get()); + return issueFilterService.save(result, userSession); } /** @@ -515,21 +515,21 @@ public class InternalRubyIssueService { */ public IssueFilterDto updateIssueFilter(Map parameters) { IssueFilterDto result = createIssueFilterResultForUpdate(parameters); - return issueFilterService.update(result, UserSession.get()); + return issueFilterService.update(result, userSession); } /** * Update issue filter data */ public IssueFilterDto updateIssueFilterQuery(Long issueFilterId, Map data) { - return issueFilterService.updateFilterQuery(issueFilterId, data, UserSession.get()); + return issueFilterService.updateFilterQuery(issueFilterId, data, userSession); } /** * Delete issue filter */ public void deleteIssueFilter(Long issueFilterId) { - issueFilterService.delete(issueFilterId, UserSession.get()); + issueFilterService.delete(issueFilterId, userSession); } /** @@ -537,7 +537,7 @@ public class InternalRubyIssueService { */ public IssueFilterDto copyIssueFilter(Long issueFilterIdToCopy, Map parameters) { IssueFilterDto result = createIssueFilterResultForCopy(parameters); - return issueFilterService.copy(issueFilterIdToCopy, result, UserSession.get()); + return issueFilterService.copy(issueFilterIdToCopy, result, userSession); } @VisibleForTesting @@ -587,15 +587,15 @@ public class InternalRubyIssueService { } public List findSharedFiltersForCurrentUser() { - return issueFilterService.findSharedFiltersWithoutUserFilters(UserSession.get()); + return issueFilterService.findSharedFiltersWithoutUserFilters(userSession); } public List findFavouriteIssueFiltersForCurrentUser() { - return issueFilterService.findFavoriteFilters(UserSession.get()); + return issueFilterService.findFavoriteFilters(userSession); } public boolean toggleFavouriteIssueFilter(Long issueFilterId) { - return issueFilterService.toggleFavouriteIssueFilter(issueFilterId, UserSession.get()); + return issueFilterService.toggleFavouriteIssueFilter(issueFilterId, userSession); } /** @@ -603,7 +603,7 @@ public class InternalRubyIssueService { */ public IssueBulkChangeResult bulkChange(Map props, String comment, boolean sendNotifications) { IssueBulkChangeQuery issueBulkChangeQuery = new IssueBulkChangeQuery(props, comment, sendNotifications); - return issueBulkChangeService.execute(issueBulkChangeQuery, UserSession.get()); + return issueBulkChangeService.execute(issueBulkChangeQuery, userSession); } private void checkMandatoryParameter(String value, String paramName, Result result) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java index 0ec177045a3..3737eb05dbd 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueBulkChangeService.java @@ -71,15 +71,17 @@ public class IssueBulkChangeService { private final DefaultRuleFinder ruleFinder; private final NotificationManager notificationService; private final List actions; + private final UserSession userSession; public IssueBulkChangeService(DbClient dbClient, IssueService issueService, IssueStorage issueStorage, DefaultRuleFinder ruleFinder, - NotificationManager notificationService, List actions) { + NotificationManager notificationService, List actions, UserSession userSession) { this.dbClient = dbClient; this.issueService = issueService; this.issueStorage = issueStorage; this.ruleFinder = ruleFinder; this.notificationService = notificationService; this.actions = actions; + this.userSession = userSession; } public IssueBulkChangeResult execute(IssueBulkChangeQuery issueBulkChangeQuery, UserSession userSession) { @@ -129,7 +131,7 @@ public class IssueBulkChangeService { // Load from index to check permission SearchOptions options = new SearchOptions().setLimit(SearchOptions.MAX_LIMIT); // TODO restrict fields to issue key, in order to not load all other fields; - List authorizedIssues = issueService.search(IssueQuery.builder().issueKeys(issueKeys).build(), options).getDocs(); + List authorizedIssues = issueService.search(IssueQuery.builder(userSession).issueKeys(issueKeys).build(), options).getDocs(); Collection authorizedKeys = Collections2.transform(authorizedIssues, new Function() { @Override public String apply(IssueDoc input) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelogFormatter.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelogFormatter.java index 7639efb98d5..3ff8056c7be 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelogFormatter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelogFormatter.java @@ -19,6 +19,11 @@ */ package org.sonar.server.issue; +import java.io.Serializable; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import org.sonar.api.ServerComponent; import org.sonar.api.ServerSide; import org.sonar.api.i18n.I18n; import org.sonar.api.issue.internal.FieldDiffs; @@ -27,11 +32,6 @@ import org.sonar.api.utils.Durations; import org.sonar.core.issue.IssueUpdater; import org.sonar.server.user.UserSession; -import java.io.Serializable; -import java.util.List; -import java.util.Locale; -import java.util.Map; - import static com.google.common.collect.Lists.newArrayList; @ServerSide @@ -41,10 +41,12 @@ public class IssueChangelogFormatter { private final I18n i18n; private final Durations durations; + private final UserSession userSession; - public IssueChangelogFormatter(I18n i18n, Durations durations) { + public IssueChangelogFormatter(I18n i18n, Durations durations, UserSession userSession) { this.i18n = i18n; this.durations = durations; + this.userSession = userSession; } public List format(Locale locale, FieldDiffs diffs) { @@ -76,10 +78,10 @@ public class IssueChangelogFormatter { String oldValueString = oldValue != null && !"".equals(oldValue) ? oldValue.toString() : null; if (IssueUpdater.TECHNICAL_DEBT.equals(key)) { if (newValueString != null) { - newValueString = durations.format(UserSession.get().locale(), Duration.create(Long.parseLong(newValueString)), Durations.DurationFormat.SHORT); + newValueString = durations.format(userSession.locale(), Duration.create(Long.parseLong(newValueString)), Durations.DurationFormat.SHORT); } if (oldValueString != null) { - oldValueString = durations.format(UserSession.get().locale(), Duration.create(Long.parseLong(oldValueString)), Durations.DurationFormat.SHORT); + oldValueString = durations.format(userSession.locale(), Duration.create(Long.parseLong(oldValueString)), Durations.DurationFormat.SHORT); } } return new IssueChangelogDiffFormat(oldValueString, newValueString); diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelogService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelogService.java index 2533c27ef38..8a1eadfc8de 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelogService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelogService.java @@ -19,6 +19,9 @@ */ package org.sonar.server.issue; +import java.util.Collection; +import java.util.List; +import org.sonar.api.ServerComponent; import org.sonar.api.ServerSide; import org.sonar.api.issue.Issue; import org.sonar.api.issue.internal.FieldDiffs; @@ -27,9 +30,6 @@ import org.sonar.api.user.UserFinder; import org.sonar.core.issue.db.IssueChangeDao; import org.sonar.server.user.UserSession; -import java.util.Collection; -import java.util.List; - import static com.google.common.collect.Lists.newArrayList; /** @@ -42,12 +42,14 @@ public class IssueChangelogService { private final UserFinder userFinder; private final IssueService issueService; private final IssueChangelogFormatter formatter; + private final UserSession userSession; - public IssueChangelogService(IssueChangeDao changeDao, UserFinder userFinder, IssueService issueService, IssueChangelogFormatter formatter) { + public IssueChangelogService(IssueChangeDao changeDao, UserFinder userFinder, IssueService issueService, IssueChangelogFormatter formatter, UserSession userSession) { this.changeDao = changeDao; this.userFinder = userFinder; this.issueService = issueService; this.formatter = formatter; + this.userSession = userSession; } public IssueChangelog changelog(String issueKey) { @@ -70,6 +72,6 @@ public class IssueChangelogService { } public List formatDiffs(FieldDiffs diffs) { - return formatter.format(UserSession.get().locale(), diffs); + return formatter.format(userSession.locale(), diffs); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQuery.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQuery.java index 4360c7a0fb6..efe306caf7c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQuery.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQuery.java @@ -21,18 +21,16 @@ package org.sonar.server.issue; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; -import org.apache.commons.lang.builder.ReflectionToStringBuilder; -import org.sonar.api.rule.RuleKey; -import org.sonar.server.search.QueryContext; -import org.sonar.server.user.UserSession; - -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.Set; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; +import org.apache.commons.lang.builder.ReflectionToStringBuilder; +import org.sonar.api.rule.RuleKey; +import org.sonar.server.search.QueryContext; +import org.sonar.server.user.UserSession; import static com.google.common.collect.Sets.newHashSet; @@ -283,8 +281,8 @@ public class IssueQuery { return ReflectionToStringBuilder.toString(this); } - public static Builder builder() { - return new Builder(); + public static Builder builder(UserSession userSession) { + return new Builder(userSession); } public static class Builder { @@ -318,11 +316,13 @@ public class IssueQuery { private String sort; private Boolean asc = false; private Boolean ignorePaging = false; - private String userLogin = UserSession.get().login(); - private Set userGroups = UserSession.get().userGroups(); + private String userLogin; + private Set userGroups; private boolean checkAuthorization = true; - private Builder() { + private Builder(UserSession userSession) { + this.userLogin = userSession.login(); + this.userGroups = userSession.userGroups(); } public Builder issueKeys(@Nullable Collection l) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java index 2bfb5b4142d..16220ab9603 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueQueryService.java @@ -72,18 +72,20 @@ public class IssueQueryService { private final DbClient dbClient; private final ComponentService componentService; private final System2 system; + private final UserSession userSession; - public IssueQueryService(DbClient dbClient, ComponentService componentService, System2 system) { + public IssueQueryService(DbClient dbClient, ComponentService componentService, System2 system, UserSession userSession) { this.dbClient = dbClient; this.componentService = componentService; this.system = system; + this.userSession = userSession; } public IssueQuery createFromMap(Map params) { DbSession session = dbClient.openSession(false); try { - IssueQuery.Builder builder = IssueQuery.builder() + IssueQuery.Builder builder = IssueQuery.builder(userSession) .issueKeys(RubyUtils.toStrings(params.get(IssueFilterParameters.ISSUES))) .severities(RubyUtils.toStrings(params.get(IssueFilterParameters.SEVERITIES))) .statuses(RubyUtils.toStrings(params.get(IssueFilterParameters.STATUSES))) @@ -156,7 +158,7 @@ public class IssueQueryService { public IssueQuery createFromRequest(Request request) { DbSession session = dbClient.openSession(false); try { - IssueQuery.Builder builder = IssueQuery.builder() + IssueQuery.Builder builder = IssueQuery.builder(userSession) .issueKeys(request.paramAsStrings(IssueFilterParameters.ISSUES)) .severities(request.paramAsStrings(IssueFilterParameters.SEVERITIES)) .statuses(request.paramAsStrings(IssueFilterParameters.STATUSES)) @@ -212,7 +214,7 @@ public class IssueQueryService { assignees.addAll(assigneesFromParams); } if (assignees.contains(LOGIN_MYSELF)) { - String login = UserSession.get().login(); + String login = userSession.login(); if (login == null) { assignees.add(UNKNOWN); } else { @@ -337,8 +339,8 @@ public class IssueQueryService { private void addViewsOrSubViews(IssueQuery.Builder builder, Collection componentUuids, String uniqueQualifier) { List filteredViewUuids = newArrayList(); for (String viewUuid : componentUuids) { - if ((Qualifiers.VIEW.equals(uniqueQualifier) && UserSession.get().hasProjectPermissionByUuid(UserRole.USER, viewUuid)) - || (Qualifiers.SUBVIEW.equals(uniqueQualifier) && UserSession.get().hasComponentUuidPermission(UserRole.USER, viewUuid))) { + if ((Qualifiers.VIEW.equals(uniqueQualifier) && userSession.hasProjectPermissionByUuid(UserRole.USER, viewUuid)) + || (Qualifiers.SUBVIEW.equals(uniqueQualifier) && userSession.hasComponentUuidPermission(UserRole.USER, viewUuid))) { filteredViewUuids.add(viewUuid); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java index 5e4db0a7bdc..e73c04426f6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java @@ -19,8 +19,16 @@ */ package org.sonar.server.issue; -import com.google.common.base.Objects; -import com.google.common.base.Strings; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; + import org.apache.commons.lang.StringUtils; import org.sonar.api.ServerSide; import org.sonar.api.issue.ActionPlan; @@ -57,15 +65,8 @@ import org.sonar.server.user.UserSession; import org.sonar.server.user.index.UserDoc; import org.sonar.server.user.index.UserIndex; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Map; +import com.google.common.base.Objects; +import com.google.common.base.Strings; @ServerSide public class IssueService { @@ -82,6 +83,7 @@ public class IssueService { private final UserFinder userFinder; private final UserIndex userIndex; private final SourceLineIndex sourceLineIndex; + private final UserSession userSession; public IssueService(DbClient dbClient, IssueIndex issueIndex, IssueWorkflow workflow, @@ -91,7 +93,7 @@ public class IssueService { ActionPlanService actionPlanService, RuleFinder ruleFinder, UserFinder userFinder, - UserIndex userIndex, SourceLineIndex sourceLineIndex) { + UserIndex userIndex, SourceLineIndex sourceLineIndex, UserSession userSession) { this.dbClient = dbClient; this.issueIndex = issueIndex; this.workflow = workflow; @@ -103,6 +105,7 @@ public class IssueService { this.userFinder = userFinder; this.userIndex = userIndex; this.sourceLineIndex = sourceLineIndex; + this.userSession = userSession; } public List listStatus() { @@ -136,7 +139,7 @@ public class IssueService { for (Transition transition : outTransitions) { String projectUuid = issue.projectUuid(); if (StringUtils.isBlank(transition.requiredProjectPermission()) || - (projectUuid != null && UserSession.get().hasProjectPermissionByUuid(transition.requiredProjectPermission(), projectUuid))) { + (projectUuid != null && userSession.hasProjectPermissionByUuid(transition.requiredProjectPermission(), projectUuid))) { allowedTransitions.add(transition); } } @@ -149,8 +152,8 @@ public class IssueService { DbSession session = dbClient.openSession(false); try { DefaultIssue defaultIssue = getByKeyForUpdate(session, issueKey).toDefaultIssue(); - IssueChangeContext context = IssueChangeContext.createUser(new Date(), UserSession.get().login()); - checkTransitionPermission(transitionKey, UserSession.get(), defaultIssue); + IssueChangeContext context = IssueChangeContext.createUser(new Date(), userSession.login()); + checkTransitionPermission(transitionKey, userSession, defaultIssue); if (workflow.doTransition(defaultIssue, transitionKey, context)) { saveIssue(session, defaultIssue, context, null); } @@ -184,7 +187,7 @@ public class IssueService { throw new NotFoundException("Unknown user: " + assignee); } } - IssueChangeContext context = IssueChangeContext.createUser(new Date(), UserSession.get().login()); + IssueChangeContext context = IssueChangeContext.createUser(new Date(), userSession.login()); if (issueUpdater.assign(issue, user, context)) { saveIssue(session, issue, context, null); } @@ -202,14 +205,14 @@ public class IssueService { try { ActionPlan actionPlan = null; if (!Strings.isNullOrEmpty(actionPlanKey)) { - actionPlan = actionPlanService.findByKey(actionPlanKey, UserSession.get()); + actionPlan = actionPlanService.findByKey(actionPlanKey, userSession); if (actionPlan == null) { throw new NotFoundException("Unknown action plan: " + actionPlanKey); } } DefaultIssue issue = getByKeyForUpdate(session, issueKey).toDefaultIssue(); - IssueChangeContext context = IssueChangeContext.createUser(new Date(), UserSession.get().login()); + IssueChangeContext context = IssueChangeContext.createUser(new Date(), userSession.login()); if (issueUpdater.plan(issue, actionPlan, context)) { saveIssue(session, issue, context, null); } @@ -226,9 +229,9 @@ public class IssueService { DbSession session = dbClient.openSession(false); try { DefaultIssue issue = getByKeyForUpdate(session, issueKey).toDefaultIssue(); - UserSession.get().checkProjectPermission(UserRole.ISSUE_ADMIN, issue.projectKey()); + userSession.checkProjectPermission(UserRole.ISSUE_ADMIN, issue.projectKey()); - IssueChangeContext context = IssueChangeContext.createUser(new Date(), UserSession.get().login()); + IssueChangeContext context = IssueChangeContext.createUser(new Date(), userSession.login()); if (issueUpdater.setManualSeverity(issue, severity, context)) { saveIssue(session, issue, context, null); } @@ -247,7 +250,7 @@ public class IssueService { ComponentDto component = dbClient.componentDao().getByKey(session, componentKey); ComponentDto project = dbClient.componentDao().getByUuid(session, component.projectUuid()); - UserSession.get().checkProjectPermission(UserRole.USER, project.getKey()); + userSession.checkProjectPermission(UserRole.USER, project.getKey()); if (!ruleKey.isManual()) { throw new IllegalArgumentException("Issues can be created only on rules marked as 'manual': " + ruleKey); } @@ -264,7 +267,7 @@ public class IssueService { .severity(Objects.firstNonNull(severity, Severity.MAJOR)) .effortToFix(effortToFix) .ruleKey(ruleKey) - .reporter(UserSession.get().login()) + .reporter(userSession.login()) .assignee(findSourceLineUser(component.uuid(), line)) .build(); @@ -317,21 +320,21 @@ public class IssueService { } private void verifyLoggedIn() { - UserSession.get().checkLoggedIn(); + userSession.checkLoggedIn(); } /** * Search for all tags, whatever issue resolution or user access rights */ public List listTags(@Nullable String textQuery, int pageSize) { - IssueQuery query = IssueQuery.builder() + IssueQuery query = IssueQuery.builder(userSession) .checkAuthorization(false) .build(); return issueIndex.listTags(query, textQuery, pageSize); } public List listAuthors(@Nullable String textQuery, int pageSize) { - IssueQuery query = IssueQuery.builder() + IssueQuery query = IssueQuery.builder(userSession) .checkAuthorization(false) .build(); return issueIndex.listAuthors(query, textQuery, pageSize); @@ -343,7 +346,7 @@ public class IssueService { DbSession session = dbClient.openSession(false); try { DefaultIssue issue = getByKeyForUpdate(session, issueKey).toDefaultIssue(); - IssueChangeContext context = IssueChangeContext.createUser(new Date(), UserSession.get().login()); + IssueChangeContext context = IssueChangeContext.createUser(new Date(), userSession.login()); if (issueUpdater.setTags(issue, tags, context)) { saveIssue(session, issue, context, null); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/SetSeverityAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/SetSeverityAction.java index d56514a552e..f84b3de627c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/SetSeverityAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/SetSeverityAction.java @@ -20,7 +20,9 @@ package org.sonar.server.issue; -import com.google.common.base.Strings; +import java.util.Collection; +import java.util.Map; + import org.sonar.api.ServerSide; import org.sonar.api.issue.Issue; import org.sonar.api.issue.condition.Condition; @@ -30,8 +32,7 @@ import org.sonar.api.web.UserRole; import org.sonar.core.issue.IssueUpdater; import org.sonar.server.user.UserSession; -import java.util.Collection; -import java.util.Map; +import com.google.common.base.Strings; @ServerSide public class SetSeverityAction extends Action { @@ -39,10 +40,12 @@ public class SetSeverityAction extends Action { public static final String KEY = "set_severity"; private final IssueUpdater issueUpdater; + private final UserSession userSession; - public SetSeverityAction(IssueUpdater issueUpdater) { + public SetSeverityAction(IssueUpdater issueUpdater, UserSession userSession) { super(KEY); this.issueUpdater = issueUpdater; + this.userSession = userSession; super.setConditions(new IsUnResolved(), new Condition() { @Override public boolean matches(Issue issue) { @@ -52,7 +55,7 @@ public class SetSeverityAction extends Action { } private boolean isCurrentUserIssueAdmin(String projectKey) { - return UserSession.get().hasProjectPermission(UserRole.ISSUE_ADMIN, projectKey); + return userSession.hasProjectPermission(UserRole.ISSUE_ADMIN, projectKey); } @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/TransitionAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/TransitionAction.java index 6e9707ddda2..d0fe9d5298b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/TransitionAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/TransitionAction.java @@ -20,9 +20,9 @@ package org.sonar.server.issue; -import com.google.common.base.Predicate; -import com.google.common.base.Strings; -import com.google.common.collect.Iterables; +import java.util.Collection; +import java.util.Map; + import org.apache.commons.lang.StringUtils; import org.sonar.api.ServerSide; import org.sonar.api.issue.Issue; @@ -31,8 +31,9 @@ import org.sonar.core.issue.workflow.IssueWorkflow; import org.sonar.core.issue.workflow.Transition; import org.sonar.server.user.UserSession; -import java.util.Collection; -import java.util.Map; +import com.google.common.base.Predicate; +import com.google.common.base.Strings; +import com.google.common.collect.Iterables; @ServerSide public class TransitionAction extends Action { @@ -40,10 +41,12 @@ public class TransitionAction extends Action { public static final String KEY = "do_transition"; private final IssueWorkflow workflow; + private final UserSession userSession; - public TransitionAction(IssueWorkflow workflow) { + public TransitionAction(IssueWorkflow workflow, UserSession userSession) { super(KEY); this.workflow = workflow; + this.userSession = userSession; } @Override @@ -64,7 +67,6 @@ public class TransitionAction extends Action { private boolean canExecuteTransition(Issue issue, final String transition) { final DefaultIssue defaultIssue = (DefaultIssue) issue; - final UserSession userSession = UserSession.get(); return Iterables.find(workflow.outTransitions(issue), new Predicate() { @Override public boolean apply(Transition input) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/AppAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/AppAction.java index 1b6ef78b4d9..3b445c29c00 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/AppAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/AppAction.java @@ -21,6 +21,7 @@ package org.sonar.server.issue.filter; import com.google.common.io.Resources; +import java.util.List; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.RequestHandler; import org.sonar.api.server.ws.Response; @@ -29,16 +30,16 @@ import org.sonar.api.utils.text.JsonWriter; import org.sonar.core.issue.db.IssueFilterDto; import org.sonar.server.user.UserSession; -import java.util.List; - public class AppAction implements RequestHandler { private final IssueFilterService service; private final IssueFilterWriter issueFilterWriter; + private final UserSession userSession; - public AppAction(IssueFilterService service, IssueFilterWriter issueFilterWriter) { + public AppAction(IssueFilterService service, IssueFilterWriter issueFilterWriter, UserSession userSession) { this.service = service; this.issueFilterWriter = issueFilterWriter; + this.userSession = userSession; } void define(WebService.NewController controller) { @@ -55,8 +56,6 @@ public class AppAction implements RequestHandler { @Override public void handle(Request request, Response response) throws Exception { - UserSession session = UserSession.get(); - JsonWriter json = response.newJsonWriter(); json.beginObject(); @@ -64,21 +63,21 @@ public class AppAction implements RequestHandler { Integer filterId = request.paramAsInt("id"); IssueFilterDto filter = null; if (filterId != null && filterId >= 0) { - filter = service.find((long) filterId, session); + filter = service.find((long) filterId, userSession); } // Permissions - json.prop("canManageFilters", session.isLoggedIn()); - json.prop("canBulkChange", session.isLoggedIn()); + json.prop("canManageFilters", userSession.isLoggedIn()); + json.prop("canBulkChange", userSession.isLoggedIn()); // Selected filter if (filter != null) { - issueFilterWriter.write(session, filter, json); + issueFilterWriter.write(userSession, filter, json); } // Favorite filters, if logged in - if (session.isLoggedIn()) { - List favorites = service.findFavoriteFilters(session); + if (userSession.isLoggedIn()) { + List favorites = service.findFavoriteFilters(userSession); json.name("favorites").beginArray(); for (IssueFilterDto favorite : favorites) { json diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/FavoritesAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/FavoritesAction.java index b68a7cae04e..5abdcd7b470 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/FavoritesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/FavoritesAction.java @@ -31,9 +31,11 @@ import org.sonar.server.user.UserSession; public class FavoritesAction implements RequestHandler { private final IssueFilterService service; + private final UserSession userSession; - public FavoritesAction(IssueFilterService service) { + public FavoritesAction(IssueFilterService service, UserSession userSession) { this.service = service; + this.userSession = userSession; } void define(WebService.NewController controller) { @@ -46,11 +48,10 @@ public class FavoritesAction implements RequestHandler { @Override public void handle(Request request, Response response) throws Exception { - UserSession session = UserSession.get(); JsonWriter json = response.newJsonWriter(); json.beginObject().name("favoriteFilters").beginArray(); - if (session.isLoggedIn()) { - for (IssueFilterDto favorite : service.findFavoriteFilters(session)) { + if (userSession.isLoggedIn()) { + for (IssueFilterDto favorite : service.findFavoriteFilters(userSession)) { json.beginObject(); json.prop("id", favorite.getId()); json.prop("name", favorite.getName()); diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/ShowAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/ShowAction.java index 6542f766a6b..16c9b44a33c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/filter/ShowAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/filter/ShowAction.java @@ -33,10 +33,12 @@ public class ShowAction implements RequestHandler { private final IssueFilterService service; private final IssueFilterWriter issueFilterWriter; + private final UserSession userSession; - public ShowAction(IssueFilterService service, IssueFilterWriter issueFilterWriter) { + public ShowAction(IssueFilterService service, IssueFilterWriter issueFilterWriter, UserSession userSession) { this.service = service; this.issueFilterWriter = issueFilterWriter; + this.userSession = userSession; } void define(WebService.NewController controller) { @@ -53,12 +55,11 @@ public class ShowAction implements RequestHandler { @Override public void handle(Request request, Response response) throws Exception { - UserSession session = UserSession.get(); - IssueFilterDto filter = service.find(request.mandatoryParamAsLong("id"), session); + IssueFilterDto filter = service.find(request.mandatoryParamAsLong("id"), userSession); JsonWriter json = response.newJsonWriter(); json.beginObject(); - issueFilterWriter.write(session, filter, json); + issueFilterWriter.write(userSession, filter, json); json.endObject(); json.close(); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java index 88a4ce27050..5a6930663a5 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/index/IssueIndex.java @@ -26,6 +26,18 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.regex.Pattern; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; import org.elasticsearch.action.search.SearchRequestBuilder; @@ -70,20 +82,6 @@ import org.sonar.server.search.StickyFacetBuilder; import org.sonar.server.user.UserSession; import org.sonar.server.view.index.ViewIndexDefinition; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.SortedSet; -import java.util.regex.Pattern; - import static com.google.common.collect.Lists.newArrayList; /** @@ -136,11 +134,13 @@ public class IssueIndex extends BaseIndex { private final Sorting sorting; private final System2 system; + private final UserSession userSession; - public IssueIndex(EsClient client, System2 system) { + public IssueIndex(EsClient client, System2 system, UserSession userSession) { super(client); this.system = system; + this.userSession = userSession; this.sorting = new Sorting(); this.sorting.add(IssueQuery.SORT_BY_ASSIGNEE, IssueIndexDefinition.FIELD_ISSUE_ASSIGNEE); this.sorting.add(IssueQuery.SORT_BY_STATUS, IssueIndexDefinition.FIELD_ISSUE_STATUS); @@ -165,7 +165,7 @@ public class IssueIndex extends BaseIndex { */ @CheckForNull public IssueDoc getNullableByKey(String key) { - SearchResult result = search(IssueQuery.builder().issueKeys(newArrayList(key)).build(), new SearchOptions()); + SearchResult result = search(IssueQuery.builder(userSession).issueKeys(newArrayList(key)).build(), new SearchOptions()); if (result.getTotal() == 1) { return result.getDocs().get(0); } @@ -521,7 +521,7 @@ public class IssueIndex extends BaseIndex { } private void addAssignedToMeFacetIfNeeded(SearchRequestBuilder builder, SearchOptions options, IssueQuery query, Map filters, QueryBuilder queryBuilder) { - String login = UserSession.get().login(); + String login = userSession.login(); if (!options.getFacets().contains(IssueFilterParameters.FACET_ASSIGNED_TO_ME) || StringUtils.isEmpty(login)) { return; @@ -713,7 +713,7 @@ public class IssueIndex extends BaseIndex { */ public Iterator selectIssuesForBatch(ComponentDto component) { BoolFilterBuilder filter = FilterBuilders.boolFilter() - .must(createAuthorizationFilter(true, UserSession.get().login(), UserSession.get().userGroups())) + .must(createAuthorizationFilter(true, userSession.login(), userSession.userGroups())) .mustNot(FilterBuilders.termsFilter(IssueIndexDefinition.FIELD_ISSUE_STATUS, Issue.STATUS_CLOSED)); switch (component.scope()) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueActionsWriter.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueActionsWriter.java index c2f6eb79ce4..2db4b0b35ef 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueActionsWriter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueActionsWriter.java @@ -20,6 +20,7 @@ package org.sonar.server.issue.ws; +import java.util.List; import org.sonar.api.ServerSide; import org.sonar.api.issue.Issue; import org.sonar.api.issue.action.Action; @@ -30,8 +31,6 @@ import org.sonar.server.issue.ActionService; import org.sonar.server.issue.IssueService; import org.sonar.server.user.UserSession; -import java.util.List; - import static com.google.common.collect.Lists.newArrayList; @ServerSide @@ -39,15 +38,17 @@ public class IssueActionsWriter { private final IssueService issueService; private final ActionService actionService; + private final UserSession userSession; - public IssueActionsWriter(IssueService issueService, ActionService actionService) { + public IssueActionsWriter(IssueService issueService, ActionService actionService, UserSession userSession) { this.issueService = issueService; this.actionService = actionService; + this.userSession = userSession; } public void writeTransitions(Issue issue, JsonWriter json) { json.name("transitions").beginArray(); - if (UserSession.get().isLoggedIn()) { + if (userSession.isLoggedIn()) { for (Transition transition : issueService.listTransitions(issue)) { json.value(transition.key()); } @@ -65,7 +66,7 @@ public class IssueActionsWriter { private List actions(Issue issue) { List actions = newArrayList(); - String login = UserSession.get().login(); + String login = userSession.login(); if (login != null) { actions.add("comment"); if (issue.resolution() == null) { @@ -76,7 +77,7 @@ public class IssueActionsWriter { } actions.add("plan"); String projectUuid = issue.projectUuid(); - if (projectUuid != null && UserSession.get().hasProjectPermissionByUuid(UserRole.ISSUE_ADMIN, projectUuid)) { + if (projectUuid != null && userSession.hasProjectPermissionByUuid(UserRole.ISSUE_ADMIN, projectUuid)) { actions.add("set_severity"); } for (Action action : actionService.listAvailableActions(issue)) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueShowAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueShowAction.java index 1c0604c0283..3e0a84f26a6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueShowAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/IssueShowAction.java @@ -20,6 +20,11 @@ package org.sonar.server.issue.ws; import com.google.common.io.Resources; +import java.util.Date; +import java.util.List; +import java.util.Map; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; import org.sonar.api.i18n.I18n; import org.sonar.api.issue.ActionPlan; import org.sonar.api.issue.Issue; @@ -51,12 +56,6 @@ import org.sonar.server.rule.Rule; import org.sonar.server.rule.RuleService; import org.sonar.server.user.UserSession; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; -import java.util.Date; -import java.util.List; -import java.util.Map; - import static com.google.common.collect.Maps.newHashMap; public class IssueShowAction implements BaseIssuesWsAction { @@ -75,10 +74,11 @@ public class IssueShowAction implements BaseIssuesWsAction { private final RuleService ruleService; private final I18n i18n; private final Durations durations; + private final UserSession userSession; public IssueShowAction(DbClient dbClient, IssueService issueService, IssueChangelogService issueChangelogService, IssueCommentService commentService, - IssueActionsWriter actionsWriter, ActionPlanService actionPlanService, UserFinder userFinder, DebtModelService debtModel, RuleService ruleService, - I18n i18n, Durations durations) { + IssueActionsWriter actionsWriter, ActionPlanService actionPlanService, UserFinder userFinder, DebtModelService debtModel, RuleService ruleService, + I18n i18n, Durations durations, UserSession userSession) { this.dbClient = dbClient; this.issueService = issueService; this.issueChangelogService = issueChangelogService; @@ -90,6 +90,7 @@ public class IssueShowAction implements BaseIssuesWsAction { this.ruleService = ruleService; this.i18n = i18n; this.durations = durations; + this.userSession = userSession; } @Override @@ -131,7 +132,7 @@ public class IssueShowAction implements BaseIssuesWsAction { private void writeIssue(DbSession session, Issue issue, JsonWriter json) { String actionPlanKey = issue.actionPlanKey(); - ActionPlan actionPlan = actionPlanKey != null ? actionPlanService.findByKey(actionPlanKey, UserSession.get()) : null; + ActionPlan actionPlan = actionPlanKey == null ? null : actionPlanService.findByKey(actionPlanKey, userSession); Duration debt = issue.debt(); Rule rule = ruleService.getNonNullByKey(issue.ruleKey()); Date updateDate = issue.updateDate(); @@ -183,14 +184,14 @@ public class IssueShowAction implements BaseIssuesWsAction { .prop("componentEnabled", component.isEnabled()) .prop("project", project.key()) .prop("projectName", projectName) - //TODO replace subProject names by parentProject + // TODO replace subProject names by parentProject .prop("subProject", parentProjectKey) .prop("subProjectName", parentProjectName); } private void writeComments(Issue issue, JsonWriter json) { json.name("comments").beginArray(); - String login = UserSession.get().login(); + String login = userSession.login(); Map usersByLogin = newHashMap(); List comments = commentService.findComments(issue.key()); @@ -228,7 +229,7 @@ public class IssueShowAction implements BaseIssuesWsAction { .prop("creationDate", DateUtils.formatDateTime(issue.creationDate())) .prop("fCreationDate", formatDate(issue.creationDate())) .name("diffs").beginArray() - .value(i18n.message(UserSession.get().locale(), "created", null)) + .value(i18n.message(userSession.locale(), "created", null)) .endArray() .endObject(); @@ -263,7 +264,7 @@ public class IssueShowAction implements BaseIssuesWsAction { @CheckForNull private String formatDate(@Nullable Date date) { if (date != null) { - return i18n.formatDateTime(UserSession.get().locale(), date); + return i18n.formatDateTime(userSession.locale(), date); } return null; } @@ -271,7 +272,7 @@ public class IssueShowAction implements BaseIssuesWsAction { @CheckForNull private String formatAgeDate(@Nullable Date date) { if (date != null) { - return i18n.ageFromNow(UserSession.get().locale(), date); + return i18n.ageFromNow(userSession.locale(), date); } return null; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java index dfaed56fa7f..87f867b01a8 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/ws/SearchAction.java @@ -24,6 +24,16 @@ import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.google.common.io.Resources; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; import org.apache.commons.lang.BooleanUtils; import org.sonar.api.i18n.I18n; import org.sonar.api.issue.ActionPlan; @@ -60,18 +70,6 @@ import org.sonar.server.rule.Rule; import org.sonar.server.rule.RuleService; import org.sonar.server.user.UserSession; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Maps.newHashMap; import static com.google.common.collect.Sets.newHashSet; @@ -101,9 +99,11 @@ public class SearchAction implements BaseIssuesWsAction { private final I18n i18n; private final Durations durations; private final Languages languages; + private final UserSession userSession; public SearchAction(DbClient dbClient, IssueService service, IssueActionsWriter actionsWriter, IssueQueryService issueQueryService, - RuleService ruleService, ActionPlanService actionPlanService, UserFinder userFinder, I18n i18n, Durations durations, Languages languages) { + RuleService ruleService, ActionPlanService actionPlanService, UserFinder userFinder, I18n i18n, Durations durations, Languages languages, + UserSession userSession) { this.dbClient = dbClient; this.service = service; this.actionsWriter = actionsWriter; @@ -114,6 +114,7 @@ public class SearchAction implements BaseIssuesWsAction { this.i18n = i18n; this.durations = durations; this.languages = languages; + this.userSession = userSession; } @Override @@ -341,7 +342,6 @@ public class SearchAction implements BaseIssuesWsAction { collectFacetsData(request, result, projectUuids, componentUuids, userLogins, actionPlanKeys); - UserSession userSession = UserSession.get(); if (userSession.isLoggedIn()) { userLogins.add(userSession.login()); } @@ -418,7 +418,7 @@ public class SearchAction implements BaseIssuesWsAction { assignees.remove(IssueQueryService.LOGIN_MYSELF); } addMandatoryFacetValues(results, IssueFilterParameters.ASSIGNEES, assignees); - addMandatoryFacetValues(results, IssueFilterParameters.FACET_ASSIGNED_TO_ME, Arrays.asList(UserSession.get().login())); + addMandatoryFacetValues(results, IssueFilterParameters.FACET_ASSIGNED_TO_ME, Arrays.asList(userSession.login())); addMandatoryFacetValues(results, IssueFilterParameters.REPORTERS, request.paramAsStrings(IssueFilterParameters.REPORTERS)); addMandatoryFacetValues(results, IssueFilterParameters.RULES, request.paramAsStrings(IssueFilterParameters.RULES)); addMandatoryFacetValues(results, IssueFilterParameters.LANGUAGES, request.paramAsStrings(IssueFilterParameters.LANGUAGES)); @@ -574,7 +574,7 @@ public class SearchAction implements BaseIssuesWsAction { private void writeIssueComments(Collection issueComments, Map usersByLogin, JsonWriter json) { if (!issueComments.isEmpty()) { json.name("comments").beginArray(); - String login = UserSession.get().login(); + String login = userSession.login(); for (IssueComment comment : issueComments) { String userLogin = comment.userLogin(); User user = userLogin != null ? usersByLogin.get(userLogin) : null; @@ -792,7 +792,7 @@ public class SearchAction implements BaseIssuesWsAction { @CheckForNull private String formatDate(@Nullable Date date) { if (date != null) { - return i18n.formatDateTime(UserSession.get().locale(), date); + return i18n.formatDateTime(userSession.locale(), date); } return null; } @@ -800,7 +800,7 @@ public class SearchAction implements BaseIssuesWsAction { @CheckForNull private String formatAgeDate(@Nullable Date date) { if (date != null) { - return i18n.ageFromNow(UserSession.get().locale(), date); + return i18n.ageFromNow(userSession.locale(), date); } return null; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java b/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java index 2792a4fd033..edf1fa7fe79 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionService.java @@ -20,6 +20,12 @@ package org.sonar.server.permission; +import java.util.List; +import java.util.Map; + +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; + import org.sonar.api.ServerSide; import org.sonar.api.security.DefaultGroups; import org.sonar.api.web.UserRole; @@ -36,12 +42,6 @@ import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.issue.index.IssueAuthorizationIndexer; import org.sonar.server.user.UserSession; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.List; -import java.util.Map; - /** * Used by ruby code
Internal.permissions
*/ @@ -60,13 +60,15 @@ public class InternalPermissionService { private final PermissionFacade permissionFacade; private final PermissionFinder finder; private final IssueAuthorizationIndexer issueAuthorizationIndexer; + private final UserSession userSession; public InternalPermissionService(DbClient dbClient, PermissionFacade permissionFacade, PermissionFinder finder, - IssueAuthorizationIndexer issueAuthorizationIndexer) { + IssueAuthorizationIndexer issueAuthorizationIndexer, UserSession userSession) { this.dbClient = dbClient; this.permissionFacade = permissionFacade; this.finder = finder; this.issueAuthorizationIndexer = issueAuthorizationIndexer; + this.userSession = userSession; } public List globalPermissions() { @@ -118,7 +120,7 @@ public class InternalPermissionService { } public void applyDefaultPermissionTemplate(final String componentKey) { - UserSession.get().checkLoggedIn(); + userSession.checkLoggedIn(); DbSession session = dbClient.openSession(false); try { @@ -127,7 +129,7 @@ public class InternalPermissionService { if (provisioned == null) { checkProjectAdminPermission(componentKey); } else { - UserSession.get().checkGlobalPermission(GlobalPermissions.PROVISIONING); + userSession.checkGlobalPermission(GlobalPermissions.PROVISIONING); } permissionFacade.grantDefaultRoles(session, component.getId(), component.qualifier()); session.commit(); @@ -138,7 +140,7 @@ public class InternalPermissionService { } public void applyPermissionTemplate(Map params) { - UserSession.get().checkLoggedIn(); + userSession.checkLoggedIn(); ApplyPermissionTemplateQuery query = ApplyPermissionTemplateQuery.buildFromParams(params); applyPermissionTemplate(query); } @@ -156,7 +158,7 @@ public class InternalPermissionService { checkProjectAdminPermission(query.getSelectedComponents().get(0)); } else { checkProjectAdminPermission(null); - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); } for (String componentKey : query.getSelectedComponents()) { @@ -174,7 +176,7 @@ public class InternalPermissionService { } private void applyChange(Operation operation, PermissionChange change, DbSession session) { - UserSession.get().checkLoggedIn(); + userSession.checkLoggedIn(); change.validate(); boolean changed; if (change.user() != null) { @@ -268,9 +270,9 @@ public class InternalPermissionService { private void checkProjectAdminPermission(@Nullable String projectKey) { if (projectKey == null) { - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); } else { - if (!UserSession.get().hasGlobalPermission(GlobalPermissions.SYSTEM_ADMIN) && !UserSession.get().hasProjectPermission(UserRole.ADMIN, projectKey)) { + if (!userSession.hasGlobalPermission(GlobalPermissions.SYSTEM_ADMIN) && !userSession.hasProjectPermission(UserRole.ADMIN, projectKey)) { throw new ForbiddenException("Insufficient privileges"); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java b/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java index e0326853950..db18e3846c8 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/InternalPermissionTemplateService.java @@ -32,7 +32,6 @@ import org.sonar.core.user.GroupDto; import org.sonar.core.user.UserDao; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.user.UserSession; import javax.annotation.CheckForNull; import javax.annotation.Nullable; @@ -41,6 +40,7 @@ import java.util.List; import java.util.Map; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; +import org.sonar.server.user.UserSession; /** * Used by ruby code
Internal.permission_templates
@@ -52,12 +52,14 @@ public class InternalPermissionTemplateService { private final PermissionTemplateDao permissionTemplateDao; private final UserDao userDao; private final PermissionFinder finder; + private final UserSession userSession; - public InternalPermissionTemplateService(MyBatis myBatis, PermissionTemplateDao permissionTemplateDao, UserDao userDao, PermissionFinder finder) { + public InternalPermissionTemplateService(MyBatis myBatis, PermissionTemplateDao permissionTemplateDao, UserDao userDao, PermissionFinder finder, UserSession userSession) { this.myBatis = myBatis; this.permissionTemplateDao = permissionTemplateDao; this.userDao = userDao; this.finder = finder; + this.userSession = userSession; } public UserWithPermissionQueryResult findUsersWithPermissionTemplate(Map params) { @@ -70,7 +72,7 @@ public class InternalPermissionTemplateService { @CheckForNull public PermissionTemplate selectPermissionTemplate(String templateKey) { - PermissionTemplateUpdater.checkSystemAdminUser(); + PermissionTemplateUpdater.checkSystemAdminUser(userSession); PermissionTemplateDto permissionTemplateDto = permissionTemplateDao.selectPermissionTemplate(templateKey); return PermissionTemplate.create(permissionTemplateDto); } @@ -80,7 +82,7 @@ public class InternalPermissionTemplateService { } public List selectAllPermissionTemplates(@Nullable String componentKey) { - PermissionTemplateUpdater.checkProjectAdminUser(componentKey); + PermissionTemplateUpdater.checkProjectAdminUser(componentKey, userSession); List permissionTemplates = Lists.newArrayList(); List permissionTemplateDtos = permissionTemplateDao.selectAllPermissionTemplates(); if (permissionTemplateDtos != null) { @@ -92,7 +94,7 @@ public class InternalPermissionTemplateService { } public PermissionTemplate createPermissionTemplate(String name, @Nullable String description, @Nullable String keyPattern) { - PermissionTemplateUpdater.checkSystemAdminUser(); + PermissionTemplateUpdater.checkSystemAdminUser(userSession); validateTemplateName(null, name); validateKeyPattern(keyPattern); PermissionTemplateDto permissionTemplateDto = permissionTemplateDao.createPermissionTemplate(name, description, keyPattern); @@ -100,19 +102,19 @@ public class InternalPermissionTemplateService { } public void updatePermissionTemplate(Long templateId, String newName, @Nullable String newDescription, @Nullable String newKeyPattern) { - PermissionTemplateUpdater.checkSystemAdminUser(); + PermissionTemplateUpdater.checkSystemAdminUser(userSession); validateTemplateName(templateId, newName); validateKeyPattern(newKeyPattern); permissionTemplateDao.updatePermissionTemplate(templateId, newName, newDescription, newKeyPattern); } public void deletePermissionTemplate(Long templateId) { - PermissionTemplateUpdater.checkSystemAdminUser(); + PermissionTemplateUpdater.checkSystemAdminUser(userSession); permissionTemplateDao.deletePermissionTemplate(templateId); } public void addUserPermission(String templateKey, String permission, String userLogin) { - PermissionTemplateUpdater updater = new PermissionTemplateUpdater(templateKey, permission, userLogin, permissionTemplateDao, userDao) { + PermissionTemplateUpdater updater = new PermissionTemplateUpdater(templateKey, permission, userLogin, permissionTemplateDao, userDao, userSession) { @Override protected void doExecute(Long templateId, String permission) { Long userId = getUserId(); @@ -123,7 +125,7 @@ public class InternalPermissionTemplateService { } public void removeUserPermission(String templateKey, String permission, String userLogin) { - PermissionTemplateUpdater updater = new PermissionTemplateUpdater(templateKey, permission, userLogin, permissionTemplateDao, userDao) { + PermissionTemplateUpdater updater = new PermissionTemplateUpdater(templateKey, permission, userLogin, permissionTemplateDao, userDao, userSession) { @Override protected void doExecute(Long templateId, String permission) { Long userId = getUserId(); @@ -134,7 +136,7 @@ public class InternalPermissionTemplateService { } public void addGroupPermission(String templateKey, String permission, String groupName) { - PermissionTemplateUpdater updater = new PermissionTemplateUpdater(templateKey, permission, groupName, permissionTemplateDao, userDao) { + PermissionTemplateUpdater updater = new PermissionTemplateUpdater(templateKey, permission, groupName, permissionTemplateDao, userDao, userSession) { @Override protected void doExecute(Long templateId, String permission) { Long groupId = getGroupId(); @@ -145,7 +147,7 @@ public class InternalPermissionTemplateService { } public void removeGroupPermission(String templateKey, String permission, String groupName) { - PermissionTemplateUpdater updater = new PermissionTemplateUpdater(templateKey, permission, groupName, permissionTemplateDao, userDao) { + PermissionTemplateUpdater updater = new PermissionTemplateUpdater(templateKey, permission, groupName, permissionTemplateDao, userDao, userSession) { @Override protected void doExecute(Long templateId, String permission) { Long groupId = getGroupId(); @@ -156,7 +158,7 @@ public class InternalPermissionTemplateService { } public void removeGroupFromTemplates(String groupName) { - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); DbSession session = myBatis.openSession(false); try { GroupDto group = userDao.selectGroupByName(groupName, session); diff --git a/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUpdater.java b/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUpdater.java index 59ec165c377..7869b35d13a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUpdater.java +++ b/server/sonar-server/src/main/java/org/sonar/server/permission/PermissionTemplateUpdater.java @@ -42,17 +42,19 @@ abstract class PermissionTemplateUpdater { private final String updatedReference; private final PermissionTemplateDao permissionTemplateDao; private final UserDao userDao; + private final UserSession userSession; - PermissionTemplateUpdater(String templateKey, String permission, String updatedReference, PermissionTemplateDao permissionTemplateDao, UserDao userDao) { + PermissionTemplateUpdater(String templateKey, String permission, String updatedReference, PermissionTemplateDao permissionTemplateDao, UserDao userDao, UserSession userSession) { this.templateKey = templateKey; this.permission = permission; this.updatedReference = updatedReference; this.permissionTemplateDao = permissionTemplateDao; this.userDao = userDao; + this.userSession = userSession; } void executeUpdate() { - checkSystemAdminUser(); + checkSystemAdminUser(userSession); Long templateId = getTemplateId(templateKey); validatePermission(permission); doExecute(templateId, permission); @@ -79,19 +81,16 @@ abstract class PermissionTemplateUpdater { return groupDto.getId(); } - static void checkSystemAdminUser() { - checkProjectAdminUser(null); + static void checkSystemAdminUser(UserSession userSession) { + checkProjectAdminUser(null, userSession); } - static void checkProjectAdminUser(@Nullable String componentKey) { - UserSession currentSession = UserSession.get(); - currentSession.checkLoggedIn(); + static void checkProjectAdminUser(@Nullable String componentKey, UserSession userSession) { + userSession.checkLoggedIn(); if (componentKey == null) { - currentSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); - } else { - if (!currentSession.hasGlobalPermission(GlobalPermissions.SYSTEM_ADMIN) && !currentSession.hasProjectPermission(UserRole.ADMIN, componentKey)) { - throw new ForbiddenException("Insufficient privileges"); - } + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + } else if (!userSession.hasGlobalPermission(GlobalPermissions.SYSTEM_ADMIN) && !userSession.hasProjectPermission(UserRole.ADMIN, componentKey)) { + throw new ForbiddenException("Insufficient privileges"); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java index 4fb3c1fbf8a..4f1c92c55a7 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java @@ -19,7 +19,13 @@ */ package org.sonar.server.platform; -import com.google.common.collect.Lists; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Properties; + +import javax.annotation.Nullable; + import org.sonar.api.config.EmailSettings; import org.sonar.api.issue.action.Actions; import org.sonar.api.profiles.AnnotationProfileParser; @@ -373,6 +379,7 @@ import org.sonar.server.user.GroupMembershipFinder; import org.sonar.server.user.GroupMembershipService; import org.sonar.server.user.NewUserNotifier; import org.sonar.server.user.SecurityRealmFactory; +import org.sonar.server.user.ThreadLocalUserSession; import org.sonar.server.user.UserUpdater; import org.sonar.server.user.db.GroupDao; import org.sonar.server.user.db.UserDao; @@ -396,12 +403,7 @@ import org.sonar.server.view.index.ViewIndexer; import org.sonar.server.ws.ListingWs; import org.sonar.server.ws.WebServiceEngine; -import javax.annotation.Nullable; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Properties; +import com.google.common.collect.Lists; class ServerComponents { @@ -445,6 +447,9 @@ class ServerComponents { // rack bridges PlatformRackBridge.class, + // user session + ThreadLocalUserSession.class, + // DB DbClient.class, @@ -1016,7 +1021,7 @@ class ServerComponents { startupContainer.addSingleton(RegisterIssueFilters.class); startupContainer.addSingleton(RenameIssueWidgets.class); - DoPrivileged.execute(new DoPrivileged.Task() { + DoPrivileged.execute(new DoPrivileged.Task(startupContainer.getComponentByType(ThreadLocalUserSession.class)) { @Override protected void doPrivileged() { startupContainer.getComponentByType(IndexSynchronizer.class).executeDeprecated(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/L10nWs.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/L10nWs.java index 5d75175186a..805e319f5e9 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/L10nWs.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/L10nWs.java @@ -19,6 +19,10 @@ */ package org.sonar.server.platform.ws; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.util.Date; +import java.util.Locale; import org.apache.commons.lang.LocaleUtils; import org.sonar.api.platform.Server; import org.sonar.api.server.ws.Request; @@ -29,19 +33,16 @@ import org.sonar.api.utils.text.JsonWriter; import org.sonar.core.i18n.DefaultI18n; import org.sonar.server.user.UserSession; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.util.Date; -import java.util.Locale; - public class L10nWs implements WebService { private final DefaultI18n i18n; private final Server server; + private final UserSession userSession; - public L10nWs(DefaultI18n i18n, Server server) { + public L10nWs(DefaultI18n i18n, Server server, UserSession userSession) { this.i18n = i18n; this.server = server; + this.userSession = userSession; } @Override @@ -74,7 +75,7 @@ public class L10nWs implements WebService { response.stream().setStatus(HttpURLConnection.HTTP_NOT_MODIFIED).output().close(); } else { - Locale locale = UserSession.get().locale(); + Locale locale = userSession.locale(); String localeParam = request.param("locale"); if (localeParam != null) { locale = LocaleUtils.toLocale(localeParam); diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/SystemInfoWsAction.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/SystemInfoWsAction.java index 6368101a8b4..a90d17112ac 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/SystemInfoWsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/SystemInfoWsAction.java @@ -21,7 +21,6 @@ package org.sonar.server.platform.ws; import java.util.Map; - import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; @@ -36,8 +35,10 @@ import org.sonar.server.user.UserSession; public class SystemInfoWsAction implements SystemWsAction { private final Monitor[] monitors; + private final UserSession userSession; - public SystemInfoWsAction(Monitor... monitors) { + public SystemInfoWsAction(UserSession userSession, Monitor... monitors) { + this.userSession = userSession; this.monitors = monitors; } @@ -54,7 +55,7 @@ public class SystemInfoWsAction implements SystemWsAction { @Override public void handle(Request request, Response response) { - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); JsonWriter json = response.newJsonWriter(); writeJson(json); json.close(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/CancelAllPluginsWsAction.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/CancelAllPluginsWsAction.java index 3899e50985d..1812db27095 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/CancelAllPluginsWsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/CancelAllPluginsWsAction.java @@ -31,10 +31,12 @@ public class CancelAllPluginsWsAction implements PluginsWsAction { private final PluginDownloader pluginDownloader; private final ServerPluginRepository pluginRepository; + private final UserSession userSession; - public CancelAllPluginsWsAction(PluginDownloader pluginDownloader, ServerPluginRepository pluginRepository) { + public CancelAllPluginsWsAction(PluginDownloader pluginDownloader, ServerPluginRepository pluginRepository, UserSession userSession) { this.pluginDownloader = pluginDownloader; this.pluginRepository = pluginRepository; + this.userSession = userSession; } @Override @@ -49,7 +51,7 @@ public class CancelAllPluginsWsAction implements PluginsWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); pluginDownloader.cancelDownloads(); pluginRepository.cancelUninstalls(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/InstallPluginsWsAction.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/InstallPluginsWsAction.java index c31ac557b90..3a55f4a3140 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/InstallPluginsWsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/InstallPluginsWsAction.java @@ -43,11 +43,13 @@ public class InstallPluginsWsAction implements PluginsWsAction { private final UpdateCenterMatrixFactory updateCenterFactory; private final PluginDownloader pluginDownloader; + private final UserSession userSession; public InstallPluginsWsAction(UpdateCenterMatrixFactory updateCenterFactory, - PluginDownloader pluginDownloader) { + PluginDownloader pluginDownloader, UserSession userSession) { this.updateCenterFactory = updateCenterFactory; this.pluginDownloader = pluginDownloader; + this.userSession = userSession; } @Override @@ -67,7 +69,7 @@ public class InstallPluginsWsAction implements PluginsWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); String key = request.mandatoryParam(PARAM_KEY); PluginUpdate pluginUpdate = findAvailablePluginByKey(key); pluginDownloader.download(key, pluginUpdate.getRelease().getVersion()); diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UninstallPluginsWsAction.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UninstallPluginsWsAction.java index 1c8f2dcfe07..a4583e35b64 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UninstallPluginsWsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UninstallPluginsWsAction.java @@ -35,9 +35,11 @@ public class UninstallPluginsWsAction implements PluginsWsAction { private static final String PARAM_KEY = "key"; private final ServerPluginRepository pluginRepository; + private final UserSession userSession; - public UninstallPluginsWsAction(ServerPluginRepository pluginRepository) { + public UninstallPluginsWsAction(ServerPluginRepository pluginRepository, UserSession userSession) { this.pluginRepository = pluginRepository; + this.userSession = userSession; } @Override @@ -56,7 +58,7 @@ public class UninstallPluginsWsAction implements PluginsWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); String key = request.mandatoryParam(PARAM_KEY); ensurePluginIsInstalled(key); pluginRepository.uninstall(key); diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UpdatePluginsWsAction.java b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UpdatePluginsWsAction.java index af79a9bef1f..37382736ed9 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UpdatePluginsWsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/plugins/ws/UpdatePluginsWsAction.java @@ -44,10 +44,12 @@ public class UpdatePluginsWsAction implements PluginsWsAction { private final UpdateCenterMatrixFactory updateCenterFactory; private final PluginDownloader pluginDownloader; + private final UserSession userSession; - public UpdatePluginsWsAction(UpdateCenterMatrixFactory updateCenterFactory, PluginDownloader pluginDownloader) { + public UpdatePluginsWsAction(UpdateCenterMatrixFactory updateCenterFactory, PluginDownloader pluginDownloader, UserSession userSession) { this.updateCenterFactory = updateCenterFactory; this.pluginDownloader = pluginDownloader; + this.userSession = userSession; } @Override @@ -68,7 +70,7 @@ public class UpdatePluginsWsAction implements PluginsWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); String key = request.mandatoryParam(PARAM_KEY); PluginUpdate pluginUpdate = findPluginUpdateByKey(key); pluginDownloader.download(key, pluginUpdate.getRelease().getVersion()); diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java index 5abcc46a1f3..fe9015d3c1a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/QualityGates.java @@ -19,9 +19,11 @@ */ package org.sonar.server.qualitygate; -import com.google.common.base.Predicate; -import com.google.common.base.Strings; -import com.google.common.collect.Collections2; +import java.util.Collection; + +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; + import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.StringUtils; import org.apache.ibatis.session.SqlSession; @@ -41,14 +43,18 @@ import org.sonar.core.qualitygate.db.QualityGateConditionDto; import org.sonar.core.qualitygate.db.QualityGateDao; import org.sonar.core.qualitygate.db.QualityGateDto; import org.sonar.server.component.db.ComponentDao; -import org.sonar.server.exceptions.*; +import org.sonar.server.exceptions.BadRequestException; +import org.sonar.server.exceptions.Errors; +import org.sonar.server.exceptions.ForbiddenException; +import org.sonar.server.exceptions.Message; +import org.sonar.server.exceptions.NotFoundException; +import org.sonar.server.exceptions.ServerException; import org.sonar.server.user.UserSession; import org.sonar.server.util.Validation; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.Collection; +import com.google.common.base.Predicate; +import com.google.common.base.Strings; +import com.google.common.collect.Collections2; /** * @since 4.3 @@ -58,29 +64,26 @@ public class QualityGates { public static final String SONAR_QUALITYGATE_PROPERTY = "sonar.qualitygate"; private final QualityGateDao dao; - private final QualityGateConditionDao conditionDao; - private final MetricFinder metricFinder; - private final PropertiesDao propertiesDao; - private final ComponentDao componentDao; - private final MyBatis myBatis; + private final UserSession userSession; public QualityGates(QualityGateDao dao, QualityGateConditionDao conditionDao, MetricFinder metricFinder, PropertiesDao propertiesDao, ComponentDao componentDao, - MyBatis myBatis) { + MyBatis myBatis, UserSession userSession) { this.dao = dao; this.conditionDao = conditionDao; this.metricFinder = metricFinder; this.propertiesDao = propertiesDao; this.componentDao = componentDao; this.myBatis = myBatis; + this.userSession = userSession; } public QualityGateDto create(String name) { - checkPermission(UserSession.get()); + checkPermission(); validateQualityGate(null, name); QualityGateDto newQualityGate = new QualityGateDto().setName(name); dao.insert(newQualityGate); @@ -96,7 +99,7 @@ public class QualityGates { } public QualityGateDto rename(long idToRename, String name) { - checkPermission(UserSession.get()); + checkPermission(); QualityGateDto toRename = getNonNullQgate(idToRename); validateQualityGate(idToRename, name); toRename.setName(name); @@ -105,7 +108,7 @@ public class QualityGates { } public QualityGateDto copy(long sourceId, String destinationName) { - checkPermission(UserSession.get()); + checkPermission(); getNonNullQgate(sourceId); validateQualityGate(null, destinationName); QualityGateDto destinationGate = new QualityGateDto().setName(destinationName); @@ -131,7 +134,7 @@ public class QualityGates { } public void delete(long idToDelete) { - checkPermission(UserSession.get()); + checkPermission(); QualityGateDto qGate = getNonNullQgate(idToDelete); SqlSession session = myBatis.openSession(false); try { @@ -147,7 +150,7 @@ public class QualityGates { } public void setDefault(@Nullable Long idToUseAsDefault) { - checkPermission(UserSession.get()); + checkPermission(); if (idToUseAsDefault == null) { propertiesDao.deleteGlobalProperty(SONAR_QUALITYGATE_PROPERTY); } else { @@ -168,7 +171,7 @@ public class QualityGates { public QualityGateConditionDto createCondition(long qGateId, String metricKey, String operator, @Nullable String warningThreshold, @Nullable String errorThreshold, @Nullable Integer period) { - checkPermission(UserSession.get()); + checkPermission(); getNonNullQgate(qGateId); Metric metric = getNonNullMetric(metricKey); validateCondition(metric, operator, warningThreshold, errorThreshold, period); @@ -181,7 +184,7 @@ public class QualityGates { public QualityGateConditionDto updateCondition(long condId, String metricKey, String operator, @Nullable String warningThreshold, @Nullable String errorThreshold, @Nullable Integer period) { - checkPermission(UserSession.get()); + checkPermission(); QualityGateConditionDto condition = getNonNullCondition(condId); Metric metric = getNonNullMetric(metricKey); validateCondition(metric, operator, warningThreshold, errorThreshold, period); @@ -204,7 +207,7 @@ public class QualityGates { } public void deleteCondition(Long condId) { - checkPermission(UserSession.get()); + checkPermission(); conditionDao.delete(getNonNullCondition(condId)); } @@ -212,7 +215,7 @@ public class QualityGates { DbSession session = myBatis.openSession(false); try { getNonNullQgate(qGateId); - checkPermission(UserSession.get(), projectId, session); + checkPermission(projectId, session); propertiesDao.setProperty(new PropertyDto().setKey(SONAR_QUALITYGATE_PROPERTY).setResourceId(projectId).setValue(qGateId.toString())); } finally { MyBatis.closeQuietly(session); @@ -223,7 +226,7 @@ public class QualityGates { DbSession session = myBatis.openSession(false); try { getNonNullQgate(qGateId); - checkPermission(UserSession.get(), projectId, session); + checkPermission(projectId, session); propertiesDao.deleteProjectProperty(SONAR_QUALITYGATE_PROPERTY, projectId); } finally { MyBatis.closeQuietly(session); @@ -242,7 +245,7 @@ public class QualityGates { public boolean currentUserHasWritePermission() { boolean hasWritePermission = false; try { - checkPermission(UserSession.get()); + checkPermission(); hasWritePermission = true; } catch (ServerException unallowed) { // Ignored @@ -355,11 +358,11 @@ public class QualityGates { } - private void checkPermission(UserSession userSession) { + private void checkPermission() { userSession.checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); } - private void checkPermission(UserSession userSession, Long projectId, DbSession session) { + private void checkPermission(Long projectId, DbSession session) { ComponentDto project = componentDao.getById(projectId, session); if (!userSession.hasGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN) && !userSession.hasProjectPermission(UserRole.ADMIN, project.key())) { throw new ForbiddenException("Insufficient privileges"); diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLoader.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLoader.java index 63cf0b7d5b0..6670519ec30 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLoader.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLoader.java @@ -41,16 +41,19 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import org.sonar.server.user.UserSession; @ServerSide public class QProfileLoader { private final DbClient db; private final IndexClient index; + private final UserSession userSession; - public QProfileLoader(DbClient db, IndexClient index) { + public QProfileLoader(DbClient db, IndexClient index, UserSession userSession) { this.db = db; this.index = index; + this.userSession = userSession; } /** @@ -129,7 +132,7 @@ public class QProfileLoader { .setQProfileKey(key) .setActivation(true) .setStatuses(Lists.newArrayList(RuleStatus.DEPRECATED)), - new QueryContext().setLimit(0)).getTotal(); + new QueryContext(userSession).setLimit(0)).getTotal(); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectLookup.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectLookup.java index f3dabcd25eb..31b4ca2c400 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectLookup.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileProjectLookup.java @@ -20,8 +20,12 @@ package org.sonar.server.qualityprofile; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import javax.annotation.CheckForNull; + import org.sonar.api.ServerSide; import org.sonar.api.component.Component; import org.sonar.api.web.UserRole; @@ -31,19 +35,18 @@ import org.sonar.core.qualityprofile.db.QualityProfileDto; import org.sonar.server.db.DbClient; import org.sonar.server.user.UserSession; -import javax.annotation.CheckForNull; - -import java.util.Collection; -import java.util.List; -import java.util.Map; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; @ServerSide public class QProfileProjectLookup { private final DbClient db; + private final UserSession userSession; - public QProfileProjectLookup(DbClient db) { + public QProfileProjectLookup(DbClient db, UserSession userSession) { this.db = db; + this.userSession = userSession; } public List projects(int profileId) { @@ -56,7 +59,6 @@ public class QProfileProjectLookup { componentsByKeys.put(component.key(), component); } - UserSession userSession = UserSession.get(); List result = Lists.newArrayList(); Collection authorizedProjectKeys = db.authorizationDao().selectAuthorizedRootProjectsKeys(userSession.userId(), UserRole.USER); for (Map.Entry entry : componentsByKeys.entrySet()) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java index 383b07a32f8..98e708ec3f1 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileService.java @@ -19,6 +19,17 @@ */ package org.sonar.server.qualityprofile; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; + import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.search.SearchHit; import org.sonar.api.ServerSide; @@ -35,17 +46,6 @@ import org.sonar.server.rule.index.RuleQuery; import org.sonar.server.search.Result; import org.sonar.server.user.UserSession; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.io.Reader; -import java.io.StringReader; -import java.io.StringWriter; -import java.io.Writer; -import java.util.Collection; -import java.util.List; -import java.util.Map; - @ServerSide public class QProfileService { @@ -57,9 +57,11 @@ public class QProfileService { private final QProfileCopier copier; private final QProfileReset reset; private final QProfileExporters exporters; + private final UserSession userSession; public QProfileService(DbClient db, ActivityIndex activityIndex, RuleActivator ruleActivator, QProfileFactory factory, - QProfileBackuper backuper, QProfileCopier copier, QProfileReset reset, QProfileExporters exporters) { + QProfileBackuper backuper, QProfileCopier copier, QProfileReset reset, QProfileExporters exporters, + UserSession userSession) { this.db = db; this.activityIndex = activityIndex; this.ruleActivator = ruleActivator; @@ -68,6 +70,7 @@ public class QProfileService { this.copier = copier; this.reset = reset; this.exporters = exporters; + this.userSession = userSession; } public QProfileResult create(QProfileName name, @Nullable Map xmlQProfilesByPlugin) { @@ -207,8 +210,8 @@ public class QProfileService { } private void verifyAdminPermission() { - UserSession.get().checkLoggedIn(); - UserSession.get().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSession.checkLoggedIn(); + userSession.checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); } public Result searchActivities(QProfileActivityQuery query, SearchOptions options) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java index e716783bbaa..e1fd4bf770c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java @@ -20,16 +20,17 @@ package org.sonar.server.qualityprofile; -import com.google.common.base.Strings; +import java.util.List; + +import javax.annotation.CheckForNull; + import org.sonar.api.ServerSide; import org.sonar.api.component.Component; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.user.UserSession; import org.sonar.server.util.Validation; -import javax.annotation.CheckForNull; - -import java.util.List; +import com.google.common.base.Strings; /** * Use {@link org.sonar.server.qualityprofile.QProfileService} instead @@ -43,12 +44,14 @@ public class QProfiles { private final QProfileProjectOperations projectOperations; private final QProfileProjectLookup projectLookup; private final QProfileLookup profileLookup; + private final UserSession userSession; public QProfiles(QProfileProjectOperations projectOperations, QProfileProjectLookup projectLookup, - QProfileLookup profileLookup) { + QProfileLookup profileLookup, UserSession userSession) { this.projectOperations = projectOperations; this.projectLookup = projectLookup; this.profileLookup = profileLookup; + this.userSession = userSession; } public List allProfiles() { @@ -103,19 +106,19 @@ public class QProfiles { } public void addProject(String profileKey, String projectUuid) { - projectOperations.addProject(profileKey, projectUuid, UserSession.get()); + projectOperations.addProject(profileKey, projectUuid, userSession); } public void removeProject(String profileKey, String projectUuid) { - projectOperations.removeProject(profileKey, projectUuid, UserSession.get()); + projectOperations.removeProject(profileKey, projectUuid, userSession); } public void removeProjectByLanguage(String language, long projectId) { - projectOperations.removeProject(language, projectId, UserSession.get()); + projectOperations.removeProject(language, projectId, userSession); } public void removeAllProjects(String profileKey) { - projectOperations.removeAllProjects(profileKey, UserSession.get()); + projectOperations.removeAllProjects(profileKey, userSession); } private void checkProfileNameParam(String name) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RuleActivator.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RuleActivator.java index 76587e1d9dd..9a3d490f778 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RuleActivator.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/RuleActivator.java @@ -41,6 +41,7 @@ import org.sonar.server.rule.index.RuleQuery; import org.sonar.server.search.IndexClient; import org.sonar.server.search.QueryContext; import org.sonar.server.search.Result; +import org.sonar.server.user.UserSession; import org.sonar.server.util.TypeValidations; import javax.annotation.CheckForNull; @@ -64,15 +65,17 @@ public class RuleActivator { private final RuleActivatorContextFactory contextFactory; private final IndexClient index; private final ActivityService activityService; + private final UserSession userSession; public RuleActivator(DbClient db, IndexClient index, RuleActivatorContextFactory contextFactory, TypeValidations typeValidations, - ActivityService activityService) { + ActivityService activityService, UserSession userSession) { this.db = db; this.index = index; this.contextFactory = contextFactory; this.typeValidations = typeValidations; this.activityService = activityService; + this.userSession = userSession; } public List activate(DbSession dbSession, RuleActivation activation, String profileKey) { @@ -393,7 +396,7 @@ public class RuleActivator { RuleIndex ruleIndex = index.get(RuleIndex.class); DbSession dbSession = db.openSession(false); try { - Result ruleSearchResult = ruleIndex.search(ruleQuery, new QueryContext().setScroll(true) + Result ruleSearchResult = ruleIndex.search(ruleQuery, new QueryContext(userSession).setScroll(true) .setFieldsToReturn(Arrays.asList(RuleNormalizer.RuleField.KEY.field()))); Iterator rules = ruleSearchResult.scroll(); while (rules.hasNext()) { @@ -425,7 +428,7 @@ public class RuleActivator { try { RuleIndex ruleIndex = index.get(RuleIndex.class); BulkChangeResult result = new BulkChangeResult(); - Result ruleSearchResult = ruleIndex.search(ruleQuery, new QueryContext().setScroll(true) + Result ruleSearchResult = ruleIndex.search(ruleQuery, new QueryContext(userSession).setScroll(true) .setFieldsToReturn(Arrays.asList(RuleNormalizer.RuleField.KEY.field()))); Iterator rules = ruleSearchResult.scroll(); while (rules.hasNext()) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BulkRuleActivationActions.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BulkRuleActivationActions.java index 9c57e617189..3887cdf6b3d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BulkRuleActivationActions.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/BulkRuleActivationActions.java @@ -45,11 +45,13 @@ public class BulkRuleActivationActions { private final QProfileService profileService; private final RuleService ruleService; private final I18n i18n; + private final UserSession userSession; - public BulkRuleActivationActions(QProfileService profileService, RuleService ruleService, I18n i18n) { + public BulkRuleActivationActions(QProfileService profileService, RuleService ruleService, I18n i18n, UserSession userSession) { this.profileService = profileService; this.ruleService = ruleService; this.i18n = i18n; + this.userSession = userSession; } void define(WebService.NewController controller) { @@ -121,7 +123,7 @@ public class BulkRuleActivationActions { JsonWriter json = response.newJsonWriter().beginObject(); json.prop("succeeded", result.countSucceeded()); json.prop("failed", result.countFailed()); - result.getErrors().writeJsonAsWarnings(json, i18n, UserSession.get().locale()); + result.getErrors().writeJsonAsWarnings(json, i18n, userSession.locale()); json.endObject().close(); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProjectAssociationActions.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProjectAssociationActions.java index 13e7bb88f0b..c058ce9c8f0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProjectAssociationActions.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/ProjectAssociationActions.java @@ -49,19 +49,21 @@ public class ProjectAssociationActions { private final QProfileLookup profileLookup; private final ComponentService componentService; private final Languages languages; + private final UserSession userSession; - public ProjectAssociationActions(QProfileProjectOperations profileProjectOperations, QProfileLookup profileLookup, ComponentService componentService, Languages languages) { + public ProjectAssociationActions(QProfileProjectOperations profileProjectOperations, QProfileLookup profileLookup, ComponentService componentService, Languages languages, UserSession userSession) { this.profileProjectOperations = profileProjectOperations; this.profileLookup = profileLookup; this.componentService = componentService; this.languages = languages; + this.userSession = userSession; } void define(WebService.NewController controller) { NewAction addProject = controller.createAction("add_project") .setSince("5.2") .setDescription("Associate a project with a quality profile.") - .setHandler(new AssociationHandler(profileLookup, componentService) { + .setHandler(new AssociationHandler(profileLookup, componentService, userSession) { @Override protected void changeAssociation(String profileKey, String projectUuid, UserSession userSession) { profileProjectOperations.addProject(profileKey, projectUuid, userSession); @@ -72,7 +74,7 @@ public class ProjectAssociationActions { NewAction removeProject = controller.createAction("remove_project") .setSince("5.2") .setDescription("Remove a project's association with a quality profile.") - .setHandler(new AssociationHandler(profileLookup, componentService) { + .setHandler(new AssociationHandler(profileLookup, componentService, userSession) { @Override protected void changeAssociation(String profileKey, String projectUuid, UserSession userSession) { profileProjectOperations.removeProject(profileKey, projectUuid, userSession); @@ -105,10 +107,12 @@ public class ProjectAssociationActions { private final QProfileLookup profileLookup; private final ComponentService componentService; + private final UserSession userSession; - public AssociationHandler(QProfileLookup profileLookup, ComponentService componentService) { + public AssociationHandler(QProfileLookup profileLookup, ComponentService componentService, UserSession userSession) { this.profileLookup = profileLookup; this.componentService = componentService; + this.userSession = userSession; } protected abstract void changeAssociation(String profileKey, String projectUuid, UserSession userSession); @@ -133,7 +137,7 @@ public class ProjectAssociationActions { projectUuid = componentService.getByKey(projectKey).uuid(); } - changeAssociation(profileKey, projectUuid, UserSession.get()); + changeAssociation(profileKey, projectUuid, userSession); response.noContent(); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileChangeParentAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileChangeParentAction.java index 2412b4de936..2b99c76429c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileChangeParentAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileChangeParentAction.java @@ -47,12 +47,14 @@ public class QProfileChangeParentAction implements BaseQProfileWsAction { private final QProfileFactory profileFactory; private final Languages languages; + private final UserSession userSession; - public QProfileChangeParentAction(DbClient dbClient, RuleActivator ruleActivator, QProfileFactory profileFactory, Languages languages) { + public QProfileChangeParentAction(DbClient dbClient, RuleActivator ruleActivator, QProfileFactory profileFactory, Languages languages, UserSession userSession) { this.dbClient = dbClient; this.ruleActivator = ruleActivator; this.profileFactory = profileFactory; this.languages = languages; + this.userSession = userSession; } @Override @@ -78,7 +80,7 @@ public class QProfileChangeParentAction implements BaseQProfileWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); DbSession session = dbClient.openSession(false); try { diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileCopyAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileCopyAction.java index 79ad6630ad8..341bf118083 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileCopyAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileCopyAction.java @@ -37,10 +37,12 @@ public class QProfileCopyAction implements BaseQProfileWsAction { private final QProfileCopier profileCopier; private final Languages languages; + private final UserSession userSession; - public QProfileCopyAction(QProfileCopier profileCopier, Languages languages) { + public QProfileCopyAction(QProfileCopier profileCopier, Languages languages, UserSession userSession) { this.profileCopier = profileCopier; this.languages = languages; + this.userSession = userSession; } @Override @@ -64,7 +66,7 @@ public class QProfileCopyAction implements BaseQProfileWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); String newName = request.mandatoryParam(PARAM_PROFILE_NAME); String profileKey = request.mandatoryParam(PARAM_PROFILE_KEY); diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileCreateAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileCreateAction.java index bb6f12d3c7a..ce31e682947 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileCreateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileCreateAction.java @@ -34,9 +34,9 @@ import org.sonar.server.qualityprofile.QProfileExporters; import org.sonar.server.qualityprofile.QProfileFactory; import org.sonar.server.qualityprofile.QProfileName; import org.sonar.server.qualityprofile.QProfileResult; -import org.sonar.server.user.UserSession; import java.io.InputStream; +import org.sonar.server.user.UserSession; public class QProfileCreateAction implements BaseQProfileWsAction { @@ -53,17 +53,19 @@ public class QProfileCreateAction implements BaseQProfileWsAction { private final Languages languages; private final ProfileImporter[] importers; + private final UserSession userSession; - public QProfileCreateAction(DbClient dbClient, QProfileFactory profileFactory, QProfileExporters exporters, Languages languages, ProfileImporter[] importers) { + public QProfileCreateAction(DbClient dbClient, QProfileFactory profileFactory, QProfileExporters exporters, Languages languages, ProfileImporter[] importers, UserSession userSession) { this.dbClient = dbClient; this.profileFactory = profileFactory; this.exporters = exporters; this.languages = languages; this.importers = importers; + this.userSession = userSession; } - public QProfileCreateAction(DbClient dbClient, QProfileFactory profileFactory, QProfileExporters exporters, Languages languages) { - this(dbClient, profileFactory, exporters, languages, new ProfileImporter[0]); + public QProfileCreateAction(DbClient dbClient, QProfileFactory profileFactory, QProfileExporters exporters, Languages languages, UserSession userSession) { + this(dbClient, profileFactory, exporters, languages, new ProfileImporter[0], userSession); } @Override @@ -94,7 +96,7 @@ public class QProfileCreateAction implements BaseQProfileWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); String name = request.mandatoryParam(PARAM_PROFILE_NAME); String language = request.mandatoryParam(PARAM_LANGUAGE); diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileDeleteAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileDeleteAction.java index 119b4e2bae9..af966a63349 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileDeleteAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileDeleteAction.java @@ -35,11 +35,13 @@ public class QProfileDeleteAction implements BaseQProfileWsAction { private final Languages languages; private final QProfileFactory profileFactory; private final DbClient dbClient; + private final UserSession userSession; - public QProfileDeleteAction(Languages languages, QProfileFactory profileFactory, DbClient dbClient) { + public QProfileDeleteAction(Languages languages, QProfileFactory profileFactory, DbClient dbClient, UserSession userSession) { this.languages = languages; this.profileFactory = profileFactory; this.dbClient = dbClient; + this.userSession = userSession; } @Override @@ -56,8 +58,8 @@ public class QProfileDeleteAction implements BaseQProfileWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn(); - UserSession.get().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSession.checkLoggedIn(); + userSession.checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); DbSession session = dbClient.openSession(false); diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileProjectsAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileProjectsAction.java index 0cef6f868a3..7b9f8cbf516 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileProjectsAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileProjectsAction.java @@ -23,6 +23,10 @@ import com.google.common.base.Predicate; import com.google.common.collect.Collections2; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; import org.apache.commons.lang.builder.CompareToBuilder; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; @@ -38,11 +42,6 @@ import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.user.UserSession; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - public class QProfileProjectsAction implements BaseQProfileWsAction { private static final String PARAM_KEY = "key"; @@ -56,9 +55,11 @@ public class QProfileProjectsAction implements BaseQProfileWsAction { private static final String SELECTION_DESELECTED = "deselected"; private final DbClient dbClient; + private final UserSession userSession; - public QProfileProjectsAction(DbClient dbClient) { + public QProfileProjectsAction(DbClient dbClient, UserSession userSession) { this.dbClient = dbClient; + this.userSession = userSession; } @Override @@ -117,7 +118,7 @@ public class QProfileProjectsAction implements BaseQProfileWsAction { } }); - final Collection authorizedProjectIds = dbClient.authorizationDao().keepAuthorizedProjectIds(session, projectIds, UserSession.get().userId(), UserRole.USER); + final Collection authorizedProjectIds = dbClient.authorizationDao().keepAuthorizedProjectIds(session, projectIds, userSession.userId(), UserRole.USER); Iterable authorizedProjects = Iterables.filter(projects, new Predicate() { @Override public boolean apply(ProjectQprofileAssociationDto input) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileRenameAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileRenameAction.java index 10ceb36256f..a29c80b8b91 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileRenameAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileRenameAction.java @@ -33,9 +33,11 @@ public class QProfileRenameAction implements BaseQProfileWsAction { private static final String PARAM_PROFILE_KEY = "key"; private final QProfileFactory profileFactory; + private final UserSession userSession; - public QProfileRenameAction(QProfileFactory profileFactory) { + public QProfileRenameAction(QProfileFactory profileFactory, UserSession userSession) { this.profileFactory = profileFactory; + this.userSession = userSession; } @Override @@ -59,7 +61,7 @@ public class QProfileRenameAction implements BaseQProfileWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); String newName = request.mandatoryParam(PARAM_PROFILE_NAME); String profileKey = request.mandatoryParam(PARAM_PROFILE_KEY); diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileRestoreAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileRestoreAction.java index 02a6556a4dc..b6290e90957 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileRestoreAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileRestoreAction.java @@ -21,6 +21,8 @@ package org.sonar.server.qualityprofile.ws; import com.google.common.base.Charsets; import com.google.common.base.Preconditions; +import java.io.InputStream; +import java.io.InputStreamReader; import org.apache.commons.io.IOUtils; import org.sonar.api.resources.Languages; import org.sonar.api.server.ws.Request; @@ -33,18 +35,17 @@ import org.sonar.server.qualityprofile.BulkChangeResult; import org.sonar.server.qualityprofile.QProfileBackuper; import org.sonar.server.user.UserSession; -import java.io.InputStream; -import java.io.InputStreamReader; - public class QProfileRestoreAction implements BaseQProfileWsAction { private static final String PARAM_BACKUP = "backup"; private final QProfileBackuper backuper; private final Languages languages; + private final UserSession userSession; - public QProfileRestoreAction(QProfileBackuper backuper, Languages languages) { + public QProfileRestoreAction(QProfileBackuper backuper, Languages languages, UserSession userSession) { this.backuper = backuper; this.languages = languages; + this.userSession = userSession; } @Override @@ -63,7 +64,7 @@ public class QProfileRestoreAction implements BaseQProfileWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); InputStream backup = request.paramAsInputStream(PARAM_BACKUP); InputStreamReader reader = null; diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileSetDefaultAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileSetDefaultAction.java index 1b3a7ee0c97..c35c23cd955 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileSetDefaultAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/qualityprofile/ws/QProfileSetDefaultAction.java @@ -45,11 +45,13 @@ public class QProfileSetDefaultAction implements BaseQProfileWsAction { private final QProfileLookup profileLookup; private final QProfileFactory profileFactory; + private final UserSession userSession; - public QProfileSetDefaultAction(Languages languages, QProfileLookup profileLookup, QProfileFactory profileFactory) { + public QProfileSetDefaultAction(Languages languages, QProfileLookup profileLookup, QProfileFactory profileFactory, UserSession userSession) { this.languages = languages; this.profileLookup = profileLookup; this.profileFactory = profileFactory; + this.userSession = userSession; } @Override @@ -76,7 +78,7 @@ public class QProfileSetDefaultAction implements BaseQProfileWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); String language = request.param(PARAM_LANGUAGE); String profileName = request.param(PARAM_PROFILE_NAME); diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java b/server/sonar-server/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java index ab781bba378..94bead3e3f5 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/DefaultRuleFinder.java @@ -36,6 +36,7 @@ import javax.annotation.CheckForNull; import java.util.Collection; import java.util.List; +import org.sonar.server.user.UserSession; import static com.google.common.collect.Lists.newArrayList; @@ -45,8 +46,10 @@ import static com.google.common.collect.Lists.newArrayList; public class DefaultRuleFinder implements RuleFinder { private final RuleIndex index; + private final UserSession userSession; - public DefaultRuleFinder(IndexClient indexes) { + public DefaultRuleFinder(IndexClient indexes, UserSession userSession) { + this.userSession = userSession; this.index = indexes.get(RuleIndex.class); } @@ -101,7 +104,7 @@ public class DefaultRuleFinder implements RuleFinder { @Override public final org.sonar.api.rules.Rule find(org.sonar.api.rules.RuleQuery query) { - Result result = index.search(toQuery(query), new QueryContext()); + Result result = index.search(toQuery(query), new QueryContext(userSession)); if (!result.getHits().isEmpty()) { return toRule(result.getHits().get(0)); } else { @@ -112,7 +115,7 @@ public class DefaultRuleFinder implements RuleFinder { @Override public final Collection findAll(org.sonar.api.rules.RuleQuery query) { List rules = newArrayList(); - for (Rule rule : index.search(toQuery(query), new QueryContext()).getHits()) { + for (Rule rule : index.search(toQuery(query), new QueryContext(userSession)).getHits()) { rules.add(toRule(rule)); } return rules; diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RubyRuleService.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RubyRuleService.java index a73d018a16d..24694fda230 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/RubyRuleService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/RubyRuleService.java @@ -20,6 +20,9 @@ package org.sonar.server.rule; import com.google.common.base.Strings; +import java.util.List; +import java.util.Map; +import javax.annotation.CheckForNull; import org.picocontainer.Startable; import org.sonar.api.ServerSide; import org.sonar.api.rule.RuleKey; @@ -36,11 +39,6 @@ import org.sonar.server.search.Result; import org.sonar.server.user.UserSession; import org.sonar.server.util.RubyUtils; -import javax.annotation.CheckForNull; - -import java.util.List; -import java.util.Map; - import static com.google.common.collect.Lists.newArrayList; /** @@ -54,10 +52,12 @@ public class RubyRuleService implements Startable { private final RuleService service; private final RuleUpdater updater; + private final UserSession userSession; - public RubyRuleService(RuleService service, RuleUpdater updater) { + public RubyRuleService(RuleService service, RuleUpdater updater, UserSession userSession) { this.service = service; this.updater = updater; + this.userSession = userSession; } /** @@ -90,7 +90,7 @@ public class RubyRuleService implements Startable { query.setActivation(true); } - QueryContext options = new QueryContext(); + QueryContext options = new QueryContext(userSession); Integer pageSize = RubyUtils.toInteger(params.get("pageSize")); int size = pageSize != null ? pageSize : 50; if (size > -1) { @@ -100,7 +100,7 @@ public class RubyRuleService implements Startable { Result result = service.search(query, options); return new PagedResult<>(result.getHits(), PagingResult.create(options.getLimit(), pageIndex, result.getTotal())); } else { - List rules = newArrayList(service.search(query, new QueryContext().setScroll(true)).scroll()); + List rules = newArrayList(service.search(query, new QueryContext(userSession).setScroll(true)).scroll()); return new PagedResult<>(rules, PagingResult.create(Integer.MAX_VALUE, 1, rules.size())); } } @@ -109,7 +109,7 @@ public class RubyRuleService implements Startable { * Used in manual_rules_controller.rb */ public List searchManualRules() { - return service.search(new RuleQuery().setRepositories(newArrayList(RuleDoc.MANUAL_REPOSITORY)).setSortField(RuleNormalizer.RuleField.NAME), new QueryContext()).getHits(); + return service.search(new RuleQuery().setRepositories(newArrayList(RuleDoc.MANUAL_REPOSITORY)).setSortField(RuleNormalizer.RuleField.NAME), new QueryContext(userSession)).getHits(); } // sqale @@ -126,7 +126,7 @@ public class RubyRuleService implements Startable { Strings.emptyToNull((String) params.get("debtRemediationOffset"))) ); } - updater.update(update, UserSession.get()); + updater.update(update, userSession); } /** diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleService.java b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleService.java index 3b0ab6be424..e800e076200 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/RuleService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/RuleService.java @@ -19,6 +19,13 @@ */ package org.sonar.server.rule; +import java.util.Collection; +import java.util.List; +import java.util.Set; + +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; + import org.sonar.api.ServerSide; import org.sonar.api.rule.RuleKey; import org.sonar.core.permission.GlobalPermissions; @@ -30,13 +37,6 @@ import org.sonar.server.search.QueryContext; import org.sonar.server.search.Result; import org.sonar.server.user.UserSession; -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.Collection; -import java.util.List; -import java.util.Set; - /** * @since 4.4 */ @@ -47,12 +47,14 @@ public class RuleService { private final RuleUpdater ruleUpdater; private final RuleCreator ruleCreator; private final RuleDeleter ruleDeleter; + private final UserSession userSession; - public RuleService(RuleIndex index, RuleUpdater ruleUpdater, RuleCreator ruleCreator, RuleDeleter ruleDeleter) { + public RuleService(RuleIndex index, RuleUpdater ruleUpdater, RuleCreator ruleCreator, RuleDeleter ruleDeleter, UserSession userSession) { this.index = index; this.ruleUpdater = ruleUpdater; this.ruleCreator = ruleCreator; this.ruleDeleter = ruleDeleter; + this.userSession = userSession; } @CheckForNull @@ -98,7 +100,7 @@ public class RuleService { public void update(RuleUpdate update) { checkPermission(); - ruleUpdater.update(update, UserSession.get()); + ruleUpdater.update(update, userSession); } public RuleKey create(NewRule newRule) { @@ -112,7 +114,6 @@ public class RuleService { } private void checkPermission() { - UserSession userSession = UserSession.get(); userSession.checkLoggedIn(); userSession.checkGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java index d3bd0835ec9..12faa3fa9ac 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/AppAction.java @@ -22,6 +22,10 @@ package org.sonar.server.rule.ws; import com.google.common.collect.LinkedListMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; import org.apache.commons.lang.builder.CompareToBuilder; import org.sonar.api.i18n.I18n; import org.sonar.api.resources.Language; @@ -41,11 +45,6 @@ import org.sonar.server.rule.RuleRepositories; import org.sonar.server.rule.RuleRepositories.Repository; import org.sonar.server.user.UserSession; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.Locale; - /** * @since 4.4 */ @@ -56,14 +55,16 @@ public class AppAction implements RulesAction { private final I18n i18n; private final DebtModel debtModel; private final QProfileLoader profileLoader; + private final UserSession userSession; public AppAction(Languages languages, RuleRepositories ruleRepositories, I18n i18n, - DebtModel debtModel, QProfileLoader profileLoader) { + DebtModel debtModel, QProfileLoader profileLoader, UserSession userSession) { this.languages = languages; this.ruleRepositories = ruleRepositories; this.i18n = i18n; this.debtModel = debtModel; this.profileLoader = profileLoader; + this.userSession = userSession; } @Override @@ -80,7 +81,7 @@ public class AppAction implements RulesAction { } private void addPermissions(JsonWriter json) { - json.prop("canWrite", UserSession.get().hasGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN)); + json.prop("canWrite", userSession.hasGlobalPermission(GlobalPermissions.QUALITY_PROFILE_ADMIN)); } private void addProfiles(JsonWriter json) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleMapping.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleMapping.java index 77cf01ec5a2..95a9e3be87c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleMapping.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/RuleMapping.java @@ -39,6 +39,7 @@ import javax.annotation.Nullable; import java.util.Collection; import java.util.Map; +import org.sonar.server.user.UserSession; /** * Conversion of {@link org.sonar.server.rule.index.RuleDoc} to WS JSON document @@ -47,7 +48,8 @@ public class RuleMapping extends BaseMapping { private final DebtModel debtModel; - public RuleMapping(final Languages languages, final MacroInterpreter macroInterpreter, final DebtModel debtModel) { + public RuleMapping(final Languages languages, final MacroInterpreter macroInterpreter, final DebtModel debtModel, UserSession userSession) { + super(userSession); this.debtModel = debtModel; mapBasicFields(languages); diff --git a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java index 48a9813f940..1044bffe7b0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/rule/ws/SearchAction.java @@ -47,6 +47,7 @@ import javax.annotation.CheckForNull; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; +import org.sonar.server.user.UserSession; /** * @since 4.4 @@ -76,8 +77,8 @@ public class SearchAction extends SearchRequestHandler implemen private final ActiveRuleCompleter activeRuleCompleter; private final RuleMapping mapping; - public SearchAction(RuleService service, ActiveRuleCompleter activeRuleCompleter, RuleMapping mapping) { - super(SEARCH_ACTION); + public SearchAction(RuleService service, ActiveRuleCompleter activeRuleCompleter, RuleMapping mapping, UserSession userSession) { + super(SEARCH_ACTION, userSession); this.ruleService = service; this.activeRuleCompleter = activeRuleCompleter; this.mapping = mapping; diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/QueryContext.java b/server/sonar-server/src/main/java/org/sonar/server/search/QueryContext.java index 66d2244f9ee..8e24491b345 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/search/QueryContext.java +++ b/server/sonar-server/src/main/java/org/sonar/server/search/QueryContext.java @@ -20,13 +20,11 @@ package org.sonar.server.search; import com.google.common.base.Preconditions; -import org.sonar.server.user.UserSession; - -import javax.annotation.Nullable; - import java.util.Arrays; import java.util.Collection; import java.util.Set; +import javax.annotation.Nullable; +import org.sonar.server.user.UserSession; import static com.google.common.collect.Sets.newHashSet; import static com.google.common.collect.Sets.newLinkedHashSet; @@ -52,9 +50,9 @@ public class QueryContext { private String userLogin; private Set userGroups = newHashSet(); - public QueryContext() { - this.userLogin = UserSession.get().login(); - this.userGroups = UserSession.get().userGroups(); + public QueryContext(UserSession userSession) { + this.userLogin = userSession.login(); + this.userGroups = userSession.userGroups(); } /** diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/ws/BaseMapping.java b/server/sonar-server/src/main/java/org/sonar/server/search/ws/BaseMapping.java index 6f195dfe623..93a84786bfd 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/search/ws/BaseMapping.java +++ b/server/sonar-server/src/main/java/org/sonar/server/search/ws/BaseMapping.java @@ -32,6 +32,7 @@ import javax.annotation.Nullable; import java.util.Arrays; import java.util.List; import java.util.Set; +import org.sonar.server.user.UserSession; /** * Mapping of search documents (see {@link org.sonar.server.search.BaseDoc}) to WS JSON responses @@ -41,6 +42,11 @@ public abstract class BaseMapping { private final Multimap indexFieldsByWsFields = LinkedHashMultimap.create(); private final Multimap mappers = LinkedHashMultimap.create(); + private final UserSession userSession; + + protected BaseMapping(UserSession userSession) { + this.userSession = userSession; + } /** * All the WS supported fields @@ -50,7 +56,7 @@ public abstract class BaseMapping { } public QueryContext newQueryOptions(SearchOptions options) { - QueryContext result = new QueryContext(); + QueryContext result = new QueryContext(userSession); result.setPage(options.page(), options.pageSize()); List optionFields = options.fields(); if (optionFields != null) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/search/ws/SearchRequestHandler.java b/server/sonar-server/src/main/java/org/sonar/server/search/ws/SearchRequestHandler.java index e5bec95f0e5..5481a4b2e55 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/search/ws/SearchRequestHandler.java +++ b/server/sonar-server/src/main/java/org/sonar/server/search/ws/SearchRequestHandler.java @@ -39,6 +39,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import org.sonar.server.user.UserSession; public abstract class SearchRequestHandler implements RequestHandler { @@ -51,9 +52,11 @@ public abstract class SearchRequestHandler implements RequestHand public static final String PARAM_FACETS = "facets"; private final String actionName; + protected final UserSession userSession; - protected SearchRequestHandler(String actionName) { + protected SearchRequestHandler(String actionName, UserSession userSession) { this.actionName = actionName; + this.userSession = userSession; } protected abstract Result doSearch(QUERY query, QueryContext context); @@ -126,7 +129,7 @@ public abstract class SearchRequestHandler implements RequestHand protected QueryContext getQueryContext(Request request) { int pageSize = request.mandatoryParamAsInt(PARAM_PAGE_SIZE); - QueryContext queryContext = new QueryContext().addFieldsToReturn(request.paramAsStrings(PARAM_FIELDS)); + QueryContext queryContext = new QueryContext(userSession).addFieldsToReturn(request.paramAsStrings(PARAM_FIELDS)); List facets = request.paramAsStrings(PARAM_FACETS); if(facets != null) { queryContext.addFacets(facets); diff --git a/server/sonar-server/src/main/java/org/sonar/server/source/ws/HashAction.java b/server/sonar-server/src/main/java/org/sonar/server/source/ws/HashAction.java index de3d87c8427..940af9f8684 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/source/ws/HashAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/source/ws/HashAction.java @@ -22,6 +22,9 @@ package org.sonar.server.source.ws; import com.google.common.base.Function; import com.google.common.io.CharStreams; import com.google.common.io.Resources; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Reader; import org.apache.commons.io.Charsets; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; @@ -32,16 +35,14 @@ import org.sonar.core.persistence.DbSession; import org.sonar.server.db.DbClient; import org.sonar.server.user.UserSession; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Reader; - public class HashAction implements SourcesAction { private final DbClient dbClient; + private final UserSession userSession; - public HashAction(DbClient dbClient) { + public HashAction(DbClient dbClient, UserSession userSession) { this.dbClient = dbClient; + this.userSession = userSession; } @Override @@ -65,7 +66,7 @@ public class HashAction implements SourcesAction { try (DbSession session = dbClient.openSession(false)) { final String componentKey = request.mandatoryParam("key"); final ComponentDto component = dbClient.componentDao().getByKey(session, componentKey); - UserSession.get().checkProjectUuidPermission(UserRole.USER, component.projectUuid()); + userSession.checkProjectUuidPermission(UserRole.USER, component.projectUuid()); response.stream().setMediaType("text/plain"); OutputStreamWriter writer = new OutputStreamWriter(response.stream().output(), Charsets.UTF_8); diff --git a/server/sonar-server/src/main/java/org/sonar/server/source/ws/IndexAction.java b/server/sonar-server/src/main/java/org/sonar/server/source/ws/IndexAction.java index 178c49abb06..5dff47dc731 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/source/ws/IndexAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/source/ws/IndexAction.java @@ -21,6 +21,7 @@ package org.sonar.server.source.ws; import com.google.common.io.Resources; +import java.util.List; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; @@ -32,16 +33,16 @@ import org.sonar.server.db.DbClient; import org.sonar.server.source.SourceService; import org.sonar.server.user.UserSession; -import java.util.List; - public class IndexAction implements SourcesAction { private final DbClient dbClient; private final SourceService sourceService; + private final UserSession userSession; - public IndexAction(DbClient dbClient, SourceService sourceService) { + public IndexAction(DbClient dbClient, SourceService sourceService, UserSession userSession) { this.dbClient = dbClient; this.sourceService = sourceService; + this.userSession = userSession; } @Override @@ -72,7 +73,7 @@ public class IndexAction implements SourcesAction { @Override public void handle(Request request, Response response) { String fileKey = request.mandatoryParam("resource"); - UserSession.get().checkComponentPermission(UserRole.CODEVIEWER, fileKey); + userSession.checkComponentPermission(UserRole.CODEVIEWER, fileKey); Integer from = request.mandatoryParamAsInt("from"); Integer to = request.paramAsInt("to"); try (DbSession session = dbClient.openSession(false)) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/source/ws/LinesAction.java b/server/sonar-server/src/main/java/org/sonar/server/source/ws/LinesAction.java index ff750c5c984..6d0599cf19a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/source/ws/LinesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/source/ws/LinesAction.java @@ -20,6 +20,8 @@ package org.sonar.server.source.ws; import com.google.common.io.Resources; +import java.util.Date; +import java.util.List; import org.apache.commons.lang.ObjectUtils; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; @@ -37,9 +39,6 @@ import org.sonar.server.source.index.SourceLineDoc; import org.sonar.server.source.index.SourceLineIndex; import org.sonar.server.user.UserSession; -import java.util.Date; -import java.util.List; - public class LinesAction implements SourcesAction { private static final String PARAM_UUID = "uuid"; @@ -48,11 +47,13 @@ public class LinesAction implements SourcesAction { private final SourceLineIndex sourceLineIndex; private final HtmlSourceDecorator htmlSourceDecorator; private final DbClient dbClient; + private final UserSession userSession; - public LinesAction(DbClient dbClient, SourceLineIndex sourceLineIndex, HtmlSourceDecorator htmlSourceDecorator) { + public LinesAction(DbClient dbClient, SourceLineIndex sourceLineIndex, HtmlSourceDecorator htmlSourceDecorator, UserSession userSession) { this.sourceLineIndex = sourceLineIndex; this.htmlSourceDecorator = htmlSourceDecorator; this.dbClient = dbClient; + this.userSession = userSession; } @Override @@ -103,7 +104,7 @@ public class LinesAction implements SourcesAction { @Override public void handle(Request request, Response response) { ComponentDto component = loadComponent(request); - UserSession.get().checkProjectUuidPermission(UserRole.CODEVIEWER, component.projectUuid()); + userSession.checkProjectUuidPermission(UserRole.CODEVIEWER, component.projectUuid()); int from = Math.max(request.mandatoryParamAsInt("from"), 1); int to = (Integer) ObjectUtils.defaultIfNull(request.paramAsInt("to"), Integer.MAX_VALUE); diff --git a/server/sonar-server/src/main/java/org/sonar/server/source/ws/RawAction.java b/server/sonar-server/src/main/java/org/sonar/server/source/ws/RawAction.java index ea04157ff4c..00f431d802d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/source/ws/RawAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/source/ws/RawAction.java @@ -21,6 +21,8 @@ package org.sonar.server.source.ws; import com.google.common.io.Resources; +import java.io.IOException; +import java.util.List; import org.apache.commons.io.Charsets; import org.apache.commons.io.IOUtils; import org.sonar.api.server.ws.Request; @@ -33,17 +35,16 @@ import org.sonar.server.db.DbClient; import org.sonar.server.source.SourceService; import org.sonar.server.user.UserSession; -import java.io.IOException; -import java.util.List; - public class RawAction implements SourcesAction { private final DbClient dbClient; private final SourceService sourceService; + private final UserSession userSession; - public RawAction(DbClient dbClient, SourceService sourceService) { + public RawAction(DbClient dbClient, SourceService sourceService, UserSession userSession) { this.dbClient = dbClient; this.sourceService = sourceService; + this.userSession = userSession; } @Override @@ -64,7 +65,7 @@ public class RawAction implements SourcesAction { @Override public void handle(Request request, Response response) { String fileKey = request.mandatoryParam("key"); - UserSession.get().checkComponentPermission(UserRole.CODEVIEWER, fileKey); + userSession.checkComponentPermission(UserRole.CODEVIEWER, fileKey); try (DbSession session = dbClient.openSession(false)) { ComponentDto componentDto = dbClient.componentDao().getByKey(session, fileKey); List lines = sourceService.getLinesAsTxt(componentDto.uuid(), null, null); diff --git a/server/sonar-server/src/main/java/org/sonar/server/source/ws/ScmAction.java b/server/sonar-server/src/main/java/org/sonar/server/source/ws/ScmAction.java index 7abdecbe091..418f2abc8b6 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/source/ws/ScmAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/source/ws/ScmAction.java @@ -22,6 +22,8 @@ package org.sonar.server.source.ws; import com.google.common.base.Strings; import com.google.common.io.Resources; +import java.util.Date; +import java.util.List; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.builder.EqualsBuilder; import org.sonar.api.server.ws.Request; @@ -38,17 +40,16 @@ import org.sonar.server.source.index.SourceLineDoc; import org.sonar.server.source.index.SourceLineIndex; import org.sonar.server.user.UserSession; -import java.util.Date; -import java.util.List; - public class ScmAction implements SourcesAction { private final DbClient dbClient; private final SourceLineIndex sourceLineIndex; + private final UserSession userSession; - public ScmAction(DbClient dbClient, SourceLineIndex sourceLineIndex) { + public ScmAction(DbClient dbClient, SourceLineIndex sourceLineIndex, UserSession userSession) { this.dbClient = dbClient; this.sourceLineIndex = sourceLineIndex; + this.userSession = userSession; } @Override @@ -101,7 +102,7 @@ public class ScmAction implements SourcesAction { DbSession session = dbClient.openSession(false); try { ComponentDto fileDto = dbClient.componentDao().getByKey(session, fileKey); - UserSession.get().checkProjectUuidPermission(UserRole.CODEVIEWER, fileDto.projectUuid()); + userSession.checkProjectUuidPermission(UserRole.CODEVIEWER, fileDto.projectUuid()); List sourceLines = sourceLineIndex.getLines(fileDto.uuid(), from, to); if (sourceLines.isEmpty()) { throw new NotFoundException("File '" + fileKey + "' has no sources"); diff --git a/server/sonar-server/src/main/java/org/sonar/server/source/ws/ShowAction.java b/server/sonar-server/src/main/java/org/sonar/server/source/ws/ShowAction.java index fc8bc31bde0..54356aa3d36 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/source/ws/ShowAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/source/ws/ShowAction.java @@ -20,6 +20,7 @@ package org.sonar.server.source.ws; import com.google.common.io.Resources; +import java.util.List; import org.apache.commons.lang.ObjectUtils; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; @@ -32,16 +33,16 @@ import org.sonar.server.db.DbClient; import org.sonar.server.source.SourceService; import org.sonar.server.user.UserSession; -import java.util.List; - public class ShowAction implements SourcesAction { private final SourceService sourceService; private final DbClient dbClient; + private final UserSession userSession; - public ShowAction(SourceService sourceService, DbClient dbClient) { + public ShowAction(SourceService sourceService, DbClient dbClient, UserSession userSession) { this.sourceService = sourceService; this.dbClient = dbClient; + this.userSession = userSession; } @Override @@ -78,7 +79,7 @@ public class ShowAction implements SourcesAction { @Override public void handle(Request request, Response response) { String fileKey = request.mandatoryParam("key"); - UserSession.get().checkComponentPermission(UserRole.CODEVIEWER, fileKey); + userSession.checkComponentPermission(UserRole.CODEVIEWER, fileKey); int from = Math.max(request.mandatoryParamAsInt("from"), 1); int to = (Integer) ObjectUtils.defaultIfNull(request.paramAsInt("to"), Integer.MAX_VALUE); diff --git a/server/sonar-server/src/main/java/org/sonar/server/test/CoverageService.java b/server/sonar-server/src/main/java/org/sonar/server/test/CoverageService.java index a6e579e1192..b56a58b7f5a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/test/CoverageService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/test/CoverageService.java @@ -20,7 +20,10 @@ package org.sonar.server.test; -import com.google.common.collect.Maps; +import java.util.Map; + +import javax.annotation.CheckForNull; + import org.sonar.api.ServerSide; import org.sonar.api.measures.CoreMetrics; import org.sonar.api.test.MutableTestable; @@ -34,9 +37,7 @@ import org.sonar.core.persistence.MyBatis; import org.sonar.server.measure.persistence.MeasureDao; import org.sonar.server.user.UserSession; -import javax.annotation.CheckForNull; - -import java.util.Map; +import com.google.common.collect.Maps; @ServerSide public class CoverageService { @@ -48,15 +49,17 @@ public class CoverageService { private final MyBatis myBatis; private final MeasureDao measureDao; private final SnapshotPerspectives snapshotPerspectives; + private final UserSession userSession; - public CoverageService(MyBatis myBatis, MeasureDao measureDao, SnapshotPerspectives snapshotPerspectives) { + public CoverageService(MyBatis myBatis, MeasureDao measureDao, SnapshotPerspectives snapshotPerspectives, UserSession userSession) { this.myBatis = myBatis; this.measureDao = measureDao; this.snapshotPerspectives = snapshotPerspectives; + this.userSession = userSession; } public void checkPermission(String fileKey) { - UserSession.get().checkComponentPermission(UserRole.CODEVIEWER, fileKey); + userSession.checkComponentPermission(UserRole.CODEVIEWER, fileKey); } public Map getHits(String fileKey, CoverageService.TYPE type) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/test/ws/TestsCoveredFilesAction.java b/server/sonar-server/src/main/java/org/sonar/server/test/ws/TestsCoveredFilesAction.java index 7617fc6c2e3..9160ee9d2b0 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/test/ws/TestsCoveredFilesAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/test/ws/TestsCoveredFilesAction.java @@ -24,6 +24,8 @@ import com.google.common.base.Function; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.io.Resources; +import java.util.List; +import java.util.Map; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; @@ -37,19 +39,18 @@ import org.sonar.server.test.index.CoveredFileDoc; import org.sonar.server.test.index.TestIndex; import org.sonar.server.user.UserSession; -import java.util.List; -import java.util.Map; - public class TestsCoveredFilesAction implements TestAction { public static final String TEST_UUID = "testUuid"; private final DbClient dbClient; private final TestIndex index; + private final UserSession userSession; - public TestsCoveredFilesAction(DbClient dbClient, TestIndex index) { + public TestsCoveredFilesAction(DbClient dbClient, TestIndex index, UserSession userSession) { this.dbClient = dbClient; this.index = index; + this.userSession = userSession; } @Override @@ -71,7 +72,7 @@ public class TestsCoveredFilesAction implements TestAction { @Override public void handle(Request request, Response response) { String testUuid = request.mandatoryParam(TEST_UUID); - UserSession.get().checkComponentUuidPermission(UserRole.CODEVIEWER, index.searchByTestUuid(testUuid).fileUuid()); + userSession.checkComponentUuidPermission(UserRole.CODEVIEWER, index.searchByTestUuid(testUuid).fileUuid()); List coveredFiles = index.coveredFiles(testUuid); Map componentsByUuid = buildComponentsByUuid(coveredFiles); diff --git a/server/sonar-server/src/main/java/org/sonar/server/test/ws/TestsListAction.java b/server/sonar-server/src/main/java/org/sonar/server/test/ws/TestsListAction.java index 0a65137ecf7..281f1219d59 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/test/ws/TestsListAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/test/ws/TestsListAction.java @@ -23,6 +23,9 @@ package org.sonar.server.test.ws; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.io.Resources; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; @@ -40,11 +43,6 @@ import org.sonar.server.test.index.TestDoc; import org.sonar.server.test.index.TestIndex; import org.sonar.server.user.UserSession; -import javax.annotation.Nullable; - -import java.util.List; -import java.util.Map; - public class TestsListAction implements TestAction { public static final String TEST_UUID = "testUuid"; public static final String TEST_FILE_UUID = "testFileUuid"; @@ -54,10 +52,12 @@ public class TestsListAction implements TestAction { private final DbClient dbClient; private final TestIndex testIndex; + private final UserSession userSession; - public TestsListAction(DbClient dbClient, TestIndex testIndex) { + public TestsListAction(DbClient dbClient, TestIndex testIndex, UserSession userSession) { this.dbClient = dbClient; this.testIndex = testIndex; + this.userSession = userSession; } @Override @@ -204,7 +204,7 @@ public class TestsListAction implements TestAction { } private SearchResult searchTestsByTestFileKey(DbSession dbSession, String testFileKey, SearchOptions searchOptions) { - UserSession.get().checkComponentPermission(UserRole.CODEVIEWER, testFileKey); + userSession.checkComponentPermission(UserRole.CODEVIEWER, testFileKey); ComponentDto testFile = dbClient.componentDao().getByKey(dbSession, testFileKey); return testIndex.searchByTestFileUuid(testFile.uuid(), searchOptions); @@ -222,6 +222,6 @@ public class TestsListAction implements TestAction { private void checkComponentUuidPermission(DbSession dbSession, String componentUuid) { ComponentDto component = dbClient.componentDao().getByUuid(dbSession, componentUuid); - UserSession.get().checkProjectUuidPermission(UserRole.CODEVIEWER, component.projectUuid()); + userSession.checkProjectUuidPermission(UserRole.CODEVIEWER, component.projectUuid()); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyI18n.java b/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyI18n.java index 17175bf7807..4564f13515b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyI18n.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ui/JRubyI18n.java @@ -20,6 +20,10 @@ package org.sonar.server.ui; import com.google.common.collect.Maps; +import java.util.Date; +import java.util.Locale; +import java.util.Map; +import javax.annotation.Nullable; import org.apache.commons.lang.StringUtils; import org.sonar.api.ServerSide; import org.sonar.api.i18n.I18n; @@ -27,12 +31,6 @@ import org.sonar.api.utils.Duration; import org.sonar.api.utils.Durations; import org.sonar.server.user.UserSession; -import javax.annotation.Nullable; - -import java.util.Date; -import java.util.Locale; -import java.util.Map; - /** * Used through ruby code
Internal.i18n
* @@ -41,13 +39,15 @@ import java.util.Map; @ServerSide public class JRubyI18n { - private I18n i18n; - private Durations durations; + private final I18n i18n; + private final Durations durations; + private final UserSession userSession; private Map localesByRubyKey = Maps.newHashMap(); - public JRubyI18n(I18n i18n, Durations durations) { + public JRubyI18n(I18n i18n, Durations durations, UserSession userSession) { this.i18n = i18n; this.durations = durations; + this.userSession = userSession; } Locale getLocale(String rubyKey) { @@ -83,11 +83,11 @@ public class JRubyI18n { } public String ageFromNow(Date date) { - return i18n.ageFromNow(UserSession.get().locale(), date); + return i18n.ageFromNow(userSession.locale(), date); } public String formatDuration(Duration duration, String format) { - return durations.format(UserSession.get().locale(), duration, Durations.DurationFormat.valueOf(format)); + return durations.format(userSession.locale(), duration, Durations.DurationFormat.valueOf(format)); } public String formatLongDuration(long duration, String format) { @@ -95,7 +95,7 @@ public class JRubyI18n { } public String formatDateTime(Date date) { - return i18n.formatDateTime(UserSession.get().locale(), date); + return i18n.formatDateTime(userSession.locale(), date); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/ViewProxy.java b/server/sonar-server/src/main/java/org/sonar/server/ui/ViewProxy.java index 3beb0bbbbeb..82dc0a805b9 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ui/ViewProxy.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ui/ViewProxy.java @@ -21,6 +21,8 @@ package org.sonar.server.ui; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.Map; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.CompareToBuilder; @@ -46,13 +48,11 @@ import org.sonar.api.web.WidgetScope; import org.sonar.core.component.ComponentDto; import org.sonar.server.user.UserSession; -import java.util.Collection; -import java.util.Map; - @SuppressWarnings("rawtypes") public class ViewProxy implements Comparable { - private V view; + private final V view; + private final UserSession userSession; private String[] sections = {NavigationSection.HOME}; private String[] userRoles = {}; private String[] resourceScopes = {}; @@ -69,8 +69,9 @@ public class ViewProxy implements Comparable { private String[] mandatoryMeasures = {}; private String[] needOneOfMeasures = {}; - public ViewProxy(final V view) { + public ViewProxy(V view, UserSession userSession) { this.view = view; + this.userSession = userSession; initUserRoles(view); initSections(view); @@ -277,7 +278,7 @@ public class ViewProxy implements Comparable { public boolean isUserAuthorized() { boolean authorized = userRoles.length == 0; for (String userRole : getUserRoles()) { - authorized |= UserSession.get().hasGlobalPermission(userRole); + authorized |= userSession.hasGlobalPermission(userRole); } return authorized; } @@ -285,7 +286,7 @@ public class ViewProxy implements Comparable { public boolean isUserAuthorized(ComponentDto component) { boolean authorized = userRoles.length == 0; for (String userRole : getUserRoles()) { - authorized |= UserSession.get().hasProjectPermissionByUuid(userRole, component.uuid()); + authorized |= userSession.hasProjectPermissionByUuid(userRole, component.uuid()); } return authorized; } diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/Views.java b/server/sonar-server/src/main/java/org/sonar/server/ui/Views.java index 059269e079c..fd46b6a94d4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ui/Views.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ui/Views.java @@ -33,6 +33,7 @@ import javax.annotation.Nullable; import java.util.List; import java.util.Map; import java.util.Set; +import org.sonar.server.user.UserSession; @ServerSide public class Views { @@ -43,10 +44,14 @@ public class Views { private Map> widgetsPerId = Maps.newHashMap(); private Set> widgets = Sets.newTreeSet(); - public Views() { + private final UserSession userSession; + + public Views(UserSession userSession) { + this.userSession = userSession; } - public Views(View[] views) { + public Views(UserSession userSession, View[] views) { + this.userSession = userSession; for (View view : views) { register(view); } @@ -54,12 +59,12 @@ public class Views { private void register(View view) { if (view instanceof Widget) { - ViewProxy proxy = new ViewProxy((Widget) view); + ViewProxy proxy = new ViewProxy<>((Widget) view, userSession); widgets.add(proxy); widgetsPerId.put(proxy.getId(), proxy); } else if (view instanceof Page) { - ViewProxy proxy = new ViewProxy((Page) view); + ViewProxy proxy = new ViewProxy<>((Page) view, userSession); pagesPerId.put(proxy.getId(), proxy); pages.add(proxy); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentNavigationAction.java b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentNavigationAction.java index 48189880e0a..75fdda425da 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentNavigationAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/ComponentNavigationAction.java @@ -21,6 +21,12 @@ package org.sonar.server.ui.ws; import com.google.common.base.Charsets; import com.google.common.collect.Lists; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Date; +import java.util.List; +import java.util.Locale; +import javax.annotation.Nullable; import org.sonar.api.i18n.I18n; import org.sonar.api.resources.Qualifiers; import org.sonar.api.resources.ResourceType; @@ -47,14 +53,6 @@ import org.sonar.server.ui.ViewProxy; import org.sonar.server.ui.Views; import org.sonar.server.user.UserSession; -import javax.annotation.Nullable; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.Date; -import java.util.List; -import java.util.Locale; - public class ComponentNavigationAction implements NavigationAction { private static final String PARAM_COMPONENT_KEY = "componentKey"; @@ -73,13 +71,15 @@ public class ComponentNavigationAction implements NavigationAction { private final Views views; private final I18n i18n; private final ResourceTypes resourceTypes; + private final UserSession userSession; - public ComponentNavigationAction(DbClient dbClient, ActiveDashboardDao activeDashboardDao, Views views, I18n i18n, ResourceTypes resourceTypes) { + public ComponentNavigationAction(DbClient dbClient, ActiveDashboardDao activeDashboardDao, Views views, I18n i18n, ResourceTypes resourceTypes, UserSession userSession) { this.dbClient = dbClient; this.activeDashboardDao = activeDashboardDao; this.views = views; this.i18n = i18n; this.resourceTypes = resourceTypes; + this.userSession = userSession; } @Override @@ -102,7 +102,6 @@ public class ComponentNavigationAction implements NavigationAction { public void handle(Request request, Response response) throws Exception { String componentKey = request.mandatoryParam(PARAM_COMPONENT_KEY); - UserSession userSession = UserSession.get(); DbSession session = dbClient.openSession(false); try { diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalNavigationAction.java b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalNavigationAction.java index 45907e1538c..95f7a80f502 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalNavigationAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/GlobalNavigationAction.java @@ -19,6 +19,7 @@ */ package org.sonar.server.ui.ws; +import java.util.List; import org.sonar.api.config.Settings; import org.sonar.api.resources.ResourceType; import org.sonar.api.resources.ResourceTypes; @@ -34,8 +35,6 @@ import org.sonar.server.ui.ViewProxy; import org.sonar.server.ui.Views; import org.sonar.server.user.UserSession; -import java.util.List; - public class GlobalNavigationAction implements NavigationAction { private static final String ANONYMOUS = null; @@ -44,12 +43,14 @@ public class GlobalNavigationAction implements NavigationAction { private final Views views; private final Settings settings; private final ResourceTypes resourceTypes; + private final UserSession userSession; - public GlobalNavigationAction(ActiveDashboardDao activeDashboardDao, Views views, Settings settings, ResourceTypes resourceTypes) { + public GlobalNavigationAction(ActiveDashboardDao activeDashboardDao, Views views, Settings settings, ResourceTypes resourceTypes, UserSession userSession) { this.activeDashboardDao = activeDashboardDao; this.views = views; this.settings = settings; this.resourceTypes = resourceTypes; + this.userSession = userSession; } @Override @@ -64,8 +65,6 @@ public class GlobalNavigationAction implements NavigationAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession userSession = UserSession.get(); - List dashboards = activeDashboardDao.selectGlobalDashboardsForUserLogin(userSession.login()); if (dashboards.isEmpty()) { dashboards = activeDashboardDao.selectGlobalDashboardsForUserLogin(ANONYMOUS); diff --git a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/SettingsNavigationAction.java b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/SettingsNavigationAction.java index 83bf6c6312e..05aa5cf9262 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ui/ws/SettingsNavigationAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ui/ws/SettingsNavigationAction.java @@ -38,11 +38,13 @@ public class SettingsNavigationAction implements NavigationAction { private final Settings settings; private final Views views; private final I18n i18n; + private final UserSession userSession; - public SettingsNavigationAction(Settings settings, Views views, I18n i18n) { + public SettingsNavigationAction(Settings settings, Views views, I18n i18n, UserSession userSession) { this.views = views; this.settings = settings; this.i18n = i18n; + this.userSession = userSession; } @Override @@ -61,7 +63,6 @@ public class SettingsNavigationAction implements NavigationAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession userSession = UserSession.get(); boolean isAdmin = userSession.hasGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); JsonWriter json = response.newJsonWriter().beginObject(); @@ -72,7 +73,7 @@ public class SettingsNavigationAction implements NavigationAction { if (isAdmin) { for (ViewProxy page : views.getPages(NavigationSection.CONFIGURATION, null, null, null, null)) { json.beginObject() - .prop("name", i18n.message(UserSession.get().locale(), String.format("%s.page", page.getTitle()), page.getTitle())) + .prop("name", i18n.message(userSession.locale(), String.format("%s.page", page.getTitle()), page.getTitle())) .prop("url", getPageUrl(page)) .endObject(); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/AbstractUserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/AbstractUserSession.java new file mode 100644 index 00000000000..e83ed9b046b --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/user/AbstractUserSession.java @@ -0,0 +1,178 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.user; + +import com.google.common.base.Objects; +import com.google.common.base.Strings; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; +import org.sonar.api.security.DefaultGroups; +import org.sonar.server.exceptions.ForbiddenException; +import org.sonar.server.exceptions.UnauthorizedException; + +import static com.google.common.collect.Lists.newArrayList; +import static com.google.common.collect.Maps.newHashMap; + +public abstract class AbstractUserSession implements UserSession { + protected static final String INSUFFICIENT_PRIVILEGES_MESSAGE = "Insufficient privileges"; + + protected Integer userId; + protected String login; + protected Set userGroups = Sets.newHashSet(DefaultGroups.ANYONE); + protected List globalPermissions = Collections.emptyList(); + protected HashMultimap projectKeyByPermission = HashMultimap.create(); + protected HashMultimap projectUuidByPermission = HashMultimap.create(); + protected Map projectUuidByComponentUuid = newHashMap(); + protected List projectPermissions = newArrayList(); + protected String name; + protected Locale locale = Locale.ENGLISH; + + private final Class clazz; + + protected AbstractUserSession(Class clazz) { + this.clazz = clazz; + } + + @Override + @CheckForNull + public String login() { + return login; + } + + protected T setLogin(@Nullable String s) { + this.login = Strings.emptyToNull(s); + return clazz.cast(this); + } + + @Override + @CheckForNull + public String name() { + return name; + } + + protected T setName(@Nullable String s) { + this.name = Strings.emptyToNull(s); + return clazz.cast(this); + } + + @Override + @CheckForNull + public Integer userId() { + return userId; + } + + protected T setUserId(@Nullable Integer userId) { + this.userId = userId; + return clazz.cast(this); + } + + @Override + public Set userGroups() { + return userGroups; + } + + protected T setUserGroups(@Nullable String... userGroups) { + if (userGroups != null) { + this.userGroups.addAll(Arrays.asList(userGroups)); + } + return clazz.cast(this); + } + + @Override + public boolean isLoggedIn() { + return login != null; + } + + @Override + public Locale locale() { + return locale; + } + + protected T setLocale(@Nullable Locale l) { + this.locale = Objects.firstNonNull(l, Locale.ENGLISH); + return clazz.cast(this); + } + + @Override + public UserSession checkLoggedIn() { + if (login == null) { + throw new UnauthorizedException("Authentication is required"); + } + return this; + } + + @Override + public UserSession checkGlobalPermission(String globalPermission) { + return checkGlobalPermission(globalPermission, null); + } + + @Override + public UserSession checkGlobalPermission(String globalPermission, @Nullable String errorMessage) { + if (!hasGlobalPermission(globalPermission)) { + throw new ForbiddenException(errorMessage != null ? errorMessage : INSUFFICIENT_PRIVILEGES_MESSAGE); + } + return this; + } + + @Override + public boolean hasGlobalPermission(String globalPermission) { + return globalPermissions().contains(globalPermission); + } + + @Override + public UserSession checkProjectPermission(String projectPermission, String projectKey) { + if (!hasProjectPermission(projectPermission, projectKey)) { + throw new ForbiddenException(INSUFFICIENT_PRIVILEGES_MESSAGE); + } + return this; + } + + @Override + public UserSession checkProjectUuidPermission(String projectPermission, String projectUuid) { + if (!hasProjectPermissionByUuid(projectPermission, projectUuid)) { + throw new ForbiddenException(INSUFFICIENT_PRIVILEGES_MESSAGE); + } + return this; + } + + @Override + public UserSession checkComponentPermission(String projectPermission, String componentKey) { + if (!hasComponentPermission(projectPermission, componentKey)) { + throw new ForbiddenException(INSUFFICIENT_PRIVILEGES_MESSAGE); + } + return this; + } + + @Override + public UserSession checkComponentUuidPermission(String permission, String componentUuid) { + if (!hasComponentUuidPermission(permission, componentUuid)) { + throw new ForbiddenException(INSUFFICIENT_PRIVILEGES_MESSAGE); + } + return this; + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/AnonymousUserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/AnonymousUserSession.java new file mode 100644 index 00000000000..03dab8eaa86 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/user/AnonymousUserSession.java @@ -0,0 +1,56 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.user; + +import java.util.Collections; +import java.util.List; + +public final class AnonymousUserSession extends AbstractUserSession { + public static final UserSession INSTANCE = new AnonymousUserSession(); + + private AnonymousUserSession() { + super(AnonymousUserSession.class); + } + + @Override + public List globalPermissions() { + return Collections.emptyList(); + } + + @Override + public boolean hasProjectPermission(String permission, String projectKey) { + return false; + } + + @Override + public boolean hasProjectPermissionByUuid(String permission, String projectUuid) { + return false; + } + + @Override + public boolean hasComponentPermission(String permission, String componentKey) { + return false; + } + + @Override + public boolean hasComponentUuidPermission(String permission, String componentUuid) { + return false; + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/DefaultUserService.java b/server/sonar-server/src/main/java/org/sonar/server/user/DefaultUserService.java index 9dfcea527a2..3655ee6661d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/DefaultUserService.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/DefaultUserService.java @@ -41,11 +41,13 @@ public class DefaultUserService implements RubyUserService { private final UserIndex userIndex; private final UserUpdater userUpdater; private final UserFinder finder; + private final UserSession userSession; - public DefaultUserService(UserIndex userIndex, UserUpdater userUpdater, UserFinder finder) { + public DefaultUserService(UserIndex userIndex, UserUpdater userUpdater, UserFinder finder, UserSession userSession) { this.userIndex = userIndex; this.userUpdater = userUpdater; this.finder = finder; + this.userSession = userSession; } @Override @@ -108,7 +110,6 @@ public class DefaultUserService implements RubyUserService { if (Strings.isNullOrEmpty(login)) { throw new BadRequestException("Login is missing"); } - UserSession userSession = UserSession.get(); userSession.checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); if (Objects.equal(userSession.login(), login)) { throw new BadRequestException("Self-deactivation is not possible"); diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/DoPrivileged.java b/server/sonar-server/src/main/java/org/sonar/server/user/DoPrivileged.java index 954191b136b..d5fdc5674c9 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/DoPrivileged.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/DoPrivileged.java @@ -19,6 +19,8 @@ */ package org.sonar.server.user; +import java.util.Collections; +import java.util.List; import org.sonar.core.permission.GlobalPermissions; import java.util.Locale; @@ -51,27 +53,63 @@ public final class DoPrivileged { * to the execution of the {@link #doPrivileged()} method. */ public abstract static class Task { + private final ThreadLocalUserSession threadLocalUserSession; + private UserSession oldUserSession; + + protected Task(ThreadLocalUserSession threadLocalUserSession) { + this.threadLocalUserSession = threadLocalUserSession; + } /** * Code placed in this method will be executed in a privileged environment. */ protected abstract void doPrivileged(); + private static class PrivilegedUserSession extends AbstractUserSession { + + private PrivilegedUserSession() { + super(PrivilegedUserSession.class); + } + + @Override + public boolean hasGlobalPermission(String globalPermission) { + return true; + } + + @Override + public List globalPermissions() { + return Collections.emptyList(); + } + + @Override + public boolean hasProjectPermission(String permission, String projectKey) { + return true; + } + + @Override + public boolean hasProjectPermissionByUuid(String permission, String projectUuid) { + return true; + } + + @Override + public boolean hasComponentPermission(String permission, String componentKey) { + return true; + } + + @Override + public boolean hasComponentUuidPermission(String permission, String componentUuid) { + return true; + } + } + private void start() { - UserSession.set(new UserSession() { - @Override - public boolean hasGlobalPermission(String globalPermission) { - return true; - } - @Override - public boolean hasProjectPermission(String permission, String projectKey) { - return true; - } - }.setLocale(Locale.getDefault())); + oldUserSession = threadLocalUserSession.get(); + threadLocalUserSession.set(new PrivilegedUserSession().setLocale(Locale.getDefault())); } private void stop() { - UserSession.remove(); + threadLocalUserSession.remove(); + threadLocalUserSession.set(oldUserSession); } } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/RubyUserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/RubyUserSession.java index bd8dc0f9960..c58d0dd2c16 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/RubyUserSession.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/RubyUserSession.java @@ -19,28 +19,56 @@ */ package org.sonar.server.user; -import org.sonar.server.ui.JRubyI18n; +import java.util.List; import javax.annotation.Nullable; -import java.util.List; +import org.sonar.core.platform.ComponentContainer; +import org.sonar.core.resource.ResourceDao; +import org.sonar.core.user.AuthorizationDao; +import org.sonar.server.platform.Platform; +import org.sonar.server.ui.JRubyI18n; + +import com.google.common.annotations.VisibleForTesting; public class RubyUserSession { + + private static RubyUserSession instance; + + private static RubyUserSession getInstance() { + if (instance == null) { + instance = new RubyUserSession(Platform.getInstance()); + } + return instance; + } + + private final Platform platform; + /** * Invoked by Ruby code - see application_controller.rb */ public static void setSession(@Nullable Integer userId, @Nullable String login, @Nullable String name, @Nullable List userGroups, @Nullable String localeRubyKey) { - UserSession session = new UserSession() + getInstance().setSessionImpl(userId, login, name, userGroups, localeRubyKey); + } + + @VisibleForTesting + RubyUserSession(Platform platform) { + // Utility class + this.platform = platform; + } + + public void setSessionImpl(@Nullable Integer userId, @Nullable String login, @Nullable String name, @Nullable List userGroups, @Nullable String localeRubyKey) { + ComponentContainer container = platform.getContainer(); + ThreadLocalUserSession threadLocalUserSession = container.getComponentByType(ThreadLocalUserSession.class); + + UserSession session = new ServerUserSession(container.getComponentByType(AuthorizationDao.class), + container.getComponentByType(ResourceDao.class)) .setLogin(login) .setName(name) .setUserId(userId) .setUserGroups(userGroups != null ? userGroups.toArray(new String[userGroups.size()]) : null) .setLocale(JRubyI18n.toLocale(localeRubyKey)); - UserSession.set(session); - } - - private RubyUserSession() { - // Utility class + threadLocalUserSession.set(session); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ServerUserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/ServerUserSession.java new file mode 100644 index 00000000000..454caa863d5 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ServerUserSession.java @@ -0,0 +1,140 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.user; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import org.sonar.api.security.DefaultGroups; +import org.sonar.api.utils.log.Logger; +import org.sonar.api.utils.log.Loggers; +import org.sonar.core.permission.GlobalPermissions; +import org.sonar.core.resource.ResourceDao; +import org.sonar.core.resource.ResourceDto; +import org.sonar.core.user.AuthorizationDao; + +import static com.google.common.collect.Maps.newHashMap; +import static com.google.common.collect.Sets.newHashSet; + +/** + * Part of the current HTTP session + */ +public class ServerUserSession extends AbstractUserSession + implements UserSession { + + private static final Logger LOG = Loggers.get(ServerUserSession.class); + + private Map projectKeyByComponentKey = newHashMap(); + + private final AuthorizationDao authorizationDao; + private final ResourceDao resourceDao; + + ServerUserSession(AuthorizationDao authorizationDao, ResourceDao resourceDao) { + super(ServerUserSession.class); + this.globalPermissions = null; + this.authorizationDao = authorizationDao; + this.resourceDao = resourceDao; + // Do not forget that when forceAuthentication is set to true, the Anyone group should not be set (but this will be check when + // authentication will be done in Java) + this.userGroups = newHashSet(DefaultGroups.ANYONE); + } + + @Override + public List globalPermissions() { + if (globalPermissions == null) { + List permissionKeys = authorizationDao.selectGlobalPermissions(login); + globalPermissions = new ArrayList<>(); + for (String permissionKey : permissionKeys) { + if (!GlobalPermissions.ALL.contains(permissionKey)) { + LOG.warn("Ignoring unknown permission {} for user {}", permissionKey, login); + } else { + globalPermissions.add(permissionKey); + } + } + } + return globalPermissions; + } + + @Override + public boolean hasProjectPermission(String permission, String projectKey) { + if (!projectPermissions.contains(permission)) { + Collection projectKeys = authorizationDao.selectAuthorizedRootProjectsKeys(userId, permission); + for (String key : projectKeys) { + projectKeyByPermission.put(permission, key); + } + projectPermissions.add(permission); + } + return projectKeyByPermission.get(permission).contains(projectKey); + } + + @Override + public boolean hasProjectPermissionByUuid(String permission, String projectUuid) { + if (!projectPermissions.contains(permission)) { + Collection projectUuids = authorizationDao.selectAuthorizedRootProjectsUuids(userId, permission); + addProjectPermission(permission, projectUuids); + } + return projectUuidByPermission.get(permission).contains(projectUuid); + } + + private void addProjectPermission(String permission, Collection authorizedProjectUuids) { + for (String key : authorizedProjectUuids) { + projectUuidByPermission.put(permission, key); + } + projectPermissions.add(permission); + } + + @Override + public boolean hasComponentPermission(String permission, String componentKey) { + String projectKey = projectKeyByComponentKey.get(componentKey); + if (projectKey == null) { + ResourceDto project = resourceDao.getRootProjectByComponentKey(componentKey); + if (project == null) { + return false; + } + projectKey = project.getKey(); + } + boolean hasComponentPermission = hasProjectPermission(permission, projectKey); + if (hasComponentPermission) { + projectKeyByComponentKey.put(componentKey, projectKey); + return true; + } + return false; + } + + @Override + public boolean hasComponentUuidPermission(String permission, String componentUuid) { + String projectUuid = projectUuidByComponentUuid.get(componentUuid); + if (projectUuid == null) { + ResourceDto project = resourceDao.getResource(componentUuid); + if (project == null) { + return false; + } + projectUuid = project.getProjectUuid(); + } + boolean hasComponentPermission = hasProjectPermissionByUuid(permission, projectUuid); + if (hasComponentPermission) { + projectUuidByComponentUuid.put(componentUuid, projectUuid); + return true; + } + return false; + } + +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ThreadLocalUserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/ThreadLocalUserSession.java new file mode 100644 index 00000000000..2a8b84e1782 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ThreadLocalUserSession.java @@ -0,0 +1,149 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.user; + +import com.google.common.base.Objects; +import java.util.List; +import java.util.Locale; +import java.util.Set; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; + +/** + * Part of the current HTTP session + */ +public class ThreadLocalUserSession implements UserSession { + + private static final ThreadLocal THREAD_LOCAL = new ThreadLocal(); + + public UserSession get() { + return Objects.firstNonNull(THREAD_LOCAL.get(), AnonymousUserSession.INSTANCE); + } + + public void set(UserSession session) { + THREAD_LOCAL.set(session); + } + + public void remove() { + THREAD_LOCAL.remove(); + } + + public boolean hasSession() { + return THREAD_LOCAL.get() != null; + } + + @Override + @CheckForNull + public String login() { + return get().login(); + } + + @Override + @CheckForNull + public String name() { + return get().name(); + } + + @Override + @CheckForNull + public Integer userId() { + return get().userId(); + } + + @Override + public Set userGroups() { + return get().userGroups(); + } + + @Override + public boolean isLoggedIn() { + return get().isLoggedIn(); + } + + @Override + public Locale locale() { + return get().locale(); + } + + @Override + public UserSession checkLoggedIn() { + return get().checkLoggedIn(); + } + + @Override + public UserSession checkGlobalPermission(String globalPermission) { + return get().checkGlobalPermission(globalPermission); + } + + @Override + public UserSession checkGlobalPermission(String globalPermission, @Nullable String errorMessage) { + return get().checkGlobalPermission(globalPermission, errorMessage); + } + + @Override + public boolean hasGlobalPermission(String globalPermission) { + return get().hasGlobalPermission(globalPermission); + } + + @Override + public List globalPermissions() { + return get().globalPermissions(); + } + + @Override + public UserSession checkProjectPermission(String projectPermission, String projectKey) { + return get().checkProjectPermission(projectPermission, projectKey); + } + + @Override + public UserSession checkProjectUuidPermission(String projectPermission, String projectUuid) { + return get().checkProjectUuidPermission(projectPermission, projectUuid); + } + + @Override + public boolean hasProjectPermission(String permission, String projectKey) { + return get().hasProjectPermission(permission, projectKey); + } + + @Override + public boolean hasProjectPermissionByUuid(String permission, String projectUuid) { + return get().hasProjectPermissionByUuid(permission, projectUuid); + } + + @Override + public UserSession checkComponentPermission(String projectPermission, String componentKey) { + return get().checkComponentPermission(projectPermission, componentKey); + } + + @Override + public UserSession checkComponentUuidPermission(String permission, String componentUuid) { + return get().checkComponentUuidPermission(permission, componentUuid); + } + + @Override + public boolean hasComponentPermission(String permission, String componentKey) { + return get().hasComponentPermission(permission, componentKey); + } + + @Override + public boolean hasComponentUuidPermission(String permission, String componentUuid) { + return get().hasComponentUuidPermission(permission, componentUuid); + } +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java b/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java index a49b0e37d48..9e683613dfd 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/UserSession.java @@ -19,291 +19,88 @@ */ package org.sonar.server.user; -import com.google.common.base.Objects; -import com.google.common.base.Strings; -import com.google.common.collect.HashMultimap; -import org.sonar.api.security.DefaultGroups; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; -import org.sonar.core.permission.GlobalPermissions; -import org.sonar.core.resource.ResourceDao; -import org.sonar.core.resource.ResourceDto; -import org.sonar.core.user.AuthorizationDao; -import org.sonar.server.exceptions.ForbiddenException; -import org.sonar.server.exceptions.UnauthorizedException; -import org.sonar.server.platform.Platform; - -import javax.annotation.CheckForNull; -import javax.annotation.Nullable; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.Set; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; -import static com.google.common.collect.Lists.newArrayList; -import static com.google.common.collect.Maps.newHashMap; -import static com.google.common.collect.Sets.newHashSet; - -/** - * Part of the current HTTP session - */ -public class UserSession { - - public static final UserSession ANONYMOUS = new UserSession(); - - private static final ThreadLocal THREAD_LOCAL = new ThreadLocal(); - private static final Logger LOG = Loggers.get(UserSession.class); - private static final String INSUFFICIENT_PRIVILEGES_MESSAGE = "Insufficient privileges"; - - private Integer userId; - private String login; - private String name; - private Set userGroups; - private Locale locale = Locale.ENGLISH; - List globalPermissions = null; - - HashMultimap projectKeyByPermission = HashMultimap.create(); - HashMultimap projectUuidByPermission = HashMultimap.create(); - Map projectKeyByComponentKey = newHashMap(); - Map projectUuidByComponentUuid = newHashMap(); - List projectPermissions = newArrayList(); - - UserSession() { - // Do not forget that when forceAuthentication is set to true, the Anyone group should not be set (but this will be check when - // authentication will be done in Java) - userGroups = newHashSet(DefaultGroups.ANYONE); - } - +public interface UserSession { @CheckForNull - public String login() { - return login; - } - - UserSession setLogin(@Nullable String s) { - this.login = Strings.emptyToNull(s); - return this; - } + String login(); @CheckForNull - public String name() { - return name; - } - - UserSession setName(@Nullable String s) { - this.name = Strings.emptyToNull(s); - return this; - } + String name(); @CheckForNull - public Integer userId() { - return userId; - } - - UserSession setUserId(@Nullable Integer userId) { - this.userId = userId; - return this; - } - - public Set userGroups() { - return userGroups; - } - - UserSession setUserGroups(@Nullable String... userGroups) { - if (userGroups != null) { - this.userGroups.addAll(Arrays.asList(userGroups)); - } - return this; - } + Integer userId(); - public boolean isLoggedIn() { - return login != null; - } + Set userGroups(); - public Locale locale() { - return locale; - } + boolean isLoggedIn(); - UserSession setLocale(@Nullable Locale l) { - this.locale = Objects.firstNonNull(l, Locale.ENGLISH); - return this; - } + Locale locale(); - public UserSession checkLoggedIn() { - if (login == null) { - throw new UnauthorizedException("Authentication is required"); - } - return this; - } + /** + * Ensures that user is logged in otherwise throws {@link org.sonar.server.exceptions.UnauthorizedException}. + */ + UserSession checkLoggedIn(); /** - * Ensures that user implies the specified global permission. If not a {@link org.sonar.server.exceptions.ForbiddenException} is thrown. + * Ensures that user implies the specified global permission, otherwise throws a {@link org.sonar.server.exceptions.ForbiddenException}. */ - public UserSession checkGlobalPermission(String globalPermission) { - return checkGlobalPermission(globalPermission, null); - } + UserSession checkGlobalPermission(String globalPermission); - public UserSession checkGlobalPermission(String globalPermission, @Nullable String errorMessage) { - if (!hasGlobalPermission(globalPermission)) { - throw new ForbiddenException(errorMessage != null ? errorMessage : INSUFFICIENT_PRIVILEGES_MESSAGE); - } - return this; - } + /** + * Ensures that user implies the specified global permission, otherwise throws a {@link org.sonar.server.exceptions.ForbiddenException} with + * the specified error message. + */ + UserSession checkGlobalPermission(String globalPermission, @Nullable String errorMessage); /** * Does the user have the given permission ? */ - public boolean hasGlobalPermission(String globalPermission) { - return globalPermissions().contains(globalPermission); - } + boolean hasGlobalPermission(String globalPermission); - public List globalPermissions() { - if (globalPermissions == null) { - List permissionKeys = authorizationDao().selectGlobalPermissions(login); - globalPermissions = new ArrayList(); - for (String permissionKey : permissionKeys) { - if (!GlobalPermissions.ALL.contains(permissionKey)) { - LOG.warn("Ignoring unknown permission {} for user {}", permissionKey, login); - } else { - globalPermissions.add(permissionKey); - } - } - } - return globalPermissions; - } + List globalPermissions(); /** - * Ensures that user implies the specified project permission. If not a {@link org.sonar.server.exceptions.ForbiddenException} is thrown. + * Ensures that user implies the specified project permission, otherwise throws a {@link org.sonar.server.exceptions.ForbiddenException}. */ - public UserSession checkProjectPermission(String projectPermission, String projectKey) { - if (!hasProjectPermission(projectPermission, projectKey)) { - throw new ForbiddenException(INSUFFICIENT_PRIVILEGES_MESSAGE); - } - return this; - } + UserSession checkProjectPermission(String projectPermission, String projectKey); /** - * Ensures that user implies the specified project permission. If not a {@link org.sonar.server.exceptions.ForbiddenException} is thrown. + * Ensures that user implies the specified project permission, otherwise throws a {@link org.sonar.server.exceptions.ForbiddenException}. */ - public UserSession checkProjectUuidPermission(String projectPermission, String projectUuid) { - if (!hasProjectPermissionByUuid(projectPermission, projectUuid)) { - throw new ForbiddenException(INSUFFICIENT_PRIVILEGES_MESSAGE); - } - return this; - } + UserSession checkProjectUuidPermission(String projectPermission, String projectUuid); /** * Does the user have the given project permission ? */ - public boolean hasProjectPermission(String permission, String projectKey) { - if (!projectPermissions.contains(permission)) { - Collection projectKeys = authorizationDao().selectAuthorizedRootProjectsKeys(userId, permission); - for (String key : projectKeys) { - projectKeyByPermission.put(permission, key); - } - projectPermissions.add(permission); - } - return projectKeyByPermission.get(permission).contains(projectKey); - } + boolean hasProjectPermission(String permission, String projectKey); /** * Does the user have the given project permission ? */ - public boolean hasProjectPermissionByUuid(String permission, String projectUuid) { - if (!projectPermissions.contains(permission)) { - Collection projectUuids = authorizationDao().selectAuthorizedRootProjectsUuids(userId, permission); - for (String key : projectUuids) { - projectUuidByPermission.put(permission, key); - } - projectPermissions.add(permission); - } - return projectUuidByPermission.get(permission).contains(projectUuid); - } + boolean hasProjectPermissionByUuid(String permission, String projectUuid); /** - * Ensures that user implies the specified project permission on a component. If not a {@link org.sonar.server.exceptions.ForbiddenException} is thrown. + * Ensures that user implies the specified project permission on a component, otherwise throws a {@link org.sonar.server.exceptions.ForbiddenException}. */ - public UserSession checkComponentPermission(String projectPermission, String componentKey) { - if (!hasComponentPermission(projectPermission, componentKey)) { - throw new ForbiddenException(INSUFFICIENT_PRIVILEGES_MESSAGE); - } - return this; - } + UserSession checkComponentPermission(String projectPermission, String componentKey); /** - * Ensures that user implies the specified component permission on a component. If not a {@link org.sonar.server.exceptions.ForbiddenException} is thrown. + * Ensures that user implies the specified component permission on a component, otherwise throws a {@link org.sonar.server.exceptions.ForbiddenException}. */ - public UserSession checkComponentUuidPermission(String permission, String componentUuid) { - if (!hasComponentUuidPermission(permission, componentUuid)) { - throw new ForbiddenException(INSUFFICIENT_PRIVILEGES_MESSAGE); - } - return this; - } + UserSession checkComponentUuidPermission(String permission, String componentUuid); /** * Does the user have the given project permission for a component key ? */ - public boolean hasComponentPermission(String permission, String componentKey) { - String projectKey = projectKeyByComponentKey.get(componentKey); - if (projectKey == null) { - ResourceDto project = resourceDao().getRootProjectByComponentKey(componentKey); - if (project == null) { - return false; - } - projectKey = project.getKey(); - } - boolean hasComponentPermission = hasProjectPermission(permission, projectKey); - if (hasComponentPermission) { - projectKeyByComponentKey.put(componentKey, projectKey); - return true; - } - return false; - } + boolean hasComponentPermission(String permission, String componentKey); /** * Does the user have the given project permission for a component uuid ? */ - public boolean hasComponentUuidPermission(String permission, String componentUuid) { - String projectUuid = projectUuidByComponentUuid.get(componentUuid); - if (projectUuid == null) { - ResourceDto project = resourceDao().getResource(componentUuid); - if (project == null) { - return false; - } - projectUuid = project.getProjectUuid(); - } - boolean hasComponentPermission = hasProjectPermissionByUuid(permission, projectUuid); - if (hasComponentPermission) { - projectUuidByComponentUuid.put(componentUuid, projectUuid); - return true; - } - return false; - } - - AuthorizationDao authorizationDao() { - return Platform.component(AuthorizationDao.class); - } - - ResourceDao resourceDao() { - return Platform.component(ResourceDao.class); - } - - public static UserSession get() { - return Objects.firstNonNull(THREAD_LOCAL.get(), ANONYMOUS); - } - - static void set(UserSession session) { - THREAD_LOCAL.set(session); - } - - static void remove() { - THREAD_LOCAL.remove(); - } - - static boolean hasSession() { - return THREAD_LOCAL.get() != null; - } + boolean hasComponentUuidPermission(String permission, String componentUuid); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/UserSessionFilter.java b/server/sonar-server/src/main/java/org/sonar/server/user/UserSessionFilter.java index 22827db8d50..fdd660f0b02 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/UserSessionFilter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/UserSessionFilter.java @@ -21,11 +21,23 @@ package org.sonar.server.user; import javax.servlet.*; import java.io.IOException; +import org.sonar.api.utils.log.Loggers; +import org.sonar.server.platform.Platform; /** * @since 3.6 */ public class UserSessionFilter implements Filter { + private final Platform platform; + + public UserSessionFilter() { + this.platform = Platform.getInstance(); + } + + public UserSessionFilter(Platform platform) { + this.platform = platform; + } + @Override public void init(FilterConfig filterConfig) throws ServletException { // nothing to do @@ -41,7 +53,13 @@ public class UserSessionFilter implements Filter { try { chain.doFilter(servletRequest, servletResponse); } finally { - UserSession.remove(); + ThreadLocalUserSession userSession = platform.getContainer().getComponentByType(ThreadLocalUserSession.class); + if (userSession == null) { + Loggers.get(UserSessionFilter.class).error("Can not retrieve ThreadLocalUserSession from Platform"); + } + else { + userSession.remove(); + } } } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/ChangePasswordAction.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/ChangePasswordAction.java index c813976918a..957a35a3734 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/ChangePasswordAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/ChangePasswordAction.java @@ -34,9 +34,11 @@ public class ChangePasswordAction implements BaseUsersWsAction { private static final String PARAM_PASSWORD = "password"; private final UserUpdater userUpdater; + private final UserSession userSession; - public ChangePasswordAction(UserUpdater userUpdater) { + public ChangePasswordAction(UserUpdater userUpdater, UserSession userSession) { this.userUpdater = userUpdater; + this.userSession = userSession; } @Override @@ -60,7 +62,7 @@ public class ChangePasswordAction implements BaseUsersWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); String login = request.mandatoryParam(PARAM_LOGIN); String password = request.mandatoryParam(PARAM_PASSWORD); diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/CreateAction.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/CreateAction.java index f98d0f20187..47a5e021a35 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/CreateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/CreateAction.java @@ -44,11 +44,13 @@ public class CreateAction implements BaseUsersWsAction { private final UserIndex index; private final UserUpdater userUpdater; private final I18n i18n; + private final UserSession userSession; - public CreateAction(UserIndex index, UserUpdater userUpdater, I18n i18n) { + public CreateAction(UserIndex index, UserUpdater userUpdater, I18n i18n, UserSession userSession) { this.index = index; this.userUpdater = userUpdater; this.i18n = i18n; + this.userSession = userSession; } @Override @@ -90,7 +92,7 @@ public class CreateAction implements BaseUsersWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); String login = request.mandatoryParam(PARAM_LOGIN); NewUser newUser = NewUser.create() @@ -128,7 +130,7 @@ public class CreateAction implements BaseUsersWsAction { private void writeReactivationMessage(JsonWriter json, String login) { json.name("infos").beginArray(); json.beginObject(); - String text = i18n.message(UserSession.get().locale(), "user.reactivated", "user.reactivated", login); + String text = i18n.message(userSession.locale(), "user.reactivated", "user.reactivated", login); json.prop("msg", text); json.endObject(); json.endArray(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/CurrentUserAction.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/CurrentUserAction.java index f17dbf099c6..0b28b42bb75 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/CurrentUserAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/CurrentUserAction.java @@ -26,6 +26,12 @@ import org.sonar.api.utils.text.JsonWriter; import org.sonar.server.user.UserSession; public class CurrentUserAction implements BaseUsersWsAction { + private final UserSession userSession; + + public CurrentUserAction(UserSession userSession) { + this.userSession = userSession; + } + @Override public void define(NewController context) { @@ -39,10 +45,9 @@ public class CurrentUserAction implements BaseUsersWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession session = UserSession.get(); JsonWriter json = response.newJsonWriter().beginObject(); - writeUserDetails(json, session); + writeUserDetails(json, userSession); json.endObject().close(); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/DeactivateAction.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/DeactivateAction.java index fc53f38bf3a..5af978d96bc 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/DeactivateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/DeactivateAction.java @@ -37,10 +37,12 @@ public class DeactivateAction implements BaseUsersWsAction { private final UserIndex index; private final UserUpdater userUpdater; + private final UserSession userSession; - public DeactivateAction(UserIndex index, UserUpdater userUpdater) { + public DeactivateAction(UserIndex index, UserUpdater userUpdater, UserSession userSession) { this.index = index; this.userUpdater = userUpdater; + this.userSession = userSession; } @Override @@ -59,7 +61,7 @@ public class DeactivateAction implements BaseUsersWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); String login = request.mandatoryParam(PARAM_LOGIN); userUpdater.deactivateUserByLogin(login); diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java b/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java index 1ab8413d536..8b1adda213d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/user/ws/UpdateAction.java @@ -40,10 +40,12 @@ public class UpdateAction implements BaseUsersWsAction { private final UserIndex index; private final UserUpdater userUpdater; + private final UserSession userSession; - public UpdateAction(UserIndex index, UserUpdater userUpdater) { + public UpdateAction(UserIndex index, UserUpdater userUpdater, UserSession userSession) { this.index = index; this.userUpdater = userUpdater; + this.userSession = userSession; } @Override @@ -75,7 +77,7 @@ public class UpdateAction implements BaseUsersWsAction { @Override public void handle(Request request, Response response) throws Exception { - UserSession.get().checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); + userSession.checkLoggedIn().checkGlobalPermission(GlobalPermissions.SYSTEM_ADMIN); String login = request.mandatoryParam(PARAM_LOGIN); UpdateUser updateUser = UpdateUser.create(login); diff --git a/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java b/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java index 3f23aad0dbc..6df77bae14d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ws/WebServiceEngine.java @@ -20,6 +20,9 @@ package org.sonar.server.ws; import com.google.common.base.Charsets; +import java.io.OutputStreamWriter; +import java.util.List; +import javax.servlet.http.HttpServletResponse; import org.picocontainer.Startable; import org.sonar.api.ServerSide; import org.sonar.api.i18n.I18n; @@ -35,11 +38,6 @@ import org.sonar.server.exceptions.ServerException; import org.sonar.server.plugins.MimeTypes; import org.sonar.server.user.UserSession; -import javax.servlet.http.HttpServletResponse; - -import java.io.OutputStreamWriter; -import java.util.List; - /** * @since 4.2 */ @@ -47,10 +45,11 @@ import java.util.List; public class WebServiceEngine implements Startable { private final WebService.Context context; - private final I18n i18n; + private final UserSession userSession; - public WebServiceEngine(WebService[] webServices, I18n i18n) { + public WebServiceEngine(WebService[] webServices, I18n i18n, UserSession userSession) { + this.userSession = userSession; context = new WebService.Context(); for (WebService webService : webServices) { webService.define(context); @@ -125,7 +124,7 @@ public class WebServiceEngine implements Startable { try { json.beginObject(); - errors.writeJson(json, i18n, UserSession.get().locale()); + errors.writeJson(json, i18n, userSession.locale()); json.endObject(); } finally { // TODO if close() fails, the runtime exception should not hide the diff --git a/server/sonar-server/src/test/java/org/sonar/server/activity/ActivityServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/activity/ActivityServiceTest.java index 21a53442e81..b4de673212e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/activity/ActivityServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/activity/ActivityServiceTest.java @@ -19,9 +19,12 @@ */ package org.sonar.server.activity; +import java.util.List; +import java.util.Map; import org.assertj.core.data.MapEntry; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.api.utils.System2; @@ -33,9 +36,7 @@ import org.sonar.server.activity.index.ActivityIndexer; import org.sonar.server.db.DbClient; import org.sonar.server.es.EsTester; import org.sonar.server.issue.db.IssueDao; - -import java.util.List; -import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -45,9 +46,10 @@ public class ActivityServiceTest { @ClassRule public static DbTester db = new DbTester(); - @ClassRule public static EsTester es = new EsTester().addDefinitions(new ActivityIndexDefinition(new Settings())); + @Rule + public UserSessionRule userSession = UserSessionRule.standalone().logon(); System2 system = mock(System2.class); ActivityService service; @@ -60,7 +62,7 @@ public class ActivityServiceTest { ActivityIndexer indexer = new ActivityIndexer(dbClient, es.client()); // indexers are disabled by default indexer.setEnabled(true); - service = new ActivityService(dbClient, indexer); + service = new ActivityService(dbClient, indexer, userSession); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/activity/ws/ActivitiesWebServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/activity/ws/ActivitiesWebServiceMediumTest.java index 2bf1bb92b00..0ddc742eca4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/activity/ws/ActivitiesWebServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/activity/ws/ActivitiesWebServiceMediumTest.java @@ -21,12 +21,13 @@ package org.sonar.server.activity.ws; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.ws.WebService; import org.sonar.server.activity.Activity; import org.sonar.server.activity.ActivityService; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -35,6 +36,8 @@ public class ActivitiesWebServiceMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); ActivitiesWebService ws; ActivityService service; @@ -67,8 +70,6 @@ public class ActivitiesWebServiceMediumTest { activity.setData("foo", "bar"); service.save(activity); - MockUserSession.set(); - WsTester.TestRequest request = tester.wsTester().newGetRequest("api/activities", "search"); WsTester.Result result = request.execute(); assertThat(result.outputAsString()).contains("\"total\":1"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java index da282ad3be1..3dee07e1a02 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/BatchWsTest.java @@ -19,6 +19,7 @@ */ package org.sonar.server.batch; +import java.io.File; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Rule; @@ -31,16 +32,17 @@ import org.mockito.runners.MockitoJUnitRunner; import org.sonar.core.properties.PropertiesDao; import org.sonar.server.db.DbClient; import org.sonar.server.issue.index.IssueIndex; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.io.File; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class BatchWsTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Rule public TemporaryFolder temp = new TemporaryFolder(); @@ -56,9 +58,9 @@ public class BatchWsTest { @Before public void before() { tester = new WsTester(new BatchWs(batchIndex, - new GlobalRepositoryAction(mock(DbClient.class), mock(PropertiesDao.class)), + new GlobalRepositoryAction(mock(DbClient.class), mock(PropertiesDao.class), userSessionRule), new ProjectRepositoryAction(mock(ProjectRepositoryLoader.class)), - new IssuesAction(mock(DbClient.class), mock(IssueIndex.class)))); + new IssuesAction(mock(DbClient.class), mock(IssueIndex.class), userSessionRule))); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/GlobalRepositoryActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/GlobalRepositoryActionTest.java index 9d5ec7d2841..b6944c77738 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/GlobalRepositoryActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/GlobalRepositoryActionTest.java @@ -35,7 +35,7 @@ import org.sonar.core.properties.PropertyDto; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.measure.persistence.MetricDao; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static com.google.common.collect.Lists.newArrayList; @@ -44,7 +44,8 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class GlobalRepositoryActionTest { - + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Rule public ExpectedException thrown = ExpectedException.none(); @@ -65,11 +66,13 @@ public class GlobalRepositoryActionTest { when(dbClient.openSession(false)).thenReturn(session); when(dbClient.metricDao()).thenReturn(metricDao); - tester = new WsTester(new BatchWs(mock(BatchIndex.class), new GlobalRepositoryAction(dbClient, propertiesDao))); + tester = new WsTester(new BatchWs(mock(BatchIndex.class), new GlobalRepositoryAction(dbClient, propertiesDao, userSessionRule))); } @Test public void return_metrics() throws Exception { + userSessionRule.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION, GlobalPermissions.PREVIEW_EXECUTION); + when(metricDao.selectEnabled(session)).thenReturn(newArrayList( new MetricDto().setId(1).setKey("coverage").setDescription("Coverage by unit tests").setValueType("PERCENT").setQualitative(true) .setWorstValue(0d).setBestValue(100d).setOptimizedBestValue(false).setDirection(1).setEnabled(true) @@ -81,7 +84,7 @@ public class GlobalRepositoryActionTest { @Test public void return_global_settings() throws Exception { - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION, GlobalPermissions.PREVIEW_EXECUTION); + userSessionRule.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION, GlobalPermissions.PREVIEW_EXECUTION); when(propertiesDao.selectGlobalProperties(session)).thenReturn(newArrayList( new PropertyDto().setKey("foo").setValue("bar"), @@ -95,7 +98,7 @@ public class GlobalRepositoryActionTest { @Test public void return_only_license_settings_without_scan_but_with_preview_permission() throws Exception { - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); + userSessionRule.setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); when(propertiesDao.selectGlobalProperties(session)).thenReturn(newArrayList( new PropertyDto().setKey("foo").setValue("bar"), @@ -109,7 +112,7 @@ public class GlobalRepositoryActionTest { @Test public void access_forbidden_without_scan_and_preview_permission() throws Exception { - MockUserSession.set().setLogin("john").setGlobalPermissions(); + userSessionRule.setGlobalPermissions(); when(propertiesDao.selectGlobalProperties(session)).thenReturn(newArrayList( new PropertyDto().setKey("foo").setValue("bar"), diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/IssuesActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/IssuesActionTest.java index 740b2f2c661..691cd7802f1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/IssuesActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/IssuesActionTest.java @@ -20,9 +20,13 @@ package org.sonar.server.batch; +import java.io.ByteArrayInputStream; +import java.util.Arrays; +import javax.annotation.Nullable; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.sonar.api.config.Settings; @@ -48,15 +52,10 @@ import org.sonar.server.issue.index.IssueDoc; import org.sonar.server.issue.index.IssueIndex; import org.sonar.server.issue.index.IssueIndexDefinition; import org.sonar.server.issue.index.IssueIndexer; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import org.sonar.test.DbTests; -import javax.annotation.Nullable; - -import java.io.ByteArrayInputStream; -import java.util.Arrays; - import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -70,9 +69,10 @@ public class IssuesActionTest { @ClassRule public static DbTester db = new DbTester(); - @ClassRule public static EsTester es = new EsTester().addDefinitions(new IssueIndexDefinition(new Settings())); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); IssueIndex issueIndex; IssueIndexer issueIndexer; @@ -92,10 +92,10 @@ public class IssuesActionTest { this.session = db.myBatis().openSession(false); DbClient dbClient = new DbClient(db.database(), db.myBatis(), new IssueDao(db.myBatis()), new ComponentDao()); - issueIndex = new IssueIndex(es.client(), System2.INSTANCE); + issueIndex = new IssueIndex(es.client(), System2.INSTANCE, userSessionRule); issueIndexer = new IssueIndexer(null, es.client()); issueAuthorizationIndexer = new IssueAuthorizationIndexer(null, es.client()); - issuesAction = new IssuesAction(dbClient, issueIndex); + issuesAction = new IssuesAction(dbClient, issueIndex, userSessionRule); componentDao = new ComponentDao(); tester = new WsTester(new BatchWs(new BatchIndex(mock(Server.class)), issuesAction)); @@ -125,7 +125,7 @@ public class IssuesActionTest { .setChecksum(null) .setAssignee(null)); - MockUserSession.set().setLogin("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); + userSessionRule.logon("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); WsTester.TestRequest request = tester.newGetRequest("batch", "issues").setParam("key", PROJECT_KEY); @@ -164,7 +164,7 @@ public class IssuesActionTest { .setChecksum("123456") .setAssignee("john")); - MockUserSession.set().setLogin("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); + userSessionRule.logon("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); WsTester.TestRequest request = tester.newGetRequest("batch", "issues").setParam("key", PROJECT_KEY); @@ -203,7 +203,7 @@ public class IssuesActionTest { .setChecksum("123456") .setAssignee("john")); - MockUserSession.set().setLogin("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); + userSessionRule.logon("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); WsTester.TestRequest request = tester.newGetRequest("batch", "issues").setParam("key", MODULE_KEY); ServerIssue serverIssue = ServerIssue.parseDelimitedFrom(new ByteArrayInputStream(request.execute().output())); @@ -241,7 +241,7 @@ public class IssuesActionTest { .setChecksum("123456") .setAssignee("john")); - MockUserSession.set().setLogin("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); + userSessionRule.logon("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); WsTester.TestRequest request = tester.newGetRequest("batch", "issues").setParam("key", FILE_KEY); ServerIssue serverIssue = ServerIssue.parseDelimitedFrom(new ByteArrayInputStream(request.execute().output())); @@ -278,7 +278,7 @@ public class IssuesActionTest { .setChecksum("123456") .setAssignee("john")); - MockUserSession.set().setLogin("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); + userSessionRule.logon("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); WsTester.TestRequest request = tester.newGetRequest("batch", "issues").setParam("key", MODULE_KEY); ServerIssue previousIssue = ServerIssue.parseDelimitedFrom(new ByteArrayInputStream(request.execute().output())); @@ -317,7 +317,7 @@ public class IssuesActionTest { .setChecksum("123456") .setAssignee("john")); - MockUserSession.set().setLogin("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); + userSessionRule.logon("henry").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); WsTester.TestRequest request = tester.newGetRequest("batch", "issues").setParam("key", PROJECT_KEY); ServerIssue serverIssue = ServerIssue.parseDelimitedFrom(new ByteArrayInputStream(request.execute().output())); @@ -328,7 +328,7 @@ public class IssuesActionTest { @Test(expected = ForbiddenException.class) public void fail_without_preview_permission() throws Exception { - MockUserSession.set().setLogin("henry").setGlobalPermissions(GlobalPermissions.PROVISIONING); + userSessionRule.logon("henry").setGlobalPermissions(GlobalPermissions.PROVISIONING); WsTester.TestRequest request = tester.newGetRequest("batch", "issues").setParam("key", PROJECT_KEY); request.execute(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/ProjectRepositoryLoaderMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/ProjectRepositoryLoaderMediumTest.java index c4074ef4536..d3901cf98fd 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/ProjectRepositoryLoaderMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/ProjectRepositoryLoaderMediumTest.java @@ -20,13 +20,14 @@ package org.sonar.server.batch; -import org.sonar.core.source.db.FileSourceDto.Type; -import org.sonar.server.source.db.FileSourceDao; - import com.google.common.collect.ImmutableMap; +import java.util.Date; +import java.util.List; +import java.util.Map; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.Severity; @@ -45,6 +46,7 @@ import org.sonar.core.qualityprofile.db.QualityProfileDto; import org.sonar.core.rule.RuleDto; import org.sonar.core.rule.RuleParamDto; import org.sonar.core.source.db.FileSourceDto; +import org.sonar.core.source.db.FileSourceDto.Type; import org.sonar.server.component.ComponentTesting; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; @@ -53,12 +55,9 @@ import org.sonar.server.qualityprofile.QProfileTesting; import org.sonar.server.qualityprofile.RuleActivation; import org.sonar.server.qualityprofile.RuleActivator; import org.sonar.server.rule.RuleTesting; +import org.sonar.server.source.db.FileSourceDao; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; - -import java.util.Date; -import java.util.List; -import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; @@ -68,6 +67,8 @@ public class ProjectRepositoryLoaderMediumTest { @ClassRule public static ServerTester tester = new ServerTester().addXoo(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbSession dbSession; @@ -88,7 +89,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_project_settings() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); addDefaultProfile(); @@ -112,7 +113,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void not_returned_secured_settings_with_only_preview_permission() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION).addProjectUuidPermissions(UserRole.USER, project.uuid()); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION).addProjectUuidPermissions(UserRole.USER, project.uuid()); tester.get(DbClient.class).componentDao().insert(dbSession, project); addDefaultProfile(); @@ -135,7 +136,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_project_with_module_settings() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); addDefaultProfile(); @@ -171,7 +172,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_project_with_module_settings_inherited_from_project() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); addDefaultProfile(); @@ -202,7 +203,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_project_with_module_with_sub_module() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); addDefaultProfile(); @@ -250,7 +251,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_project_with_two_modules() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); addDefaultProfile(); @@ -295,7 +296,7 @@ public class ProjectRepositoryLoaderMediumTest { public void return_provisioned_project_settings() { // No snapshot attached on the project -> provisioned project ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); addDefaultProfile(); @@ -325,7 +326,7 @@ public class ProjectRepositoryLoaderMediumTest { // No module properties ComponentDto subModule = ComponentTesting.newModuleDto(module); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, subModule); // Sub module properties @@ -361,7 +362,7 @@ public class ProjectRepositoryLoaderMediumTest { tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.jira.login.secured").setValue("john").setResourceId(module.getId()), dbSession); ComponentDto subModule = ComponentTesting.newModuleDto(module); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, subModule); // Sub module properties @@ -395,7 +396,7 @@ public class ProjectRepositoryLoaderMediumTest { // No module property ComponentDto subModule = ComponentTesting.newModuleDto(module); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, subModule); // No sub module property @@ -428,7 +429,7 @@ public class ProjectRepositoryLoaderMediumTest { tester.get(DbClient.class).propertiesDao().setProperty(new PropertyDto().setKey("sonar.jira.project.key").setValue("SONAR-SERVER").setResourceId(module.getId()), dbSession); ComponentDto subModule = ComponentTesting.newModuleDto(module); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, subModule); // No sub module property @@ -449,7 +450,7 @@ public class ProjectRepositoryLoaderMediumTest { Date ruleUpdatedAt = DateUtils.parseDateTime("2014-01-14T13:00:00+0100"); ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); QualityProfileDto profileDto = QProfileTesting.newDto(QProfileName.createFor(ServerTester.Xoo.KEY, "SonarQube way"), "abcd").setRulesUpdatedAt( @@ -473,7 +474,7 @@ public class ProjectRepositoryLoaderMediumTest { Date ruleUpdatedAt = DateUtils.parseDateTime("2014-01-14T13:00:00+0100"); ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); QualityProfileDto profileDto = QProfileTesting.newDto(QProfileName.createFor(ServerTester.Xoo.KEY, "SonarQube way"), "abcd").setRulesUpdatedAt( @@ -496,7 +497,7 @@ public class ProjectRepositoryLoaderMediumTest { Date ruleUpdatedAt = DateUtils.parseDateTime("2014-01-14T13:00:00+0100"); ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); QualityProfileDto profileDto = QProfileTesting.newDto(QProfileName.createFor(ServerTester.Xoo.KEY, "SonarQube way"), "abcd").setRulesUpdatedAt( @@ -516,7 +517,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_quality_profiles_even_when_project_does_not_exists() { - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); Date ruleUpdatedAt = DateUtils.parseDateTime("2014-01-14T13:00:00+0100"); QualityProfileDto profileDto = QProfileTesting.newDto(QProfileName.createFor(ServerTester.Xoo.KEY, "SonarQube way"), "abcd").setRulesUpdatedAt( @@ -540,7 +541,7 @@ public class ProjectRepositoryLoaderMediumTest { // No snapshot attached on the project -> provisioned project ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); QualityProfileDto profileDto = QProfileTesting.newDto(QProfileName.createFor(ServerTester.Xoo.KEY, "SonarQube way"), "abcd").setRulesUpdatedAt( @@ -562,7 +563,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void fail_when_no_quality_profile_for_a_language() { ComponentDto project = ComponentTesting.newProjectDto().setKey("org.codehaus.sonar:sonar"); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); dbSession.commit(); @@ -577,7 +578,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_active_rules() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); QualityProfileDto profileDto = QProfileTesting.newDto(QProfileName.createFor(ServerTester.Xoo.KEY, "SonarQube way"), "abcd").setRulesUpdatedAt( @@ -612,7 +613,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_only_active_rules_from_project_profile() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); RuleKey ruleKey1 = RuleKey.of("squid", "AvoidCycle"); @@ -650,7 +651,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_more_than_10_active_rules() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); QualityProfileDto profileDto = QProfileTesting.newDto(QProfileName.createFor(ServerTester.Xoo.KEY, "SonarQube way"), "abcd") @@ -674,7 +675,7 @@ public class ProjectRepositoryLoaderMediumTest { Date ruleUpdatedAt = DateUtils.parseDateTime("2014-01-14T13:00:00+0100"); ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); QualityProfileDto profileDto = QProfileTesting.newDto(QProfileName.createFor(ServerTester.Xoo.KEY, "SonarQube way"), "abcd").setRulesUpdatedAt( @@ -704,7 +705,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_manual_rules() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); addDefaultProfile(); @@ -724,7 +725,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void fail_if_no_permission() { - MockUserSession.set().setLogin("john").setGlobalPermissions(); + userSessionRule.logon("john").setGlobalPermissions(); ComponentDto project = ComponentTesting.newProjectDto(); tester.get(DbClient.class).componentDao().insert(dbSession, project); @@ -740,7 +741,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void fail_when_not_preview_and_only_dry_run_permission() { - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); ComponentDto project = ComponentTesting.newProjectDto(); tester.get(DbClient.class).componentDao().insert(dbSession, project); @@ -759,7 +760,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_file_data_from_single_project() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); addDefaultProfile(); @@ -778,7 +779,7 @@ public class ProjectRepositoryLoaderMediumTest { @Test public void return_file_data_from_multi_modules() { ComponentDto project = ComponentTesting.newProjectDto(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, project); addDefaultProfile(); @@ -814,7 +815,7 @@ public class ProjectRepositoryLoaderMediumTest { tester.get(FileSourceDao.class).insert(newFileSourceDto(projectFile).setSrcHash("123456")); ComponentDto module = ComponentTesting.newModuleDto(project); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); tester.get(DbClient.class).componentDao().insert(dbSession, module); // File on module diff --git a/server/sonar-server/src/test/java/org/sonar/server/batch/UsersActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/batch/UsersActionTest.java index c2258e44af0..b7ef762d0fb 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/batch/UsersActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/batch/UsersActionTest.java @@ -22,13 +22,14 @@ package org.sonar.server.batch; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.api.platform.Server; import org.sonar.batch.protocol.input.BatchInput.User; import org.sonar.core.permission.GlobalPermissions; import org.sonar.server.es.EsTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.index.UserDoc; import org.sonar.server.user.index.UserIndex; import org.sonar.server.user.index.UserIndexDefinition; @@ -43,6 +44,8 @@ public class UsersActionTest { @ClassRule public static EsTester es = new EsTester().addDefinitions(new UserIndexDefinition(new Settings())); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); UserIndex userIndex; @@ -55,7 +58,7 @@ public class UsersActionTest { es.truncateIndices(); userIndex = new UserIndex(es.client()); - usersAction = new UsersAction(userIndex); + usersAction = new UsersAction(userIndex, userSessionRule); tester = new WsTester(new BatchWs(new BatchIndex(mock(Server.class)), usersAction)); } @@ -66,7 +69,7 @@ public class UsersActionTest { new UserDoc().setLogin("ada.lovelace").setName("Ada Lovelace").setActive(false), new UserDoc().setLogin("grace.hopper").setName("Grace Hopper").setActive(true)); - MockUserSession.set().setLogin("sonarqtech").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); + userSessionRule.logon("sonarqtech").setGlobalPermissions(GlobalPermissions.PREVIEW_EXECUTION); WsTester.TestRequest request = tester.newGetRequest("batch", "users").setParam("logins", "ada.lovelace,grace.hopper"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ComponentCleanerServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ComponentCleanerServiceMediumTest.java index 9b434ba91d1..4ef69979085 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ComponentCleanerServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ComponentCleanerServiceMediumTest.java @@ -23,6 +23,7 @@ package org.sonar.server.component; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.security.DefaultGroups; import org.sonar.api.web.UserRole; @@ -33,10 +34,10 @@ import org.sonar.core.rule.RuleDto; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.es.EsClient; -import org.sonar.server.issue.index.IssueIndexDefinition; import org.sonar.server.issue.IssueTesting; import org.sonar.server.issue.db.IssueDao; import org.sonar.server.issue.index.IssueIndex; +import org.sonar.server.issue.index.IssueIndexDefinition; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.permission.InternalPermissionService; import org.sonar.server.permission.PermissionChange; @@ -44,7 +45,7 @@ import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.search.IndexClient; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; @@ -52,6 +53,8 @@ public class ComponentCleanerServiceMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; IndexClient index; @@ -92,7 +95,7 @@ public class ComponentCleanerServiceMediumTest { // project can be seen by anyone session.commit(); - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); tester.get(InternalPermissionService.class).addPermission(new PermissionChange().setComponentKey(project.getKey()).setGroup(DefaultGroups.ANYONE).setPermission(UserRole.USER)); assertThat(countIssueAuthorizationDocs()).isEqualTo(1); diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ComponentServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ComponentServiceMediumTest.java index 2f3d3ecc786..e3176625da2 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ComponentServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ComponentServiceMediumTest.java @@ -20,10 +20,13 @@ package org.sonar.server.component; +import java.util.Arrays; +import java.util.Map; import org.assertj.core.api.Fail; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.resources.Qualifiers; import org.sonar.api.security.DefaultGroups; @@ -40,10 +43,7 @@ import org.sonar.server.permission.InternalPermissionService; import org.sonar.server.permission.PermissionChange; import org.sonar.server.platform.Platform; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; - -import java.util.Arrays; -import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -56,6 +56,8 @@ public class ComponentServiceMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession session; @@ -108,7 +110,7 @@ public class ComponentServiceMediumTest { session.commit(); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.ADMIN, project.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.ADMIN, project.uuid()); service.updateKey(project.key(), "sample2:root"); session.commit(); @@ -132,7 +134,7 @@ public class ComponentServiceMediumTest { session.commit(); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.ADMIN, project.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.ADMIN, project.uuid()); service.updateKey(module.key(), "sample:root2:module"); session.commit(); @@ -155,7 +157,7 @@ public class ComponentServiceMediumTest { session.commit(); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.ADMIN, provisionedProject.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.ADMIN, provisionedProject.uuid()); service.updateKey(provisionedProject.key(), "provisionedProject2"); session.commit(); @@ -167,7 +169,7 @@ public class ComponentServiceMediumTest { @Test(expected = ForbiddenException.class) public void fail_to_update_project_key_without_admin_permission() { ComponentDto project = createProject("sample:root"); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.USER, project.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.USER, project.uuid()); service.updateKey(project.key(), "sample2:root"); } @@ -182,7 +184,7 @@ public class ComponentServiceMediumTest { session.commit(); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.ADMIN, project.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.ADMIN, project.uuid()); Map result = service.checkModuleKeysBeforeRenaming(project.key(), "sample", "sample2"); assertThat(result).hasSize(2); @@ -201,7 +203,7 @@ public class ComponentServiceMediumTest { session.commit(); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.ADMIN, project.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.ADMIN, project.uuid()); Map result = service.checkModuleKeysBeforeRenaming(project.key(), "sample:root", "foo"); assertThat(result).hasSize(2); @@ -212,7 +214,7 @@ public class ComponentServiceMediumTest { @Test(expected = ForbiddenException.class) public void fail_to_check_module_keys_before_renaming_without_admin_permission() { ComponentDto project = createProject("sample:root"); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.USER, project.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.USER, project.uuid()); service.checkModuleKeysBeforeRenaming(project.key(), "sample", "sample2"); } @@ -227,7 +229,7 @@ public class ComponentServiceMediumTest { session.commit(); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.ADMIN, project.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.ADMIN, project.uuid()); service.bulkUpdateKey(project.key(), "sample", "sample2"); session.commit(); @@ -251,7 +253,7 @@ public class ComponentServiceMediumTest { session.commit(); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.ADMIN, provisionedProject.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.ADMIN, provisionedProject.uuid()); service.bulkUpdateKey(provisionedProject.key(), "provisionedProject", "provisionedProject2"); session.commit(); @@ -263,14 +265,14 @@ public class ComponentServiceMediumTest { @Test(expected = ForbiddenException.class) public void fail_to_bulk_update_project_key_without_admin_permission() { ComponentDto project = createProject("sample:root"); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.USER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.USER, project.key()); service.bulkUpdateKey("sample:root", "sample", "sample2"); } @Test public void create_project() { executeStartupTasksToCreateDefaultPermissionTemplate(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); String key = service.create(NewComponent.create("struts", "Struts project")); @@ -291,7 +293,7 @@ public class ComponentServiceMediumTest { @Test public void create_new_project_with_branch() { executeStartupTasksToCreateDefaultPermissionTemplate(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); String key = service.create(NewComponent.create("struts", "Struts project").setBranch("origin/branch")); @@ -303,7 +305,7 @@ public class ComponentServiceMediumTest { @Test public void create_view() { executeStartupTasksToCreateDefaultPermissionTemplate(); - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); String key = service.create(NewComponent.create("all-project", "All Projects").setQualifier(Qualifiers.VIEW)); @@ -323,7 +325,7 @@ public class ComponentServiceMediumTest { @Test public void fail_to_create_new_component_on_invalid_key() { - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); try { service.create(NewComponent.create("struts?parent", "Struts project")); @@ -336,7 +338,7 @@ public class ComponentServiceMediumTest { @Test public void fail_to_create_new_component_on_invalid_branch() { - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); try { service.create(NewComponent.create("struts", "Struts project").setBranch("origin?branch")); @@ -349,7 +351,7 @@ public class ComponentServiceMediumTest { @Test public void fail_to_create_new_component_if_key_already_exists() { - MockUserSession.set().setLogin("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); + userSessionRule.logon("john").setGlobalPermissions(GlobalPermissions.PROVISIONING); ComponentDto project = ComponentTesting.newProjectDto().setKey("struts"); tester.get(ComponentDao.class).insert(session, project); @@ -406,9 +408,8 @@ public class ComponentServiceMediumTest { session.commit(); // project can be seen by anyone - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); tester.get(InternalPermissionService.class).addPermission(new PermissionChange().setComponentKey(project.getKey()).setGroup(DefaultGroups.ANYONE).setPermission(UserRole.USER)); - MockUserSession.set(); return project; } diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java index c33a23f2352..81b374179f5 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentAppActionTest.java @@ -20,7 +20,10 @@ package org.sonar.server.component.ws; +import java.util.List; +import java.util.Locale; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -43,19 +46,24 @@ import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.measure.persistence.MeasureDao; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.List; -import java.util.Locale; - import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyListOf; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class ComponentAppActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); static final String SUB_PROJECT_KEY = "org.codehaus.sonar:sonar-plugin-api"; static final String COMPONENT_KEY = "org.codehaus.sonar:sonar-plugin-api:src/main/java/org/sonar/api/Plugin.java"; @@ -96,12 +104,12 @@ public class ComponentAppActionTest { when(measureDao.findByComponentKeyAndMetricKeys(eq(session), anyString(), anyListOf(String.class))).thenReturn(measures); - tester = new WsTester(new ComponentsWs(new ComponentAppAction(dbClient, durations, i18n), mock(SearchAction.class))); + tester = new WsTester(new ComponentsWs(new ComponentAppAction(dbClient, durations, i18n, userSessionRule), mock(SearchAction.class))); } @Test public void app() throws Exception { - MockUserSession.set().setLogin("john").addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); + userSessionRule.logon("john").addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); ComponentDto project = newProject(); ComponentDto file = ComponentTesting.newFileDto(project) @@ -124,7 +132,7 @@ public class ComponentAppActionTest { @Test public void app_with_measures() throws Exception { - MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); + userSessionRule.addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); ComponentDto project = newProject(); newComponent(project); @@ -147,7 +155,7 @@ public class ComponentAppActionTest { @Test public void app_with_overall_measure() throws Exception { - MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); + userSessionRule.addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); ComponentDto project = newProject(); newComponent(project); @@ -161,7 +169,7 @@ public class ComponentAppActionTest { @Test public void app_with_ut_measure() throws Exception { - MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); + userSessionRule.addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); ComponentDto project = newProject(); newComponent(project); @@ -174,7 +182,7 @@ public class ComponentAppActionTest { @Test public void app_with_it_measure() throws Exception { - MockUserSession.set().addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); + userSessionRule.addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); ComponentDto project = newProject(); newComponent(project); @@ -186,7 +194,7 @@ public class ComponentAppActionTest { @Test public void fail_on_unknown_component() { - MockUserSession.set().setLogin("john").addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); + userSessionRule.logon("john").addComponentPermission(UserRole.USER, SUB_PROJECT_KEY, COMPONENT_KEY); when(componentDao.getNullableByUuid(session, COMPONENT_UUID)).thenReturn(null); try { diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentsWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentsWsTest.java index f169e304c19..486e5b33741 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentsWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/ComponentsWsTest.java @@ -21,24 +21,28 @@ package org.sonar.server.component.ws; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.i18n.I18n; import org.sonar.api.server.ws.RailsHandler; import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.Durations; import org.sonar.server.db.DbClient; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; public class ComponentsWsTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WebService.Controller controller; @Before public void setUp() { - WsTester tester = new WsTester(new ComponentsWs(new ComponentAppAction(mock(DbClient.class), mock(Durations.class), mock(I18n.class)), new SearchAction(mock(DbClient.class)))); + WsTester tester = new WsTester(new ComponentsWs(new ComponentAppAction(mock(DbClient.class), mock(Durations.class), mock(I18n.class), userSessionRule), new SearchAction(mock(DbClient.class), userSessionRule))); controller = tester.controller("api/components"); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/ProvisionedProjectsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/ProvisionedProjectsActionTest.java index 27070552002..9ea902ced16 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/ProvisionedProjectsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/ProvisionedProjectsActionTest.java @@ -25,6 +25,7 @@ import org.apache.commons.lang.StringUtils; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.ws.WebService.Param; import org.sonar.api.utils.DateUtils; @@ -39,7 +40,7 @@ import org.sonar.server.component.SnapshotTesting; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.component.db.SnapshotDao; import org.sonar.server.db.DbClient; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import org.sonar.test.JsonAssert; @@ -49,6 +50,8 @@ public class ProvisionedProjectsActionTest { @ClassRule public static DbTester db = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WsTester ws; DbClient dbClient; @@ -56,22 +59,22 @@ public class ProvisionedProjectsActionTest { ComponentDao componentDao; @After - public void tearDown() throws Exception { + public void tearDown() { dbSession.close(); } @Before - public void setUp() throws Exception { + public void setUp() { dbClient = new DbClient(db.database(), db.myBatis(), new ComponentDao(), new SnapshotDao(System2.INSTANCE)); dbSession = dbClient.openSession(false); componentDao = dbClient.componentDao(); db.truncateTables(); - ws = new WsTester(new ProjectsWs(new ProvisionedProjectsAction(dbClient))); + ws = new WsTester(new ProjectsWs(new ProvisionedProjectsAction(dbClient, userSessionRule))); } @Test public void all_provisioned_projects_without_analyzed_projects() throws Exception { - MockUserSession.set().setGlobalPermissions(UserRole.ADMIN); + userSessionRule.setGlobalPermissions(UserRole.ADMIN); ComponentDto analyzedProject = ComponentTesting.newProjectDto("analyzed-uuid-1"); componentDao.insert(dbSession, newProvisionedProject("1"), newProvisionedProject("2")); analyzedProject = componentDao.insert(dbSession, analyzedProject); @@ -86,7 +89,7 @@ public class ProvisionedProjectsActionTest { @Test public void provisioned_projects_with_correct_paginated() throws Exception { - MockUserSession.set().setGlobalPermissions(UserRole.ADMIN); + userSessionRule.setGlobalPermissions(UserRole.ADMIN); for (int i = 1; i <= 10; i++) { componentDao.insert(dbSession, newProvisionedProject(String.valueOf(i))); } @@ -103,7 +106,7 @@ public class ProvisionedProjectsActionTest { @Test public void provisioned_projects_with_desired_fields() throws Exception { - MockUserSession.set().setGlobalPermissions(UserRole.ADMIN); + userSessionRule.setGlobalPermissions(UserRole.ADMIN); componentDao.insert(dbSession, newProvisionedProject("1")); dbSession.commit(); @@ -118,7 +121,7 @@ public class ProvisionedProjectsActionTest { @Test public void provisioned_projects_with_query() throws Exception { - MockUserSession.set().setGlobalPermissions(UserRole.ADMIN); + userSessionRule.setGlobalPermissions(UserRole.ADMIN); componentDao.insert(dbSession, newProvisionedProject("1"), newProvisionedProject("2")); dbSession.commit(); @@ -143,7 +146,7 @@ public class ProvisionedProjectsActionTest { @Test public void provisioned_projects_as_defined_in_the_example() throws Exception { - MockUserSession.set().setGlobalPermissions(UserRole.ADMIN); + userSessionRule.setGlobalPermissions(UserRole.ADMIN); ComponentDto hBaseProject = ComponentTesting.newProjectDto("ce4c03d6-430f-40a9-b777-ad877c00aa4d") .setKey("org.apache.hbas:hbase") .setName("HBase") diff --git a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchActionTest.java index b3665895986..6a13468a02e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/component/ws/SearchActionTest.java @@ -22,6 +22,7 @@ package org.sonar.server.component.ws; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.sonar.api.web.UserRole; @@ -30,7 +31,7 @@ import org.sonar.core.user.AuthorizationDao; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.component.db.ComponentIndexDao; import org.sonar.server.db.DbClient; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import org.sonar.test.DbTests; @@ -43,6 +44,8 @@ public class SearchActionTest { @ClassRule public static DbTester dbTester = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WsTester tester; @@ -52,13 +55,13 @@ public class SearchActionTest { DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new ComponentDao(), new AuthorizationDao(dbTester.myBatis()), new ComponentIndexDao() ); - tester = new WsTester(new ComponentsWs(mock(ComponentAppAction.class), new SearchAction(dbClient))); + tester = new WsTester(new ComponentsWs(mock(ComponentAppAction.class), new SearchAction(dbClient, userSessionRule))); } @Test public void return_projects_from_view() throws Exception { dbTester.prepareDbUnit(getClass(), "shared.xml"); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.USER, "EFGH"); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.USER, "EFGH"); WsTester.TestRequest request = tester.newGetRequest("api/components", "search").setParam("componentUuid", "EFGH").setParam("q", "st"); request.execute().assertJson(getClass(), "return_projects_from_view.json"); @@ -67,7 +70,7 @@ public class SearchActionTest { @Test public void return_projects_from_subview() throws Exception { dbTester.prepareDbUnit(getClass(), "shared.xml"); - MockUserSession.set().setLogin("john").addComponentUuidPermission(UserRole.USER, "EFGH", "FGHI"); + userSessionRule.logon("john").addComponentUuidPermission(UserRole.USER, "EFGH", "FGHI"); WsTester.TestRequest request = tester.newGetRequest("api/components", "search").setParam("componentUuid", "FGHI").setParam("q", "st"); request.execute().assertJson(getClass(), "return_projects_from_subview.json"); @@ -76,7 +79,7 @@ public class SearchActionTest { @Test public void return_only_authorized_projects_from_view() throws Exception { dbTester.prepareDbUnit(getClass(), "return_only_authorized_projects_from_view.xml"); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.USER, "EFGH"); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.USER, "EFGH"); WsTester.TestRequest request = tester.newGetRequest("api/components", "search").setParam("componentUuid", "EFGH").setParam("q", "st"); request.execute().assertJson(getClass(), "return_only_authorized_projects_from_view.json"); @@ -85,7 +88,7 @@ public class SearchActionTest { @Test public void return_paged_result() throws Exception { dbTester.prepareDbUnit(getClass(), "shared.xml"); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.USER, "EFGH"); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.USER, "EFGH"); WsTester.TestRequest request = tester.newGetRequest("api/components", "search").setParam("componentUuid", "EFGH").setParam("q", "st").setParam("p", "2").setParam("ps", "1"); request.execute().assertJson(getClass(), "return_paged_result.json"); @@ -94,7 +97,7 @@ public class SearchActionTest { @Test public void return_only_first_page() throws Exception { dbTester.prepareDbUnit(getClass(), "shared.xml"); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.USER, "EFGH"); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.USER, "EFGH"); WsTester.TestRequest request = tester.newGetRequest("api/components", "search").setParam("componentUuid", "EFGH").setParam("q", "st").setParam("p", "1").setParam("ps", "1"); request.execute().assertJson(getClass(), "return_only_first_page.json"); @@ -103,7 +106,7 @@ public class SearchActionTest { @Test public void fail_when_search_param_is_too_short() throws Exception { dbTester.prepareDbUnit(getClass(), "shared.xml"); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.USER, "EFGH"); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.USER, "EFGH"); WsTester.TestRequest request = tester.newGetRequest("api/components", "search").setParam("componentUuid", "EFGH").setParam("q", "s"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/HistoryWsActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/HistoryWsActionMediumTest.java index db73d970b68..82da6149876 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/HistoryWsActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/HistoryWsActionMediumTest.java @@ -20,8 +20,10 @@ package org.sonar.server.computation.ws; +import java.util.Date; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.core.computation.db.AnalysisReportDto; import org.sonar.core.permission.GlobalPermissions; @@ -29,11 +31,9 @@ import org.sonar.server.activity.Activity; import org.sonar.server.activity.ActivityService; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.Date; - /** * TODO replace this medium test by a small test */ @@ -41,6 +41,8 @@ public class HistoryWsActionMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); HistoryWsAction sut; ActivityService activityService; @@ -74,7 +76,7 @@ public class HistoryWsActionMediumTest { activity2.setData("submittedAt", new Date()); activityService.save(activity2); - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); WsTester.TestRequest request = tester.wsTester().newGetRequest("api/computation", "history"); request.execute().assertJson(getClass(), "list_history_reports.json"); @@ -82,8 +84,6 @@ public class HistoryWsActionMediumTest { @Test(expected = ForbiddenException.class) public void requires_admin_right() throws Exception { - MockUserSession.set(); - WsTester.TestRequest request = tester.wsTester().newGetRequest("api/computation", "history"); request.execute(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/SubmitReportWsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/SubmitReportWsActionTest.java index fe16f557961..66434bc154c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/ws/SubmitReportWsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/ws/SubmitReportWsActionTest.java @@ -20,7 +20,9 @@ package org.sonar.server.computation.ws; +import java.io.InputStream; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.ws.WebService; import org.sonar.core.computation.db.AnalysisReportDto; @@ -28,15 +30,19 @@ import org.sonar.core.permission.GlobalPermissions; import org.sonar.server.computation.ComputationThreadLauncher; import org.sonar.server.computation.ReportQueue; import org.sonar.server.exceptions.ForbiddenException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.io.InputStream; - import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; public class SubmitReportWsActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); ComputationThreadLauncher workerLauncher = mock(ComputationThreadLauncher.class); ReportQueue queue = mock(ReportQueue.class); @@ -45,7 +51,7 @@ public class SubmitReportWsActionTest { @Before public void before() { - sut = new SubmitReportWsAction(queue, workerLauncher); + sut = new SubmitReportWsAction(queue, workerLauncher, userSessionRule); wsTester = new WsTester(new ComputationWebService(sut)); } @@ -63,7 +69,7 @@ public class SubmitReportWsActionTest { @Test public void add_element_to_queue_and_launch_analysis_task() throws Exception { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); AnalysisReportDto dto = mock(AnalysisReportDto.class); when(dto.getId()).thenReturn(42L); when(queue.add(any(String.class), any(InputStream.class))).thenReturn(new ReportQueue.Item(dto, null)); @@ -81,7 +87,7 @@ public class SubmitReportWsActionTest { @Test(expected = ForbiddenException.class) public void requires_scan_permission() throws Exception { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.DASHBOARD_SHARING); + userSessionRule.setGlobalPermissions(GlobalPermissions.DASHBOARD_SHARING); WsTester.TestRequest request = wsTester .newGetRequest(ComputationWebService.API_ENDPOINT, "submit_report") diff --git a/server/sonar-server/src/test/java/org/sonar/server/debt/DebtMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/debt/DebtMediumTest.java index 1fd391301e3..981f31297a7 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/debt/DebtMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/debt/DebtMediumTest.java @@ -22,13 +22,14 @@ package org.sonar.server.debt; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.debt.DebtCharacteristic; import org.sonar.api.server.debt.internal.DefaultDebtCharacteristic; import org.sonar.core.permission.GlobalPermissions; import org.sonar.server.platform.Platform; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; @@ -36,6 +37,8 @@ public class DebtMediumTest { @ClassRule public static ServerTester serverTester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(serverTester); @Before public void setUp() { @@ -56,7 +59,7 @@ public class DebtMediumTest { @Test public void create_characteristic() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); DebtModelService debtModelService = serverTester.get(DebtModelService.class); int nb = debtModelService.characteristics().size(); @@ -73,7 +76,7 @@ public class DebtMediumTest { @Test public void create_sub_characteristic() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); DebtModelService debtModelService = serverTester.get(DebtModelService.class); diff --git a/server/sonar-server/src/test/java/org/sonar/server/debt/DebtModelBackupTest.java b/server/sonar-server/src/test/java/org/sonar/server/debt/DebtModelBackupTest.java index 799435d9b94..bf4bc9d5596 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/debt/DebtModelBackupTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/debt/DebtModelBackupTest.java @@ -20,7 +20,13 @@ package org.sonar.server.debt; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.List; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -49,63 +55,58 @@ import org.sonar.server.debt.DebtModelXMLExporter.RuleDebt; import org.sonar.server.rule.RuleDefinitionsLoader; import org.sonar.server.rule.RuleOperations; import org.sonar.server.rule.db.RuleDao; -import org.sonar.server.user.MockUserSession; - -import java.io.Reader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Matchers.isNull; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class DebtModelBackupTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + @Mock DbClient dbClient; - @Mock DbSession session; - @Mock DebtModelPluginRepository debtModelPluginRepository; - @Mock CharacteristicDao dao; - @Mock RuleDao ruleDao; - @Mock DebtModelOperations debtModelOperations; - @Mock RuleOperations ruleOperations; - @Mock DebtCharacteristicsXMLImporter characteristicsXMLImporter; - @Mock DebtRulesXMLImporter rulesXMLImporter; - @Mock DebtModelXMLExporter debtModelXMLExporter; - @Mock RuleDefinitionsLoader defLoader; - @Mock System2 system2; @Captor ArgumentCaptor characteristicCaptor; - @Captor ArgumentCaptor ruleCaptor; - @Captor ArgumentCaptor> ruleDebtListCaptor; @@ -117,8 +118,8 @@ public class DebtModelBackupTest { DebtModelBackup debtModelBackup; @Before - public void setUp() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + public void setUp() throws Exception { + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); when(system2.now()).thenReturn(now.getTime()); @@ -141,7 +142,7 @@ public class DebtModelBackupTest { when(debtModelPluginRepository.createReaderForXMLFile("technical-debt")).thenReturn(defaultModelReader); debtModelBackup = new DebtModelBackup(dbClient, debtModelOperations, ruleOperations, debtModelPluginRepository, characteristicsXMLImporter, rulesXMLImporter, - debtModelXMLExporter, defLoader, system2); + debtModelXMLExporter, defLoader, system2, userSessionRule); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/debt/DebtModelOperationsTest.java b/server/sonar-server/src/test/java/org/sonar/server/debt/DebtModelOperationsTest.java index e9c5cc9b571..2ef3283dd68 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/debt/DebtModelOperationsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/debt/DebtModelOperationsTest.java @@ -20,8 +20,10 @@ package org.sonar.server.debt; +import java.util.Date; import org.apache.ibatis.session.SqlSession; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -45,9 +47,7 @@ import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.rule.db.RuleDao; -import org.sonar.server.user.MockUserSession; - -import java.util.Date; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; @@ -67,6 +67,9 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class DebtModelOperationsTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + @Mock CharacteristicDao dao; @@ -112,7 +115,7 @@ public class DebtModelOperationsTest { public void setUp() { when(system2.now()).thenReturn(now.getTime()); - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); currentId = 10; // Associate an id when inserting an object to simulate the db id generator @@ -128,7 +131,7 @@ public class DebtModelOperationsTest { when(dbClient.openSession(false)).thenReturn(session); when(dbClient.ruleDao()).thenReturn(ruleDao); when(dbClient.debtCharacteristicDao()).thenReturn(dao); - service = new DebtModelOperations(dbClient, system2); + service = new DebtModelOperations(dbClient, system2, userSessionRule); } @Test @@ -184,7 +187,7 @@ public class DebtModelOperationsTest { @Test public void fail_to_create_sub_characteristic_when_wrong_permission() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.DASHBOARD_SHARING); + userSessionRule.setGlobalPermissions(GlobalPermissions.DASHBOARD_SHARING); try { service.create("Compilation", 1); diff --git a/server/sonar-server/src/test/java/org/sonar/server/design/ws/DependenciesWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/design/ws/DependenciesWsTest.java index 32afbfee42a..f14e9cc6c32 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/design/ws/DependenciesWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/design/ws/DependenciesWsTest.java @@ -24,6 +24,7 @@ import org.junit.Before; import org.junit.Test; import org.sonar.api.server.ws.WebService; import org.sonar.server.db.DbClient; +import org.sonar.server.tester.AnonymousMockUserSession; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -35,7 +36,7 @@ public class DependenciesWsTest { @Before public void setUp() { - WsTester tester = new WsTester(new DependenciesWs(new ShowAction(mock(DbClient.class)))); + WsTester tester = new WsTester(new DependenciesWs(new ShowAction(mock(DbClient.class), new AnonymousMockUserSession()))); controller = tester.controller("api/dependencies"); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/design/ws/ShowActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/design/ws/ShowActionTest.java index 9f1837bde9f..ecc362f865e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/design/ws/ShowActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/design/ws/ShowActionTest.java @@ -23,6 +23,7 @@ package org.sonar.server.design.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.System2; @@ -40,7 +41,7 @@ import org.sonar.server.db.DbClient; import org.sonar.server.design.db.FileDependencyDao; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -59,6 +60,8 @@ public class ShowActionTest { @ClassRule public static DbTester dbTester = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); DbClient dbClient; @@ -73,7 +76,7 @@ public class ShowActionTest { dbTester.truncateTables(); dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new ComponentDao(), new SnapshotDao(System2.INSTANCE), new FileDependencyDao()); session = dbClient.openSession(false); - tester = new WsTester(new DependenciesWs(new ShowAction(dbClient))); + tester = new WsTester(new DependenciesWs(new ShowAction(dbClient, userSessionRule))); controller = tester.controller("api/dependencies"); initComponents(); @@ -96,7 +99,7 @@ public class ShowActionTest { .setCreatedAt(1000L)); session.commit(); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); tester.newGetRequest("api/dependencies", "show") .setParam("fromParentUuid", DIR1_UUID) @@ -107,7 +110,7 @@ public class ShowActionTest { @Test public void return_nothing() throws Exception { - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); tester.newGetRequest("api/dependencies", "show") .setParam("fromParentUuid", DIR1_UUID) @@ -118,7 +121,7 @@ public class ShowActionTest { @Test(expected = ForbiddenException.class) public void fail_if_no_user_permission_on_project() throws Exception { - MockUserSession.set().addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); tester.newGetRequest("api/dependencies", "show") .setParam("fromParentUuid", DIR1_UUID) @@ -139,7 +142,7 @@ public class ShowActionTest { .setCreatedAt(1000L)); session.commit(); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); try { tester.newGetRequest("api/dependencies", "show") @@ -165,7 +168,7 @@ public class ShowActionTest { .setCreatedAt(1000L)); session.commit(); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); tester.newGetRequest("api/dependencies", "show") .setParam("fromParentUuid", DIR1_UUID) @@ -186,7 +189,7 @@ public class ShowActionTest { .setCreatedAt(1000L)); session.commit(); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); try { tester.newGetRequest("api/dependencies", "show") @@ -212,7 +215,7 @@ public class ShowActionTest { .setCreatedAt(1000L)); session.commit(); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); try { tester.newGetRequest("api/dependencies", "show") diff --git a/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsWsTest.java index 87652c229dc..6dd6ad0f873 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/DuplicationsWsTest.java @@ -20,20 +20,24 @@ package org.sonar.server.duplication.ws; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.ws.WebService; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.measure.persistence.MeasureDao; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; public class DuplicationsWsTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WsTester tester = new WsTester(new DuplicationsWs( - new ShowAction(mock(DbClient.class), mock(ComponentDao.class), mock(MeasureDao.class), mock(DuplicationsParser.class), mock(DuplicationsJsonWriter.class)))); + new ShowAction(mock(DbClient.class), mock(ComponentDao.class), mock(MeasureDao.class), mock(DuplicationsParser.class), mock(DuplicationsJsonWriter.class), userSessionRule))); @Test public void define_ws() { diff --git a/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/ShowActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/ShowActionTest.java index eb19639dc10..1ef7b6faed6 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/ShowActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/duplication/ws/ShowActionTest.java @@ -21,7 +21,9 @@ package org.sonar.server.duplication.ws; import com.google.common.collect.Lists; +import java.util.List; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -36,11 +38,9 @@ import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.measure.persistence.MeasureDao; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.List; - import static com.google.common.collect.Lists.newArrayList; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; @@ -49,6 +49,8 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class ShowActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock DbSession session; @@ -73,13 +75,13 @@ public class ShowActionTest { @Before public void setUp() { when(dbClient.openSession(false)).thenReturn(session); - tester = new WsTester(new DuplicationsWs(new ShowAction(dbClient, componentDao, measureDao, parser, duplicationsJsonWriter))); + tester = new WsTester(new DuplicationsWs(new ShowAction(dbClient, componentDao, measureDao, parser, duplicationsJsonWriter, userSessionRule))); } @Test public void show_duplications() throws Exception { String componentKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "org.codehaus.sonar:sonar", componentKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "org.codehaus.sonar:sonar", componentKey); ComponentDto componentDto = new ComponentDto().setId(10L); when(componentDao.getNullableByKey(session, componentKey)).thenReturn(componentDto); @@ -102,7 +104,7 @@ public class ShowActionTest { public void show_duplications_by_uuid() throws Exception { String uuid = "ABCD"; String componentKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "org.codehaus.sonar:sonar", componentKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "org.codehaus.sonar:sonar", componentKey); when(componentDao.getByUuid(session, uuid)).thenReturn(new ComponentDto().setKey(componentKey)); @@ -126,7 +128,7 @@ public class ShowActionTest { @Test public void no_duplications_when_no_data() throws Exception { String componentKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "org.codehaus.sonar:sonar", componentKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "org.codehaus.sonar:sonar", componentKey); ComponentDto componentDto = new ComponentDto().setId(10L); when(componentDao.getNullableByKey(session, componentKey)).thenReturn(componentDto); @@ -142,7 +144,7 @@ public class ShowActionTest { @Test(expected = NotFoundException.class) public void fail_when_file_not_found() throws Exception { String componentKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "org.codehaus.sonar:sonar", componentKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "org.codehaus.sonar:sonar", componentKey); WsTester.TestRequest request = tester.newGetRequest("api/duplications", "show").setParam("key", componentKey); request.execute(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ActionServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ActionServiceTest.java index c1bf8c624be..d94ff01ccd5 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ActionServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ActionServiceTest.java @@ -41,6 +41,7 @@ import org.sonar.server.component.ComponentTesting; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.rule.RuleTesting; +import org.sonar.server.user.ThreadLocalUserSession; import org.sonar.server.user.UserSession; import java.util.List; @@ -97,7 +98,7 @@ public class ActionServiceTest { actions.add("link-to-jira").setConditions(new AlwaysMatch()).setFunctions(function1, function2); - assertThat(actionService.execute("ABCD", "link-to-jira", mock(UserSession.class))).isNotNull(); + assertThat(actionService.execute("ABCD", "link-to-jira", mock(ThreadLocalUserSession.class))).isNotNull(); verify(function1).execute(any(Function.Context.class)); verify(function2).execute(any(Function.Context.class)); @@ -108,7 +109,7 @@ public class ActionServiceTest { public void modify_issue_when_executing_a_function() { Function function = new TweetFunction(); - UserSession userSession = mock(UserSession.class); + UserSession userSession = mock(ThreadLocalUserSession.class); when(userSession.login()).thenReturn("arthur"); when(componentDao.getByKey(eq(session), anyString())).thenReturn(mock(ComponentDto.class)); @@ -125,7 +126,7 @@ public class ActionServiceTest { public void inject_project_settings_when_executing_a_function() { Function function = new TweetFunction(); - UserSession userSession = mock(UserSession.class); + UserSession userSession = mock(ThreadLocalUserSession.class); when(userSession.login()).thenReturn("arthur"); when(componentDao.getByKey(session, "struts")).thenReturn(new ComponentDto().setKey("struts")); @@ -146,7 +147,7 @@ public class ActionServiceTest { actions.add("link-to-jira").setConditions(new AlwaysMatch()).setFunctions(function); try { - actionService.execute("ABCD", "tweet", mock(UserSession.class)); + actionService.execute("ABCD", "tweet", mock(ThreadLocalUserSession.class)); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("Action is not found : tweet"); @@ -163,7 +164,7 @@ public class ActionServiceTest { actions.add("link-to-jira").setConditions(new NeverMatch()).setFunctions(function); try { - actionService.execute("ABCD", "link-to-jira", mock(UserSession.class)); + actionService.execute("ABCD", "link-to-jira", mock(ThreadLocalUserSession.class)); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalStateException.class).hasMessage("A condition is not respected"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/AssignActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/AssignActionTest.java index 86e574b973a..cec5baa96ce 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/AssignActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/AssignActionTest.java @@ -31,7 +31,7 @@ import org.sonar.api.user.User; import org.sonar.api.user.UserFinder; import org.sonar.core.issue.IssueUpdater; import org.sonar.core.user.DefaultUser; -import org.sonar.server.user.UserSession; +import org.sonar.server.user.ThreadLocalUserSession; import java.util.List; import java.util.Map; @@ -93,7 +93,7 @@ public class AssignActionTest { List issues = newArrayList((Issue) new DefaultIssue().setKey("ABC")); when(userFinder.findByLogin(assignee)).thenReturn(user); - assertThat(action.verify(properties, issues, mock(UserSession.class))).isTrue(); + assertThat(action.verify(properties, issues, mock(ThreadLocalUserSession.class))).isTrue(); assertThat(properties.get(AssignAction.VERIFIED_ASSIGNEE)).isEqualTo(user); } @@ -108,7 +108,7 @@ public class AssignActionTest { List issues = newArrayList((Issue) new DefaultIssue().setKey("ABC")); when(userFinder.findByLogin(assignee)).thenReturn(null); - action.verify(properties, issues, mock(UserSession.class)); + action.verify(properties, issues, mock(ThreadLocalUserSession.class)); } @Test @@ -118,8 +118,8 @@ public class AssignActionTest { properties.put("assignee", assignee); List issues = newArrayList((Issue) new DefaultIssue().setKey("ABC")); - action.verify(properties, issues, mock(UserSession.class)); - assertThat(action.verify(properties, issues, mock(UserSession.class))).isTrue(); + action.verify(properties, issues, mock(ThreadLocalUserSession.class)); + assertThat(action.verify(properties, issues, mock(ThreadLocalUserSession.class))).isTrue(); assertThat(properties.containsKey(AssignAction.VERIFIED_ASSIGNEE)).isTrue(); assertThat(properties.get(AssignAction.VERIFIED_ASSIGNEE)).isNull(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/CommentActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/CommentActionTest.java index f34308752ce..9453a822e98 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/CommentActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/CommentActionTest.java @@ -21,20 +21,24 @@ package org.sonar.server.issue; import com.google.common.collect.Lists; +import java.util.Map; import org.junit.Before; import org.junit.Test; import org.sonar.api.issue.Issue; import org.sonar.api.issue.internal.DefaultIssue; import org.sonar.api.issue.internal.IssueChangeContext; import org.sonar.core.issue.IssueUpdater; -import org.sonar.server.user.MockUserSession; - -import java.util.Map; +import org.sonar.server.tester.AnonymousMockUserSession; import static com.google.common.collect.Maps.newHashMap; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; public class CommentActionTest { @@ -66,7 +70,7 @@ public class CommentActionTest { Map properties = newHashMap(); properties.put("unknwown", "unknown value"); try { - action.verify(properties, Lists.newArrayList(), MockUserSession.create()); + action.verify(properties, Lists.newArrayList(), new AnonymousMockUserSession()); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("Missing parameter : 'comment'"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java index 6b3a71964e2..254395b7584 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/InternalRubyIssueServiceTest.java @@ -22,7 +22,12 @@ package org.sonar.server.issue; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.sonar.api.issue.ActionPlan; @@ -41,20 +46,24 @@ import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.Message; import org.sonar.server.issue.actionplan.ActionPlanService; import org.sonar.server.issue.filter.IssueFilterService; -import org.sonar.server.user.UserSession; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.user.ThreadLocalUserSession; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Maps.newHashMap; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; public class InternalRubyIssueServiceTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); IssueService issueService; @@ -92,7 +101,7 @@ public class InternalRubyIssueServiceTest { when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(project); service = new InternalRubyIssueService(issueService, issueQueryService, commentService, changelogService, actionPlanService, resourceDao, actionService, - issueFilterService, issueBulkChangeService); + issueFilterService, issueBulkChangeService, userSessionRule); } @Test @@ -165,7 +174,7 @@ public class InternalRubyIssueServiceTest { assertThat(result.ok()).isTrue(); ArgumentCaptor actionPlanCaptor = ArgumentCaptor.forClass(ActionPlan.class); - verify(actionPlanService).create(actionPlanCaptor.capture(), any(UserSession.class)); + verify(actionPlanService).create(actionPlanCaptor.capture(), any(ThreadLocalUserSession.class)); ActionPlan actionPlan = actionPlanCaptor.getValue(); assertThat(actionPlan).isNotNull(); @@ -177,7 +186,7 @@ public class InternalRubyIssueServiceTest { @Test public void update_action_plan() { - when(actionPlanService.findByKey(eq("ABCD"), any(UserSession.class))).thenReturn(DefaultActionPlan.create("Long term")); + when(actionPlanService.findByKey(eq("ABCD"), any(ThreadLocalUserSession.class))).thenReturn(DefaultActionPlan.create("Long term")); Map parameters = newHashMap(); parameters.put("name", "New Long term"); @@ -189,7 +198,7 @@ public class InternalRubyIssueServiceTest { assertThat(result.ok()).isTrue(); ArgumentCaptor actionPlanCaptor = ArgumentCaptor.forClass(ActionPlan.class); - verify(actionPlanService).update(actionPlanCaptor.capture(), any(UserSession.class)); + verify(actionPlanService).update(actionPlanCaptor.capture(), any(ThreadLocalUserSession.class)); ActionPlan actionPlan = actionPlanCaptor.getValue(); assertThat(actionPlan).isNotNull(); @@ -201,7 +210,7 @@ public class InternalRubyIssueServiceTest { @Test public void update_action_plan_with_new_project() { - when(actionPlanService.findByKey(eq("ABCD"), any(UserSession.class))).thenReturn(DefaultActionPlan.create("Long term").setProjectKey("org.sonar.MultiSample")); + when(actionPlanService.findByKey(eq("ABCD"), any(ThreadLocalUserSession.class))).thenReturn(DefaultActionPlan.create("Long term").setProjectKey("org.sonar.MultiSample")); Map parameters = newHashMap(); parameters.put("name", "New Long term"); @@ -212,7 +221,7 @@ public class InternalRubyIssueServiceTest { Result result = service.updateActionPlan("ABCD", parameters); assertThat(result.ok()).isTrue(); - verify(actionPlanService).update(actionPlanCaptor.capture(), any(UserSession.class)); + verify(actionPlanService).update(actionPlanCaptor.capture(), any(ThreadLocalUserSession.class)); ActionPlan actionPlan = actionPlanCaptor.getValue(); assertThat(actionPlan).isNotNull(); @@ -225,7 +234,7 @@ public class InternalRubyIssueServiceTest { @Test public void not_update_action_plan_when_action_plan_is_not_found() { - when(actionPlanService.findByKey(eq("ABCD"), any(UserSession.class))).thenReturn(null); + when(actionPlanService.findByKey(eq("ABCD"), any(ThreadLocalUserSession.class))).thenReturn(null); Result result = service.updateActionPlan("ABCD", null); assertThat(result.ok()).isFalse(); @@ -234,38 +243,38 @@ public class InternalRubyIssueServiceTest { @Test public void delete_action_plan() { - when(actionPlanService.findByKey(eq("ABCD"), any(UserSession.class))).thenReturn(DefaultActionPlan.create("Long term")); + when(actionPlanService.findByKey(eq("ABCD"), any(ThreadLocalUserSession.class))).thenReturn(DefaultActionPlan.create("Long term")); Result result = service.deleteActionPlan("ABCD"); - verify(actionPlanService).delete(eq("ABCD"), any(UserSession.class)); + verify(actionPlanService).delete(eq("ABCD"), any(ThreadLocalUserSession.class)); assertThat(result.ok()).isTrue(); } @Test public void not_delete_action_plan_if_action_plan_not_found() { - when(actionPlanService.findByKey(eq("ABCD"), any(UserSession.class))).thenReturn(null); + when(actionPlanService.findByKey(eq("ABCD"), any(ThreadLocalUserSession.class))).thenReturn(null); Result result = service.deleteActionPlan("ABCD"); - verify(actionPlanService, never()).delete(eq("ABCD"), any(UserSession.class)); + verify(actionPlanService, never()).delete(eq("ABCD"), any(ThreadLocalUserSession.class)); assertThat(result.ok()).isFalse(); assertThat(result.errors()).contains(Result.Message.ofL10n("action_plans.errors.action_plan_does_not_exist", "ABCD")); } @Test public void close_action_plan() { - when(actionPlanService.findByKey(eq("ABCD"), any(UserSession.class))).thenReturn(DefaultActionPlan.create("Long term")); + when(actionPlanService.findByKey(eq("ABCD"), any(ThreadLocalUserSession.class))).thenReturn(DefaultActionPlan.create("Long term")); Result result = service.closeActionPlan("ABCD"); - verify(actionPlanService).setStatus(eq("ABCD"), eq("CLOSED"), any(UserSession.class)); + verify(actionPlanService).setStatus(eq("ABCD"), eq("CLOSED"), any(ThreadLocalUserSession.class)); assertThat(result.ok()).isTrue(); } @Test public void open_action_plan() { - when(actionPlanService.findByKey(eq("ABCD"), any(UserSession.class))).thenReturn(DefaultActionPlan.create("Long term")); + when(actionPlanService.findByKey(eq("ABCD"), any(ThreadLocalUserSession.class))).thenReturn(DefaultActionPlan.create("Long term")); Result result = service.openActionPlan("ABCD"); - verify(actionPlanService).setStatus(eq("ABCD"), eq("OPEN"), any(UserSession.class)); + verify(actionPlanService).setStatus(eq("ABCD"), eq("OPEN"), any(ThreadLocalUserSession.class)); assertThat(result.ok()).isTrue(); } @@ -401,7 +410,7 @@ public class InternalRubyIssueServiceTest { service.createIssueFilter(parameters); ArgumentCaptor issueFilterCaptor = ArgumentCaptor.forClass(IssueFilterDto.class); - verify(issueFilterService).save(issueFilterCaptor.capture(), any(UserSession.class)); + verify(issueFilterService).save(issueFilterCaptor.capture(), any(ThreadLocalUserSession.class)); IssueFilterDto issueFilter = issueFilterCaptor.getValue(); assertThat(issueFilter.getName()).isEqualTo("Long term"); assertThat(issueFilter.getDescription()).isEqualTo("Long term issues"); @@ -418,7 +427,7 @@ public class InternalRubyIssueServiceTest { service.updateIssueFilter(parameters); ArgumentCaptor issueFilterCaptor = ArgumentCaptor.forClass(IssueFilterDto.class); - verify(issueFilterService).update(issueFilterCaptor.capture(), any(UserSession.class)); + verify(issueFilterService).update(issueFilterCaptor.capture(), any(ThreadLocalUserSession.class)); IssueFilterDto issueFilter = issueFilterCaptor.getValue(); assertThat(issueFilter.getId()).isEqualTo(10L); assertThat(issueFilter.getName()).isEqualTo("Long term"); @@ -429,13 +438,13 @@ public class InternalRubyIssueServiceTest { public void update_data() { Map data = newHashMap(); service.updateIssueFilterQuery(10L, data); - verify(issueFilterService).updateFilterQuery(eq(10L), eq(data), any(UserSession.class)); + verify(issueFilterService).updateFilterQuery(eq(10L), eq(data), any(ThreadLocalUserSession.class)); } @Test public void delete_issue_filter() { service.deleteIssueFilter(1L); - verify(issueFilterService).delete(eq(1L), any(UserSession.class)); + verify(issueFilterService).delete(eq(1L), any(ThreadLocalUserSession.class)); } @Test @@ -447,7 +456,7 @@ public class InternalRubyIssueServiceTest { service.copyIssueFilter(1L, parameters); ArgumentCaptor issueFilterCaptor = ArgumentCaptor.forClass(IssueFilterDto.class); - verify(issueFilterService).copy(eq(1L), issueFilterCaptor.capture(), any(UserSession.class)); + verify(issueFilterService).copy(eq(1L), issueFilterCaptor.capture(), any(ThreadLocalUserSession.class)); IssueFilterDto issueFilter = issueFilterCaptor.getValue(); assertThat(issueFilter.getName()).isEqualTo("Copy of Long term"); assertThat(issueFilter.getDescription()).isEqualTo("Copy of Long term issues"); @@ -566,7 +575,7 @@ public class InternalRubyIssueServiceTest { overrideProps.put("pageSize", 20); overrideProps.put("pageIndex", 2); - IssueQuery query = IssueQuery.builder().build(); + IssueQuery query = IssueQuery.builder(userSessionRule).build(); when(issueQueryService.createFromMap(eq(overrideProps))).thenReturn(query); service.execute(10L, overrideProps); @@ -575,7 +584,7 @@ public class InternalRubyIssueServiceTest { ArgumentCaptor contextArgumentCaptor = ArgumentCaptor.forClass(SearchOptions.class); verify(issueFilterService).execute(issueQueryArgumentCaptor.capture(), contextArgumentCaptor.capture()); - verify(issueFilterService).find(eq(10L), any(UserSession.class)); + verify(issueFilterService).find(eq(10L), any(ThreadLocalUserSession.class)); SearchOptions searchOptions = contextArgumentCaptor.getValue(); assertThat(searchOptions.getLimit()).isEqualTo(20); @@ -610,39 +619,39 @@ public class InternalRubyIssueServiceTest { @Test public void find_user_issue_filters() { service.findIssueFiltersForCurrentUser(); - verify(issueFilterService).findByUser(any(UserSession.class)); + verify(issueFilterService).findByUser(any(ThreadLocalUserSession.class)); } @Test public void find_shared_issue_filters() { service.findSharedFiltersForCurrentUser(); - verify(issueFilterService).findSharedFiltersWithoutUserFilters(any(UserSession.class)); + verify(issueFilterService).findSharedFiltersWithoutUserFilters(any(ThreadLocalUserSession.class)); } @Test public void find_favourite_issue_filters() { service.findFavouriteIssueFiltersForCurrentUser(); - verify(issueFilterService).findFavoriteFilters(any(UserSession.class)); + verify(issueFilterService).findFavoriteFilters(any(ThreadLocalUserSession.class)); } @Test public void toggle_favourite_issue_filter() { service.toggleFavouriteIssueFilter(10L); - verify(issueFilterService).toggleFavouriteIssueFilter(eq(10L), any(UserSession.class)); + verify(issueFilterService).toggleFavouriteIssueFilter(eq(10L), any(ThreadLocalUserSession.class)); } @Test public void check_if_user_is_authorized_to_see_issue_filter() { IssueFilterDto issueFilter = new IssueFilterDto(); service.isUserAuthorized(issueFilter); - verify(issueFilterService).getLoggedLogin(any(UserSession.class)); + verify(issueFilterService).getLoggedLogin(any(ThreadLocalUserSession.class)); verify(issueFilterService).verifyCurrentUserCanReadFilter(eq(issueFilter), anyString()); } @Test public void check_if_user_can_share_issue_filter() { service.canUserShareIssueFilter(); - verify(issueFilterService).canShareFilter(any(UserSession.class)); + verify(issueFilterService).canShareFilter(any(ThreadLocalUserSession.class)); } @Test @@ -655,7 +664,7 @@ public class InternalRubyIssueServiceTest { params.put("set_severity.severity", "MINOR"); params.put("plan.plan", "3.7"); service.bulkChange(params, "My comment", true); - verify(issueBulkChangeService).execute(any(IssueBulkChangeQuery.class), any(UserSession.class)); + verify(issueBulkChangeService).execute(any(IssueBulkChangeQuery.class), any(ThreadLocalUserSession.class)); } @Test @@ -702,7 +711,7 @@ public class InternalRubyIssueServiceTest { public void list_tags_for_component() { Map tags = ImmutableMap.of("tag1", 1L, "tag2", 2L, "tag3", 3L); int pageSize = 42; - IssueQuery query = IssueQuery.builder().build(); + IssueQuery query = IssueQuery.builder(userSessionRule).build(); String componentUuid = "polop"; Map params = ImmutableMap.of("componentUuids", componentUuid, "resolved", false); when(issueQueryService.createFromMap(params)).thenReturn(query); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceMediumTest.java index 62340cd33f7..6a6065e547c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceMediumTest.java @@ -21,9 +21,12 @@ package org.sonar.server.issue; import com.google.common.base.Joiner; +import java.util.List; +import java.util.Map; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.issue.DefaultTransitions; import org.sonar.api.issue.Issue; @@ -48,12 +51,9 @@ import org.sonar.server.permission.PermissionChange; import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.UserSession; -import java.util.List; -import java.util.Map; - import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Maps.newHashMap; import static org.assertj.core.api.Assertions.assertThat; @@ -63,6 +63,8 @@ public class IssueBulkChangeServiceMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession session; @@ -94,11 +96,10 @@ public class IssueBulkChangeServiceMediumTest { // project can be seen by anyone session.commit(); - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); tester.get(InternalPermissionService.class).addPermission(new PermissionChange().setComponentKey(project.getKey()).setGroup(DefaultGroups.ANYONE).setPermission(UserRole.USER)); - userSession = MockUserSession.set() - .setLogin("john") + userSession = userSessionRule.logon("john") .addProjectPermissions(UserRole.USER, project.key()); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java index a781c2deeec..c209432a407 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueBulkChangeServiceTest.java @@ -34,7 +34,7 @@ public class IssueBulkChangeServiceTest { // // IssueBulkChangeService service; // -// UserSession userSession = MockUserSession.create().setLogin("john").setUserId(10); +// UserSession userSession = new MockUserSession("john").setUserId(10); // // IssueDoc issue; // Rule rule; diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueChangelogFormatterTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueChangelogFormatterTest.java index b1bb6353453..fbdec123925 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueChangelogFormatterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueChangelogFormatterTest.java @@ -19,7 +19,10 @@ */ package org.sonar.server.issue; +import java.util.List; +import java.util.Locale; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -28,9 +31,7 @@ import org.sonar.api.i18n.I18n; import org.sonar.api.issue.internal.FieldDiffs; import org.sonar.api.utils.Duration; import org.sonar.api.utils.Durations; - -import java.util.List; -import java.util.Locale; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.any; @@ -42,6 +43,9 @@ public class IssueChangelogFormatterTest { private static final Locale DEFAULT_LOCALE = Locale.getDefault(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + @Mock private I18n i18n; @@ -53,7 +57,7 @@ public class IssueChangelogFormatterTest { @Before public void before() { - formatter = new IssueChangelogFormatter(i18n, durations); + formatter = new IssueChangelogFormatter(i18n, durations, userSessionRule); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueChangelogServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueChangelogServiceTest.java index febbeeba6f9..914e2584e2c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueChangelogServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueChangelogServiceTest.java @@ -19,7 +19,10 @@ */ package org.sonar.server.issue; +import java.util.Arrays; +import java.util.Locale; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -30,17 +33,20 @@ import org.sonar.api.user.User; import org.sonar.api.user.UserFinder; import org.sonar.core.issue.db.IssueChangeDao; import org.sonar.core.user.DefaultUser; -import org.sonar.server.user.MockUserSession; - -import java.util.Arrays; -import java.util.Locale; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class IssueChangelogServiceTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + @Mock IssueChangeDao changeDao; @@ -57,7 +63,7 @@ public class IssueChangelogServiceTest { @Before public void setUp() { - service = new IssueChangelogService(changeDao, userFinder, issueService, formatter); + service = new IssueChangelogService(changeDao, userFinder, issueService, formatter, userSessionRule); } @Test @@ -81,7 +87,7 @@ public class IssueChangelogServiceTest { @Test public void format_diffs() { FieldDiffs diffs = new FieldDiffs().setUserLogin("arthur").setDiff("severity", "MAJOR", "BLOCKER"); - MockUserSession.set(); + userSessionRule.logon(); service.formatDiffs(diffs); verify(formatter).format(any(Locale.class), eq(diffs)); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueCommentServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueCommentServiceMediumTest.java index f95030fe975..2eb0a147625 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueCommentServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueCommentServiceMediumTest.java @@ -20,9 +20,11 @@ package org.sonar.server.issue; +import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.issue.Issue; import org.sonar.api.issue.internal.DefaultIssueComment; @@ -49,9 +51,7 @@ import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.search.IndexClient; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; - -import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; @@ -59,6 +59,8 @@ public class IssueCommentServiceMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; IndexClient indexClient; @@ -91,10 +93,10 @@ public class IssueCommentServiceMediumTest { // project can be seen by anyone session.commit(); - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); tester.get(InternalPermissionService.class).addPermission(new PermissionChange().setComponentKey(project.getKey()).setGroup(DefaultGroups.ANYONE).setPermission(UserRole.USER)); - MockUserSession.set().setLogin("gandalf"); + userSessionRule.logon("gandalf"); session.commit(); } @@ -111,7 +113,7 @@ public class IssueCommentServiceMediumTest { session.commit(); tester.get(IssueIndexer.class).indexAll(); - service.addComment(issue.getKey(), "my comment", MockUserSession.get()); + service.addComment(issue.getKey(), "my comment", userSessionRule); List comments = service.findComments(issue.getKey()); assertThat(comments).hasSize(1); @@ -128,7 +130,7 @@ public class IssueCommentServiceMediumTest { session.commit(); tester.get(IssueIndexer.class).indexAll(); - service.addComment(issue.getKey(), "my comment", MockUserSession.get()); + service.addComment(issue.getKey(), "my comment", userSessionRule); List comments = service.findComments(issue.getKey()); assertThat(comments).hasSize(1); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueCommentServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueCommentServiceTest.java index f98a68f2551..456a53d0a6e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueCommentServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueCommentServiceTest.java @@ -20,6 +20,7 @@ package org.sonar.server.issue; +import java.util.Collections; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -43,19 +44,22 @@ import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.rule.RuleTesting; -import org.sonar.server.user.MockUserSession; - -import java.util.Collections; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class IssueCommentServiceTest { - - @Mock + @Mock private DbClient dbClient; @Mock @@ -75,11 +79,8 @@ public class IssueCommentServiceTest { @Rule public ExpectedException throwable = ExpectedException.none(); - - @Before - public void setUpUser() { - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); - } + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone().logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); @Before public void setUp() { @@ -106,7 +107,7 @@ public class IssueCommentServiceTest { when(issueService.getByKeyForUpdate(session, "ABCD")).thenReturn(issueDto); when(issueCommentService.findComments(session, "ABCD")).thenReturn(newArrayList(new DefaultIssueComment())); - issueCommentService.addComment("ABCD", "my comment", MockUserSession.get()); + issueCommentService.addComment("ABCD", "my comment", userSessionRule); verify(updater).addComment(eq(issueDto.toDefaultIssue()), eq("my comment"), any(IssueChangeContext.class)); verify(issueService).saveIssue(eq(session), eq(issueDto.toDefaultIssue()), any(IssueChangeContext.class), eq("my comment")); @@ -115,10 +116,9 @@ public class IssueCommentServiceTest { @Test public void should_be_logged_when_adding_comment() { throwable.expect(UnauthorizedException.class); + userSessionRule.anonymous(); - MockUserSession.set().setLogin(null); - - issueCommentService.addComment("myIssue", "my comment", MockUserSession.get()); + issueCommentService.addComment("myIssue", "my comment", userSessionRule); verify(updater, never()).addComment(any(DefaultIssue.class), anyString(), any(IssueChangeContext.class)); verifyZeroInteractions(issueService); @@ -128,7 +128,7 @@ public class IssueCommentServiceTest { public void should_prevent_adding_empty_comment() { throwable.expect(BadRequestException.class); - issueCommentService.addComment("myIssue", " ", MockUserSession.get()); + issueCommentService.addComment("myIssue", " ", userSessionRule); verify(updater, never()).addComment(any(DefaultIssue.class), anyString(), any(IssueChangeContext.class)); verifyZeroInteractions(issueService); @@ -138,7 +138,7 @@ public class IssueCommentServiceTest { public void should_prevent_adding_null_comment() { throwable.expect(BadRequestException.class); - issueCommentService.addComment("myIssue", null, MockUserSession.get()); + issueCommentService.addComment("myIssue", null, userSessionRule); verify(updater, never()).addComment(any(DefaultIssue.class), anyString(), any(IssueChangeContext.class)); verifyZeroInteractions(issueService); @@ -152,7 +152,7 @@ public class IssueCommentServiceTest { when(issueCommentService.findComments(session, "ABCD")).thenReturn(Collections.emptyList()); try { - issueCommentService.addComment("ABCD", "my comment", MockUserSession.get()); + issueCommentService.addComment("ABCD", "my comment", userSessionRule); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(BadRequestException.class).hasMessage("Fail to add a comment on issue ABCD"); @@ -163,7 +163,7 @@ public class IssueCommentServiceTest { public void should_delete_comment() { when(changeDao.selectCommentByKey("ABCD")).thenReturn(new DefaultIssueComment().setUserLogin("admin").setIssueKey("EFGH")); - issueCommentService.deleteComment("ABCD", MockUserSession.get()); + issueCommentService.deleteComment("ABCD", userSessionRule); verify(changeDao).delete("ABCD"); verify(issueService).getByKey("EFGH"); @@ -175,7 +175,7 @@ public class IssueCommentServiceTest { when(changeDao.selectCommentByKey("ABCD")).thenReturn(null); - issueCommentService.deleteComment("ABCD", MockUserSession.get()); + issueCommentService.deleteComment("ABCD", userSessionRule); verify(changeDao, never()).delete(anyString()); } @@ -186,7 +186,7 @@ public class IssueCommentServiceTest { when(changeDao.selectCommentByKey("ABCD")).thenReturn(new DefaultIssueComment().setUserLogin("julien")); - issueCommentService.deleteComment("ABCD", MockUserSession.get()); + issueCommentService.deleteComment("ABCD", userSessionRule); verify(changeDao, never()).delete(anyString()); } @@ -195,7 +195,7 @@ public class IssueCommentServiceTest { public void should_update_comment() { when(changeDao.selectCommentByKey("ABCD")).thenReturn(new DefaultIssueComment().setIssueKey("EFGH").setUserLogin("admin")); - issueCommentService.editComment("ABCD", "updated comment", MockUserSession.get()); + issueCommentService.editComment("ABCD", "updated comment", userSessionRule); verify(changeDao).update(any(IssueChangeDto.class)); verify(issueService).getByKey("EFGH"); @@ -207,7 +207,7 @@ public class IssueCommentServiceTest { when(changeDao.selectCommentByKey("ABCD")).thenReturn(null); - issueCommentService.editComment("ABCD", "updated comment", MockUserSession.get()); + issueCommentService.editComment("ABCD", "updated comment", userSessionRule); verify(changeDao, never()).update(any(IssueChangeDto.class)); } @@ -216,7 +216,7 @@ public class IssueCommentServiceTest { public void should_prevent_updating_empty_comment() { throwable.expect(BadRequestException.class); - issueCommentService.editComment("ABCD", "", MockUserSession.get()); + issueCommentService.editComment("ABCD", "", userSessionRule); verify(changeDao, never()).update(any(IssueChangeDto.class)); } @@ -225,7 +225,7 @@ public class IssueCommentServiceTest { public void should_prevent_updating_null_comment() { throwable.expect(BadRequestException.class); - issueCommentService.editComment("ABCD", null, MockUserSession.get()); + issueCommentService.editComment("ABCD", null, userSessionRule); verify(changeDao, never()).update(any(IssueChangeDto.class)); } @@ -236,7 +236,7 @@ public class IssueCommentServiceTest { when(changeDao.selectCommentByKey("ABCD")).thenReturn(new DefaultIssueComment().setUserLogin("julien")); - issueCommentService.editComment("ABCD", "updated comment", MockUserSession.get()); + issueCommentService.editComment("ABCD", "updated comment", userSessionRule); verify(changeDao, never()).update(any(IssueChangeDto.class)); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryServiceTest.java index 4b1645ef987..09ba7ca9faf 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryServiceTest.java @@ -22,9 +22,14 @@ package org.sonar.server.issue; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.Map; import org.assertj.core.api.Fail; -import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Matchers; @@ -43,9 +48,7 @@ import org.sonar.core.user.AuthorDao; import org.sonar.server.component.ComponentService; import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; -import org.sonar.server.user.MockUserSession; - -import java.util.*; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Maps.newHashMap; @@ -60,6 +63,8 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class IssueQueryServiceTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock DbClient dbClient; @@ -95,12 +100,7 @@ public class IssueQueryServiceTest { } }); - issueQueryService = new IssueQueryService(dbClient, componentService, system); - } - - @After - public void tearDown() { - MockUserSession.set(); + issueQueryService = new IssueQueryService(dbClient, componentService, system, userSessionRule); } @Test @@ -277,7 +277,7 @@ public class IssueQueryServiceTest { when(componentService.getDistinctQualifiers(isA(DbSession.class), anyCollection())).thenReturn(Sets.newHashSet(Qualifiers.VIEW)); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, viewUuid); + userSessionRule.addProjectUuidPermissions(UserRole.USER, viewUuid); IssueQuery query = issueQueryService.createFromMap(map); assertThat(query.viewUuids()).containsExactly(viewUuid); @@ -292,8 +292,6 @@ public class IssueQueryServiceTest { when(componentService.getDistinctQualifiers(isA(DbSession.class), anyCollection())).thenReturn(Sets.newHashSet(Qualifiers.VIEW)); - MockUserSession.set(); - IssueQuery query = issueQueryService.createFromMap(map); assertThat(query.viewUuids()).isNotEmpty().doesNotContain(subViewUuid); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryTest.java index 5af86be2654..b1f41636075 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueQueryTest.java @@ -20,21 +20,24 @@ package org.sonar.server.issue; import com.google.common.collect.Lists; +import java.util.Date; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.issue.Issue; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.Severity; - -import java.util.Date; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; public class IssueQueryTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Test public void build_query() { - IssueQuery query = IssueQuery.builder() + IssueQuery query = IssueQuery.builder(userSessionRule) .issueKeys(newArrayList("ABCDE")) .severities(newArrayList(Severity.BLOCKER)) .statuses(Lists.newArrayList(Issue.STATUS_RESOLVED)) @@ -82,7 +85,7 @@ public class IssueQueryTest { @Test public void build_query_without_dates() { - IssueQuery query = IssueQuery.builder() + IssueQuery query = IssueQuery.builder(userSessionRule) .issueKeys(newArrayList("ABCDE")) .createdAfter(null) .createdBefore(null) @@ -98,7 +101,7 @@ public class IssueQueryTest { @Test public void throw_exception_if_sort_is_not_valid() { try { - IssueQuery.builder() + IssueQuery.builder(userSessionRule) .sort("UNKNOWN") .build(); } catch (Exception e) { @@ -108,7 +111,7 @@ public class IssueQueryTest { @Test public void collection_params_should_not_be_null_but_empty() { - IssueQuery query = IssueQuery.builder() + IssueQuery query = IssueQuery.builder(userSessionRule) .issueKeys(null) .componentUuids(null) .moduleUuids(null) @@ -138,7 +141,7 @@ public class IssueQueryTest { @Test public void test_default_query() throws Exception { - IssueQuery query = IssueQuery.builder().build(); + IssueQuery query = IssueQuery.builder(userSessionRule).build(); assertThat(query.issueKeys()).isEmpty(); assertThat(query.componentUuids()).isEmpty(); assertThat(query.moduleUuids()).isEmpty(); @@ -162,7 +165,7 @@ public class IssueQueryTest { @Test public void should_accept_null_sort() { - IssueQuery query = IssueQuery.builder().sort(null).build(); + IssueQuery query = IssueQuery.builder(userSessionRule).sort(null).build(); assertThat(query.sort()).isNull(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java index 7a12ce178c2..494dc0f8597 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueServiceMediumTest.java @@ -22,9 +22,13 @@ package org.sonar.server.issue; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; import com.google.common.collect.Sets; +import java.util.Arrays; +import java.util.Date; +import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.CoreProperties; import org.sonar.api.config.Settings; @@ -60,18 +64,14 @@ import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.source.db.FileSourceDb; import org.sonar.server.source.index.FileSourcesUpdaterHelper; -import org.sonar.server.source.index.SourceLineResultSetIterator; import org.sonar.server.source.index.SourceLineIndexer; +import org.sonar.server.source.index.SourceLineResultSetIterator; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.NewUser; import org.sonar.server.user.UserUpdater; import org.sonar.server.user.db.GroupDao; -import java.util.Arrays; -import java.util.Date; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; import static org.junit.Assert.fail; @@ -80,6 +80,8 @@ public class IssueServiceMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; IssueIndex IssueIndex; @@ -123,11 +125,11 @@ public class IssueServiceMediumTest { saveIssue(IssueTesting.newDto(rule, file, project).setActionPlanKey("P1")); saveIssue(IssueTesting.newDto(rule, file, project).setActionPlanKey("P2").setResolution("NONE")); - SearchResult result = service.search(IssueQuery.builder().build(), new SearchOptions()); + SearchResult result = service.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(2); assertThat(result.getFacets().getNames()).isEmpty(); - result = service.search(IssueQuery.builder().build(), new SearchOptions().addFacets("actionPlans", "assignees")); + result = service.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets("actionPlans", "assignees")); assertThat(result.getFacets().getNames()).hasSize(2); assertThat(result.getFacets().get("actionPlans")).hasSize(2); assertThat(result.getFacets().get("assignees")).hasSize(1); @@ -155,7 +157,7 @@ public class IssueServiceMediumTest { RuleDto rule = newRule(); ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); IssueDto issue = saveIssue(IssueTesting.newDto(rule, file, project).setStatus(Issue.STATUS_OPEN)); @@ -171,7 +173,7 @@ public class IssueServiceMediumTest { RuleDto rule = newRule(); ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); IssueDto issue = saveIssue(IssueTesting.newDto(rule, file, project)); @@ -192,7 +194,7 @@ public class IssueServiceMediumTest { RuleDto rule = newRule(); ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); IssueDto issue = saveIssue(IssueTesting.newDto(rule, file, project).setAssignee("perceval")); @@ -213,7 +215,7 @@ public class IssueServiceMediumTest { RuleDto rule = newRule(); ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); IssueDto issue = saveIssue(IssueTesting.newDto(rule, file, project)); @@ -230,7 +232,7 @@ public class IssueServiceMediumTest { RuleDto rule = newRule(); ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.USER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.USER, project.key()); IssueDto issue = saveIssue(IssueTesting.newDto(rule, file, project)); @@ -251,7 +253,7 @@ public class IssueServiceMediumTest { RuleDto rule = newRule(); ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); String actionPlanKey = "EFGH"; db.actionPlanDao().save(new ActionPlanDto().setKey(actionPlanKey).setProjectId(project.getId())); @@ -269,7 +271,7 @@ public class IssueServiceMediumTest { RuleDto rule = newRule(); ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); IssueDto issue = saveIssue(IssueTesting.newDto(rule, file, project)); try { @@ -285,7 +287,7 @@ public class IssueServiceMediumTest { RuleDto rule = newRule(); ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.ISSUE_ADMIN, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.ISSUE_ADMIN, project.key()); IssueDto issue = saveIssue(IssueTesting.newDto(rule, file, project).setSeverity(Severity.BLOCKER)); @@ -300,7 +302,7 @@ public class IssueServiceMediumTest { public void create_manual_issue() { ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.USER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.USER, project.key()); RuleDto manualRule = RuleTesting.newManualRule("manualRuleKey"); tester.get(RuleDao.class).insert(session, manualRule); @@ -326,7 +328,7 @@ public class IssueServiceMediumTest { newSourceLine(file, 1, "arthur"); createDefaultGroup(); newUser("arthur"); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.USER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.USER, project.key()); RuleDto manualRule = RuleTesting.newManualRule("manualRuleKey"); tester.get(RuleDao.class).insert(session, manualRule); @@ -350,7 +352,7 @@ public class IssueServiceMediumTest { public void create_manual_issue_with_major_severity_when_no_severity() { ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.USER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.USER, project.key()); RuleDto manualRule = RuleTesting.newManualRule("manualRuleKey"); tester.get(RuleDao.class).insert(session, manualRule); @@ -366,7 +368,7 @@ public class IssueServiceMediumTest { public void create_manual_issue_with_rule_name_when_no_message() { ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.USER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.USER, project.key()); RuleDto manualRule = RuleTesting.newManualRule("manualRuleKey").setName("Manual rule name"); tester.get(RuleDao.class).insert(session, manualRule); @@ -386,7 +388,7 @@ public class IssueServiceMediumTest { newSourceLine(file, 1, "unknown"); createDefaultGroup(); newUser("arthur"); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.USER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.USER, project.key()); RuleDto manualRule = RuleTesting.newManualRule("manualRuleKey"); tester.get(RuleDao.class).insert(session, manualRule); @@ -404,7 +406,7 @@ public class IssueServiceMediumTest { ComponentDto file = newFile(project); // No author on line 1 newSourceLine(file, 1, ""); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.USER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.USER, project.key()); RuleDto manualRule = RuleTesting.newManualRule("manualRuleKey"); tester.get(RuleDao.class).insert(session, manualRule); @@ -421,7 +423,7 @@ public class IssueServiceMediumTest { RuleDto rule = newRule(); ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.USER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.USER, project.key()); try { service.createManualIssue(file.key(), rule.getKey(), null, "Fix it", null, 2d); @@ -435,7 +437,7 @@ public class IssueServiceMediumTest { public void fail_create_manual_issue_if_rule_does_not_exists() { ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.USER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.USER, project.key()); service.createManualIssue(file.key(), RuleKey.of("rule", "unknown"), 10, "Fix it", null, 2d); } @@ -447,7 +449,7 @@ public class IssueServiceMediumTest { ComponentDto file = newFile(project); // User has not the 'user' role on the project - MockUserSession.set().setLogin("john").addProjectPermissions(UserRole.CODEVIEWER, project.key()); + userSessionRule.logon("john").addProjectPermissions(UserRole.CODEVIEWER, project.key()); RuleDto manualRule = RuleTesting.newManualRule("manualRuleKey"); tester.get(RuleDao.class).insert(session, manualRule); @@ -463,7 +465,7 @@ public class IssueServiceMediumTest { ComponentDto file = newFile(project); saveIssue(IssueTesting.newDto(rule, file, project)); - List result = service.search(IssueQuery.builder().build(), new SearchOptions()).getDocs(); + List result = service.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions()).getDocs(); assertThat(result).hasSize(1); } @@ -490,7 +492,7 @@ public class IssueServiceMediumTest { RuleDto rule = newRule(); ComponentDto project = newProject(); ComponentDto file = newFile(project); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); IssueDto issue = saveIssue(IssueTesting.newDto(rule, file, project)); @@ -537,7 +539,7 @@ public class IssueServiceMediumTest { } private IssueQuery projectQuery(String projectUuid) { - return IssueQuery.builder().projectUuids(Arrays.asList(projectUuid)).resolved(false).build(); + return IssueQuery.builder(userSessionRule).projectUuids(Arrays.asList(projectUuid)).resolved(false).build(); } @Test @@ -568,12 +570,12 @@ public class IssueServiceMediumTest { ComponentDto project = ComponentTesting.newProjectDto(); tester.get(ComponentDao.class).insert(session, project); - MockUserSession.set().setLogin("admin").addProjectPermissions(UserRole.USER, project.key()).setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").addProjectPermissions(UserRole.USER, project.key()).setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); session.commit(); // project can be seen by group "anyone" tester.get(InternalPermissionService.class).addPermission(new PermissionChange().setComponentKey(project.getKey()).setGroup(DefaultGroups.ANYONE).setPermission(UserRole.USER)); - MockUserSession.set(); + userSessionRule.logon(); return project; } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssuesFinderSortTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssuesFinderSortTest.java index eb064aa9232..f9ffcdf429c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssuesFinderSortTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssuesFinderSortTest.java @@ -20,13 +20,14 @@ package org.sonar.server.issue; +import java.util.Date; +import java.util.List; import org.apache.commons.lang.time.DateUtils; import org.assertj.core.api.Assertions; +import org.junit.Rule; import org.junit.Test; import org.sonar.core.issue.db.IssueDto; - -import java.util.Date; -import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; @@ -34,6 +35,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class IssuesFinderSortTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Test public void should_sort_by_assignee() { @@ -43,7 +46,7 @@ public class IssuesFinderSortTest { IssueDto issue4 = new IssueDto().setId(4L).setAssignee(null); List dtoList = newArrayList(issue1, issue2, issue3, issue4); - IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_ASSIGNEE).asc(true).build(); + IssueQuery query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_ASSIGNEE).asc(true).build(); IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query); List result = newArrayList(issuesFinderSort.sort()); @@ -62,7 +65,7 @@ public class IssuesFinderSortTest { IssueDto issue3 = new IssueDto().setId(3L).setStatus("OPEN"); List dtoList = newArrayList(issue1, issue2, issue3); - IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_STATUS).asc(false).build(); + IssueQuery query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_STATUS).asc(false).build(); IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query); List result = newArrayList(issuesFinderSort.sort()); @@ -80,7 +83,7 @@ public class IssuesFinderSortTest { IssueDto issue3 = new IssueDto().setId(3L).setSeverity("MAJOR"); List dtoList = newArrayList(issue1, issue2, issue3); - IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_SEVERITY).asc(true).build(); + IssueQuery query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_SEVERITY).asc(true).build(); IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query); List result = newArrayList(issuesFinderSort.sort()); @@ -98,7 +101,7 @@ public class IssuesFinderSortTest { IssueDto issue3 = new IssueDto().setId(3L).setSeverity("MAJOR"); List dtoList = newArrayList(issue1, issue2, issue3); - IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_SEVERITY).asc(false).build(); + IssueQuery query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_SEVERITY).asc(false).build(); IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query); List result = newArrayList(issuesFinderSort.sort()); @@ -120,7 +123,7 @@ public class IssuesFinderSortTest { IssueDto issue3 = new IssueDto().setId(3L).setIssueCreationDate(date2); List dtoList = newArrayList(issue1, issue2, issue3); - IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CREATION_DATE).asc(false).build(); + IssueQuery query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_CREATION_DATE).asc(false).build(); IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query); List result = newArrayList(issuesFinderSort.sort()); @@ -142,7 +145,7 @@ public class IssuesFinderSortTest { IssueDto issue3 = new IssueDto().setId(3L).setIssueUpdateDate(date2); List dtoList = newArrayList(issue1, issue2, issue3); - IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_UPDATE_DATE).asc(false).build(); + IssueQuery query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_UPDATE_DATE).asc(false).build(); IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query); List result = newArrayList(issuesFinderSort.sort()); @@ -164,7 +167,7 @@ public class IssuesFinderSortTest { IssueDto issue3 = new IssueDto().setId(3L).setIssueCloseDate(date2); List dtoList = newArrayList(issue1, issue2, issue3); - IssueQuery query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CLOSE_DATE).asc(false).build(); + IssueQuery query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_CLOSE_DATE).asc(false).build(); IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query); List result = newArrayList(issuesFinderSort.sort()); @@ -183,7 +186,7 @@ public class IssuesFinderSortTest { IssueDto issue4 = new IssueDto().setId(4L).setAssignee(null); List dtoList = newArrayList(issue1, issue2, issue3, issue4); - IssueQuery query = IssueQuery.builder().sort(null).build(); + IssueQuery query = IssueQuery.builder(userSessionRule).sort(null).build(); IssuesFinderSort issuesFinderSort = new IssuesFinderSort(dtoList, query); List result = newArrayList(issuesFinderSort.sort()); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/PlanActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/PlanActionTest.java index 4e3c4e33131..9da70d4d606 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/PlanActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/PlanActionTest.java @@ -31,7 +31,7 @@ import org.sonar.api.issue.internal.IssueChangeContext; import org.sonar.core.issue.DefaultActionPlan; import org.sonar.core.issue.IssueUpdater; import org.sonar.server.issue.actionplan.ActionPlanService; -import org.sonar.server.user.UserSession; +import org.sonar.server.user.ThreadLocalUserSession; import java.util.List; import java.util.Map; @@ -102,8 +102,8 @@ public class PlanActionTest { ActionPlan actionPlan = new DefaultActionPlan().setProjectKey("struts"); List issues = newArrayList((Issue) new DefaultIssue().setKey("ABC").setProjectKey("struts")); - when(actionPlanService.findByKey(eq(planKey), any(UserSession.class))).thenReturn(actionPlan); - assertThat(action.verify(properties, issues, mock(UserSession.class))).isTrue(); + when(actionPlanService.findByKey(eq(planKey), any(ThreadLocalUserSession.class))).thenReturn(actionPlan); + assertThat(action.verify(properties, issues, mock(ThreadLocalUserSession.class))).isTrue(); assertThat(properties.get(PlanAction.VERIFIED_ACTION_PLAN)).isEqualTo(actionPlan); } @@ -117,8 +117,8 @@ public class PlanActionTest { properties.put("plan", planKey); List issues = newArrayList((Issue) new DefaultIssue().setKey("ABC").setProjectKey("struts")); - when(actionPlanService.findByKey(eq(planKey), any(UserSession.class))).thenReturn(null); - action.verify(properties, issues, mock(UserSession.class)); + when(actionPlanService.findByKey(eq(planKey), any(ThreadLocalUserSession.class))).thenReturn(null); + action.verify(properties, issues, mock(ThreadLocalUserSession.class)); } @Test @@ -128,7 +128,7 @@ public class PlanActionTest { properties.put("plan", planKey); List issues = newArrayList((Issue) new DefaultIssue().setKey("ABC").setProjectKey("struts")); - action.verify(properties, issues, mock(UserSession.class)); + action.verify(properties, issues, mock(ThreadLocalUserSession.class)); assertThat(properties.containsKey(PlanAction.VERIFIED_ACTION_PLAN)).isTrue(); assertThat(properties.get(PlanAction.VERIFIED_ACTION_PLAN)).isNull(); } @@ -142,9 +142,9 @@ public class PlanActionTest { Map properties = newHashMap(); properties.put("plan", planKey); - when(actionPlanService.findByKey(eq(planKey), any(UserSession.class))).thenReturn(new DefaultActionPlan().setProjectKey("struts")); + when(actionPlanService.findByKey(eq(planKey), any(ThreadLocalUserSession.class))).thenReturn(new DefaultActionPlan().setProjectKey("struts")); List issues = newArrayList(new DefaultIssue().setKey("ABC").setProjectKey("struts"), (Issue) new DefaultIssue().setKey("ABE").setProjectKey("mybatis")); - action.verify(properties, issues, mock(UserSession.class)); + action.verify(properties, issues, mock(ThreadLocalUserSession.class)); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/SetSeverityActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/SetSeverityActionTest.java index cb2f6cc1deb..093e41fa9c1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/SetSeverityActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/SetSeverityActionTest.java @@ -21,18 +21,18 @@ package org.sonar.server.issue; import com.google.common.collect.Lists; +import java.util.Map; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.issue.Issue; import org.sonar.api.issue.internal.DefaultIssue; import org.sonar.api.issue.internal.IssueChangeContext; import org.sonar.api.web.UserRole; import org.sonar.core.issue.IssueUpdater; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.tester.AnonymousMockUserSession; import org.sonar.server.user.UserSession; -import org.sonar.server.user.UserSessionTestUtils; - -import java.util.Map; import static com.google.common.collect.Maps.newHashMap; import static org.assertj.core.api.Assertions.assertThat; @@ -46,17 +46,19 @@ import static org.mockito.Mockito.when; public class SetSeverityActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + + private UserSession userSessionMock = mock(UserSession.class); + private SetSeverityAction action; private IssueUpdater issueUpdater = mock(IssueUpdater.class); - private UserSession userSession; - @Before public void before() { - action = new SetSeverityAction(issueUpdater); - userSession = mock(UserSession.class); - UserSessionTestUtils.setUserSession(userSession); + action = new SetSeverityAction(issueUpdater, userSessionRule); + userSessionRule.set(userSessionMock); } @Test @@ -78,7 +80,7 @@ public class SetSeverityActionTest { Map properties = newHashMap(); properties.put("unknwown", "unknown value"); try { - action.verify(properties, Lists.newArrayList(), MockUserSession.create()); + action.verify(properties, Lists.newArrayList(), new AnonymousMockUserSession()); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("Missing parameter : 'severity'"); @@ -88,14 +90,14 @@ public class SetSeverityActionTest { @Test public void should_support_only_unresolved_issues() { - when(userSession.hasProjectPermission(UserRole.ISSUE_ADMIN, "foo:bar")).thenReturn(true); + when(userSessionMock.hasProjectPermission(UserRole.ISSUE_ADMIN, "foo:bar")).thenReturn(true); assertThat(action.supports(new DefaultIssue().setProjectKey("foo:bar").setResolution(null))).isTrue(); assertThat(action.supports(new DefaultIssue().setProjectKey("foo:bar").setResolution(Issue.RESOLUTION_FIXED))).isFalse(); } @Test public void should_support_only_issues_with_issue_admin_permission() { - when(userSession.hasProjectPermission(UserRole.ISSUE_ADMIN, "foo:bar")).thenReturn(true); + when(userSessionMock.hasProjectPermission(UserRole.ISSUE_ADMIN, "foo:bar")).thenReturn(true); assertThat(action.supports(new DefaultIssue().setProjectKey("foo:bar").setResolution(null))).isTrue(); assertThat(action.supports(new DefaultIssue().setProjectKey("foo:bar2").setResolution(null))).isFalse(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/TransitionActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/TransitionActionTest.java index 9d8afb767ce..86945151ade 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/TransitionActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/TransitionActionTest.java @@ -21,24 +21,32 @@ package org.sonar.server.issue; import com.google.common.collect.Lists; +import java.util.Map; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.issue.Issue; import org.sonar.api.issue.internal.DefaultIssue; import org.sonar.api.issue.internal.IssueChangeContext; import org.sonar.core.issue.workflow.IssueWorkflow; import org.sonar.core.issue.workflow.Transition; -import org.sonar.server.user.MockUserSession; - -import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Maps.newHashMap; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; public class TransitionActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private TransitionAction action; @@ -46,7 +54,7 @@ public class TransitionActionTest { @Before public void before() { - action = new TransitionAction(workflow); + action = new TransitionAction(workflow, userSessionRule); } @Test @@ -88,7 +96,7 @@ public class TransitionActionTest { Map properties = newHashMap(); properties.put("unknwown", transition); try { - action.verify(properties, Lists.newArrayList(), MockUserSession.create()); + action.verify(properties, Lists.newArrayList(), userSessionRule); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("Missing parameter : 'transition'"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/actionplan/ActionPlanServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/actionplan/ActionPlanServiceTest.java index c10fcad35b2..4d17c6e4667 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/actionplan/ActionPlanServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/actionplan/ActionPlanServiceTest.java @@ -47,7 +47,7 @@ import org.sonar.core.resource.ResourceQuery; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.MockUserSession; import org.sonar.server.user.UserSession; import java.util.Collection; @@ -87,9 +87,9 @@ public class ActionPlanServiceTest { String projectKey = "org.sonar.Sample"; - UserSession projectAdministratorUserSession = MockUserSession.create().setLogin("nicolas").setName("Nicolas").addProjectPermissions(UserRole.ADMIN, projectKey); - UserSession projectUserSession = MockUserSession.create().setLogin("nicolas").setName("Nicolas").addProjectPermissions(UserRole.USER, projectKey); - UserSession unauthorizedUserSession = MockUserSession.create().setLogin("nicolas").setName("Nicolas"); + UserSession projectAdministratorUserSession = new MockUserSession("nicolas").setName("Nicolas").addProjectPermissions(UserRole.ADMIN, projectKey); + UserSession projectUserSession = new MockUserSession("nicolas").setName("Nicolas").addProjectPermissions(UserRole.USER, projectKey); + UserSession unauthorizedUserSession = new MockUserSession("nicolas").setName("Nicolas"); private ActionPlanService actionPlanService; diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/AppActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/AppActionTest.java index b36e727f2d7..ee80ba9d5a7 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/AppActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/AppActionTest.java @@ -20,22 +20,24 @@ package org.sonar.server.issue.filter; +import java.util.Arrays; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.core.issue.db.IssueFilterDto; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.Arrays; - import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class AppActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock IssueFilterService service; @@ -48,27 +50,27 @@ public class AppActionTest { @Before public void setUp() { - action = new AppAction(service, writer); + action = new AppAction(service, writer, userSessionRule); tester = new WsTester(new IssueFilterWs(action, mock(ShowAction.class), mock(FavoritesAction.class))); } @Test public void anonymous_app() throws Exception { - MockUserSession.set().setLogin(null); + userSessionRule.anonymous(); tester.newGetRequest("api/issue_filters", "app").execute().assertJson(getClass(), "anonymous_page.json"); } @Test public void logged_in_app() throws Exception { - MockUserSession.set().setLogin("eric").setUserId(123); + userSessionRule.logon("eric").setUserId(123); tester.newGetRequest("api/issue_filters", "app").execute() .assertJson(getClass(), "logged_in_page.json"); } @Test public void logged_in_app_with_favorites() throws Exception { - MockUserSession session = MockUserSession.set().setLogin("eric").setUserId(123); - when(service.findFavoriteFilters(session)).thenReturn(Arrays.asList( + userSessionRule.logon("eric").setUserId(123); + when(service.findFavoriteFilters(userSessionRule)).thenReturn(Arrays.asList( new IssueFilterDto().setId(6L).setName("My issues"), new IssueFilterDto().setId(13L).setName("Blocker issues") )); @@ -78,8 +80,8 @@ public class AppActionTest { @Test public void logged_in_app_with_selected_filter() throws Exception { - MockUserSession session = MockUserSession.set().setLogin("eric").setUserId(123); - when(service.find(13L, session)).thenReturn( + userSessionRule.logon("eric").setUserId(123); + when(service.find(13L, userSessionRule)).thenReturn( new IssueFilterDto().setId(13L).setName("Blocker issues").setData("severity=BLOCKER").setUserLogin("eric") ); @@ -90,8 +92,8 @@ public class AppActionTest { @Test public void app_selected_filter_can_not_be_modified() throws Exception { // logged-in user is 'eric' but filter is owned by 'simon' - MockUserSession session = MockUserSession.set().setLogin("eric").setUserId(123).setGlobalPermissions("none"); - when(service.find(13L, session)).thenReturn( + userSessionRule.logon("eric").setUserId(123).setGlobalPermissions("none"); + when(service.find(13L, userSessionRule)).thenReturn( new IssueFilterDto().setId(13L).setName("Blocker issues").setData("severity=BLOCKER").setUserLogin("simon").setShared(true) ); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/FavoritesActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/FavoritesActionTest.java index 4d4b0816f14..f65c6cc731c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/FavoritesActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/FavoritesActionTest.java @@ -20,22 +20,24 @@ package org.sonar.server.issue.filter; +import java.util.Arrays; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.core.issue.db.IssueFilterDto; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.Arrays; - import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class FavoritesActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock IssueFilterService service; @@ -49,13 +51,13 @@ public class FavoritesActionTest { @Before public void setUp() { - action = new FavoritesAction(service); + action = new FavoritesAction(service, userSessionRule); tester = new WsTester(new IssueFilterWs(mock(AppAction.class), mock(ShowAction.class), action)); } @Test public void favorites_of_anonymous() throws Exception { - MockUserSession.set(); + userSessionRule.logon(); tester.newGetRequest("api/issue_filters", "favorites").execute() .assertJson("{\"favoriteFilters\": []}"); @@ -63,8 +65,8 @@ public class FavoritesActionTest { @Test public void favorites_of_logged_in_user() throws Exception { - MockUserSession session = MockUserSession.set().setLogin("eric").setUserId(123); - when(service.findFavoriteFilters(session)).thenReturn(Arrays.asList( + userSessionRule.logon("eric").setUserId(123); + when(service.findFavoriteFilters(userSessionRule)).thenReturn(Arrays.asList( new IssueFilterDto().setId(13L).setName("Blocker issues").setData("severity=BLOCKER").setUserLogin("simon").setShared(true) )); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterServiceTest.java index cdccfdb2ca9..7d99241c37a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterServiceTest.java @@ -43,7 +43,8 @@ import org.sonar.server.exceptions.UnauthorizedException; import org.sonar.server.issue.IssueQuery; import org.sonar.server.issue.index.IssueDoc; import org.sonar.server.issue.index.IssueIndex; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.AnonymousMockUserSession; +import org.sonar.server.tester.MockUserSession; import org.sonar.server.user.UserSession; import java.util.Collections; @@ -64,7 +65,7 @@ public class IssueFilterServiceTest { IssueIndex issueIndex = mock(IssueIndex.class); AuthorizationDao authorizationDao = mock(AuthorizationDao.class); IssueFilterSerializer issueFilterSerializer = mock(IssueFilterSerializer.class); - UserSession userSession = MockUserSession.create().setLogin("john"); + UserSession userSession = new MockUserSession("john"); IssueFilterService service = new IssueFilterService(issueFilterDao, issueFilterFavouriteDao, issueIndex, authorizationDao, issueFilterSerializer); @Test @@ -110,9 +111,8 @@ public class IssueFilterServiceTest { @Test public void should_not_find_by_id_if_not_logged() { - UserSession userSession = MockUserSession.create().setLogin(null); try { - service.find(1L, userSession); + service.find(1L, new AnonymousMockUserSession()); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(UnauthorizedException.class).hasMessage("User is not logged in"); @@ -144,9 +144,8 @@ public class IssueFilterServiceTest { @Test public void should_not_find_by_user_if_not_logged() { - UserSession userSession = MockUserSession.create().setLogin(null); try { - service.findByUser(userSession); + service.findByUser(new AnonymousMockUserSession()); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(UnauthorizedException.class).hasMessage("User is not logged in"); @@ -174,10 +173,9 @@ public class IssueFilterServiceTest { @Test public void should_not_save_if_not_logged() { - UserSession userSession = MockUserSession.create().setLogin(null); try { IssueFilterDto issueFilter = new IssueFilterDto().setName("My Issue"); - service.save(issueFilter, userSession); + service.save(issueFilter, new AnonymousMockUserSession()); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(UnauthorizedException.class).hasMessage("User is not logged in"); @@ -417,7 +415,7 @@ public class IssueFilterServiceTest { try { IssueFilterDto issueFilter = new IssueFilterDto().setId(1L).setName("My filter").setShared(true).setUserLogin("new.owner"); - service.update(issueFilter, MockUserSession.create().setUserId(1).setLogin(currentUser)); + service.update(issueFilter, new MockUserSession(currentUser).setUserId(1)); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(ForbiddenException.class).hasMessage("User is not authorized to change the owner of this filter"); @@ -535,7 +533,7 @@ public class IssueFilterServiceTest { @Test public void should_execute_from_issue_query() { - IssueQuery issueQuery = IssueQuery.builder().build(); + IssueQuery issueQuery = IssueQuery.builder(userSession).build(); SearchOptions searchOptions = new SearchOptions().setPage(2, 50); SearchResult result = mock(SearchResult.class); @@ -573,10 +571,8 @@ public class IssueFilterServiceTest { @Test public void should_not_find_favourite_issue_filter_if_not_logged() { - UserSession userSession = MockUserSession.create().setLogin(null); - try { - service.findFavoriteFilters(userSession); + service.findFavoriteFilters(new AnonymousMockUserSession()); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(UnauthorizedException.class).hasMessage("User is not logged in"); @@ -662,14 +658,13 @@ public class IssueFilterServiceTest { @Test public void user_can_share_filter_if_logged_and_own_sharing_permission() { when(authorizationDao.selectGlobalPermissions("john")).thenReturn(newArrayList(GlobalPermissions.DASHBOARD_SHARING)); - UserSession userSession = MockUserSession.create().setLogin("john"); + UserSession userSession = new MockUserSession("john"); assertThat(service.canShareFilter(userSession)).isTrue(); - userSession = MockUserSession.create().setLogin(null); - assertThat(service.canShareFilter(userSession)).isFalse(); + assertThat(service.canShareFilter(new AnonymousMockUserSession())).isFalse(); when(authorizationDao.selectGlobalPermissions("john")).thenReturn(Collections.emptyList()); - userSession = MockUserSession.create().setLogin("john"); + userSession = new MockUserSession("john"); assertThat(service.canShareFilter(userSession)).isFalse(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterWriterTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterWriterTest.java index a02a6c1fad0..9460ab54bde 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterWriterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterWriterTest.java @@ -24,7 +24,8 @@ import org.junit.Test; import org.sonar.api.utils.text.JsonWriter; import org.sonar.core.issue.db.IssueFilterDto; import org.sonar.core.permission.GlobalPermissions; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.AnonymousMockUserSession; +import org.sonar.server.tester.MockUserSession; import org.sonar.server.user.UserSession; import java.io.StringWriter; @@ -37,8 +38,7 @@ public class IssueFilterWriterTest { @Test public void write_filter() { - UserSession userSession = MockUserSession.set(); - test(userSession, + test(new AnonymousMockUserSession(), new IssueFilterDto() .setId(13L) .setName("Blocker issues") @@ -59,8 +59,7 @@ public class IssueFilterWriterTest { @Test public void can_modify_if_logged_user_own_filter() { - UserSession userSession = MockUserSession.set().setLogin("simon"); - test(userSession, + test(new MockUserSession("simon"), new IssueFilterDto() .setId(13L) .setName("Blocker issues") @@ -81,7 +80,7 @@ public class IssueFilterWriterTest { @Test public void can_modify_if_logged_user_has_permission() { - UserSession userSession = MockUserSession.set().setLogin("simon").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + UserSession userSession = new MockUserSession("simon").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); test(userSession, new IssueFilterDto() .setId(13L) diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterWsTest.java index f85e678d89f..322945d463c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/IssueFilterWsTest.java @@ -20,17 +20,21 @@ package org.sonar.server.issue.filter; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.api.server.ws.WebService; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @RunWith(MockitoJUnitRunner.class) public class IssueFilterWsTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock IssueFilterService service; @@ -44,7 +48,7 @@ public class IssueFilterWsTest { @Before public void setUp() { - ws = new IssueFilterWs(new AppAction(service, issueFilterWriter), new ShowAction(service, issueFilterWriter), new FavoritesAction(service)); + ws = new IssueFilterWs(new AppAction(service, issueFilterWriter, userSessionRule), new ShowAction(service, issueFilterWriter, userSessionRule), new FavoritesAction(service, userSessionRule)); tester = new WsTester(ws); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/ShowActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/ShowActionTest.java index 7642f62d48a..bf7eff3a078 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/filter/ShowActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/filter/ShowActionTest.java @@ -21,13 +21,14 @@ package org.sonar.server.issue.filter; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.core.issue.db.IssueFilterDto; import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -37,6 +38,8 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class ShowActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock IssueFilterService service; @@ -49,15 +52,15 @@ public class ShowActionTest { @Before public void setUp() { - action = new ShowAction(service, writer); + action = new ShowAction(service, writer, userSessionRule); tester = new WsTester(new IssueFilterWs(mock(AppAction.class), action, mock(FavoritesAction.class))); } @Test public void show_filter() throws Exception { // logged-in user is 'eric' but filter is owned by 'simon' - MockUserSession session = MockUserSession.set().setLogin("eric").setUserId(123).setGlobalPermissions("none"); - when(service.find(13L, session)).thenReturn( + userSessionRule.logon("eric").setUserId(123).setGlobalPermissions("none"); + when(service.find(13L, userSessionRule)).thenReturn( new IssueFilterDto().setId(13L).setName("Blocker issues").setDescription("All Blocker Issues").setData("severity=BLOCKER").setUserLogin("simon").setShared(true) ); @@ -67,8 +70,8 @@ public class ShowActionTest { @Test public void show_unknown_filter() throws Exception { - MockUserSession session = MockUserSession.set().setLogin("eric").setUserId(123).setGlobalPermissions("none"); - when(service.find(42L, session)).thenThrow(new NotFoundException("Filter 42 does not exist")); + userSessionRule.logon("eric").setUserId(123).setGlobalPermissions("none"); + when(service.find(42L, userSessionRule)).thenThrow(new NotFoundException("Filter 42 does not exist")); try { tester.newGetRequest("api/issue_filters", "show").setParam("id", "42").execute(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java index 30b6b500075..01ef670374a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/index/IssueIndexTest.java @@ -22,9 +22,16 @@ package org.sonar.server.issue.index; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterators; import com.google.common.collect.Lists; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; +import javax.annotation.Nullable; import org.assertj.core.api.Fail; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.api.issue.Issue; @@ -43,15 +50,11 @@ import org.sonar.server.es.SearchResult; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.issue.IssueQuery; import org.sonar.server.issue.IssueTesting; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.view.index.ViewDoc; import org.sonar.server.view.index.ViewIndexDefinition; import org.sonar.server.view.index.ViewIndexer; -import javax.annotation.Nullable; - -import java.util.*; - import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; @@ -63,6 +66,8 @@ public class IssueIndexTest { @ClassRule public static EsTester tester = new EsTester().addDefinitions(new IssueIndexDefinition(new Settings()), new ViewIndexDefinition(new Settings())); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); IssueIndex index; @@ -80,7 +85,7 @@ public class IssueIndexTest { when(system.getDefaultTimeZone()).thenReturn(TimeZone.getTimeZone("+01:00")); when(system.now()).thenReturn(System.currentTimeMillis()); - index = new IssueIndex(tester.client(), system); + index = new IssueIndex(tester.client(), system, userSessionRule); } @@ -141,9 +146,9 @@ public class IssueIndexTest { IssueTesting.newDoc("1", ComponentTesting.newFileDto(project)), IssueTesting.newDoc("2", ComponentTesting.newFileDto(project))); - assertThat(index.search(IssueQuery.builder().issueKeys(newArrayList("1", "2")).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().issueKeys(newArrayList("1")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().issueKeys(newArrayList("3", "4")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).issueKeys(newArrayList("1", "2")).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).issueKeys(newArrayList("1")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).issueKeys(newArrayList("3", "4")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -160,8 +165,8 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE5", subModule), IssueTesting.newDoc("ISSUE6", ComponentTesting.newFileDto(subModule))); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList(project.uuid())).build(), new SearchOptions()).getDocs()).hasSize(6); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project.uuid())).build(), new SearchOptions()).getDocs()).hasSize(6); + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -174,7 +179,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", ComponentTesting.newFileDto(project)), IssueTesting.newDoc("ISSUE3", ComponentTesting.newFileDto(project2))); - SearchResult result = index.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("projectUuids"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets(newArrayList("projectUuids"))); assertThat(result.getFacets().getNames()).containsOnly("projectUuids"); assertThat(result.getFacets().get("projectUuids")).containsOnly(entry("ABCD", 2L), entry("EFGH", 1L)); } @@ -191,15 +196,15 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE5", subModule), IssueTesting.newDoc("ISSUE2", file)); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList(project.uuid())).moduleUuids(newArrayList(file.uuid())).build(), new SearchOptions()).getDocs()) + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project.uuid())).moduleUuids(newArrayList(file.uuid())).build(), new SearchOptions()).getDocs()) .isEmpty(); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList(project.uuid())).moduleUuids(newArrayList(module.uuid())).build(), new SearchOptions()).getDocs()) + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project.uuid())).moduleUuids(newArrayList(module.uuid())).build(), new SearchOptions()).getDocs()) .hasSize(1); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList(project.uuid())).moduleUuids(newArrayList(subModule.uuid())).build(), new SearchOptions()).getDocs()) + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project.uuid())).moduleUuids(newArrayList(subModule.uuid())).build(), new SearchOptions()).getDocs()) .hasSize(2); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList(project.uuid())).moduleUuids(newArrayList(project.uuid())).build(), new SearchOptions()).getDocs()) + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project.uuid())).moduleUuids(newArrayList(project.uuid())).build(), new SearchOptions()).getDocs()) .isEmpty(); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList(project.uuid())).moduleUuids(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project.uuid())).moduleUuids(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -221,19 +226,19 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE5", subModule), IssueTesting.newDoc("ISSUE6", file3)); - assertThat(index.search(IssueQuery.builder().fileUuids(newArrayList(file1.uuid(), file2.uuid(), file3.uuid())).build(), new SearchOptions()) + assertThat(index.search(IssueQuery.builder(userSessionRule).fileUuids(newArrayList(file1.uuid(), file2.uuid(), file3.uuid())).build(), new SearchOptions()) .getDocs()).hasSize(3); - assertThat(index.search(IssueQuery.builder().fileUuids(newArrayList(file1.uuid())).build(), new SearchOptions()) + assertThat(index.search(IssueQuery.builder(userSessionRule).fileUuids(newArrayList(file1.uuid())).build(), new SearchOptions()) .getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().moduleRootUuids(newArrayList(subModule.uuid())).build(), new SearchOptions()) + assertThat(index.search(IssueQuery.builder(userSessionRule).moduleRootUuids(newArrayList(subModule.uuid())).build(), new SearchOptions()) .getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().moduleRootUuids(newArrayList(module.uuid())).build(), new SearchOptions()) + assertThat(index.search(IssueQuery.builder(userSessionRule).moduleRootUuids(newArrayList(module.uuid())).build(), new SearchOptions()) .getDocs()).hasSize(4); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList(project.uuid())).build(), new SearchOptions()) + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project.uuid())).build(), new SearchOptions()) .getDocs()).hasSize(6); - assertThat(index.search(IssueQuery.builder().viewUuids(newArrayList(view)).build(), new SearchOptions()) + assertThat(index.search(IssueQuery.builder(userSessionRule).viewUuids(newArrayList(view)).build(), new SearchOptions()) .getDocs()).hasSize(6); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList("unknown")).build(), new SearchOptions()) + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList("unknown")).build(), new SearchOptions()) .getDocs()).isEmpty(); } @@ -256,15 +261,15 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE5", subModule), IssueTesting.newDoc("ISSUE6", file3)); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList(project.uuid())).build(), new SearchOptions()).getDocs()).hasSize(6); - assertThat(index.search(IssueQuery.builder().viewUuids(newArrayList(view)).build(), new SearchOptions()).getDocs()).hasSize(6); - assertThat(index.search(IssueQuery.builder().moduleUuids(newArrayList(module.uuid())).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().moduleUuids(newArrayList(subModule.uuid())).build(), new SearchOptions()).getDocs()).hasSize(2); // XXX + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project.uuid())).build(), new SearchOptions()).getDocs()).hasSize(6); + assertThat(index.search(IssueQuery.builder(userSessionRule).viewUuids(newArrayList(view)).build(), new SearchOptions()).getDocs()).hasSize(6); + assertThat(index.search(IssueQuery.builder(userSessionRule).moduleUuids(newArrayList(module.uuid())).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).moduleUuids(newArrayList(subModule.uuid())).build(), new SearchOptions()).getDocs()).hasSize(2); // XXX // Misleading // ! - assertThat(index.search(IssueQuery.builder().fileUuids(newArrayList(file1.uuid())).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().fileUuids(newArrayList(file1.uuid(), file2.uuid(), file3.uuid())).build(), new SearchOptions()).getDocs()).hasSize(3); + assertThat(index.search(IssueQuery.builder(userSessionRule).fileUuids(newArrayList(file1.uuid())).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).fileUuids(newArrayList(file1.uuid(), file2.uuid(), file3.uuid())).build(), new SearchOptions()).getDocs()).hasSize(3); } @Test @@ -281,7 +286,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE4", file2), IssueTesting.newDoc("ISSUE5", file3)); - SearchResult result = index.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("fileUuids"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets(newArrayList("fileUuids"))); assertThat(result.getFacets().getNames()).containsOnly("fileUuids"); assertThat(result.getFacets().get("fileUuids")) .containsOnly(entry("A", 1L), entry("ABCD", 1L), entry("BCDE", 2L), entry("CDEF", 1L)); @@ -297,9 +302,9 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file1).setDirectoryPath("/src/main/xoo"), IssueTesting.newDoc("ISSUE2", file2).setDirectoryPath("/")); - assertThat(index.search(IssueQuery.builder().directories(newArrayList("/src/main/xoo")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().directories(newArrayList("/")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().directories(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).directories(newArrayList("/src/main/xoo")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).directories(newArrayList("/")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).directories(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -312,7 +317,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file1).setDirectoryPath("/src/main/xoo"), IssueTesting.newDoc("ISSUE2", file2).setDirectoryPath("/")); - SearchResult result = index.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("directories"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets(newArrayList("directories"))); assertThat(result.getFacets().getNames()).containsOnly("directories"); assertThat(result.getFacets().get("directories")).containsOnly(entry("/src/main/xoo", 1L), entry("/", 1L)); } @@ -337,10 +342,10 @@ public class IssueIndexTest { String view2 = "CDEF"; indexView(view2, newArrayList(project2.uuid())); - assertThat(index.search(IssueQuery.builder().viewUuids(newArrayList(view1)).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().viewUuids(newArrayList(view2)).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().viewUuids(newArrayList(view1, view2)).build(), new SearchOptions()).getDocs()).hasSize(3); - assertThat(index.search(IssueQuery.builder().viewUuids(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).viewUuids(newArrayList(view1)).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).viewUuids(newArrayList(view2)).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).viewUuids(newArrayList(view1, view2)).build(), new SearchOptions()).getDocs()).hasSize(3); + assertThat(index.search(IssueQuery.builder(userSessionRule).viewUuids(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -352,9 +357,9 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setSeverity(Severity.INFO), IssueTesting.newDoc("ISSUE2", file).setSeverity(Severity.MAJOR)); - assertThat(index.search(IssueQuery.builder().severities(newArrayList(Severity.INFO, Severity.MAJOR)).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().severities(newArrayList(Severity.INFO)).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().severities(newArrayList(Severity.BLOCKER)).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).severities(newArrayList(Severity.INFO, Severity.MAJOR)).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).severities(newArrayList(Severity.INFO)).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).severities(newArrayList(Severity.BLOCKER)).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -367,7 +372,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setSeverity(Severity.INFO), IssueTesting.newDoc("ISSUE3", file).setSeverity(Severity.MAJOR)); - SearchResult result = index.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("severities"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets(newArrayList("severities"))); assertThat(result.getFacets().getNames()).containsOnly("severities"); assertThat(result.getFacets().get("severities")).containsOnly(entry("INFO", 2L), entry("MAJOR", 1L)); } @@ -381,9 +386,9 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setStatus(Issue.STATUS_CLOSED), IssueTesting.newDoc("ISSUE2", file).setStatus(Issue.STATUS_OPEN)); - assertThat(index.search(IssueQuery.builder().statuses(newArrayList(Issue.STATUS_CLOSED, Issue.STATUS_OPEN)).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().statuses(newArrayList(Issue.STATUS_CLOSED)).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().statuses(newArrayList(Issue.STATUS_CONFIRMED)).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).statuses(newArrayList(Issue.STATUS_CLOSED, Issue.STATUS_OPEN)).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).statuses(newArrayList(Issue.STATUS_CLOSED)).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).statuses(newArrayList(Issue.STATUS_CONFIRMED)).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -396,7 +401,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setStatus(Issue.STATUS_CLOSED), IssueTesting.newDoc("ISSUE3", file).setStatus(Issue.STATUS_OPEN)); - SearchResult result = index.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("statuses"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets(newArrayList("statuses"))); assertThat(result.getFacets().getNames()).containsOnly("statuses"); assertThat(result.getFacets().get("statuses")).containsOnly(entry("CLOSED", 2L), entry("OPEN", 1L)); } @@ -410,10 +415,10 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setResolution(Issue.RESOLUTION_FALSE_POSITIVE), IssueTesting.newDoc("ISSUE2", file).setResolution(Issue.RESOLUTION_FIXED)); - assertThat(index.search(IssueQuery.builder().resolutions(newArrayList(Issue.RESOLUTION_FALSE_POSITIVE, Issue.RESOLUTION_FIXED)).build(), new SearchOptions()).getDocs()) + assertThat(index.search(IssueQuery.builder(userSessionRule).resolutions(newArrayList(Issue.RESOLUTION_FALSE_POSITIVE, Issue.RESOLUTION_FIXED)).build(), new SearchOptions()).getDocs()) .hasSize(2); - assertThat(index.search(IssueQuery.builder().resolutions(newArrayList(Issue.RESOLUTION_FALSE_POSITIVE)).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().resolutions(newArrayList(Issue.RESOLUTION_REMOVED)).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).resolutions(newArrayList(Issue.RESOLUTION_FALSE_POSITIVE)).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).resolutions(newArrayList(Issue.RESOLUTION_REMOVED)).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -426,7 +431,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setResolution(Issue.RESOLUTION_FALSE_POSITIVE), IssueTesting.newDoc("ISSUE3", file).setResolution(Issue.RESOLUTION_FIXED)); - SearchResult result = index.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("resolutions"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets(newArrayList("resolutions"))); assertThat(result.getFacets().getNames()).containsOnly("resolutions"); assertThat(result.getFacets().get("resolutions")).containsOnly(entry("FALSE-POSITIVE", 2L), entry("FIXED", 1L)); } @@ -441,9 +446,9 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setStatus(Issue.STATUS_OPEN).setResolution(null), IssueTesting.newDoc("ISSUE3", file).setStatus(Issue.STATUS_OPEN).setResolution(null)); - assertThat(index.search(IssueQuery.builder().resolved(true).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().resolved(false).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().resolved(null).build(), new SearchOptions()).getDocs()).hasSize(3); + assertThat(index.search(IssueQuery.builder(userSessionRule).resolved(true).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).resolved(false).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).resolved(null).build(), new SearchOptions()).getDocs()).hasSize(3); } @Test @@ -455,9 +460,9 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setActionPlanKey("plan1"), IssueTesting.newDoc("ISSUE2", file).setActionPlanKey("plan2")); - assertThat(index.search(IssueQuery.builder().actionPlans(newArrayList("plan1")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().actionPlans(newArrayList("plan1", "plan2")).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().actionPlans(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).actionPlans(newArrayList("plan1")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).actionPlans(newArrayList("plan1", "plan2")).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).actionPlans(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -469,7 +474,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setActionPlanKey("plan1"), IssueTesting.newDoc("ISSUE2", file).setActionPlanKey("plan2")); - SearchResult result = index.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("actionPlans"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets(newArrayList("actionPlans"))); assertThat(result.getFacets().getNames()).containsOnly("actionPlans"); assertThat(result.getFacets().get("actionPlans")).containsOnly(entry("plan1", 1L), entry("plan2", 1L)); } @@ -484,9 +489,9 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setActionPlanKey(null), IssueTesting.newDoc("ISSUE3", file).setActionPlanKey(null)); - assertThat(index.search(IssueQuery.builder().planned(true).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().planned(false).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().planned(null).build(), new SearchOptions()).getDocs()).hasSize(3); + assertThat(index.search(IssueQuery.builder(userSessionRule).planned(true).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).planned(false).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).planned(null).build(), new SearchOptions()).getDocs()).hasSize(3); } @Test @@ -497,8 +502,8 @@ public class IssueIndexTest { indexIssues(IssueTesting.newDoc("ISSUE1", file).setRuleKey(ruleKey.toString())); - assertThat(index.search(IssueQuery.builder().rules(newArrayList(ruleKey)).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().rules(newArrayList(RuleKey.of("rule", "without issue"))).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).rules(newArrayList(ruleKey)).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).rules(newArrayList(RuleKey.of("rule", "without issue"))).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -509,9 +514,9 @@ public class IssueIndexTest { indexIssues(IssueTesting.newDoc("ISSUE1", file).setRuleKey(ruleKey.toString()).setLanguage("xoo")); - assertThat(index.search(IssueQuery.builder().languages(newArrayList("xoo")).build(), + assertThat(index.search(IssueQuery.builder(userSessionRule).languages(newArrayList("xoo")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().languages(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).languages(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -522,7 +527,7 @@ public class IssueIndexTest { indexIssues(IssueTesting.newDoc("ISSUE1", file).setRuleKey(ruleKey.toString()).setLanguage("xoo")); - SearchResult result = index.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("languages"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets(newArrayList("languages"))); assertThat(result.getFacets().getNames()).containsOnly("languages"); assertThat(result.getFacets().get("languages")).containsOnly(entry("xoo", 1L)); } @@ -537,9 +542,9 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setAssignee("simon"), IssueTesting.newDoc("ISSUE3", file).setAssignee(null)); - assertThat(index.search(IssueQuery.builder().assignees(newArrayList("steph")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().assignees(newArrayList("steph", "simon")).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().assignees(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).assignees(newArrayList("steph")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).assignees(newArrayList("steph", "simon")).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).assignees(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -553,7 +558,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE3", file).setAssignee("simon"), IssueTesting.newDoc("ISSUE4", file).setAssignee(null)); - SearchResult result = index.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("assignees"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets(newArrayList("assignees"))); assertThat(result.getFacets().getNames()).containsOnly("assignees"); assertThat(result.getFacets().get("assignees")).containsOnly(entry("steph", 1L), entry("simon", 2L), entry("", 1L)); } @@ -569,7 +574,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE3", file).setAssignee("simon"), IssueTesting.newDoc("ISSUE4", file).setAssignee(null)); - SearchResult result = index.search(IssueQuery.builder().assignees(Arrays.asList("j-b")).build(), new SearchOptions().addFacets(newArrayList("assignees"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).assignees(Arrays.asList("j-b")).build(), new SearchOptions().addFacets(newArrayList("assignees"))); assertThat(result.getFacets().getNames()).containsOnly("assignees"); assertThat(result.getFacets().get("assignees")).containsOnly(entry("j-b", 1L), entry("simon", 2L), entry("", 1L)); } @@ -584,9 +589,9 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setAssignee(null), IssueTesting.newDoc("ISSUE3", file).setAssignee(null)); - assertThat(index.search(IssueQuery.builder().assigned(true).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().assigned(false).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().assigned(null).build(), new SearchOptions()).getDocs()).hasSize(3); + assertThat(index.search(IssueQuery.builder(userSessionRule).assigned(true).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).assigned(false).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).assigned(null).build(), new SearchOptions()).getDocs()).hasSize(3); } @Test @@ -598,9 +603,9 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setReporter("fabrice"), IssueTesting.newDoc("ISSUE2", file).setReporter("stephane")); - assertThat(index.search(IssueQuery.builder().reporters(newArrayList("fabrice", "stephane")).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().reporters(newArrayList("fabrice")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().reporters(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).reporters(newArrayList("fabrice", "stephane")).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).reporters(newArrayList("fabrice")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).reporters(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -613,9 +618,9 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setAuthorLogin("simon"), IssueTesting.newDoc("ISSUE3", file).setAssignee(null)); - assertThat(index.search(IssueQuery.builder().authors(newArrayList("steph")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().authors(newArrayList("steph", "simon")).build(), new SearchOptions()).getDocs()).hasSize(2); - assertThat(index.search(IssueQuery.builder().authors(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).authors(newArrayList("steph")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).authors(newArrayList("steph", "simon")).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).authors(newArrayList("unknown")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -629,7 +634,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE3", file).setAuthorLogin("simon"), IssueTesting.newDoc("ISSUE4", file).setAuthorLogin(null)); - SearchResult result = index.search(IssueQuery.builder().build(), new SearchOptions().addFacets(newArrayList("authors"))); + SearchResult result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().addFacets(newArrayList("authors"))); assertThat(result.getFacets().getNames()).containsOnly("authors"); assertThat(result.getFacets().get("authors")).containsOnly(entry("steph", 1L), entry("simon", 2L)); } @@ -643,11 +648,11 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setFuncCreationDate(DateUtils.parseDate("2014-09-20")), IssueTesting.newDoc("ISSUE2", file).setFuncCreationDate(DateUtils.parseDate("2014-09-23"))); - assertThat(index.search(IssueQuery.builder().createdAfter(DateUtils.parseDate("2014-09-19")).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).createdAfter(DateUtils.parseDate("2014-09-19")).build(), new SearchOptions()).getDocs()).hasSize(2); // Lower bound is excluded - assertThat(index.search(IssueQuery.builder().createdAfter(DateUtils.parseDate("2014-09-20")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().createdAfter(DateUtils.parseDate("2014-09-21")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().createdAfter(DateUtils.parseDate("2014-09-25")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).createdAfter(DateUtils.parseDate("2014-09-20")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).createdAfter(DateUtils.parseDate("2014-09-21")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).createdAfter(DateUtils.parseDate("2014-09-25")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -659,11 +664,11 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setFuncCreationDate(DateUtils.parseDate("2014-09-20")), IssueTesting.newDoc("ISSUE2", file).setFuncCreationDate(DateUtils.parseDate("2014-09-23"))); - assertThat(index.search(IssueQuery.builder().createdBefore(DateUtils.parseDate("2014-09-19")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).createdBefore(DateUtils.parseDate("2014-09-19")).build(), new SearchOptions()).getDocs()).isEmpty(); // Upper bound is excluded - assertThat(index.search(IssueQuery.builder().createdBefore(DateUtils.parseDate("2014-09-20")).build(), new SearchOptions()).getDocs()).isEmpty(); - assertThat(index.search(IssueQuery.builder().createdBefore(DateUtils.parseDate("2014-09-21")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().createdBefore(DateUtils.parseDate("2014-09-25")).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(index.search(IssueQuery.builder(userSessionRule).createdBefore(DateUtils.parseDate("2014-09-20")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).createdBefore(DateUtils.parseDate("2014-09-21")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).createdBefore(DateUtils.parseDate("2014-09-25")).build(), new SearchOptions()).getDocs()).hasSize(2); } @Test @@ -676,37 +681,37 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setFuncCreationDate(DateUtils.parseDate("2014-09-23"))); // 19 < createdAt < 25 - assertThat(index.search(IssueQuery.builder() + assertThat(index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDate("2014-09-19")).createdBefore(DateUtils.parseDate("2014-09-25")) .build(), new SearchOptions()).getDocs()).hasSize(2); // 20 < createdAt < 25: excludes first issue - assertThat(index.search(IssueQuery.builder() + assertThat(index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDate("2014-09-20")).createdBefore(DateUtils.parseDate("2014-09-25")) .build(), new SearchOptions()).getDocs()).hasSize(1); // 21 < createdAt < 25 - assertThat(index.search(IssueQuery.builder() + assertThat(index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDate("2014-09-21")).createdBefore(DateUtils.parseDate("2014-09-25")) .build(), new SearchOptions()).getDocs()).hasSize(1); // 21 < createdAt < 24 - assertThat(index.search(IssueQuery.builder() + assertThat(index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDate("2014-09-21")).createdBefore(DateUtils.parseDate("2014-09-24")) .build(), new SearchOptions()).getDocs()).hasSize(1); // 21 < createdAt < 23: excludes second issue - assertThat(index.search(IssueQuery.builder() + assertThat(index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDate("2014-09-21")).createdBefore(DateUtils.parseDate("2014-09-23")) .build(), new SearchOptions()).getDocs()).isEmpty(); // 19 < createdAt < 21: only first issue - assertThat(index.search(IssueQuery.builder() + assertThat(index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDate("2014-09-19")).createdBefore(DateUtils.parseDate("2014-09-21")) .build(), new SearchOptions()).getDocs()).hasSize(1); // 20 < createdAt < 20: nothing - assertThat(index.search(IssueQuery.builder() + assertThat(index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDate("2014-09-20")).createdBefore(DateUtils.parseDate("2014-09-20")) .build(), new SearchOptions()).getDocs()).isEmpty(); } @@ -714,7 +719,7 @@ public class IssueIndexTest { @Test public void filter_by_created_before_must_be_lower_than_after() { try { - index.search(IssueQuery.builder().createdAfter(DateUtils.parseDate("2014-09-20")).createdBefore(DateUtils.parseDate("2014-09-19")).build(), new SearchOptions()); + index.search(IssueQuery.builder(userSessionRule).createdAfter(DateUtils.parseDate("2014-09-20")).createdBefore(DateUtils.parseDate("2014-09-19")).build(), new SearchOptions()); Fail.failBecauseExceptionWasNotThrown(IllegalArgumentException.class); } catch (IllegalArgumentException exception) { assertThat(exception.getMessage()).isEqualTo("Start bound cannot be larger than end bound"); @@ -724,7 +729,7 @@ public class IssueIndexTest { @Test public void filter_by_created_after_must_not_be_in_future() { try { - index.search(IssueQuery.builder().createdAfter(new Date(Long.MAX_VALUE)).build(), new SearchOptions()); + index.search(IssueQuery.builder(userSessionRule).createdAfter(new Date(Long.MAX_VALUE)).build(), new SearchOptions()); Fail.failBecauseExceptionWasNotThrown(IllegalArgumentException.class); } catch (IllegalArgumentException exception) { assertThat(exception.getMessage()).isEqualTo("Start bound cannot be in the future"); @@ -738,8 +743,8 @@ public class IssueIndexTest { indexIssues(IssueTesting.newDoc("ISSUE1", file).setFuncCreationDate(DateUtils.parseDate("2014-09-20"))); - assertThat(index.search(IssueQuery.builder().createdAt(DateUtils.parseDate("2014-09-20")).build(), new SearchOptions()).getDocs()).hasSize(1); - assertThat(index.search(IssueQuery.builder().createdAt(DateUtils.parseDate("2014-09-21")).build(), new SearchOptions()).getDocs()).isEmpty(); + assertThat(index.search(IssueQuery.builder(userSessionRule).createdAt(DateUtils.parseDate("2014-09-20")).build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).createdAt(DateUtils.parseDate("2014-09-21")).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -747,7 +752,7 @@ public class IssueIndexTest { SearchOptions options = fixtureForCreatedAtFacet(); - IssueQuery query = IssueQuery.builder() + IssueQuery query = IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDateTime("2014-09-01T00:00:00+0100")) .createdBefore(DateUtils.parseDateTime("2014-09-08T00:00:00+0100")) .checkAuthorization(false) @@ -770,7 +775,7 @@ public class IssueIndexTest { SearchOptions SearchOptions = fixtureForCreatedAtFacet(); - Map createdAt = index.search(IssueQuery.builder() + Map createdAt = index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDateTime("2014-09-01T00:00:00+0100")) .createdBefore(DateUtils.parseDateTime("2014-09-21T00:00:00+0100")).build(), SearchOptions).getFacets().get("createdAt"); @@ -786,7 +791,7 @@ public class IssueIndexTest { SearchOptions SearchOptions = fixtureForCreatedAtFacet(); - Map createdAt = index.search(IssueQuery.builder() + Map createdAt = index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDateTime("2014-09-01T00:00:00+0100")) .createdBefore(DateUtils.parseDateTime("2015-01-19T00:00:00+0100")).build(), SearchOptions).getFacets().get("createdAt"); @@ -803,7 +808,7 @@ public class IssueIndexTest { public void facet_on_created_at_with_more_than_20_months() { SearchOptions SearchOptions = fixtureForCreatedAtFacet(); - Map createdAt = index.search(IssueQuery.builder() + Map createdAt = index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDateTime("2011-01-01T00:00:00+0100")) .createdBefore(DateUtils.parseDateTime("2016-01-01T00:00:00+0100")).build(), SearchOptions).getFacets().get("createdAt"); @@ -821,7 +826,7 @@ public class IssueIndexTest { public void facet_on_created_at_with_bounds_outside_of_data() { SearchOptions options = fixtureForCreatedAtFacet(); - Map createdAt = index.search(IssueQuery.builder() + Map createdAt = index.search(IssueQuery.builder(userSessionRule) .createdAfter(DateUtils.parseDateTime("2009-01-01T00:00:00+0100")) .createdBefore(DateUtils.parseDateTime("2016-01-01T00:00:00+0100")) .build(), options).getFacets().get("createdAt"); @@ -840,7 +845,7 @@ public class IssueIndexTest { public void facet_on_created_at_without_start_bound() { SearchOptions SearchOptions = fixtureForCreatedAtFacet(); - Map createdAt = index.search(IssueQuery.builder() + Map createdAt = index.search(IssueQuery.builder(userSessionRule) .createdBefore(DateUtils.parseDateTime("2016-01-01T00:00:00+0100")).build(), SearchOptions).getFacets().get("createdAt"); assertThat(createdAt).containsOnly( @@ -855,7 +860,7 @@ public class IssueIndexTest { public void facet_on_created_at_without_issues() { SearchOptions SearchOptions = new SearchOptions().addFacets("createdAt"); - Map createdAt = index.search(IssueQuery.builder().build(), + Map createdAt = index.search(IssueQuery.builder(userSessionRule).build(), SearchOptions).getFacets().get("createdAt"); assertThat(createdAt).isEmpty(); } @@ -885,17 +890,17 @@ public class IssueIndexTest { indexIssues(IssueTesting.newDoc("ISSUE" + i, file)); } - IssueQuery.Builder query = IssueQuery.builder(); + IssueQuery.Builder query = IssueQuery.builder(userSessionRule); // There are 12 issues in total, with 10 issues per page, the page 2 should only contain 2 elements SearchResult result = index.search(query.build(), new SearchOptions().setPage(2, 10)); assertThat(result.getDocs()).hasSize(2); assertThat(result.getTotal()).isEqualTo(12); - result = index.search(IssueQuery.builder().build(), new SearchOptions().setOffset(0).setLimit(5)); + result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().setOffset(0).setLimit(5)); assertThat(result.getDocs()).hasSize(5); assertThat(result.getTotal()).isEqualTo(12); - result = index.search(IssueQuery.builder().build(), new SearchOptions().setOffset(2).setLimit(0)); + result = index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions().setOffset(2).setLimit(0)); assertThat(result.getDocs()).hasSize(10); assertThat(result.getTotal()).isEqualTo(12); } @@ -911,7 +916,7 @@ public class IssueIndexTest { } indexIssues(issues.toArray(new IssueDoc[] {})); - IssueQuery.Builder query = IssueQuery.builder(); + IssueQuery.Builder query = IssueQuery.builder(userSessionRule); SearchResult result = index.search(query.build(), new SearchOptions().setLimit(Integer.MAX_VALUE)); assertThat(result.getDocs()).hasSize(SearchOptions.MAX_LIMIT); } @@ -926,13 +931,13 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setStatus(Issue.STATUS_CLOSED), IssueTesting.newDoc("ISSUE3", file).setStatus(Issue.STATUS_REOPENED)); - IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_STATUS).asc(true); + IssueQuery.Builder query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_STATUS).asc(true); SearchResult result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs().get(0).status()).isEqualTo(Issue.STATUS_CLOSED); assertThat(result.getDocs().get(1).status()).isEqualTo(Issue.STATUS_OPEN); assertThat(result.getDocs().get(2).status()).isEqualTo(Issue.STATUS_REOPENED); - query = IssueQuery.builder().sort(IssueQuery.SORT_BY_STATUS).asc(false); + query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_STATUS).asc(false); result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs().get(0).status()).isEqualTo(Issue.STATUS_REOPENED); assertThat(result.getDocs().get(1).status()).isEqualTo(Issue.STATUS_OPEN); @@ -951,7 +956,7 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE4", file).setSeverity(Severity.CRITICAL), IssueTesting.newDoc("ISSUE5", file).setSeverity(Severity.MAJOR)); - IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_SEVERITY).asc(true); + IssueQuery.Builder query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_SEVERITY).asc(true); SearchResult result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs().get(0).severity()).isEqualTo(Severity.INFO); assertThat(result.getDocs().get(1).severity()).isEqualTo(Severity.MINOR); @@ -959,7 +964,7 @@ public class IssueIndexTest { assertThat(result.getDocs().get(3).severity()).isEqualTo(Severity.CRITICAL); assertThat(result.getDocs().get(4).severity()).isEqualTo(Severity.BLOCKER); - query = IssueQuery.builder().sort(IssueQuery.SORT_BY_SEVERITY).asc(false); + query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_SEVERITY).asc(false); result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs().get(0).severity()).isEqualTo(Severity.BLOCKER); assertThat(result.getDocs().get(1).severity()).isEqualTo(Severity.CRITICAL); @@ -977,13 +982,13 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setAssignee("steph"), IssueTesting.newDoc("ISSUE2", file).setAssignee("simon")); - IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_ASSIGNEE).asc(true); + IssueQuery.Builder query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_ASSIGNEE).asc(true); SearchResult result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(2); assertThat(result.getDocs().get(0).assignee()).isEqualTo("simon"); assertThat(result.getDocs().get(1).assignee()).isEqualTo("steph"); - query = IssueQuery.builder().sort(IssueQuery.SORT_BY_ASSIGNEE).asc(false); + query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_ASSIGNEE).asc(false); result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(2); assertThat(result.getDocs().get(0).assignee()).isEqualTo("steph"); @@ -999,13 +1004,13 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setFuncCreationDate(DateUtils.parseDateTime("2014-09-23T00:00:00+0100")), IssueTesting.newDoc("ISSUE2", file).setFuncCreationDate(DateUtils.parseDateTime("2014-09-24T00:00:00+0100"))); - IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CREATION_DATE).asc(true); + IssueQuery.Builder query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_CREATION_DATE).asc(true); SearchResult result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(2); assertThat(result.getDocs().get(0).creationDate()).isEqualTo(DateUtils.parseDateTime("2014-09-23T00:00:00+0100")); assertThat(result.getDocs().get(1).creationDate()).isEqualTo(DateUtils.parseDateTime("2014-09-24T00:00:00+0100")); - query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CREATION_DATE).asc(false); + query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_CREATION_DATE).asc(false); result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(2); assertThat(result.getDocs().get(0).creationDate()).isEqualTo(DateUtils.parseDateTime("2014-09-24T00:00:00+0100")); @@ -1021,13 +1026,13 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE1", file).setFuncUpdateDate(DateUtils.parseDateTime("2014-09-23T00:00:00+0100")), IssueTesting.newDoc("ISSUE2", file).setFuncUpdateDate(DateUtils.parseDateTime("2014-09-24T00:00:00+0100"))); - IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_UPDATE_DATE).asc(true); + IssueQuery.Builder query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_UPDATE_DATE).asc(true); SearchResult result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(2); assertThat(result.getDocs().get(0).updateDate()).isEqualTo(DateUtils.parseDateTime("2014-09-23T00:00:00+0100")); assertThat(result.getDocs().get(1).updateDate()).isEqualTo(DateUtils.parseDateTime("2014-09-24T00:00:00+0100")); - query = IssueQuery.builder().sort(IssueQuery.SORT_BY_UPDATE_DATE).asc(false); + query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_UPDATE_DATE).asc(false); result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(2); assertThat(result.getDocs().get(0).updateDate()).isEqualTo(DateUtils.parseDateTime("2014-09-24T00:00:00+0100")); @@ -1044,14 +1049,14 @@ public class IssueIndexTest { IssueTesting.newDoc("ISSUE2", file).setFuncCloseDate(DateUtils.parseDateTime("2014-09-24T00:00:00+0100")), IssueTesting.newDoc("ISSUE3", file).setFuncCloseDate(null)); - IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CLOSE_DATE).asc(true); + IssueQuery.Builder query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_CLOSE_DATE).asc(true); SearchResult result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(3); assertThat(result.getDocs().get(0).closeDate()).isNull(); assertThat(result.getDocs().get(1).closeDate()).isEqualTo(DateUtils.parseDateTime("2014-09-23T00:00:00+0100")); assertThat(result.getDocs().get(2).closeDate()).isEqualTo(DateUtils.parseDateTime("2014-09-24T00:00:00+0100")); - query = IssueQuery.builder().sort(IssueQuery.SORT_BY_CLOSE_DATE).asc(false); + query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_CLOSE_DATE).asc(false); result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(3); assertThat(result.getDocs().get(0).closeDate()).isEqualTo(DateUtils.parseDateTime("2014-09-24T00:00:00+0100")); @@ -1078,7 +1083,7 @@ public class IssueIndexTest { IssueTesting.newDoc("F2_3", file2).setLine(109)); // ascending sort -> F1 then F2. Line "0" first. - IssueQuery.Builder query = IssueQuery.builder().sort(IssueQuery.SORT_BY_FILE_LINE).asc(true); + IssueQuery.Builder query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_FILE_LINE).asc(true); SearchResult result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(6); assertThat(result.getDocs().get(0).key()).isEqualTo("F1_1"); @@ -1089,7 +1094,7 @@ public class IssueIndexTest { assertThat(result.getDocs().get(5).key()).isEqualTo("F2_3"); // descending sort -> F2 then F1 - query = IssueQuery.builder().sort(IssueQuery.SORT_BY_FILE_LINE).asc(false); + query = IssueQuery.builder(userSessionRule).sort(IssueQuery.SORT_BY_FILE_LINE).asc(false); result = index.search(query.build(), new SearchOptions()); assertThat(result.getDocs()).hasSize(6); assertThat(result.getDocs().get(0).key()).isEqualTo("F2_3"); @@ -1117,20 +1122,20 @@ public class IssueIndexTest { // project3 can be seen by nobody indexIssue(IssueTesting.newDoc("ISSUE3", file3), null, null); - MockUserSession.set().setUserGroups("sonar-users"); - assertThat(index.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(1); + userSessionRule.logon().setUserGroups("sonar-users"); + assertThat(index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions()).getDocs()).hasSize(1); - MockUserSession.set().setUserGroups("sonar-admins"); - assertThat(index.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(1); + userSessionRule.logon().setUserGroups("sonar-admins"); + assertThat(index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions()).getDocs()).hasSize(1); - MockUserSession.set().setUserGroups("sonar-users", "sonar-admins"); - assertThat(index.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(2); + userSessionRule.logon().setUserGroups("sonar-users", "sonar-admins"); + assertThat(index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions()).getDocs()).hasSize(2); - MockUserSession.set().setUserGroups("another group"); - assertThat(index.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).isEmpty(); + userSessionRule.logon().setUserGroups("another group"); + assertThat(index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions()).getDocs()).isEmpty(); - MockUserSession.set().setUserGroups("sonar-users", "sonar-admins"); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList(project3.uuid())).build(), new SearchOptions()).getDocs()).isEmpty(); + userSessionRule.logon().setUserGroups("sonar-users", "sonar-admins"); + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project3.uuid())).build(), new SearchOptions()).getDocs()).isEmpty(); } @Test @@ -1148,18 +1153,18 @@ public class IssueIndexTest { indexIssue(IssueTesting.newDoc("ISSUE2", file2), null, "max"); indexIssue(IssueTesting.newDoc("ISSUE3", file3), null, null); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); - assertThat(index.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(1); + assertThat(index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions()).getDocs()).hasSize(1); - MockUserSession.set().setLogin("max"); - assertThat(index.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(1); + userSessionRule.logon("max"); + assertThat(index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions()).getDocs()).hasSize(1); - MockUserSession.set().setLogin("another guy"); - assertThat(index.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(0); + userSessionRule.logon("another guy"); + assertThat(index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions()).getDocs()).hasSize(0); - MockUserSession.set().setLogin("john"); - assertThat(index.search(IssueQuery.builder().projectUuids(newArrayList(project3.key())).build(), new SearchOptions()).getDocs()).hasSize(0); + userSessionRule.logon("john"); + assertThat(index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project3.key())).build(), new SearchOptions()).getDocs()).hasSize(0); } @Test @@ -1174,8 +1179,8 @@ public class IssueIndexTest { indexIssue(IssueTesting.newDoc("ISSUE1", file1), "sonar-users", "john"); indexIssue(IssueTesting.newDoc("ISSUE2", file2), null, "max"); - MockUserSession.set().setLogin("john").setUserGroups("sonar-users"); - assertThat(index.search(IssueQuery.builder().build(), new SearchOptions()).getDocs()).hasSize(1); + userSessionRule.logon("john").setUserGroups("sonar-users"); + assertThat(index.search(IssueQuery.builder(userSessionRule).build(), new SearchOptions()).getDocs()).hasSize(1); } @Test @@ -1197,7 +1202,7 @@ public class IssueIndexTest { index.deleteClosedIssuesOfProjectBefore(project.uuid(), yesterday); // ASSERT - List issues = index.search(IssueQuery.builder().projectUuids(newArrayList(project.uuid())).build(), new SearchOptions()).getDocs(); + List issues = index.search(IssueQuery.builder(userSessionRule).projectUuids(newArrayList(project.uuid())).build(), new SearchOptions()).getDocs(); List dates = newArrayList(); for (IssueDoc issue : issues) { dates.add(issue.closeDate()); @@ -1287,10 +1292,10 @@ public class IssueIndexTest { // project3 can be seen by nobody indexIssue(IssueTesting.newDoc("ISSUE3", file2), null, null); - MockUserSession.set().setUserGroups("sonar-users"); + userSessionRule.setUserGroups("sonar-users"); assertThat(Lists.newArrayList(index.selectIssuesForBatch(project1))).hasSize(1); - MockUserSession.set().setUserGroups("another group"); + userSessionRule.setUserGroups("another group"); assertThat(Lists.newArrayList(index.selectIssuesForBatch(project2))).isEmpty(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueActionsWriterTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueActionsWriterTest.java index ef2f33b5ee0..28ba950a7f9 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueActionsWriterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueActionsWriterTest.java @@ -20,7 +20,9 @@ package org.sonar.server.issue.ws; +import java.io.StringWriter; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -34,11 +36,9 @@ import org.sonar.api.web.UserRole; import org.sonar.core.issue.workflow.Transition; import org.sonar.server.issue.ActionService; import org.sonar.server.issue.IssueService; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.test.JsonAssert; -import java.io.StringWriter; - import static com.google.common.collect.Lists.newArrayList; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; @@ -46,6 +46,8 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class IssueActionsWriterTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock IssueService issueService; @@ -57,7 +59,7 @@ public class IssueActionsWriterTest { @Before public void setUp() { - writer = new IssueActionsWriter(issueService, actionService); + writer = new IssueActionsWriter(issueService, actionService, userSessionRule); } @Test @@ -70,7 +72,7 @@ public class IssueActionsWriterTest { .setProjectKey("sample") .setRuleKey(RuleKey.of("squid", "AvoidCycle")); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.ISSUE_ADMIN, "ABCD"); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.ISSUE_ADMIN, "ABCD"); testActions(issue, "{\"actions\": " + @@ -87,7 +89,7 @@ public class IssueActionsWriterTest { .setProjectKey("sample") .setRuleKey(RuleKey.of("squid", "AvoidCycle")); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); Action action = mock(Action.class); when(action.key()).thenReturn("link-to-jira"); when(actionService.listAvailableActions(eq(issue))).thenReturn(newArrayList(action)); @@ -108,7 +110,7 @@ public class IssueActionsWriterTest { .setRuleKey(RuleKey.of("squid", "AvoidCycle")) .setResolution("CLOSED"); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); testActions(issue, "{\"actions\": " + @@ -125,8 +127,6 @@ public class IssueActionsWriterTest { .setProjectKey("sample") .setRuleKey(RuleKey.of("squid", "AvoidCycle")); - MockUserSession.set(); - testActions(issue, "{\"actions\": []}"); } @@ -140,7 +140,7 @@ public class IssueActionsWriterTest { .setRuleKey(RuleKey.of("squid", "AvoidCycle")) .setAssignee("john"); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); testActions(issue, "{\"actions\": " + @@ -158,7 +158,7 @@ public class IssueActionsWriterTest { .setRuleKey(RuleKey.of("squid", "AvoidCycle")); when(issueService.listTransitions(eq(issue))).thenReturn(newArrayList(Transition.create("reopen", "RESOLVED", "REOPEN"))); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); testTransitions(issue, "{\"transitions\": [\n" + @@ -174,7 +174,7 @@ public class IssueActionsWriterTest { .setProjectKey("sample") .setRuleKey(RuleKey.of("squid", "AvoidCycle")); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); testTransitions(issue, "{\"transitions\": []}"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowActionTest.java index 86828306900..07923c3b454 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/IssueShowActionTest.java @@ -21,6 +21,9 @@ package org.sonar.server.issue.ws; import com.google.common.collect.Lists; +import java.util.Date; +import java.util.List; +import java.util.Locale; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -56,14 +59,10 @@ import org.sonar.server.issue.actionplan.ActionPlanService; import org.sonar.server.rule.Rule; import org.sonar.server.rule.RuleService; import org.sonar.server.source.SourceService; -import org.sonar.server.user.MockUserSession; -import org.sonar.server.user.UserSession; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.user.ThreadLocalUserSession; import org.sonar.server.ws.WsTester; -import java.util.Date; -import java.util.List; -import java.util.Locale; - import static com.google.common.collect.Lists.newArrayList; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; @@ -76,6 +75,9 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class IssueShowActionTest { + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + @Mock DbClient dbClient; @@ -142,8 +144,10 @@ public class IssueShowActionTest { when(i18n.message(any(Locale.class), eq("created"), eq((String) null))).thenReturn("Created"); tester = new WsTester(new IssuesWs( - new IssueShowAction(dbClient, issueService, issueChangelogService, commentService, - new IssueActionsWriter(issueService, actionService), actionPlanService, userFinder, debtModel, ruleService, i18n, durations) + new IssueShowAction( + dbClient, issueService, issueChangelogService, commentService, + new IssueActionsWriter(issueService, actionService, userSessionRule), + actionPlanService, userFinder, debtModel, ruleService, i18n, durations, userSessionRule) )); } @@ -182,7 +186,6 @@ public class IssueShowActionTest { .setCreationDate(issueCreationDate); when(issueService.getByKey(issueKey)).thenReturn(issue); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issueKey); request.execute().assertJson(getClass(), "show_issue.json"); } @@ -232,7 +235,6 @@ public class IssueShowActionTest { .setCreationDate(issueCreationDate); when(issueService.getByKey(issueKey)).thenReturn(issue); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issueKey); request.execute().assertJson(getClass(), "show_issue_with_sub_project.json"); } @@ -285,7 +287,6 @@ public class IssueShowActionTest { .setCreationDate(issueCreationDate); when(issueService.getByKey(issueKey)).thenReturn(issue); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issueKey); request.execute().assertJson(getClass(), "show_issue_with_sub_project.json"); } @@ -316,7 +317,6 @@ public class IssueShowActionTest { .setProjectUuid(project.uuid()); when(issueService.getByKey(issueKey)).thenReturn(issue); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issueKey); request.execute().assertJson(getClass(), "show_issue_on_removed_component.json"); } @@ -327,9 +327,8 @@ public class IssueShowActionTest { .setActionPlanKey("AP-ABCD"); when(issueService.getByKey(issue.key())).thenReturn(issue); - when(actionPlanService.findByKey(eq(issue.actionPlanKey()), any(UserSession.class))).thenReturn(new DefaultActionPlan().setKey("AP-ABCD").setName("Version 4.2")); + when(actionPlanService.findByKey(eq(issue.actionPlanKey()), any(ThreadLocalUserSession.class))).thenReturn(new DefaultActionPlan().setKey("AP-ABCD").setName("Version 4.2")); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issue.key()); request.execute().assertJson(getClass(), "show_issue_with_action_plan.json"); } @@ -345,7 +344,6 @@ public class IssueShowActionTest { when(userFinder.findByLogin("john")).thenReturn(new DefaultUser().setLogin("john").setName("John")); when(userFinder.findByLogin("steven")).thenReturn(new DefaultUser().setLogin("steven").setName("Steven")); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issue.key()); request.execute().assertJson(getClass(), "show_issue_with_users.json"); } @@ -358,7 +356,6 @@ public class IssueShowActionTest { when(durations.encode(debt)).thenReturn("2h1min"); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issue.key()); request.execute().assertJson(getClass(), "show_issue_with_technical_debt.json"); } @@ -373,7 +370,6 @@ public class IssueShowActionTest { when(debtModel.characteristicById(2)).thenReturn(new DefaultDebtCharacteristic().setKey("K2").setId(2).setName("Readability").setParentId(1)); when(debtModel.characteristicByKey("K2")).thenReturn(new DefaultDebtCharacteristic().setKey("K2").setId(2).setName("Readability").setParentId(1)); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issue.key()); request.execute().assertJson(getClass(), "show_issue_with_characteristics.json"); } @@ -388,7 +384,6 @@ public class IssueShowActionTest { when(debtModel.characteristicById(2)).thenReturn(new DefaultDebtCharacteristic().setKey("K2").setId(2).setName("Readability").setParentId(1)); when(debtModel.characteristicByKey("K2")).thenReturn(new DefaultDebtCharacteristic().setKey("K2").setId(2).setName("Readability").setParentId(1)); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issue.key()); request.execute().assertJson(getClass(), "show_issue_with_characteristics.json"); } @@ -410,7 +405,6 @@ public class IssueShowActionTest { when(i18n.ageFromNow(any(Locale.class), eq(updateDate))).thenReturn("9 days"); when(i18n.formatDateTime(any(Locale.class), eq(closedDate))).thenReturn("Jan 24, 2014 10:03 AM"); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issue.key()); request.execute().assertJson(getClass(), "show_issue_with_dates.json"); } @@ -442,7 +436,7 @@ public class IssueShowActionTest { when(i18n.ageFromNow(any(Locale.class), eq(date1))).thenReturn("9 days"); when(i18n.ageFromNow(any(Locale.class), eq(date2))).thenReturn("10 days"); - MockUserSession.set().setLogin("arthur"); + userSessionRule.logon("arthur"); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issue.key()); request.execute().assertJson(getClass(), "show_issue_with_comments.json"); } @@ -456,7 +450,7 @@ public class IssueShowActionTest { when(issueService.listTransitions(eq(issue))).thenReturn(newArrayList(Transition.create("reopen", "RESOLVED", "REOPEN"))); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issue.key()); request.execute().assertJson(getClass(), "show_issue_with_transitions.json"); } @@ -467,7 +461,7 @@ public class IssueShowActionTest { .setStatus("OPEN"); when(issueService.getByKey(issue.key())).thenReturn(issue); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issue.key()); request.execute().assertJson(getClass(), "show_issue_with_actions.json"); } @@ -496,7 +490,6 @@ public class IssueShowActionTest { when(i18n.formatDateTime(any(Locale.class), eq(date1))).thenReturn("Fev 22, 2014 10:03 AM"); when(i18n.formatDateTime(any(Locale.class), eq(date2))).thenReturn("Fev 23, 2014 10:03 AM"); - MockUserSession.set(); WsTester.TestRequest request = tester.newGetRequest("api/issues", "show").setParam("key", issue.key()); request.execute().assertJson(getClass(), "show_issue_with_changelog.json"); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsMediumTest.java index 80f52c213bc..fd1144b1495 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionComponentsMediumTest.java @@ -20,9 +20,11 @@ package org.sonar.server.issue.ws; +import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.resources.Qualifiers; import org.sonar.api.rule.RuleStatus; @@ -45,20 +47,20 @@ import org.sonar.server.permission.PermissionChange; import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.view.index.ViewDoc; import org.sonar.server.view.index.ViewIndexer; import org.sonar.server.ws.WsTester; import org.sonar.server.ws.WsTester.Result; -import java.util.List; - import static com.google.common.collect.Lists.newArrayList; public class SearchActionComponentsMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession session; @@ -361,7 +363,7 @@ public class SearchActionComponentsMediumTest { session.commit(); tester.get(IssueIndexer.class).indexAll(); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION) .setParam("resolved", "false") .setParam(WebService.Param.FACETS, "directories") @@ -380,7 +382,7 @@ public class SearchActionComponentsMediumTest { indexView(view.uuid(), newArrayList(project.uuid())); setAnyoneProjectPermission(view, UserRole.USER); - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.USER, view.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.USER, view.uuid()); wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION) .setParam(IssueFilterParameters.COMPONENT_UUIDS, view.uuid()) @@ -400,7 +402,7 @@ public class SearchActionComponentsMediumTest { setAnyoneProjectPermission(view, UserRole.USER); // User has wrong permission on the view, no issue will be returned - MockUserSession.set().setLogin("john").addProjectUuidPermissions(UserRole.CODEVIEWER, view.uuid()); + userSessionRule.logon("john").addProjectUuidPermissions(UserRole.CODEVIEWER, view.uuid()); wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION) .setParam(IssueFilterParameters.COMPONENT_UUIDS, view.uuid()) @@ -421,7 +423,7 @@ public class SearchActionComponentsMediumTest { indexView(subView.uuid(), newArrayList(project.uuid())); setAnyoneProjectPermission(view, UserRole.USER); - MockUserSession.set().setLogin("john").addComponentUuidPermission(UserRole.USER, view.uuid(), subView.uuid()); + userSessionRule.logon("john").addComponentUuidPermission(UserRole.USER, view.uuid(), subView.uuid()); wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION) .setParam(IssueFilterParameters.COMPONENT_UUIDS, subView.uuid()) @@ -443,7 +445,7 @@ public class SearchActionComponentsMediumTest { setAnyoneProjectPermission(view, UserRole.USER); // User has wrong permission on the view, no issue will be returned - MockUserSession.set().setLogin("john").addComponentUuidPermission(UserRole.CODEVIEWER, view.uuid(), subView.uuid()); + userSessionRule.logon("john").addComponentUuidPermission(UserRole.CODEVIEWER, view.uuid(), subView.uuid()); wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION) .setParam(IssueFilterParameters.COMPONENT_UUIDS, subView.uuid()) @@ -547,9 +549,8 @@ public class SearchActionComponentsMediumTest { } private void setAnyoneProjectPermission(ComponentDto project, String permission) { - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); tester.get(InternalPermissionService.class).addPermission(new PermissionChange().setComponentKey(project.getKey()).setGroup(DefaultGroups.ANYONE).setPermission(permission)); - MockUserSession.set(); } private IssueDto insertIssue(IssueDto issue) { diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java index ac71b09d645..46858518bae 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/ws/SearchActionMediumTest.java @@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableMap; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleStatus; import org.sonar.api.security.DefaultGroups; @@ -32,7 +33,11 @@ import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.KeyValueFormat; import org.sonar.api.web.UserRole; import org.sonar.core.component.ComponentDto; -import org.sonar.core.issue.db.*; +import org.sonar.core.issue.db.ActionPlanDao; +import org.sonar.core.issue.db.ActionPlanDto; +import org.sonar.core.issue.db.IssueChangeDao; +import org.sonar.core.issue.db.IssueChangeDto; +import org.sonar.core.issue.db.IssueDto; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.persistence.DbSession; import org.sonar.core.rule.RuleDto; @@ -50,7 +55,7 @@ import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.search.QueryContext; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -59,6 +64,8 @@ public class SearchActionMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession session; @@ -156,7 +163,7 @@ public class SearchActionMediumTest { session.commit(); tester.get(IssueIndexer.class).indexAll(); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION).execute(); result.assertJson(this.getClass(), "issue_with_comment.json"); } @@ -190,7 +197,7 @@ public class SearchActionMediumTest { session.commit(); tester.get(IssueIndexer.class).indexAll(); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION).setParam(IssueFilterParameters.HIDE_COMMENTS, "true").execute(); result.assertJson(this.getClass(), "issue_with_comment_hidden.json"); assertThat(result.outputAsString()).doesNotContain("fabrice"); @@ -264,7 +271,7 @@ public class SearchActionMediumTest { session.commit(); tester.get(IssueIndexer.class).indexAll(); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION) .setParam("extra_fields", "actions,transitions,assigneeName,reporterName,actionPlanName").execute(); result.assertJson(this.getClass(), "issue_with_extra_fields.json"); @@ -398,7 +405,7 @@ public class SearchActionMediumTest { session.commit(); tester.get(IssueIndexer.class).indexAll(); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION) .setParam("resolved", "false") .setParam(WebService.Param.FACETS, "statuses,severities,resolutions,projectUuids,rules,fileUuids,assignees,languages,actionPlans") @@ -422,7 +429,7 @@ public class SearchActionMediumTest { session.commit(); tester.get(IssueIndexer.class).indexAll(); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); WsTester.Result result = wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION) .setParam("resolved", "false") .setParam("severities", "MAJOR,MINOR") @@ -465,7 +472,7 @@ public class SearchActionMediumTest { session.commit(); tester.get(IssueIndexer.class).indexAll(); - MockUserSession.set().setLogin("john"); + userSessionRule.logon("john"); wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION) .setParam("resolved", "false") .setParam("assignees", "__me__") @@ -476,7 +483,7 @@ public class SearchActionMediumTest { @Test public void filter_by_assigned_to_me_unauthenticated() throws Exception { - MockUserSession.set(); + userSessionRule.logon(); ComponentDto project = insertComponent(ComponentTesting.newProjectDto("ABCD").setKey("MyProject")); setDefaultProjectPermission(project); @@ -537,7 +544,7 @@ public class SearchActionMediumTest { session.commit(); tester.get(IssueIndexer.class).indexAll(); - MockUserSession.set().setLogin("john-bob.polop"); + userSessionRule.logon("john-bob.polop"); wsTester.newGetRequest(IssuesWs.API_ENDPOINT, SearchAction.SEARCH_ACTION) .setParam("resolved", "false") .setParam("assignees", "alice") @@ -674,9 +681,9 @@ public class SearchActionMediumTest { private void setDefaultProjectPermission(ComponentDto project) { // project can be seen by anyone and by code viewer - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); tester.get(InternalPermissionService.class).addPermission(new PermissionChange().setComponentKey(project.getKey()).setGroup(DefaultGroups.ANYONE).setPermission(UserRole.USER)); - MockUserSession.set(); + userSessionRule.logon(); } private ComponentDto insertComponent(ComponentDto component) { diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionServiceMediumTest.java index aba6615812e..57190440976 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionServiceMediumTest.java @@ -21,11 +21,15 @@ package org.sonar.server.permission; import com.google.common.collect.Maps; +import java.util.Collection; +import java.util.Map; +import javax.annotation.Nullable; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.search.SearchHit; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.web.UserRole; import org.sonar.core.component.ComponentDto; @@ -38,12 +42,7 @@ import org.sonar.server.db.DbClient; import org.sonar.server.es.EsClient; import org.sonar.server.issue.index.IssueIndexDefinition; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; - -import javax.annotation.Nullable; - -import java.util.Collection; -import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; @@ -54,6 +53,8 @@ public class InternalPermissionServiceMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession session; @@ -81,7 +82,7 @@ public class InternalPermissionServiceMediumTest { @Test public void add_project_permission_to_user() { // init - MockUserSession.set().setLogin("admin").addProjectPermissions(UserRole.ADMIN, project.key()); + userSessionRule.logon("admin").addProjectPermissions(UserRole.ADMIN, project.key()); UserDto user = new UserDto().setLogin("john").setName("John"); db.userDao().insert(session, user); session.commit(); @@ -101,7 +102,7 @@ public class InternalPermissionServiceMediumTest { @Test public void remove_project_permission_to_user() { - MockUserSession.set().setLogin("admin").addProjectPermissions(UserRole.ADMIN, project.key()); + userSessionRule.logon("admin").addProjectPermissions(UserRole.ADMIN, project.key()); UserDto user1 = new UserDto().setLogin("user1").setName("User1"); db.userDao().insert(session, user1); @@ -125,7 +126,7 @@ public class InternalPermissionServiceMediumTest { @Test public void remove_all_component_user_permissions() { - MockUserSession.set().setLogin("admin").addProjectPermissions(UserRole.ADMIN, project.key()); + userSessionRule.logon("admin").addProjectPermissions(UserRole.ADMIN, project.key()); UserDto user = new UserDto().setLogin("user1").setName("User1"); db.userDao().insert(session, user); @@ -153,7 +154,7 @@ public class InternalPermissionServiceMediumTest { @Test public void add_and_remove_permission_to_group() { // init - MockUserSession.set().setLogin("admin").addProjectPermissions(UserRole.ADMIN, project.key()); + userSessionRule.logon("admin").addProjectPermissions(UserRole.ADMIN, project.key()); GroupDto group = new GroupDto().setName("group1"); db.groupDao().insert(session, group); session.commit(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionTemplateServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionTemplateServiceTest.java index d5938bb4aa6..530450cdcc2 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionTemplateServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/InternalPermissionTemplateServiceTest.java @@ -22,6 +22,7 @@ package org.sonar.server.permission; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import java.util.List; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -30,7 +31,12 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.api.web.UserRole; -import org.sonar.core.permission.*; +import org.sonar.core.permission.GlobalPermissions; +import org.sonar.core.permission.PermissionQuery; +import org.sonar.core.permission.PermissionTemplateDao; +import org.sonar.core.permission.PermissionTemplateDto; +import org.sonar.core.permission.PermissionTemplateGroupDto; +import org.sonar.core.permission.PermissionTemplateUserDto; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; import org.sonar.core.properties.PropertiesDao; @@ -38,12 +44,16 @@ import org.sonar.core.user.GroupDto; import org.sonar.core.user.UserDao; import org.sonar.core.user.UserDto; import org.sonar.server.exceptions.BadRequestException; -import org.sonar.server.user.MockUserSession; - -import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class InternalPermissionTemplateServiceTest { @@ -55,6 +65,9 @@ public class InternalPermissionTemplateServiceTest { private static final PermissionTemplateDto DEFAULT_TEMPLATE = new PermissionTemplateDto().setId(1L).setName(DEFAULT_KEY).setDescription(DEFAULT_DESC).setKeyPattern(DEFAULT_PATTERN); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + @Mock PermissionTemplateDao permissionTemplateDao; @@ -77,11 +90,11 @@ public class InternalPermissionTemplateServiceTest { @Before public void setUp() { - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); MyBatis myBatis = mock(MyBatis.class); when(myBatis.openSession(false)).thenReturn(session); - service = new InternalPermissionTemplateService(myBatis, permissionTemplateDao, userDao, finder); + service = new InternalPermissionTemplateService(myBatis, permissionTemplateDao, userDao, finder, userSessionRule); } @Test @@ -203,7 +216,7 @@ public class InternalPermissionTemplateServiceTest { @Test public void should_retrieve_all_permission_templates_from_project() { - MockUserSession.set().setLogin("admin").addProjectPermissions(UserRole.ADMIN, "org.sample.Sample"); + userSessionRule.logon("admin").addProjectPermissions(UserRole.ADMIN, "org.sample.Sample"); PermissionTemplateDto template1 = new PermissionTemplateDto().setId(1L).setName("template1").setDescription("template1"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateUpdaterTest.java b/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateUpdaterTest.java index 409e59566f6..4d62088342f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateUpdaterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/permission/PermissionTemplateUpdaterTest.java @@ -34,11 +34,17 @@ import org.sonar.core.user.UserDto; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.UnauthorizedException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.stub; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; public class PermissionTemplateUpdaterTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private static final UserDto DEFAULT_USER = new UserDto().setId(1L).setLogin("user").setName("user"); private static final GroupDto DEFAULT_GROUP = new GroupDto().setId(1L).setName("group"); @@ -50,7 +56,7 @@ public class PermissionTemplateUpdaterTest { @Before public void setUpCommonMocks() { - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); userDao = mock(UserDao.class); stub(userDao.selectActiveUserByLogin("user")).toReturn(DEFAULT_USER); stub(userDao.selectGroupByName("group")).toReturn(DEFAULT_GROUP); @@ -63,7 +69,7 @@ public class PermissionTemplateUpdaterTest { when(permissionTemplateDao.selectTemplateByKey("my_template")).thenReturn(new PermissionTemplateDto().setId(1L)); PermissionTemplateUpdater updater = - new PermissionTemplateUpdater("my_template", UserRole.USER, "user", permissionTemplateDao, userDao) { + new PermissionTemplateUpdater("my_template", UserRole.USER, "user", permissionTemplateDao, userDao, userSessionRule) { @Override void doExecute(Long templateId, String permission) { permissionTemplateDao.addUserPermission(1L, 1L, UserRole.USER); @@ -83,7 +89,7 @@ public class PermissionTemplateUpdaterTest { when(permissionTemplateDao.selectTemplateByKey("my_template")).thenReturn(null); PermissionTemplateUpdater updater = - new PermissionTemplateUpdater("my_template", UserRole.USER, "user", permissionTemplateDao, userDao) { + new PermissionTemplateUpdater("my_template", UserRole.USER, "user", permissionTemplateDao, userDao, userSessionRule) { @Override void doExecute(Long templateId, String permission) { } @@ -100,7 +106,7 @@ public class PermissionTemplateUpdaterTest { when(permissionTemplateDao.selectTemplateByKey("my_template")).thenReturn(new PermissionTemplateDto().setId(1L)); PermissionTemplateUpdater updater = - new PermissionTemplateUpdater("my_template", "invalid", "user", permissionTemplateDao, userDao) { + new PermissionTemplateUpdater("my_template", "invalid", "user", permissionTemplateDao, userDao, userSessionRule) { @Override void doExecute(Long templateId, String permission) { } @@ -113,9 +119,9 @@ public class PermissionTemplateUpdaterTest { expected.expect(UnauthorizedException.class); expected.expectMessage("Authentication is required"); - MockUserSession.set(); + userSessionRule.anonymous(); - PermissionTemplateUpdater updater = new PermissionTemplateUpdater(null, null, null, null, null) { + PermissionTemplateUpdater updater = new PermissionTemplateUpdater(null, null, null, null, null, userSessionRule) { @Override void doExecute(Long templateId, String permission) { } @@ -128,9 +134,9 @@ public class PermissionTemplateUpdaterTest { expected.expect(ForbiddenException.class); expected.expectMessage("Insufficient privileges"); - MockUserSession.set().setLogin("user").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.logon("user").setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); - PermissionTemplateUpdater updater = new PermissionTemplateUpdater(null, null, null, null, null) { + PermissionTemplateUpdater updater = new PermissionTemplateUpdater(null, null, null, null, null, userSessionRule) { @Override void doExecute(Long templateId, String permission) { } diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/ws/L10nWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/platform/ws/L10nWsTest.java index 1c5dd04158f..7e695485ac8 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/ws/L10nWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/platform/ws/L10nWsTest.java @@ -20,6 +20,9 @@ package org.sonar.server.platform.ws; import com.google.common.collect.ImmutableSet; +import java.util.Date; +import java.util.Locale; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -27,19 +30,18 @@ import org.mockito.runners.MockitoJUnitRunner; import org.sonar.api.platform.Server; import org.sonar.api.utils.DateUtils; import org.sonar.core.i18n.DefaultI18n; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import org.sonar.server.ws.WsTester.Result; -import java.util.Date; -import java.util.Locale; - import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class L10nWsTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock DefaultI18n i18n; @@ -50,13 +52,13 @@ public class L10nWsTest { @Test public void should_allow_client_to_cache_messages() throws Exception { Locale locale = Locale.PRC; - MockUserSession.set().setLocale(locale); + userSessionRule.setLocale(locale); Date now = new Date(); Date aBitLater = new Date(now.getTime() + 1000); when(server.getStartedAt()).thenReturn(now); - Result result = new WsTester(new L10nWs(i18n, server)).newGetRequest("api/l10n", "index").setParam("ts", DateUtils.formatDateTime(aBitLater)).execute(); + Result result = new WsTester(new L10nWs(i18n, server, userSessionRule)).newGetRequest("api/l10n", "index").setParam("ts", DateUtils.formatDateTime(aBitLater)).execute(); verifyZeroInteractions(i18n); verify(server).getStartedAt(); @@ -66,7 +68,7 @@ public class L10nWsTest { @Test public void should_return_all_l10n_messages_using_accept_header_with_cache_expired() throws Exception { Locale locale = Locale.PRC; - MockUserSession.set().setLocale(locale); + userSessionRule.setLocale(locale); Date now = new Date(); Date aBitEarlier = new Date(now.getTime() - 1000); @@ -81,7 +83,7 @@ public class L10nWsTest { when(i18n.message(locale, key2, key2)).thenReturn(key2); when(i18n.message(locale, key3, key3)).thenReturn(key3); - Result result = new WsTester(new L10nWs(i18n, server)).newGetRequest("api/l10n", "index").setParam("ts", DateUtils.formatDateTime(aBitEarlier)).execute(); + Result result = new WsTester(new L10nWs(i18n, server, userSessionRule)).newGetRequest("api/l10n", "index").setParam("ts", DateUtils.formatDateTime(aBitEarlier)).execute(); verify(i18n).getPropertyKeys(); verify(i18n).message(locale, key1, key1); verify(i18n).message(locale, key2, key2); @@ -93,7 +95,7 @@ public class L10nWsTest { @Test public void should_override_locale_when_locale_param_is_set() throws Exception { Locale locale = Locale.PRC; - MockUserSession.set().setLocale(locale); + userSessionRule.setLocale(locale); Locale override = Locale.JAPANESE; String key1 = "key1"; @@ -105,7 +107,7 @@ public class L10nWsTest { when(i18n.message(override, key2, key2)).thenReturn(key2); when(i18n.message(override, key3, key3)).thenReturn(key3); - Result result = new WsTester(new L10nWs(i18n, server)).newGetRequest("api/l10n", "index").setParam("locale", override.toString()).execute(); + Result result = new WsTester(new L10nWs(i18n, server, userSessionRule)).newGetRequest("api/l10n", "index").setParam("locale", override.toString()).execute(); verify(i18n).getPropertyKeys(); verify(i18n).message(override, key1, key1); verify(i18n).message(override, key2, key2); diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/ws/SystemInfoWsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/platform/ws/SystemInfoWsActionTest.java index ec567be0b1d..86517b09fdf 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/ws/SystemInfoWsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/platform/ws/SystemInfoWsActionTest.java @@ -20,6 +20,8 @@ package org.sonar.server.platform.ws; +import java.util.LinkedHashMap; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.ws.Request; import org.sonar.api.server.ws.Response; @@ -27,37 +29,32 @@ import org.sonar.api.server.ws.internal.SimpleGetRequest; import org.sonar.core.permission.GlobalPermissions; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.platform.monitoring.Monitor; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.LinkedHashMap; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class SystemInfoWsActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone().logon("login") + .setName("name"); Monitor monitor1 = mock(Monitor.class); Monitor monitor2 = mock(Monitor.class); - SystemInfoWsAction sut = new SystemInfoWsAction(monitor1, monitor2); + SystemInfoWsAction sut = new SystemInfoWsAction(userSessionRule, monitor1, monitor2); @Test(expected = ForbiddenException.class) public void should_fail_when_does_not_have_admin_right() { - MockUserSession.set() - .setLogin("login") - .setName("name") - .setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); sut.handle(mock(Request.class), mock(Response.class)); } @Test public void write_json() { - MockUserSession.set() - .setLogin("login") - .setName("name") - .setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); LinkedHashMap attributes1 = new LinkedHashMap<>(); attributes1.put("foo", "bar"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/ws/SystemWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/platform/ws/SystemWsTest.java index 96c2879b88e..a475adf91f7 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/ws/SystemWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/platform/ws/SystemWsTest.java @@ -23,6 +23,7 @@ import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.api.server.ws.WebService; import org.sonar.server.platform.Platform; +import org.sonar.server.tester.AnonymousMockUserSession; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -32,7 +33,7 @@ public class SystemWsTest { @Test public void define() { SystemRestartWsAction action1 = new SystemRestartWsAction(mock(Settings.class), mock(Platform.class)); - SystemInfoWsAction action2 = new SystemInfoWsAction(); + SystemInfoWsAction action2 = new SystemInfoWsAction(new AnonymousMockUserSession()); SystemWs ws = new SystemWs(action1, action2); WebService.Context context = new WebService.Context(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/CancelAllPluginsWsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/CancelAllPluginsWsActionTest.java index 3d2260eba4f..11f91f15ef6 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/CancelAllPluginsWsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/CancelAllPluginsWsActionTest.java @@ -19,7 +19,6 @@ */ package org.sonar.server.plugins.ws; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -29,7 +28,7 @@ import org.sonar.core.permission.GlobalPermissions; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.plugins.PluginDownloader; import org.sonar.server.plugins.ServerPluginRepository; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -40,9 +39,12 @@ import static org.mockito.Mockito.verify; public class CancelAllPluginsWsActionTest { private static final String DUMMY_CONTROLLER_KEY = "dummy"; + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + private PluginDownloader pluginDownloader = mock(PluginDownloader.class); private ServerPluginRepository pluginRepository = mock(ServerPluginRepository.class); - private CancelAllPluginsWsAction underTest = new CancelAllPluginsWsAction(pluginDownloader, pluginRepository); + private CancelAllPluginsWsAction underTest = new CancelAllPluginsWsAction(pluginDownloader, pluginRepository, userSessionRule); private Request request = mock(Request.class); private WsTester.TestResponse response = new WsTester.TestResponse(); @@ -50,11 +52,6 @@ public class CancelAllPluginsWsActionTest { @Rule public ExpectedException expectedException = ExpectedException.none(); - @Before - public void setUp() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); - } - @Test public void action_cancel_all_is_defined() { WsTester wsTester = new WsTester(); @@ -80,7 +77,7 @@ public class CancelAllPluginsWsActionTest { expectedException.expectMessage("Insufficient privileges"); // no permission on user - MockUserSession.set().setGlobalPermissions(); + userSessionRule.setGlobalPermissions(); underTest.handle(request, response); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/InstallPluginsWsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/InstallPluginsWsActionTest.java index dae2573c115..1be07a38451 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/InstallPluginsWsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/InstallPluginsWsActionTest.java @@ -29,7 +29,7 @@ import org.sonar.core.permission.GlobalPermissions; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.plugins.PluginDownloader; import org.sonar.server.plugins.UpdateCenterMatrixFactory; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import org.sonar.updatecenter.common.Plugin; import org.sonar.updatecenter.common.PluginUpdate; @@ -49,11 +49,14 @@ public class InstallPluginsWsActionTest { private static final String ACTION_KEY = "install"; private static final String KEY_PARAM = "key"; private static final String PLUGIN_KEY = "pluginKey"; + + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private UpdateCenterMatrixFactory updateCenterFactory = mock(UpdateCenterMatrixFactory.class); private UpdateCenter updateCenter = mock(UpdateCenter.class); private PluginDownloader pluginDownloader = mock(PluginDownloader.class); - private InstallPluginsWsAction underTest = new InstallPluginsWsAction(updateCenterFactory, pluginDownloader); + private InstallPluginsWsAction underTest = new InstallPluginsWsAction(updateCenterFactory, pluginDownloader, userSessionRule); private WsTester wsTester = new WsTester(new PluginsWs(underTest)); private WsTester.TestRequest invalidRequest = wsTester.newPostRequest(CONTROLLER_KEY, ACTION_KEY); @@ -67,7 +70,7 @@ public class InstallPluginsWsActionTest { public void wireMocks() { when(updateCenterFactory.getUpdateCenter(anyBoolean())).thenReturn(updateCenter); - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); } @Test @@ -76,7 +79,7 @@ public class InstallPluginsWsActionTest { expectedException.expectMessage("Insufficient privileges"); // no permission on user - MockUserSession.set().setGlobalPermissions(); + userSessionRule.setGlobalPermissions(); validRequest.execute(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/UninstallPluginsWsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/UninstallPluginsWsActionTest.java index 85a3bba714f..42f42aab246 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/UninstallPluginsWsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/UninstallPluginsWsActionTest.java @@ -19,7 +19,6 @@ */ package org.sonar.server.plugins.ws; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -28,7 +27,7 @@ import org.sonar.api.server.ws.WebService; import org.sonar.core.permission.GlobalPermissions; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.plugins.ServerPluginRepository; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -43,29 +42,26 @@ public class UninstallPluginsWsActionTest { private static final String KEY_PARAM = "key"; private static final String PLUGIN_KEY = "findbugs"; + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + @Rule + public ExpectedException expectedException = ExpectedException.none(); + private ServerPluginRepository pluginRepository = mock(ServerPluginRepository.class); - private UninstallPluginsWsAction underTest = new UninstallPluginsWsAction(pluginRepository); + private UninstallPluginsWsAction underTest = new UninstallPluginsWsAction(pluginRepository, userSessionRule); private WsTester wsTester = new WsTester(new PluginsWs(underTest)); private Request invalidRequest = wsTester.newGetRequest(CONTROLLER_KEY, ACTION_KEY); private Request validRequest = wsTester.newGetRequest(CONTROLLER_KEY, ACTION_KEY).setParam(KEY_PARAM, PLUGIN_KEY); private WsTester.TestResponse response = new WsTester.TestResponse(); - @Rule - public ExpectedException expectedException = ExpectedException.none(); - - @Before - public void setUp() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); - } - @Test public void user_must_have_system_admin_permission() throws Exception { expectedException.expect(ForbiddenException.class); expectedException.expectMessage("Insufficient privileges"); // no permission on user - MockUserSession.set().setGlobalPermissions(); + userSessionRule.setGlobalPermissions(); underTest.handle(validRequest, response); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/UpdatePluginsWsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/UpdatePluginsWsActionTest.java index 82a1f39c29d..750dae46318 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/UpdatePluginsWsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/plugins/ws/UpdatePluginsWsActionTest.java @@ -30,7 +30,7 @@ import org.sonar.core.permission.GlobalPermissions; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.plugins.PluginDownloader; import org.sonar.server.plugins.UpdateCenterMatrixFactory; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import org.sonar.updatecenter.common.Plugin; import org.sonar.updatecenter.common.PluginUpdate; @@ -52,10 +52,13 @@ public class UpdatePluginsWsActionTest { private static final String KEY_PARAM = "key"; private static final String PLUGIN_KEY = "pluginKey"; + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + private UpdateCenterMatrixFactory updateCenterFactory = mock(UpdateCenterMatrixFactory.class); private UpdateCenter updateCenter = mock(UpdateCenter.class); private PluginDownloader pluginDownloader = mock(PluginDownloader.class); - private UpdatePluginsWsAction underTest = new UpdatePluginsWsAction(updateCenterFactory, pluginDownloader); + private UpdatePluginsWsAction underTest = new UpdatePluginsWsAction(updateCenterFactory, pluginDownloader, userSessionRule); private WsTester wsTester = new WsTester(new PluginsWs(underTest)); private Request invalidRequest = wsTester.newGetRequest(CONTROLLER_KEY, ACTION_KEY); @@ -69,7 +72,7 @@ public class UpdatePluginsWsActionTest { public void setUp() { when(updateCenterFactory.getUpdateCenter(anyBoolean())).thenReturn(updateCenter); - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); } @Test @@ -78,7 +81,7 @@ public class UpdatePluginsWsActionTest { expectedException.expectMessage("Insufficient privileges"); // no permission on user - MockUserSession.set().setGlobalPermissions(); + userSessionRule.setGlobalPermissions(); underTest.handle(validRequest, response); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java index 572f295a85f..121d64b2b59 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualitygate/QualityGatesTest.java @@ -21,7 +21,11 @@ package org.sonar.server.qualitygate; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -49,20 +53,27 @@ import org.sonar.server.component.db.ComponentDao; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.user.AnonymousUserSession; +import org.sonar.server.tester.MockUserSession; import org.sonar.server.user.UserSession; -import org.sonar.server.user.UserSessionTestUtils; - -import java.util.Collection; -import java.util.Iterator; -import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class QualityGatesTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + @Mock DbSession session; @@ -88,18 +99,18 @@ public class QualityGatesTest { static final String PROJECT_KEY = "SonarQube"; - UserSession authorizedProfileAdminUserSession = MockUserSession.create().setLogin("gaudol").setName("Olivier").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); - UserSession authorizedProjectAdminUserSession = MockUserSession.create().setLogin("gaudol").setName("Olivier").addProjectPermissions(UserRole.ADMIN, PROJECT_KEY); - UserSession unauthorizedUserSession = MockUserSession.create().setLogin("polop").setName("Polop"); - UserSession unauthenticatedUserSession = MockUserSession.create(); + UserSession authorizedProfileAdminUserSession = new MockUserSession("gaudol").setName("Olivier").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + UserSession authorizedProjectAdminUserSession = new MockUserSession("gaudol").setName("Olivier").addProjectPermissions(UserRole.ADMIN, PROJECT_KEY); + UserSession unauthorizedUserSession = new MockUserSession("polop").setName("Polop"); + UserSession unauthenticatedUserSession = AnonymousUserSession.INSTANCE; @Before public void initialize() { when(componentDao.getById(anyLong(), eq(session))).thenReturn(new ComponentDto().setId(1L).setKey(PROJECT_KEY)); when(myBatis.openSession(false)).thenReturn(session); - qGates = new QualityGates(dao, conditionDao, metricFinder, propertiesDao, componentDao, myBatis); - UserSessionTestUtils.setUserSession(authorizedProfileAdminUserSession); + qGates = new QualityGates(dao, conditionDao, metricFinder, propertiesDao, componentDao, myBatis, userSessionRule); + userSessionRule.set(authorizedProfileAdminUserSession); } @Test @@ -121,14 +132,14 @@ public class QualityGatesTest { @Test(expected = ForbiddenException.class) public void should_fail_create_on_anonymous() { - UserSessionTestUtils.setUserSession(unauthenticatedUserSession); + userSessionRule.set(unauthenticatedUserSession); assertThat(qGates.currentUserHasWritePermission()).isFalse(); qGates.create("polop"); } @Test(expected = ForbiddenException.class) public void should_fail_create_on_missing_permission() { - UserSessionTestUtils.setUserSession(unauthorizedUserSession); + userSessionRule.set(unauthorizedUserSession); qGates.create("polop"); } @@ -521,7 +532,7 @@ public class QualityGatesTest { @Test public void associate_project_with_project_admin_permission() { - UserSessionTestUtils.setUserSession(authorizedProjectAdminUserSession); + userSessionRule.set(authorizedProjectAdminUserSession); Long qGateId = 42L; Long projectId = 24L; @@ -548,7 +559,7 @@ public class QualityGatesTest { @Test public void dissociate_project_with_project_admin_permission() { - UserSessionTestUtils.setUserSession(authorizedProjectAdminUserSession); + userSessionRule.set(authorizedProjectAdminUserSession); Long qGateId = 42L; Long projectId = 24L; diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java index e9278558413..771b43ce3ed 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ActiveRuleBackendMediumTest.java @@ -25,6 +25,7 @@ import com.google.common.collect.Multimap; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; @@ -50,6 +51,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; @@ -58,6 +60,8 @@ public class ActiveRuleBackendMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; RuleDao dao; diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileBackuperMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileBackuperMediumTest.java index 454835e56f3..6417ff3686d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileBackuperMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileBackuperMediumTest.java @@ -27,6 +27,7 @@ import org.custommonkey.xmlunit.XMLUnit; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.Severity; @@ -44,6 +45,7 @@ import javax.xml.stream.XMLStreamException; import java.io.StringReader; import java.io.StringWriter; import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -52,6 +54,8 @@ public class QProfileBackuperMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession dbSession; diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileComparisonMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileComparisonMediumTest.java index 9652b9b7ef1..8a095cc4547 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileComparisonMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileComparisonMediumTest.java @@ -24,6 +24,7 @@ import org.assertj.core.data.MapEntry; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.Severity; import org.sonar.api.server.rule.RuleParamType; @@ -37,6 +38,7 @@ import org.sonar.server.qualityprofile.QProfileComparison.QProfileComparisonResu import org.sonar.server.qualityprofile.index.ActiveRuleIndex; import org.sonar.server.rule.RuleTesting; import org.sonar.server.tester.ServerTester; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; @@ -44,6 +46,8 @@ public class QProfileComparisonMediumTest { @ClassRule public static ServerTester tester = new ServerTester().addXoo(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession dbSession; diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileCopierMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileCopierMediumTest.java index 87a3dc9f4ec..37ae08f6767 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileCopierMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileCopierMediumTest.java @@ -24,6 +24,7 @@ import com.google.common.collect.Lists; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.Severity; import org.sonar.api.server.rule.RuleParamType; @@ -41,6 +42,7 @@ import javax.annotation.Nullable; import java.util.List; import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -49,6 +51,8 @@ public class QProfileCopierMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession dbSession; diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java index cb0271b1bfb..25ebecadd78 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileExportersTest.java @@ -46,6 +46,7 @@ import java.io.IOException; import java.io.Reader; import java.io.Writer; import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -57,6 +58,8 @@ public class QProfileExportersTest { XooRulesDefinition.class, XooProfileDefinition.class, XooExporter.class, StandardExporter.class, XooProfileImporter.class, XooProfileImporterWithMessages.class, XooProfileImporterWithError.class); + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession dbSession; diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileFactoryMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileFactoryMediumTest.java index db41edd60b6..9feeb7c08ed 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileFactoryMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileFactoryMediumTest.java @@ -22,6 +22,7 @@ package org.sonar.server.qualityprofile; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.rule.RuleParamType; import org.sonar.core.component.ComponentDto; @@ -36,7 +37,8 @@ import org.sonar.server.qualityprofile.index.ActiveRuleIndex; import org.sonar.server.rule.RuleTesting; import org.sonar.server.search.IndexClient; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.tester.MockUserSession; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -48,6 +50,8 @@ public class QProfileFactoryMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession dbSession; @@ -325,7 +329,7 @@ public class QProfileFactoryMediumTest { assertThat(factory.getByProjectAndLanguage("org.codehaus.sonar:sonar", "xoo")).isNull(); tester.get(QProfileProjectOperations.class).addProject(profileDto.getKey(), project.uuid(), - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN), dbSession); + new MockUserSession("me").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN), dbSession); dbSession.commit(); dbSession.clearCache(); assertThat(factory.getByProjectAndLanguage("org.codehaus.sonar:sonar", "xoo").getKey()).isEqualTo(XOO_P1_KEY); diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileProjectOperationsMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileProjectOperationsMediumTest.java index 2710183163e..22f97568b4f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileProjectOperationsMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileProjectOperationsMediumTest.java @@ -23,6 +23,7 @@ package org.sonar.server.qualityprofile; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.web.UserRole; import org.sonar.core.component.ComponentDto; @@ -33,7 +34,8 @@ import org.sonar.core.qualityprofile.db.QualityProfileDto; import org.sonar.core.user.UserDto; import org.sonar.server.db.DbClient; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.tester.MockUserSession; import org.sonar.server.user.UserSession; import static org.assertj.core.api.Assertions.assertThat; @@ -42,6 +44,8 @@ public class QProfileProjectOperationsMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession dbSession; @@ -52,8 +56,8 @@ public class QProfileProjectOperationsMediumTest { static final String PROJECT_KEY = "SonarQube"; static final String PROJECT_UUID = "ABCD"; - UserSession authorizedProfileAdminUserSession = MockUserSession.create().setLogin("john").setName("John").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); - UserSession authorizedProjectAdminUserSession = MockUserSession.create().setLogin("john").setName("John").addProjectPermissions(UserRole.ADMIN, PROJECT_KEY); + UserSession authorizedProfileAdminUserSession = new MockUserSession("john").setName("John").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + UserSession authorizedProjectAdminUserSession = new MockUserSession("john").setName("John").addProjectPermissions(UserRole.ADMIN, PROJECT_KEY); @Before public void before() { @@ -142,7 +146,7 @@ public class QProfileProjectOperationsMediumTest { db.userDao().insert(dbSession, user); tester.get(PermissionFacade.class).insertUserPermission(project1.getId(), user.getId(), UserRole.USER, dbSession); tester.get(PermissionFacade.class).insertUserPermission(project2.getId(), user.getId(), UserRole.USER, dbSession); - UserSession userSession = MockUserSession.set().setUserId(user.getId().intValue()).setLogin("john").setName("John") + UserSession userSession = userSessionRule.logon("john").setUserId(user.getId().intValue()).setName("John") .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); dbSession.commit(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileResetMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileResetMediumTest.java index b3d89740951..841b0997327 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileResetMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileResetMediumTest.java @@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableMap; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.profiles.ProfileDefinition; import org.sonar.api.profiles.RulesProfile; @@ -44,6 +45,7 @@ import org.sonar.server.qualityprofile.index.ActiveRuleIndex; import org.sonar.server.tester.ServerTester; import javax.annotation.Nullable; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; @@ -55,6 +57,8 @@ public class QProfileResetMediumTest { @ClassRule public static ServerTester tester = new ServerTester().addXoo().addComponents(PROFILE_DEFS, RULE_DEFS); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession dbSession; diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileServiceMediumTest.java index 8ed0fea39b5..8578e79503f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfileServiceMediumTest.java @@ -22,6 +22,11 @@ package org.sonar.server.qualityprofile; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; +import java.io.IOException; +import java.io.Reader; +import java.io.Writer; +import java.util.List; +import java.util.Map; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; @@ -50,13 +55,7 @@ import org.sonar.server.rule.RuleTesting; import org.sonar.server.search.FacetValue; import org.sonar.server.search.Result; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; - -import java.io.IOException; -import java.io.Reader; -import java.io.Writer; -import java.util.List; -import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.server.qualityprofile.QProfileTesting.XOO_P1_KEY; @@ -66,6 +65,8 @@ public class QProfileServiceMediumTest { @ClassRule public static ServerTester tester = new ServerTester().addComponents(XooProfileImporter.class, XooExporter.class); + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession dbSession; @@ -99,7 +100,7 @@ public class QProfileServiceMediumTest { @Test public void create_profile() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); QualityProfileDto profile = service.create(QProfileName.createFor("xoo", "New Profile"), null).profile(); @@ -110,7 +111,7 @@ public class QProfileServiceMediumTest { @Test public void create_profile_with_xml() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); db.ruleDao().insert(dbSession, RuleTesting.newDto(RuleKey.of("xoo", "R1")).setLanguage("xoo").setSeverity("MINOR")); dbSession.commit(); @@ -128,7 +129,7 @@ public class QProfileServiceMediumTest { @Test public void count_by_all_profiles() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); service.activate(XOO_P1_KEY, new RuleActivation(RuleTesting.XOO_X1).setSeverity("BLOCKER")); service.activate(XOO_P2_KEY, new RuleActivation(RuleTesting.XOO_X1).setSeverity("BLOCKER")); @@ -143,7 +144,7 @@ public class QProfileServiceMediumTest { @Test public void stat_for_all_profiles() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); service.activate(XOO_P1_KEY, new RuleActivation(RuleTesting.XOO_X1).setSeverity("MINOR")); service.activate(XOO_P2_KEY, new RuleActivation(RuleTesting.XOO_X1).setSeverity("BLOCKER")); @@ -160,7 +161,7 @@ public class QProfileServiceMediumTest { @Test public void count_by_deprecated() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); // create deprecated rule RuleDto deprecatedXooRule = RuleTesting.newDto(RuleKey.of("xoo", "deprecated1")) @@ -178,7 +179,7 @@ public class QProfileServiceMediumTest { @Test public void search_qprofile_activity() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("david"); + userSessionRule.logon("david").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); UserDto user = new UserDto().setLogin("david").setName("David").setEmail("dav@id.com").setCreatedAt(System.currentTimeMillis()).setUpdatedAt(System.currentTimeMillis()); db.userDao().insert(dbSession, user); @@ -211,7 +212,7 @@ public class QProfileServiceMediumTest { @Test public void search_qprofile_activity_without_severity() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); RuleKey ruleKey = RuleKey.of("xoo", "deleted_rule"); @@ -230,7 +231,7 @@ public class QProfileServiceMediumTest { @Test public void search_qprofile_activity_with_user_not_found() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("david"); + userSessionRule.logon("david").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); // We need an actual rule in DB to test RuleName in Activity db.ruleDao().getByKey(dbSession, RuleTesting.XOO_X1); @@ -253,7 +254,7 @@ public class QProfileServiceMediumTest { @Test public void search_qprofile_activity_with_rule_not_found() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); RuleKey ruleKey = RuleKey.of("xoo", "deleted_rule"); @@ -309,7 +310,7 @@ public class QProfileServiceMediumTest { @Test public void set_default() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); assertThat(service.getDefault("xoo")).isNull(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java index 853e5240325..7fca985bdd3 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/QProfilesTest.java @@ -21,11 +21,13 @@ package org.sonar.server.qualityprofile; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; -import org.sonar.server.user.UserSession; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.user.ThreadLocalUserSession; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; @@ -33,6 +35,8 @@ import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) public class QProfilesTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock QProfileProjectOperations projectOperations; @@ -47,7 +51,7 @@ public class QProfilesTest { @Before public void setUp() { - qProfiles = new QProfiles(projectOperations, projectLookup, profileLookup); + qProfiles = new QProfiles(projectOperations, projectLookup, profileLookup, userSessionRule); } @Test @@ -117,24 +121,24 @@ public class QProfilesTest { @Test public void add_project() { qProfiles.addProject("sonar-way-java", "ABCD"); - verify(projectOperations).addProject(eq("sonar-way-java"), eq("ABCD"), any(UserSession.class)); + verify(projectOperations).addProject(eq("sonar-way-java"), eq("ABCD"), any(ThreadLocalUserSession.class)); } @Test public void remove_project_by_quality_profile_key() { qProfiles.removeProject("sonar-way-java", "ABCD"); - verify(projectOperations).removeProject(eq("sonar-way-java"), eq("ABCD"), any(UserSession.class)); + verify(projectOperations).removeProject(eq("sonar-way-java"), eq("ABCD"), any(ThreadLocalUserSession.class)); } @Test public void remove_project_by_language() { qProfiles.removeProjectByLanguage("java", 10L); - verify(projectOperations).removeProject(eq("java"), eq(10L), any(UserSession.class)); + verify(projectOperations).removeProject(eq("java"), eq(10L), any(ThreadLocalUserSession.class)); } @Test public void remove_all_projects() { qProfiles.removeAllProjects("sonar-way-java"); - verify(projectOperations).removeAllProjects(eq("sonar-way-java"), any(UserSession.class)); + verify(projectOperations).removeAllProjects(eq("sonar-way-java"), any(ThreadLocalUserSession.class)); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/RuleActivatorMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/RuleActivatorMediumTest.java index b0c5ba6c340..758b54fe8f3 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/RuleActivatorMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/RuleActivatorMediumTest.java @@ -21,9 +21,15 @@ package org.sonar.server.qualityprofile; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; @@ -45,17 +51,13 @@ import org.sonar.server.rule.index.RuleIndex; import org.sonar.server.rule.index.RuleQuery; import org.sonar.server.search.QueryContext; import org.sonar.server.tester.ServerTester; - -import javax.annotation.Nullable; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; -import static org.sonar.server.qualityprofile.QProfileTesting.*; +import static org.sonar.server.qualityprofile.QProfileTesting.XOO_P1_KEY; +import static org.sonar.server.qualityprofile.QProfileTesting.XOO_P2_KEY; +import static org.sonar.server.qualityprofile.QProfileTesting.XOO_P3_KEY; public class RuleActivatorMediumTest { @@ -65,6 +67,8 @@ public class RuleActivatorMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession dbSession; @@ -840,7 +844,7 @@ public class RuleActivatorMediumTest { // 0. No active rules so far (base case) and plenty rules available verifyZeroActiveRules(XOO_P1_KEY); assertThat(tester.get(RuleIndex.class) - .search(new RuleQuery().setRepositories(Arrays.asList("bulk")), new QueryContext()).getTotal()) + .search(new RuleQuery().setRepositories(Arrays.asList("bulk")), new QueryContext(userSessionRule)).getTotal()) .isEqualTo(bulkSize); // 1. bulk activate all the rules diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileChangeParentActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileChangeParentActionMediumTest.java index 7df4a804324..f5ceee8a516 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileChangeParentActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileChangeParentActionMediumTest.java @@ -19,9 +19,11 @@ */ package org.sonar.server.qualityprofile.ws; +import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; @@ -37,11 +39,9 @@ import org.sonar.server.qualityprofile.QProfileName; import org.sonar.server.qualityprofile.QProfileTesting; import org.sonar.server.qualityprofile.RuleActivator; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; public class QProfileChangeParentActionMediumTest { @@ -49,6 +49,8 @@ public class QProfileChangeParentActionMediumTest { // TODO Replace with DbTester + EsTester once DaoV2 is removed @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); QProfilesWs ws; DbClient db; @@ -62,7 +64,7 @@ public class QProfileChangeParentActionMediumTest { ws = tester.get(QProfilesWs.class); wsTester = tester.get(WsTester.class); session = db.openSession(false); - MockUserSession.set().setLogin("gandalf").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("gandalf").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); } @After @@ -257,7 +259,7 @@ public class QProfileChangeParentActionMediumTest { @Test(expected = ForbiddenException.class) public void fail_if_missing_permission() throws Exception { - MockUserSession.set().setLogin("anakin"); + userSessionRule.logon("anakin"); wsTester.newGetRequest(QProfilesWs.API_ENDPOINT, "change_parent") .setParam(QProfileIdentificationParamUtils.PARAM_PROFILE_KEY, "polop") .setParam("parentKey", "pulup") diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCompareActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCompareActionMediumTest.java index 2dc5f9fe3b3..49447da2611 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCompareActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCompareActionMediumTest.java @@ -23,6 +23,7 @@ import org.apache.commons.lang.StringUtils; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; @@ -39,6 +40,7 @@ import org.sonar.server.db.DbClient; import org.sonar.server.qualityprofile.QProfileName; import org.sonar.server.qualityprofile.QProfileTesting; import org.sonar.server.tester.ServerTester; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; public class QProfileCompareActionMediumTest { @@ -53,6 +55,8 @@ public class QProfileCompareActionMediumTest { .done(); } }); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); private DbClient db; diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCopyActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCopyActionTest.java index 47b50803768..3681fdc3b83 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCopyActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCopyActionTest.java @@ -20,6 +20,7 @@ package org.sonar.server.qualityprofile.ws; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -29,7 +30,7 @@ import org.sonar.core.qualityprofile.db.QualityProfileDto; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.language.LanguageTesting; import org.sonar.server.qualityprofile.QProfileCopier; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.mockito.Mockito.mock; @@ -39,6 +40,9 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class QProfileCopyActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + private WsTester tester; // TODO Replace with proper DbTester + EsTester medium test during removal of DaoV2 @@ -51,12 +55,12 @@ public class QProfileCopyActionTest { mock(RuleActivationActions.class), mock(BulkRuleActivationActions.class), mock(ProjectAssociationActions.class), - new QProfileCopyAction(qProfileCopier, LanguageTesting.newLanguages("xoo")))); + new QProfileCopyAction(qProfileCopier, LanguageTesting.newLanguages("xoo"), userSessionRule))); } @Test public void copy_nominal() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); String fromProfileKey = "xoo-sonar-way-23456"; String toName = "Other Sonar Way"; @@ -76,7 +80,7 @@ public class QProfileCopyActionTest { @Test public void copy_with_parent() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); String fromProfileKey = "xoo-sonar-way-23456"; String toName = "Other Sonar Way"; @@ -97,7 +101,7 @@ public class QProfileCopyActionTest { @Test(expected = IllegalArgumentException.class) public void fail_on_missing_key() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "copy") .setParam("name", "Other Sonar Way") @@ -106,7 +110,7 @@ public class QProfileCopyActionTest { @Test(expected = IllegalArgumentException.class) public void fail_on_missing_name() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "copy") .setParam("key", "sonar-way-xoo1-13245") @@ -115,7 +119,7 @@ public class QProfileCopyActionTest { @Test(expected = ForbiddenException.class) public void fail_on_missing_permission() throws Exception { - MockUserSession.set().setLogin("obiwan"); + userSessionRule.logon("obiwan"); tester.newPostRequest("api/qualityprofiles", "copy") .setParam("key", "sonar-way-xoo1-13245") diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCreateActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCreateActionMediumTest.java index 1c772b887e7..431a070b3c4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCreateActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCreateActionMediumTest.java @@ -22,12 +22,13 @@ package org.sonar.server.qualityprofile.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.core.permission.GlobalPermissions; import org.sonar.core.persistence.DbSession; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.BadRequestException; -import org.sonar.server.qualityprofile.*; +import org.sonar.server.qualityprofile.QProfileExporters; import org.sonar.server.qualityprofile.QProfileExportersTest.StandardExporter; import org.sonar.server.qualityprofile.QProfileExportersTest.XooExporter; import org.sonar.server.qualityprofile.QProfileExportersTest.XooProfileDefinition; @@ -35,8 +36,9 @@ import org.sonar.server.qualityprofile.QProfileExportersTest.XooProfileImporter; import org.sonar.server.qualityprofile.QProfileExportersTest.XooProfileImporterWithError; import org.sonar.server.qualityprofile.QProfileExportersTest.XooProfileImporterWithMessages; import org.sonar.server.qualityprofile.QProfileExportersTest.XooRulesDefinition; +import org.sonar.server.qualityprofile.QProfileLoader; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; public class QProfileCreateActionMediumTest { @@ -47,6 +49,8 @@ public class QProfileCreateActionMediumTest { XooRulesDefinition.class, XooProfileDefinition.class, XooExporter.class, StandardExporter.class, XooProfileImporter.class, XooProfileImporterWithMessages.class, XooProfileImporterWithError.class); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db; DbSession dbSession; @@ -70,7 +74,7 @@ public class QProfileCreateActionMediumTest { @Test public void create_nominal() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); wsTester.newPostRequest("api/qualityprofiles", "create") .setParam("backup_XooProfileImporter", "a value for xoo importer") @@ -81,7 +85,7 @@ public class QProfileCreateActionMediumTest { @Test public void create_with_messages() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); wsTester.newPostRequest("api/qualityprofiles", "create") .setParam("backup_XooProfileImporter", "a value for xoo importer") @@ -93,7 +97,7 @@ public class QProfileCreateActionMediumTest { @Test(expected = BadRequestException.class) public void fail_on_error_from_importer() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); wsTester.newPostRequest("api/qualityprofiles", "create") .setParam("backup_XooProfileImporter", "a value for xoo importer") diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCreateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCreateActionTest.java index 8a4245850bb..1f785995342 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCreateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileCreateActionTest.java @@ -20,6 +20,7 @@ package org.sonar.server.qualityprofile.ws; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.ws.WebService.Action; import org.sonar.api.utils.System2; @@ -29,7 +30,7 @@ import org.sonar.core.qualityprofile.db.QualityProfileDao; import org.sonar.server.db.DbClient; import org.sonar.server.language.LanguageTesting; import org.sonar.server.qualityprofile.QProfileFactory; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -39,6 +40,8 @@ public class QProfileCreateActionTest { @ClassRule public static final DbTester db = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Test public void should_not_fail_on_no_importers() throws Exception { @@ -48,12 +51,12 @@ public class QProfileCreateActionTest { String xooKey = "xoo"; WsTester wsTester = new WsTester(new QProfilesWs( mock(RuleActivationActions.class), mock(BulkRuleActivationActions.class), mock(ProjectAssociationActions.class), - new QProfileCreateAction(dbClient, new QProfileFactory(dbClient), null, LanguageTesting.newLanguages(xooKey)))); + new QProfileCreateAction(dbClient, new QProfileFactory(dbClient), null, LanguageTesting.newLanguages(xooKey), userSessionRule))); Action create = wsTester.controller("api/qualityprofiles").action("create"); assertThat(create.params()).hasSize(2); - MockUserSession.set().setLogin("anakin").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("anakin").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); wsTester.newPostRequest("api/qualityprofiles", "create") .setParam("language", xooKey).setParam("name", "Yeehaw!").execute().assertJson(getClass(), "create-no-importer.json"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileDeleteActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileDeleteActionTest.java index 17fc490bd18..7ba826b07ab 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileDeleteActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileDeleteActionTest.java @@ -22,6 +22,7 @@ package org.sonar.server.qualityprofile.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.resources.Language; import org.sonar.api.resources.Languages; @@ -41,7 +42,7 @@ import org.sonar.server.language.LanguageTesting; import org.sonar.server.qualityprofile.QProfileFactory; import org.sonar.server.qualityprofile.db.ActiveRuleDao; import org.sonar.server.rule.db.RuleDao; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -51,6 +52,8 @@ public class QProfileDeleteActionTest { @ClassRule public static DbTester dbTester = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private DbClient dbClient; @@ -80,7 +83,7 @@ public class QProfileDeleteActionTest { mock(RuleActivationActions.class), mock(BulkRuleActivationActions.class), mock(ProjectAssociationActions.class), - new QProfileDeleteAction(new Languages(xoo1, xoo2), new QProfileFactory(dbClient), dbClient))); + new QProfileDeleteAction(new Languages(xoo1, xoo2), new QProfileFactory(dbClient), dbClient, userSessionRule))); } @After @@ -98,7 +101,7 @@ public class QProfileDeleteActionTest { qualityProfileDao.insertProjectProfileAssociation(project.uuid(), profileKey, session); session.commit(); - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "delete").setParam("profileKey", "sonar-way-xoo1-12345").execute().assertNoContent(); @@ -116,7 +119,7 @@ public class QProfileDeleteActionTest { qualityProfileDao.insertProjectProfileAssociation(project.uuid(), profileKey, session); session.commit(); - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "delete").setParam("profileName", "Sonar way").setParam("language", xoo1.getKey()).execute().assertNoContent(); @@ -126,37 +129,37 @@ public class QProfileDeleteActionTest { @Test(expected = ForbiddenException.class) public void fail_on_missing_permission() throws Exception { - MockUserSession.set().setLogin("obiwan"); + userSessionRule.logon("obiwan"); tester.newPostRequest("api/qualityprofiles", "delete").execute(); } @Test(expected = IllegalArgumentException.class) public void fail_on_missing_arguments() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "delete").execute(); } @Test(expected = IllegalArgumentException.class) public void fail_on_missing_language() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "delete").setParam("profileName", "Polop").execute(); } @Test(expected = IllegalArgumentException.class) public void fail_on_missing_name() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "delete").setParam("language", xoo1.getKey()).execute(); } @Test(expected = IllegalArgumentException.class) public void fail_on_too_many_arguments() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "delete").setParam("profileName", "Polop").setParam("language", xoo1.getKey()).setParam("profileKey", "polop").execute(); } @Test(expected = NotFoundException.class) public void fail_on_unexisting_profile() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "delete").setParam("profileName", "Polop").setParam("language", xoo1.getKey()).execute(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileExportActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileExportActionTest.java index 974f4d8aa18..d145d0f7421 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileExportActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileExportActionTest.java @@ -24,6 +24,7 @@ import org.apache.commons.lang.StringUtils; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.mockito.Matchers; import org.mockito.invocation.InvocationOnMock; @@ -42,6 +43,7 @@ import org.sonar.server.language.LanguageTesting; import org.sonar.server.qualityprofile.*; import org.sonar.server.qualityprofile.index.ActiveRuleIndex; import org.sonar.server.search.IndexClient; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import org.sonar.server.ws.WsTester.Result; @@ -57,6 +59,8 @@ public class QProfileExportActionTest { @ClassRule public static final DbTester db = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WsTester wsTester; @@ -87,7 +91,7 @@ public class QProfileExportActionTest { when(activeRuleIndex.findByProfile(Matchers.anyString())).thenReturn(Sets.newHashSet().iterator()); when(indexClient.get(ActiveRuleIndex.class)).thenReturn(activeRuleIndex); - exporters = new QProfileExporters(new QProfileLoader(dbClient, indexClient), null, null, new ProfileExporter[] {exporter1, exporter2}, null); + exporters = new QProfileExporters(new QProfileLoader(dbClient, indexClient, userSessionRule), null, null, new ProfileExporter[] {exporter1, exporter2}, null); wsTester = new WsTester(new QProfilesWs(mock(RuleActivationActions.class), mock(BulkRuleActivationActions.class), mock(ProjectAssociationActions.class), diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileInheritanceActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileInheritanceActionMediumTest.java index 44fbc09dd1d..58dcf278b0b 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileInheritanceActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileInheritanceActionMediumTest.java @@ -22,6 +22,7 @@ package org.sonar.server.qualityprofile.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; @@ -37,12 +38,15 @@ import org.sonar.server.qualityprofile.QProfileTesting; import org.sonar.server.qualityprofile.RuleActivation; import org.sonar.server.qualityprofile.RuleActivator; import org.sonar.server.tester.ServerTester; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; public class QProfileInheritanceActionMediumTest { @ClassRule public static final ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); private WsTester wsTester; diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileProjectsActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileProjectsActionTest.java index 06e5285064a..29cb83fcfe2 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileProjectsActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileProjectsActionTest.java @@ -22,6 +22,7 @@ package org.sonar.server.qualityprofile.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.experimental.categories.Category; import org.sonar.api.utils.System2; @@ -37,7 +38,7 @@ import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.qualityprofile.QProfileTesting; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.db.UserDao; import org.sonar.server.ws.WsTester; import org.sonar.server.ws.WsTester.TestRequest; @@ -50,6 +51,8 @@ public class QProfileProjectsActionTest { @ClassRule public static final DbTester dbTester = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private WsTester wsTester; @@ -79,9 +82,9 @@ public class QProfileProjectsActionTest { mock(RuleActivationActions.class), mock(BulkRuleActivationActions.class), mock(ProjectAssociationActions.class), - new QProfileProjectsAction(dbClient))); + new QProfileProjectsAction(dbClient, userSessionRule))); - MockUserSession.set().setLogin("obiwan").setUserId(userId.intValue()); + userSessionRule.logon("obiwan").setUserId(userId.intValue()); new UserDao(dbTester.myBatis(), mock(System2.class)) .insert(session, new UserDto() .setActive(true) diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRenameActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRenameActionTest.java index c5c7a994b61..0374142ccef 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRenameActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRenameActionTest.java @@ -22,6 +22,7 @@ package org.sonar.server.qualityprofile.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.utils.System2; import org.sonar.core.permission.GlobalPermissions; @@ -33,7 +34,7 @@ import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.qualityprofile.QProfileFactory; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -43,6 +44,8 @@ public class QProfileRenameActionTest { @ClassRule public static DbTester dbTester = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private DbClient dbClient; @@ -68,7 +71,7 @@ public class QProfileRenameActionTest { mock(RuleActivationActions.class), mock(BulkRuleActivationActions.class), mock(ProjectAssociationActions.class), - new QProfileRenameAction(new QProfileFactory(dbClient)))); + new QProfileRenameAction(new QProfileFactory(dbClient), userSessionRule))); } @After @@ -78,7 +81,7 @@ public class QProfileRenameActionTest { @Test public void rename_nominal() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "rename") .setParam("key", "sonar-way-xoo2-23456") @@ -90,7 +93,7 @@ public class QProfileRenameActionTest { @Test(expected = BadRequestException.class) public void do_nothing_on_conflict() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "rename") .setParam("key", "sonar-way-xoo2-23456") @@ -100,7 +103,7 @@ public class QProfileRenameActionTest { @Test(expected = IllegalArgumentException.class) public void fail_on_missing_key() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "rename") .setParam("name", "Other Sonar Way") @@ -109,7 +112,7 @@ public class QProfileRenameActionTest { @Test(expected = IllegalArgumentException.class) public void fail_on_missing_name() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "rename") .setParam("key", "sonar-way-xoo1-13245") @@ -118,7 +121,7 @@ public class QProfileRenameActionTest { @Test(expected = ForbiddenException.class) public void fail_on_missing_permission() throws Exception { - MockUserSession.set().setLogin("obiwan"); + userSessionRule.logon("obiwan"); tester.newPostRequest("api/qualityprofiles", "rename") .setParam("key", "sonar-way-xoo1-13245") @@ -128,7 +131,7 @@ public class QProfileRenameActionTest { @Test(expected = IllegalArgumentException.class) public void fail_on_unknown_profile() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "rename") .setParam("key", "polop") diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRestoreActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRestoreActionTest.java index cbf140bffa7..70bb0eaf12a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRestoreActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileRestoreActionTest.java @@ -19,7 +19,9 @@ */ package org.sonar.server.qualityprofile.ws; +import java.io.Reader; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -31,11 +33,9 @@ import org.sonar.server.language.LanguageTesting; import org.sonar.server.qualityprofile.BulkChangeResult; import org.sonar.server.qualityprofile.QProfileBackuper; import org.sonar.server.qualityprofile.QProfileName; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.io.Reader; - import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; @@ -44,6 +44,8 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class QProfileRestoreActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); // TODO Replace with proper DbTester + EsTester medium test once DaoV2 is removed @Mock @@ -57,12 +59,12 @@ public class QProfileRestoreActionTest { mock(RuleActivationActions.class), mock(BulkRuleActivationActions.class), mock(ProjectAssociationActions.class), - new QProfileRestoreAction(backuper, LanguageTesting.newLanguages("xoo")))); + new QProfileRestoreAction(backuper, LanguageTesting.newLanguages("xoo"), userSessionRule))); } @Test public void restore_profile() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); QualityProfileDto profile = QualityProfileDto.createFor("xoo-sonar-way-12345") .setDefault(false).setLanguage("xoo").setName("Sonar way"); @@ -76,14 +78,14 @@ public class QProfileRestoreActionTest { @Test(expected = IllegalArgumentException.class) public void fail_on_missing_backup() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newGetRequest("api/qualityprofiles", "restore").execute(); } @Test(expected = ForbiddenException.class) public void fail_on_misssing_permission() throws Exception { - MockUserSession.set().setLogin("obiwan"); + userSessionRule.logon("obiwan"); tester.newPostRequest("api/qualityprofiles", "restore").setParam("backup", "").execute(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileSetDefaultActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileSetDefaultActionTest.java index 136e83fc0bb..a01c788be43 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileSetDefaultActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfileSetDefaultActionTest.java @@ -23,6 +23,7 @@ import org.assertj.core.api.Fail; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.utils.System2; import org.sonar.core.permission.GlobalPermissions; @@ -36,7 +37,7 @@ import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.language.LanguageTesting; import org.sonar.server.qualityprofile.QProfileFactory; import org.sonar.server.qualityprofile.QProfileLookup; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -46,6 +47,8 @@ public class QProfileSetDefaultActionTest { @ClassRule public static DbTester dbTester = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private DbClient dbClient; @@ -71,7 +74,7 @@ public class QProfileSetDefaultActionTest { mock(RuleActivationActions.class), mock(BulkRuleActivationActions.class), mock(ProjectAssociationActions.class), - new QProfileSetDefaultAction(LanguageTesting.newLanguages(xoo1Key, xoo2Key), new QProfileLookup(dbClient), new QProfileFactory(dbClient)))); + new QProfileSetDefaultAction(LanguageTesting.newLanguages(xoo1Key, xoo2Key), new QProfileLookup(dbClient), new QProfileFactory(dbClient), userSessionRule))); } @After @@ -81,7 +84,7 @@ public class QProfileSetDefaultActionTest { @Test public void set_default_profile_using_key() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); checkDefaultProfile(xoo1Key, "sonar-way-xoo1-12345"); @@ -102,7 +105,7 @@ public class QProfileSetDefaultActionTest { @Test public void set_default_profile_using_language_and_name() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); tester.newPostRequest("api/qualityprofiles", "set_default").setParam("language", xoo2Key).setParam("profileName", "Sonar way").execute().assertNoContent(); @@ -112,7 +115,7 @@ public class QProfileSetDefaultActionTest { @Test public void fail_to_set_default_profile_using_key() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); try { tester.newPostRequest("api/qualityprofiles", "set_default").setParam("profileKey", "unknown-profile-666").execute(); @@ -127,7 +130,7 @@ public class QProfileSetDefaultActionTest { @Test public void fail_to_set_default_profile_using_language_and_name() throws Exception { - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); try { tester.newPostRequest("api/qualityprofiles", "set_default").setParam("language", xoo2Key).setParam("profileName", "Unknown").execute(); @@ -141,7 +144,7 @@ public class QProfileSetDefaultActionTest { @Test public void fail_on_missing_permission() throws Exception { - MockUserSession.set().setLogin("obiwan"); + userSessionRule.logon("obiwan"); try { tester.newPostRequest("api/qualityprofiles", "set_default").setParam("profileKey", "sonar-way-xoo2-23456").execute().assertNoContent(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java index b2de87d9bda..fce5c1e8d37 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsMediumTest.java @@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableSet; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; @@ -47,7 +48,7 @@ import org.sonar.server.rule.ws.SearchAction; import org.sonar.server.search.QueryContext; import org.sonar.server.search.ws.SearchOptions; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -57,6 +58,9 @@ public class QProfilesWsMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester) + .logon("gandalf").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); QProfilesWs ws; DbClient db; @@ -70,8 +74,6 @@ public class QProfilesWsMediumTest { ws = tester.get(QProfilesWs.class); wsTester = tester.get(WsTester.class); session = db.openSession(false); - MockUserSession.set().setLogin("gandalf").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); - } @After @@ -335,7 +337,7 @@ public class QProfilesWsMediumTest { // 2. Assert ActiveRule with BLOCKER severity assertThat(tester.get(RuleIndex.class).search( new RuleQuery().setSeverities(ImmutableSet.of("BLOCKER")), - new QueryContext()).getHits()).hasSize(2); + new QueryContext(userSessionRule)).getHits()).hasSize(2); // 1. Activate Rule with query returning 2 hits WsTester.TestRequest request = wsTester.newGetRequest(QProfilesWs.API_ENDPOINT, BulkRuleActivationActions.BULK_ACTIVATE_ACTION); diff --git a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsTest.java index 130b3caab9a..7f6dc975e6d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/qualityprofile/ws/QProfilesWsTest.java @@ -20,7 +20,9 @@ package org.sonar.server.qualityprofile.ws; +import java.io.Reader; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.i18n.I18n; import org.sonar.api.profiles.ProfileImporter; @@ -33,14 +35,15 @@ import org.sonar.server.language.LanguageTesting; import org.sonar.server.qualityprofile.QProfileExporters; import org.sonar.server.qualityprofile.QProfileService; import org.sonar.server.rule.RuleService; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.io.Reader; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; public class QProfilesWsTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WebService.Controller controller; @@ -58,25 +61,25 @@ public class QProfilesWsTest { controller = new WsTester(new QProfilesWs( new RuleActivationActions(profileService), - new BulkRuleActivationActions(profileService, ruleService, i18n), - new ProjectAssociationActions(null, null, null, languages), - new QProfileCreateAction(null, null, null, languages, importers), + new BulkRuleActivationActions(profileService, ruleService, i18n, userSessionRule), + new ProjectAssociationActions(null, null, null, languages, userSessionRule), + new QProfileCreateAction(null, null, null, languages, importers, userSessionRule), new QProfileImportersAction(importers), new QProfileRestoreBuiltInAction(null), new QProfileSearchAction(languages, null, null, null), - new QProfileSetDefaultAction(languages, null, null), - new QProfileProjectsAction(null), + new QProfileSetDefaultAction(languages, null, null, userSessionRule), + new QProfileProjectsAction(null, userSessionRule), new QProfileBackupAction(null, null, null, languages), - new QProfileRestoreAction(null, languages), + new QProfileRestoreAction(null, languages, userSessionRule), new QProfileChangelogAction(null, null, null, languages), - new QProfileChangeParentAction(null, null, null, languages), + new QProfileChangeParentAction(null, null, null, languages, userSessionRule), new QProfileCompareAction(null, null, null, languages), - new QProfileCopyAction(null, languages), - new QProfileDeleteAction(languages, null, null), + new QProfileCopyAction(null, languages, userSessionRule), + new QProfileDeleteAction(languages, null, null, userSessionRule), new QProfileExportAction(null, null, null, mock(QProfileExporters.class), languages), new QProfileExportersAction(), new QProfileInheritanceAction(null, null, null, null, languages), - new QProfileRenameAction(null) + new QProfileRenameAction(null, userSessionRule) )).controller(QProfilesWs.API_ENDPOINT); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/DefaultRuleFinderMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/DefaultRuleFinderMediumTest.java index cf2e19f64f0..ff3138efd8b 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/DefaultRuleFinderMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/DefaultRuleFinderMediumTest.java @@ -31,6 +31,7 @@ import org.sonar.server.db.DbClient; import org.sonar.server.tester.ServerTester; import java.util.Collections; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; @@ -40,6 +41,8 @@ public class DefaultRuleFinderMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); private DbClient dbClient; private DefaultRuleFinder finder; diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesMediumTest.java index 778bb4bb116..9b45602d1dd 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RegisterRulesMediumTest.java @@ -21,6 +21,10 @@ package org.sonar.server.rule; import com.google.common.collect.ImmutableMap; +import java.util.Date; +import java.util.List; +import java.util.Map; +import javax.annotation.Nullable; import org.apache.commons.lang.time.DateUtils; import org.junit.After; import org.junit.Before; @@ -50,14 +54,7 @@ import org.sonar.server.rule.index.RuleQuery; import org.sonar.server.search.QueryContext; import org.sonar.server.search.Result; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; -import org.sonar.server.user.UserSession; - -import javax.annotation.Nullable; - -import java.util.Date; -import java.util.List; -import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Sets.newHashSet; import static org.assertj.core.api.Assertions.assertThat; @@ -69,6 +66,8 @@ public class RegisterRulesMediumTest { @ClassRule public static final ServerTester TESTER = new ServerTester().addXoo().addComponents(RULE_DEFS); + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(TESTER); RuleIndex ruleIndex; ActiveRuleIndex activeRuleIndex; @@ -135,7 +134,7 @@ public class RegisterRulesMediumTest { assertThat(ruleParams).hasSize(2); // verify es - Result searchResult = ruleIndex.search(new RuleQuery(), new QueryContext()); + Result searchResult = ruleIndex.search(new RuleQuery(), new QueryContext(userSessionRule)); assertThat(searchResult.getTotal()).isEqualTo(1); assertThat(searchResult.getHits()).hasSize(1); Rule rule = ruleIndex.getByKey(RuleKey.of("xoo", "x1")); @@ -182,8 +181,8 @@ public class RegisterRulesMediumTest { register(rules); // verify that rules are indexed - Result searchResult = ruleIndex.search(new RuleQuery(), new QueryContext()); - searchResult = ruleIndex.search(new RuleQuery().setKey("xoo:x1"), new QueryContext()); + Result searchResult = ruleIndex.search(new RuleQuery(), new QueryContext(userSessionRule)); + searchResult = ruleIndex.search(new RuleQuery().setKey("xoo:x1"), new QueryContext(userSessionRule)); assertThat(searchResult.getTotal()).isEqualTo(1); assertThat(searchResult.getHits()).hasSize(1); assertThat(searchResult.getHits().get(0).key()).isEqualTo(RuleKey.of("xoo", "x1")); @@ -358,7 +357,7 @@ public class RegisterRulesMediumTest { }); // Create a profile and activate rule - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); db.qualityProfileDao().insert(dbSession, QProfileTesting.newXooP1()); dbSession.commit(); dbSession.clearCache(); @@ -388,7 +387,7 @@ public class RegisterRulesMediumTest { register(rules); // create a profile and activate rule - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); db.qualityProfileDao().insert(dbSession, QProfileTesting.newXooP1()); dbSession.commit(); dbSession.clearCache(); @@ -420,7 +419,7 @@ public class RegisterRulesMediumTest { }); // Create profile and activate rule - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN).setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); db.qualityProfileDao().insert(dbSession, QProfileTesting.newXooP1()); dbSession.commit(); dbSession.clearCache(); @@ -463,7 +462,7 @@ public class RegisterRulesMediumTest { assertThat(rule.tags()).isEmpty(); // User adds tag - TESTER.get(RuleUpdater.class).update(RuleUpdate.createForPluginRule(RuleTesting.XOO_X1).setTags(newHashSet("tag2")), UserSession.get()); + TESTER.get(RuleUpdater.class).update(RuleUpdate.createForPluginRule(RuleTesting.XOO_X1).setTags(newHashSet("tag2")), userSessionRule); dbSession.clearCache(); rule = ruleIndex.getByKey(RuleTesting.XOO_X1); assertThat(rule.systemTags()).containsOnly("tag1"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java index 3a6a06873a9..7ffc74e00b9 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RubyRuleServiceTest.java @@ -21,6 +21,8 @@ package org.sonar.server.rule; import com.google.common.collect.ImmutableMap; +import java.util.HashMap; +import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -34,19 +36,23 @@ import org.sonar.server.paging.PagedResult; import org.sonar.server.rule.index.RuleQuery; import org.sonar.server.search.QueryContext; import org.sonar.server.search.Result; -import org.sonar.server.user.UserSession; - -import java.util.HashMap; -import java.util.List; +import org.sonar.server.tester.UserSessionRule; +import org.sonar.server.user.ThreadLocalUserSession; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Maps.newHashMap; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class RubyRuleServiceTest { + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + @Mock RuleService ruleService; @@ -63,7 +69,7 @@ public class RubyRuleServiceTest { @Before public void setUp() { - service = new RubyRuleService(ruleService, updater); + service = new RubyRuleService(ruleService, updater, userSessionRule); } @Test @@ -161,7 +167,7 @@ public class RubyRuleServiceTest { service.updateRule(ImmutableMap.of("ruleKey", "squid:S001")); - verify(updater).update(any(RuleUpdate.class), any(UserSession.class)); + verify(updater).update(any(RuleUpdate.class), any(ThreadLocalUserSession.class)); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleBackendMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleBackendMediumTest.java index f24f7237402..d97afc80ab0 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleBackendMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleBackendMediumTest.java @@ -43,6 +43,7 @@ import org.sonar.server.tester.ServerTester; import java.util.Collection; import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; @@ -53,6 +54,8 @@ public class RuleBackendMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); RuleDao dao = tester.get(RuleDao.class); RuleIndex index = tester.get(RuleIndex.class); @@ -432,7 +435,7 @@ public class RuleBackendMediumTest { assertThat(index.getByKey(RuleTesting.XOO_X2)).isNotNull(); // 2. assert find does not get REMOVED - List rules = index.search(new RuleQuery(), new QueryContext()).getHits(); + List rules = index.search(new RuleQuery(), new QueryContext(userSessionRule)).getHits(); assertThat(rules).hasSize(1); assertThat(rules.get(0).key()).isEqualTo(RuleTesting.XOO_X1); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleCreatorMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleCreatorMediumTest.java index 2a9900c0854..5ffaae8e5e2 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleCreatorMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleCreatorMediumTest.java @@ -43,6 +43,7 @@ import org.sonar.server.search.BaseIndex; import org.sonar.server.tester.ServerTester; import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -51,6 +52,8 @@ public class RuleCreatorMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbSession dbSession; DbClient db = tester.get(DbClient.class); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterMediumTest.java index 9ff5e40059a..5f6d53b03ed 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleDeleterMediumTest.java @@ -43,6 +43,7 @@ import org.sonar.server.search.BaseIndex; import org.sonar.server.tester.ServerTester; import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; @@ -50,6 +51,8 @@ public class RuleDeleterMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db = tester.get(DbClient.class); RuleDao dao = tester.get(RuleDao.class); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleOperationsTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleOperationsTest.java index b471f488f63..91dba0e04f4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleOperationsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleOperationsTest.java @@ -38,15 +38,18 @@ import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.rule.RuleOperations.RuleChange; import org.sonar.server.rule.db.RuleDao; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.MockUserSession; import org.sonar.server.user.UserSession; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class RuleOperationsTest { - @Mock DbClient dbClient; @@ -62,7 +65,7 @@ public class RuleOperationsTest { @Captor ArgumentCaptor ruleCaptor; - UserSession authorizedUserSession = MockUserSession.create().setLogin("nicolas").setName("Nicolas").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + UserSession authorizedUserSession = new MockUserSession("nicolas").setName("Nicolas").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); RuleOperations operations; diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleServiceMediumTest.java index d9a9268f8db..320f6ec9eba 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleServiceMediumTest.java @@ -21,6 +21,8 @@ package org.sonar.server.rule; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; +import java.util.Collections; +import java.util.Set; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; @@ -38,10 +40,7 @@ import org.sonar.server.rule.db.RuleDao; import org.sonar.server.rule.index.RuleIndex; import org.sonar.server.rule.index.RuleNormalizer; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; - -import java.util.Collections; -import java.util.Set; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; @@ -51,6 +50,8 @@ public class RuleServiceMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); RuleDao dao = tester.get(RuleDao.class); RuleIndex index = tester.get(RuleIndex.class); @@ -70,9 +71,7 @@ public class RuleServiceMediumTest { @Test public void get_rule_by_key() { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); RuleKey key = RuleKey.of("java", "S001"); @@ -88,9 +87,7 @@ public class RuleServiceMediumTest { @Test public void get_non_null_rule_by_key() { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); RuleKey key = RuleKey.of("java", "S001"); @@ -109,9 +106,7 @@ public class RuleServiceMediumTest { @Test public void get_rule_by_key_escape_description_on_manual_rule() { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); + userSessionRule.logon().logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); RuleDto manualRule = RuleTesting.newManualRule("My manual") .setDescription("
Manual rule desc
"); @@ -126,9 +121,7 @@ public class RuleServiceMediumTest { @Test public void get_rule_by_keys() { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); + userSessionRule.setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); dao.insert(dbSession, RuleTesting.newDto(RuleKey.of("java", "S001"))); dbSession.commit(); @@ -164,9 +157,7 @@ public class RuleServiceMediumTest { @Test public void update_rule() { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); + userSessionRule.logon("me").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); RuleKey key = RuleKey.of("java", "S001"); @@ -186,7 +177,7 @@ public class RuleServiceMediumTest { @Test(expected = UnauthorizedException.class) public void do_not_update_if_not_granted() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); RuleKey key = RuleKey.of("java", "S001"); @@ -201,9 +192,7 @@ public class RuleServiceMediumTest { @Test public void create_rule() { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); // Create template rule RuleKey templateRuleKey = RuleKey.of("java", "S001"); @@ -227,16 +216,14 @@ public class RuleServiceMediumTest { @Test(expected = UnauthorizedException.class) public void do_not_create_if_not_granted() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + userSessionRule.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); service.create(NewRule.createForCustomRule("MY_CUSTOM", RuleKey.of("java", "S001"))); } @Test public void delete_rule() { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); + userSessionRule.logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); // Create template rule RuleKey templateRuleKey = RuleKey.of("java", "S001"); @@ -257,8 +244,8 @@ public class RuleServiceMediumTest { } @Test(expected = UnauthorizedException.class) - public void do_not_delete_if_not_granted() { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); + public void do_not_delete_if_not_granted() throws Exception { + userSessionRule.setGlobalPermissions(GlobalPermissions.SCAN_EXECUTION); service.delete(RuleKey.of("java", "S001")); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleUpdaterMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleUpdaterMediumTest.java index 7b01cfe2510..78f192c8bed 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/RuleUpdaterMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/RuleUpdaterMediumTest.java @@ -19,11 +19,10 @@ */ package org.sonar.server.rule; -import org.sonar.server.search.BaseIndex; - import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import java.util.Set; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; @@ -48,11 +47,9 @@ import org.sonar.server.qualityprofile.RuleActivator; import org.sonar.server.qualityprofile.index.ActiveRuleIndex; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.rule.index.RuleIndex; +import org.sonar.server.search.BaseIndex; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; -import org.sonar.server.user.UserSession; - -import java.util.Set; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -63,6 +60,8 @@ public class RuleUpdaterMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbClient db = tester.get(DbClient.class); RuleDao ruleDao = tester.get(RuleDao.class); @@ -89,7 +88,7 @@ public class RuleUpdaterMediumTest { RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY).setTags(Sets.newHashSet("java9")); try { - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); fail(); } catch (IllegalArgumentException e) { assertThat(e).hasMessage("Rule with REMOVED status cannot be updated: squid:S001"); @@ -111,7 +110,7 @@ public class RuleUpdaterMediumTest { RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY); assertThat(update.isEmpty()).isTrue(); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); RuleDto rule = ruleDao.getNullableByKey(dbSession, RULE_KEY); @@ -126,7 +125,7 @@ public class RuleUpdaterMediumTest { @Test public void set_markdown_note() { - MockUserSession.set().setLogin("me"); + userSessionRule.logon("me"); ruleDao.insert(dbSession, RuleTesting.newDto(RULE_KEY) .setNoteData(null) @@ -142,7 +141,7 @@ public class RuleUpdaterMediumTest { RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY); update.setMarkdownNote("my *note*"); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); RuleDto rule = ruleDao.getNullableByKey(dbSession, RULE_KEY); @@ -166,7 +165,7 @@ public class RuleUpdaterMediumTest { dbSession.commit(); RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY).setMarkdownNote(null); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); RuleDto rule = ruleDao.getNullableByKey(dbSession, RULE_KEY); @@ -186,7 +185,7 @@ public class RuleUpdaterMediumTest { // java8 is a system tag -> ignore RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY).setTags(Sets.newHashSet("bug", "java8")); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); RuleDto rule = ruleDao.getNullableByKey(dbSession, RULE_KEY); @@ -206,7 +205,7 @@ public class RuleUpdaterMediumTest { dbSession.commit(); RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY).setTags(null); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); RuleDto rule = ruleDao.getNullableByKey(dbSession, RULE_KEY); @@ -236,7 +235,7 @@ public class RuleUpdaterMediumTest { RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY) .setDebtSubCharacteristic("SOFT_RELIABILITY") .setDebtRemediationFunction(fn); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); // verify debt is overridden @@ -270,7 +269,7 @@ public class RuleUpdaterMediumTest { RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY) .setDebtRemediationFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.LINEAR, "2d", null)); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); // verify debt is overridden @@ -304,7 +303,7 @@ public class RuleUpdaterMediumTest { RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY) .setDebtRemediationFunction(new DefaultDebtRemediationFunction(DebtRemediationFunction.Type.CONSTANT_ISSUE, null, "10min")); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); // verify debt is overridden @@ -339,7 +338,7 @@ public class RuleUpdaterMediumTest { RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY) .setDebtSubCharacteristic(RuleUpdate.DEFAULT_DEBT_CHARACTERISTIC); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); // verify debt is coming from default values @@ -374,7 +373,7 @@ public class RuleUpdaterMediumTest { RuleUpdate update = RuleUpdate.createForPluginRule(RULE_KEY) .setDebtSubCharacteristic(null); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); // verify db dbSession.clearCache(); @@ -426,7 +425,7 @@ public class RuleUpdaterMediumTest { .setSeverity("MAJOR") .setStatus(RuleStatus.READY) .setParameters(ImmutableMap.of("regex", "b.*")); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); @@ -468,7 +467,7 @@ public class RuleUpdaterMediumTest { .setMarkdownDescription("New description") .setSeverity("MAJOR") .setStatus(RuleStatus.READY); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); @@ -511,7 +510,7 @@ public class RuleUpdaterMediumTest { // Update custom rule parameter 'regex', add 'message' and remove 'format' RuleUpdate update = RuleUpdate.createForCustomRule(customRule.getKey()) .setParameters(ImmutableMap.of("regex", "b.*", "message", "a message")); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); @@ -556,7 +555,7 @@ public class RuleUpdaterMediumTest { .setName("") .setMarkdownDescription("New desc"); try { - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("The name is missing"); @@ -580,7 +579,7 @@ public class RuleUpdaterMediumTest { .setName("New name") .setMarkdownDescription(""); try { - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); fail(); } catch (Exception e) { assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("The description is missing"); @@ -603,7 +602,7 @@ public class RuleUpdaterMediumTest { .setName("New name") .setMarkdownDescription("New description") .setSeverity(Severity.CRITICAL); - updater.update(update, UserSession.get()); + updater.update(update, userSessionRule); dbSession.clearCache(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java index 9e27542bbb7..a518646c6f9 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/index/RuleIndexMediumTest.java @@ -61,6 +61,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; @@ -70,6 +71,8 @@ public class RuleIndexMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @org.junit.Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); protected DbClient db; @@ -136,15 +139,15 @@ public class RuleIndexMediumTest { // should not have any facet! RuleQuery query = new RuleQuery(); - Result result = index.search(query, new QueryContext()); + Result result = index.search(query, new QueryContext(userSessionRule)); assertThat(result.getFacets()).isEmpty(); // should not have any facet on non matching query! - result = index.search(new RuleQuery().setQueryText("aeiou"), new QueryContext().addFacets(Arrays.asList("repositories"))); + result = index.search(new RuleQuery().setQueryText("aeiou"), new QueryContext(userSessionRule).addFacets(Arrays.asList("repositories"))); assertThat(result.getFacets()).isEmpty(); // Repositories Facet is preset - result = index.search(query, new QueryContext().addFacets(Arrays.asList("repositories", "tags"))); + result = index.search(query, new QueryContext(userSessionRule).addFacets(Arrays.asList("repositories", "tags"))); assertThat(result.getFacets()).isNotNull(); assertThat(result.getFacets()).hasSize(2); @@ -168,7 +171,7 @@ public class RuleIndexMediumTest { dao.insert(dbSession, RuleTesting.newDto(RuleKey.of("javascript", "S001"))); dbSession.commit(); - QueryContext options = new QueryContext().setFieldsToReturn(null); + QueryContext options = new QueryContext(userSessionRule).setFieldsToReturn(null); Result results = index.search(new RuleQuery(), options); assertThat(results.getHits()).hasSize(1); Rule hit = Iterables.getFirst(results.getHits(), null); @@ -176,7 +179,7 @@ public class RuleIndexMediumTest { assertThat(hit.htmlDescription()).isNotNull(); assertThat(hit.name()).isNotNull(); - options = new QueryContext().setFieldsToReturn(Collections.emptyList()); + options = new QueryContext(userSessionRule).setFieldsToReturn(Collections.emptyList()); results = index.search(new RuleQuery(), options); assertThat(results.getHits()).hasSize(1); hit = Iterables.getFirst(results.getHits(), null); @@ -190,7 +193,7 @@ public class RuleIndexMediumTest { dao.insert(dbSession, RuleTesting.newDto(RuleKey.of("javascript", "S001"))); dbSession.commit(); - QueryContext options = new QueryContext(); + QueryContext options = new QueryContext(userSessionRule); options.addFieldsToReturn(RuleNormalizer.RuleField.LANGUAGE.field(), RuleNormalizer.RuleField.STATUS.field()); Result results = index.search(new RuleQuery(), options); assertThat(results.getHits()).hasSize(1); @@ -215,19 +218,19 @@ public class RuleIndexMediumTest { // substring RuleQuery query = new RuleQuery().setQueryText("test"); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); // substring query = new RuleQuery().setQueryText("partial match"); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); // case-insensitive query = new RuleQuery().setQueryText("TESTING"); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); // not found query = new RuleQuery().setQueryText("not present"); - assertThat(index.search(query, new QueryContext()).getHits()).isEmpty(); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).isEmpty(); } @Test @@ -239,16 +242,16 @@ public class RuleIndexMediumTest { // key RuleQuery query = new RuleQuery().setQueryText("X001"); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); // partial key does not match query = new RuleQuery().setQueryText("X00"); // TODO fix non-partial match for Key search - assertThat(index.search(query, new QueryContext()).getHits()).isEmpty(); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).isEmpty(); // repo:key -> nice-to-have ! query = new RuleQuery().setQueryText("javascript:X001"); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); } @Test @@ -260,12 +263,12 @@ public class RuleIndexMediumTest { // key RuleQuery query = new RuleQuery().setKey(RuleKey.of("javascript", "X001").toString()); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); // partial key does not match query = new RuleQuery().setKey("X001"); // TODO fix non-partial match for Key search - assertThat(index.search(query, new QueryContext()).getHits()).isEmpty(); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).isEmpty(); } @Test @@ -274,7 +277,7 @@ public class RuleIndexMediumTest { dao.insert(dbSession, RuleTesting.newDto(RuleKey.of("java", "S002"))); dbSession.commit(); - Result results = index.search(new RuleQuery(), new QueryContext()); + Result results = index.search(new RuleQuery(), new QueryContext(userSessionRule)); assertThat(results.getTotal()).isEqualTo(2); assertThat(results.getHits()).hasSize(2); @@ -288,7 +291,7 @@ public class RuleIndexMediumTest { } dbSession.commit(); - Result results = index.search(new RuleQuery(), new QueryContext().setScroll(true)); + Result results = index.search(new RuleQuery(), new QueryContext(userSessionRule).setScroll(true)); assertThat(results.getTotal()).isEqualTo(max); assertThat(results.getHits()).hasSize(0); @@ -343,9 +346,9 @@ public class RuleIndexMediumTest { .setDefaultRemediationFunction(null).setDefaultRemediationCoefficient(null)); dbSession.commit(); - assertThat(index.search(new RuleQuery().setHasDebtCharacteristic(null), new QueryContext()).getTotal()).isEqualTo(4); - assertThat(index.search(new RuleQuery().setHasDebtCharacteristic(true), new QueryContext()).getTotal()).isEqualTo(2); - assertThat(index.search(new RuleQuery().setHasDebtCharacteristic(false), new QueryContext()).getTotal()).isEqualTo(2); + assertThat(index.search(new RuleQuery().setHasDebtCharacteristic(null), new QueryContext(userSessionRule)).getTotal()).isEqualTo(4); + assertThat(index.search(new RuleQuery().setHasDebtCharacteristic(true), new QueryContext(userSessionRule)).getTotal()).isEqualTo(2); + assertThat(index.search(new RuleQuery().setHasDebtCharacteristic(false), new QueryContext(userSessionRule)).getTotal()).isEqualTo(2); } @Test @@ -388,7 +391,7 @@ public class RuleIndexMediumTest { .setDefaultRemediationFunction(null).setDefaultRemediationCoefficient(null)); dbSession.commit(); - QueryContext withDebtCharFacet = new QueryContext().addFacets(Arrays.asList(RuleIndex.FACET_DEBT_CHARACTERISTICS)); + QueryContext withDebtCharFacet = new QueryContext(userSessionRule).addFacets(Arrays.asList(RuleIndex.FACET_DEBT_CHARACTERISTICS)); // Facet show results on characs, subcharacs and uncharacterized rules Result result1 = index.search(new RuleQuery(), withDebtCharFacet); @@ -446,17 +449,17 @@ public class RuleIndexMediumTest { dbSession.commit(); RuleQuery query = new RuleQuery().setRepositories(Arrays.asList("checkstyle", "pmd")); - Result results = index.search(query, new QueryContext()); + Result results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(1); assertThat(Iterables.getFirst(results.getHits(), null).key().rule()).isEqualTo("S002"); // no results query = new RuleQuery().setRepositories(Arrays.asList("checkstyle")); - assertThat(index.search(query, new QueryContext()).getHits()).isEmpty(); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).isEmpty(); // empty list => no filter query = new RuleQuery().setRepositories(Collections.emptyList()); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); } @Test @@ -467,22 +470,22 @@ public class RuleIndexMediumTest { dbSession.commit(); RuleQuery query = new RuleQuery().setLanguages(Arrays.asList("cobol", "js")); - Result results = index.search(query, new QueryContext()); + Result results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(1); assertThat(Iterables.getFirst(results.getHits(), null).key().rule()).isEqualTo("S002"); // no results query = new RuleQuery().setLanguages(Arrays.asList("cpp")); - assertThat(index.search(query, new QueryContext()).getHits()).isEmpty(); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).isEmpty(); // empty list => no filter query = new RuleQuery().setLanguages(Collections.emptyList()); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); // null list => no filter query = new RuleQuery().setLanguages(null); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); } @Test @@ -507,36 +510,36 @@ public class RuleIndexMediumTest { Result results; // 0. we have 2 rules in index - results = index.search(new RuleQuery(), new QueryContext()); + results = index.search(new RuleQuery(), new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(2); // filter by non-subChar query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of("toto")); - assertThat(index.search(query, new QueryContext()).getHits()).isEmpty(); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).isEmpty(); // filter by subChar query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char11.getKey())); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); // filter by Char query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char1.getKey())); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); // filter by Char and SubChar query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char11.getKey(), char1.getKey())); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); // match by Char query = new RuleQuery().setQueryText(char1.getKey()); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); // match by SubChar query = new RuleQuery().setQueryText(char11.getKey()); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); // match by SubChar & Char query = new RuleQuery().setQueryText(char11.getKey() + " " + char1.getKey()); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); } @Test @@ -585,26 +588,26 @@ public class RuleIndexMediumTest { Result results; // 0. we have 4 rules in index - results = index.search(new RuleQuery(), new QueryContext()); + results = index.search(new RuleQuery(), new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(4); // filter by subChar query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char11.getKey())); - assertThat(ruleKeys(index.search(query, new QueryContext()).getHits())).containsOnly("S001", "S002", "S004"); + assertThat(ruleKeys(index.search(query, new QueryContext(userSessionRule)).getHits())).containsOnly("S001", "S002", "S004"); query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char21.getKey())); - assertThat(ruleKeys(index.search(query, new QueryContext()).getHits())).containsOnly("S003"); + assertThat(ruleKeys(index.search(query, new QueryContext(userSessionRule)).getHits())).containsOnly("S003"); // filter by Char query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char1.getKey())); - assertThat(ruleKeys(index.search(query, new QueryContext()).getHits())).containsOnly("S001", "S002", "S004"); + assertThat(ruleKeys(index.search(query, new QueryContext(userSessionRule)).getHits())).containsOnly("S001", "S002", "S004"); query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char2.getKey())); - assertThat(ruleKeys(index.search(query, new QueryContext()).getHits())).containsOnly("S003"); + assertThat(ruleKeys(index.search(query, new QueryContext(userSessionRule)).getHits())).containsOnly("S003"); // filter by Char and SubChar query = new RuleQuery().setDebtCharacteristics(ImmutableSet.of(char11.getKey(), char1.getKey(), char2.getKey(), char21.getKey())); - assertThat(ruleKeys(index.search(query, new QueryContext()).getHits())).containsOnly("S001", "S002", "S003", "S004"); + assertThat(ruleKeys(index.search(query, new QueryContext(userSessionRule)).getHits())).containsOnly("S001", "S002", "S003", "S004"); } @Test @@ -614,21 +617,21 @@ public class RuleIndexMediumTest { dbSession.commit(); RuleQuery query = new RuleQuery().setSeverities(Arrays.asList(Severity.INFO, Severity.MINOR)); - Result results = index.search(query, new QueryContext()); + Result results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(1); assertThat(Iterables.getFirst(results.getHits(), null).key().rule()).isEqualTo("S002"); // no results query = new RuleQuery().setSeverities(Arrays.asList(Severity.MINOR)); - assertThat(index.search(query, new QueryContext()).getHits()).isEmpty(); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).isEmpty(); // empty list => no filter query = new RuleQuery().setSeverities(Collections.emptyList()); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); // null list => no filter query = new RuleQuery().setSeverities(null); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); } @Test @@ -638,21 +641,21 @@ public class RuleIndexMediumTest { dbSession.commit(); RuleQuery query = new RuleQuery().setStatuses(Arrays.asList(RuleStatus.DEPRECATED, RuleStatus.READY)); - Result results = index.search(query, new QueryContext()); + Result results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(1); assertThat(Iterables.getFirst(results.getHits(), null).key().rule()).isEqualTo("S002"); // no results query = new RuleQuery().setStatuses(Arrays.asList(RuleStatus.DEPRECATED)); - assertThat(index.search(query, new QueryContext()).getHits()).isEmpty(); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).isEmpty(); // empty list => no filter query = new RuleQuery().setStatuses(Collections.emptyList()); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); // null list => no filter query = new RuleQuery().setStatuses(null); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); } @Test @@ -664,14 +667,14 @@ public class RuleIndexMediumTest { // ascending RuleQuery query = new RuleQuery().setSortField(RuleNormalizer.RuleField.NAME); - Result results = index.search(query, new QueryContext()); + Result results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(3); assertThat(Iterables.getFirst(results.getHits(), null).key().rule()).isEqualTo("S002"); assertThat(Iterables.getLast(results.getHits(), null).key().rule()).isEqualTo("S003"); // descending query = new RuleQuery().setSortField(RuleNormalizer.RuleField.NAME).setAscendingSort(false); - results = index.search(query, new QueryContext()); + results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(3); assertThat(Iterables.getFirst(results.getHits(), null).key().rule()).isEqualTo("S003"); assertThat(Iterables.getLast(results.getHits(), null).key().rule()).isEqualTo("S002"); @@ -709,25 +712,25 @@ public class RuleIndexMediumTest { // 1. get all active rules. Result result = index.search(new RuleQuery().setActivation(true), - new QueryContext()); + new QueryContext(userSessionRule)); assertThat(result.getHits()).hasSize(2); // 2. get all inactive rules. result = index.search(new RuleQuery().setActivation(false), - new QueryContext()); + new QueryContext(userSessionRule)); assertThat(result.getHits()).hasSize(1); assertThat(result.getHits().get(0).name()).isEqualTo(rule3.getName()); // 3. get all rules not active on profile index.search(new RuleQuery().setActivation(false).setQProfileKey(qualityProfileDto2.getKey()), - new QueryContext()); + new QueryContext(userSessionRule)); // TODO assertThat(result.getHits()).hasSize(1); // 4. get all active rules on profile result = index.search(new RuleQuery().setActivation(true) .setQProfileKey(qualityProfileDto2.getKey()), - new QueryContext()); + new QueryContext(userSessionRule)); assertThat(result.getHits()).hasSize(1); assertThat(result.getHits().get(0).name()).isEqualTo(rule1.getName()); @@ -769,17 +772,17 @@ public class RuleIndexMediumTest { // 0. get all rules Result result = index.search(new RuleQuery(), - new QueryContext()); + new QueryContext(userSessionRule)); assertThat(result.getHits()).hasSize(4); // 1. get all active rules result = index.search(new RuleQuery().setActivation(true), - new QueryContext()); + new QueryContext(userSessionRule)); assertThat(result.getHits()).hasSize(3); // 2. get all inactive rules. result = index.search(new RuleQuery().setActivation(false), - new QueryContext()); + new QueryContext(userSessionRule)); assertThat(result.getHits()).hasSize(1); assertThat(result.getHits().get(0).name()).isEqualTo(rule4.getName()); @@ -787,7 +790,7 @@ public class RuleIndexMediumTest { result = index.search(new RuleQuery().setActivation(true) .setQProfileKey(qualityProfileDto1.getKey()) .setInheritance(ImmutableSet.of(ActiveRule.Inheritance.INHERITED.name())), - new QueryContext() + new QueryContext(userSessionRule) ); assertThat(result.getHits()).hasSize(0); @@ -795,7 +798,7 @@ public class RuleIndexMediumTest { result = index.search(new RuleQuery().setActivation(true) .setQProfileKey(qualityProfileDto2.getKey()) .setInheritance(ImmutableSet.of(ActiveRule.Inheritance.INHERITED.name())), - new QueryContext() + new QueryContext(userSessionRule) ); assertThat(result.getHits()).hasSize(2); @@ -803,7 +806,7 @@ public class RuleIndexMediumTest { result = index.search(new RuleQuery().setActivation(true) .setQProfileKey(qualityProfileDto1.getKey()) .setInheritance(ImmutableSet.of(ActiveRule.Inheritance.OVERRIDES.name())), - new QueryContext() + new QueryContext(userSessionRule) ); assertThat(result.getHits()).hasSize(0); @@ -811,7 +814,7 @@ public class RuleIndexMediumTest { result = index.search(new RuleQuery().setActivation(true) .setQProfileKey(qualityProfileDto2.getKey()) .setInheritance(ImmutableSet.of(ActiveRule.Inheritance.OVERRIDES.name())), - new QueryContext() + new QueryContext(userSessionRule) ); assertThat(result.getHits()).hasSize(1); @@ -820,7 +823,7 @@ public class RuleIndexMediumTest { .setQProfileKey(qualityProfileDto1.getKey()) .setInheritance(ImmutableSet.of( ActiveRule.Inheritance.INHERITED.name(), ActiveRule.Inheritance.OVERRIDES.name())), - new QueryContext() + new QueryContext(userSessionRule) ); assertThat(result.getHits()).hasSize(0); @@ -829,7 +832,7 @@ public class RuleIndexMediumTest { .setQProfileKey(qualityProfileDto2.getKey()) .setInheritance(ImmutableSet.of( ActiveRule.Inheritance.INHERITED.name(), ActiveRule.Inheritance.OVERRIDES.name())), - new QueryContext() + new QueryContext(userSessionRule) ); assertThat(result.getHits()).hasSize(3); } @@ -855,12 +858,12 @@ public class RuleIndexMediumTest { // 1. get all active rules. Result result = index.search(new RuleQuery().setActivation(true).setQProfileKey(qualityProfileDto1.getKey()), - new QueryContext()); + new QueryContext(userSessionRule)); assertThat(result.getHits()).hasSize(2); // 2. get rules with active severity critical. result = index.search(new RuleQuery().setActivation(true).setQProfileKey(qualityProfileDto1.getKey()).setActiveSeverities(Arrays.asList("CRITICAL")), - new QueryContext().addFacets(Arrays.asList(RuleIndex.FACET_ACTIVE_SEVERITIES))); + new QueryContext(userSessionRule).addFacets(Arrays.asList(RuleIndex.FACET_ACTIVE_SEVERITIES))); assertThat(result.getHits()).hasSize(1); assertThat(result.getHits().get(0).name()).isEqualTo(rule2.getName()); // check stickyness of active severity facet @@ -868,7 +871,7 @@ public class RuleIndexMediumTest { // 3. count activation severities of all active rules result = index.search(new RuleQuery(), - new QueryContext().addFacets(Arrays.asList(RuleIndex.FACET_ACTIVE_SEVERITIES))); + new QueryContext(userSessionRule).addFacets(Arrays.asList(RuleIndex.FACET_ACTIVE_SEVERITIES))); assertThat(result.getHits()).hasSize(3); assertThat(result.getFacetValues(RuleIndex.FACET_ACTIVE_SEVERITIES)).containsOnly(new FacetValue("BLOCKER", 2), new FacetValue("CRITICAL", 1)); } @@ -903,38 +906,38 @@ public class RuleIndexMediumTest { // find all RuleQuery query = new RuleQuery(); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); // tag1 in query query = new RuleQuery().setQueryText("tag1"); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); - assertThat(Iterables.getFirst(index.search(query, new QueryContext()).getHits(), null).tags()).containsExactly("tag1"); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); + assertThat(Iterables.getFirst(index.search(query, new QueryContext(userSessionRule)).getHits(), null).tags()).containsExactly("tag1"); // tag1 and tag2 in query query = new RuleQuery().setQueryText("tag1 tag2"); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); // tag2 in filter query = new RuleQuery().setTags(ImmutableSet.of("tag2")); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); - assertThat(Iterables.getFirst(index.search(query, new QueryContext()).getHits(), null).tags()).containsExactly("tag2"); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); + assertThat(Iterables.getFirst(index.search(query, new QueryContext(userSessionRule)).getHits(), null).tags()).containsExactly("tag2"); // tag2 in filter and tag1 tag2 in query query = new RuleQuery().setTags(ImmutableSet.of("tag2")).setQueryText("tag1"); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(0); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(0); // tag2 in filter and tag1 in query query = new RuleQuery().setTags(ImmutableSet.of("tag2")).setQueryText("tag1 tag2"); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(1); - assertThat(Iterables.getFirst(index.search(query, new QueryContext()).getHits(), null).tags()).containsExactly("tag2"); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(1); + assertThat(Iterables.getFirst(index.search(query, new QueryContext(userSessionRule)).getHits(), null).tags()).containsExactly("tag2"); // null list => no filter query = new RuleQuery().setTags(Collections.emptySet()); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); // null list => no filter query = new RuleQuery().setTags(null); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); } @Test @@ -945,26 +948,26 @@ public class RuleIndexMediumTest { // find all RuleQuery query = new RuleQuery(); - Result results = index.search(query, new QueryContext()); + Result results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(2); // Only template query = new RuleQuery().setIsTemplate(true); - results = index.search(query, new QueryContext()); + results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(1); assertThat(Iterables.getFirst(results.getHits(), null).key().rule()).isEqualTo("S002"); assertThat(Iterables.getFirst(results.getHits(), null).isTemplate()).isTrue(); // Only not template query = new RuleQuery().setIsTemplate(false); - results = index.search(query, new QueryContext()); + results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(1); assertThat(Iterables.getFirst(results.getHits(), null).isTemplate()).isFalse(); assertThat(Iterables.getFirst(results.getHits(), null).key().rule()).isEqualTo("S001"); // null => no filter query = new RuleQuery().setIsTemplate(null); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); } @Test @@ -976,19 +979,19 @@ public class RuleIndexMediumTest { // find all RuleQuery query = new RuleQuery(); - Result results = index.search(query, new QueryContext()); + Result results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(2); // Only custom rule query = new RuleQuery().setTemplateKey("java:S001"); - results = index.search(query, new QueryContext()); + results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(1); assertThat(Iterables.getFirst(results.getHits(), null).key().rule()).isEqualTo("S001_MY_CUSTOM"); assertThat(Iterables.getFirst(results.getHits(), null).templateKey()).isEqualTo(RuleKey.of("java", "S001")); // null => no filter query = new RuleQuery().setTemplateKey(null); - assertThat(index.search(query, new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(query, new QueryContext(userSessionRule)).getHits()).hasSize(2); } @Test @@ -1006,7 +1009,7 @@ public class RuleIndexMediumTest { // find all RuleQuery query = new RuleQuery(); - Result results = index.search(query, new QueryContext()); + Result results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(2); // get params @@ -1023,7 +1026,7 @@ public class RuleIndexMediumTest { // find all RuleQuery query = new RuleQuery(); - Result results = index.search(query, new QueryContext()); + Result results = index.search(query, new QueryContext(userSessionRule)); assertThat(results.getHits()).hasSize(2); // find custom rule @@ -1038,7 +1041,7 @@ public class RuleIndexMediumTest { dbSession.commit(); // from 0 to 1 included - QueryContext options = new QueryContext(); + QueryContext options = new QueryContext(userSessionRule); options.setOffset(0).setLimit(2); Result results = index.search(new RuleQuery(), options); assertThat(results.getTotal()).isEqualTo(3); @@ -1073,19 +1076,19 @@ public class RuleIndexMediumTest { dbSession.commit(); // 0. find all rules; - assertThat(index.search(new RuleQuery(), new QueryContext()).getHits()).hasSize(2); + assertThat(index.search(new RuleQuery(), new QueryContext(userSessionRule)).getHits()).hasSize(2); // 1. find all rules available since a date; RuleQuery availableSinceQuery = new RuleQuery() .setAvailableSince(since); - List hits = index.search(availableSinceQuery, new QueryContext()).getHits(); + List hits = index.search(availableSinceQuery, new QueryContext(userSessionRule)).getHits(); assertThat(hits).hasSize(1); assertThat(hits.get(0).key()).isEqualTo(RuleKey.of("java", "S002")); // 2. find no new rules since tomorrow. RuleQuery availableSinceNowQuery = new RuleQuery() .setAvailableSince(DateUtils.addDays(since, 1)); - assertThat(index.search(availableSinceNowQuery, new QueryContext()).getHits()).hasSize(0); + assertThat(index.search(availableSinceNowQuery, new QueryContext(userSessionRule)).getHits()).hasSize(0); } @Test @@ -1113,7 +1116,7 @@ public class RuleIndexMediumTest { assertThat(rule.name()).isEqualTo(nameWithProtectedChars); RuleQuery protectedCharsQuery = new RuleQuery().setQueryText(nameWithProtectedChars); - List results = index.search(protectedCharsQuery, new QueryContext()).getHits(); + List results = index.search(protectedCharsQuery, new QueryContext(userSessionRule)).getHits(); assertThat(results).hasSize(1); assertThat(results.get(0).key()).isEqualTo(RuleTesting.XOO_X1); } @@ -1135,10 +1138,10 @@ public class RuleIndexMediumTest { // 0 assert Base assertThat(index.countAll()).isEqualTo(9); - assertThat(index.search(new RuleQuery(), new QueryContext()).getHits()).hasSize(9); + assertThat(index.search(new RuleQuery(), new QueryContext(userSessionRule)).getHits()).hasSize(9); // 1 Facet with no filters at all - Map> facets = index.search(new RuleQuery(), new QueryContext().addFacets(Arrays.asList("languages", "repositories", "tags"))).getFacets(); + Map> facets = index.search(new RuleQuery(), new QueryContext(userSessionRule).addFacets(Arrays.asList("languages", "repositories", "tags"))).getFacets(); assertThat(facets.keySet()).hasSize(3); assertThat(facets.get(RuleIndex.FACET_LANGUAGES)).extracting("key").containsOnly("cpp", "java", "cobol"); assertThat(facets.get(RuleIndex.FACET_REPOSITORIES)).extracting("key").containsOnly("xoo", "foo"); @@ -1148,7 +1151,7 @@ public class RuleIndexMediumTest { // -- lang facet should still have all language Result result = index.search(new RuleQuery() .setLanguages(ImmutableList.of("cpp")) - , new QueryContext().addFacets(Arrays.asList("languages", "repositories", "tags"))); + , new QueryContext(userSessionRule).addFacets(Arrays.asList("languages", "repositories", "tags"))); assertThat(result.getHits()).hasSize(3); assertThat(result.getFacets()).hasSize(3); assertThat(result.getFacets().get(RuleIndex.FACET_LANGUAGES)).extracting("key").containsOnly("cpp", "java", "cobol"); @@ -1160,7 +1163,7 @@ public class RuleIndexMediumTest { result = index.search(new RuleQuery() .setLanguages(ImmutableList.of("cpp")) .setTags(ImmutableList.of("T2")) - , new QueryContext().addFacets(Arrays.asList("languages", "repositories", "tags"))); + , new QueryContext(userSessionRule).addFacets(Arrays.asList("languages", "repositories", "tags"))); assertThat(result.getHits()).hasSize(1); assertThat(result.getFacets().keySet()).hasSize(3); assertThat(result.getFacets().get(RuleIndex.FACET_LANGUAGES)).extracting("key").containsOnly("cpp", "java"); @@ -1174,7 +1177,7 @@ public class RuleIndexMediumTest { result = index.search(new RuleQuery() .setLanguages(ImmutableList.of("cpp", "java")) .setTags(ImmutableList.of("T2")) - , new QueryContext().addFacets(Arrays.asList("languages", "repositories", "tags"))); + , new QueryContext(userSessionRule).addFacets(Arrays.asList("languages", "repositories", "tags"))); assertThat(result.getHits()).hasSize(2); assertThat(result.getFacets().keySet()).hasSize(3); assertThat(result.getFacets().get(RuleIndex.FACET_LANGUAGES)).extracting("key").containsOnly("cpp", "java"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java index fee153a4d3a..56ac8898272 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/AppActionTest.java @@ -20,6 +20,8 @@ package org.sonar.server.rule.ws; import com.google.common.collect.ImmutableList; +import java.util.Locale; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -37,11 +39,9 @@ import org.sonar.core.qualityprofile.db.QualityProfileDto; import org.sonar.server.qualityprofile.QProfileLoader; import org.sonar.server.qualityprofile.QProfileTesting; import org.sonar.server.rule.RuleRepositories; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.Locale; - import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.mock; @@ -49,6 +49,8 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class AppActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock Languages languages; @@ -67,10 +69,10 @@ public class AppActionTest { @Test public void should_generate_app_init_info() throws Exception { - AppAction app = new AppAction(languages, ruleRepositories, i18n, debtModel, profileLoader); + AppAction app = new AppAction(languages, ruleRepositories, i18n, debtModel, profileLoader, userSessionRule); WsTester tester = new WsTester(new RulesWebService(app)); - MockUserSession.set().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); QualityProfileDto profile1 = QProfileTesting.newXooP1(); QualityProfileDto profile2 = QProfileTesting.newXooP2().setParentKee(QProfileTesting.XOO_P1_KEY); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/CreateActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/CreateActionMediumTest.java index 0bb5e5e4b12..df8e83952e4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/CreateActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/CreateActionMediumTest.java @@ -23,6 +23,7 @@ package org.sonar.server.rule.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.runners.MockitoJUnitRunner; @@ -38,7 +39,7 @@ import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -49,6 +50,9 @@ public class CreateActionMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester).logon() + .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); WsTester wsTester; RuleDao ruleDao; @@ -69,10 +73,6 @@ public class CreateActionMediumTest { @Test public void create_custom_rule() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - // Template rule RuleDto templateRule = ruleDao.insert(session, RuleTesting.newTemplateRule(RuleKey.of("java", "S001"))); RuleParamDto param = RuleParamDto.createFor(templateRule).setName("regex").setType("STRING").setDescription("Reg ex").setDefaultValue(".*"); @@ -92,10 +92,6 @@ public class CreateActionMediumTest { @Test public void create_manual_rule() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "create") .setParam("manual_key", "MY_MANUAL") .setParam("name", "My manual rule") @@ -106,10 +102,6 @@ public class CreateActionMediumTest { @Test public void create_manual_rule_without_severity() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "create") .setParam("manual_key", "MY_MANUAL") .setParam("name", "My manual rule") @@ -119,10 +111,6 @@ public class CreateActionMediumTest { @Test public void fail_if_custom_key_and_manual_key_parameters_are_not_set() { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - WsTester.TestRequest request = wsTester.newGetRequest("api/rules", "create") .setParam("key", "MY_MANUAL") .setParam("name", "My manual rule") @@ -139,10 +127,6 @@ public class CreateActionMediumTest { @Test public void create_manual_rule_with_prevent_reactivation_param_to_true() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - String key = "MY_MANUAL"; // insert a removed rule diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleMappingTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleMappingTest.java index 9bc23ade21a..676e034d746 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleMappingTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RuleMappingTest.java @@ -19,6 +19,7 @@ */ package org.sonar.server.rule.ws; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.resources.Languages; import org.sonar.api.server.debt.DebtModel; @@ -26,12 +27,15 @@ import org.sonar.api.server.ws.internal.SimpleGetRequest; import org.sonar.server.rule.index.RuleNormalizer; import org.sonar.server.search.QueryContext; import org.sonar.server.search.ws.SearchOptions; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.text.MacroInterpreter; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; public class RuleMappingTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); Languages languages = new Languages(); MacroInterpreter macroInterpreter = mock(MacroInterpreter.class); @@ -39,7 +43,7 @@ public class RuleMappingTest { @Test public void toQueryOptions_load_all_fields() { - RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel); + RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel, userSessionRule); SimpleGetRequest request = new SimpleGetRequest(); request.setParam("p", "1"); request.setParam("ps", "10"); @@ -50,7 +54,7 @@ public class RuleMappingTest { @Test public void toQueryOptions_load_only_few_simple_fields() { - RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel); + RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel, userSessionRule); SimpleGetRequest request = new SimpleGetRequest(); request.setParam("p", "1"); request.setParam("ps", "10"); @@ -65,7 +69,7 @@ public class RuleMappingTest { @Test public void toQueryOptions_langName_requires_lang() { - RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel); + RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel, userSessionRule); SimpleGetRequest request = new SimpleGetRequest(); request.setParam("p", "1"); request.setParam("ps", "10"); @@ -77,7 +81,7 @@ public class RuleMappingTest { @Test public void toQueryOptions_debt_requires_group_of_fields() { - RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel); + RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel, userSessionRule); SimpleGetRequest request = new SimpleGetRequest(); request.setParam("p", "1"); request.setParam("ps", "10"); @@ -92,7 +96,7 @@ public class RuleMappingTest { @Test public void toQueryOptions_html_note_requires_markdown_note() { - RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel); + RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel, userSessionRule); SimpleGetRequest request = new SimpleGetRequest(); request.setParam("p", "1"); request.setParam("ps", "10"); @@ -104,7 +108,7 @@ public class RuleMappingTest { @Test public void toQueryOptions_debt_characteristics() { - RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel); + RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel, userSessionRule); SimpleGetRequest request = new SimpleGetRequest(); request.setParam("p", "1"); request.setParam("ps", "10"); @@ -117,7 +121,7 @@ public class RuleMappingTest { @Test public void toQueryOptions_debt_overloaded() { - RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel); + RuleMapping mapping = new RuleMapping(languages, macroInterpreter, debtModel, userSessionRule); SimpleGetRequest request = new SimpleGetRequest(); request.setParam("p", "1"); request.setParam("ps", "10"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RulesWebServiceMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RulesWebServiceMediumTest.java index f0775422e05..31eb6a06a61 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RulesWebServiceMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/RulesWebServiceMediumTest.java @@ -20,9 +20,13 @@ package org.sonar.server.rule.ws; import com.google.common.collect.ImmutableSet; +import java.util.Calendar; +import java.util.Collections; +import java.util.Date; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; @@ -48,19 +52,17 @@ import org.sonar.server.rule.db.RuleDao; import org.sonar.server.rule.index.RuleNormalizer; import org.sonar.server.search.ws.SearchOptions; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.Calendar; -import java.util.Collections; -import java.util.Date; - import static org.assertj.core.api.Assertions.assertThat; public class RulesWebServiceMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); private static final String API_ENDPOINT = "api/rules"; private static final String API_SEARCH_METHOD = "search"; @@ -119,8 +121,6 @@ public class RulesWebServiceMediumTest { session.commit(); session.clearCache(); - MockUserSession.set(); - // 1. With Activation WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SHOW_METHOD); request.setParam(ShowAction.PARAM_KEY, rule.getKey().toString()); @@ -137,7 +137,6 @@ public class RulesWebServiceMediumTest { @Test public void search_no_rules() throws Exception { - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, "actives"); WsTester.Result result = request.execute(); @@ -151,7 +150,6 @@ public class RulesWebServiceMediumTest { ruleDao.insert(session, RuleTesting.newXooX2()); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchAction.PARAM_KEY, RuleTesting.XOO_X1.toString()); request.setParam(SearchOptions.PARAM_FIELDS, "actives"); @@ -172,7 +170,6 @@ public class RulesWebServiceMediumTest { ruleDao.insert(session, RuleTesting.newXooX2()); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); WsTester.Result result = request.execute(); @@ -185,7 +182,6 @@ public class RulesWebServiceMediumTest { ruleDao.insert(session, RuleTesting.newXooX2().setDescription("A *Xoo* rule").setDescriptionFormat(Format.MARKDOWN)); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD).setParam(SearchOptions.PARAM_FIELDS, "name,htmlDesc,mdDesc"); WsTester.Result result = request.execute(); @@ -209,7 +205,6 @@ public class RulesWebServiceMediumTest { ); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, "debtChar,debtCharName,debtSubChar,debtSubCharName,debtRemFn,debtOverloaded,defaultDebtChar,defaultDebtSubChar,defaultDebtRemFn"); request.setParam(SearchAction.PARAM_FACETS, "debt_characteristics"); @@ -234,7 +229,6 @@ public class RulesWebServiceMediumTest { ); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, "debtChar,debtCharName,debtSubChar,debtSubCharName,debtRemFn,debtOverloaded,defaultDebtChar,defaultDebtSubChar,defaultDebtRemFn"); WsTester.Result result = request.execute(); @@ -258,7 +252,6 @@ public class RulesWebServiceMediumTest { ); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, "debtChar,debtCharName,debtSubChar,debtSubCharName,debtRemFn,debtOverloaded,defaultDebtChar,defaultDebtSubChar,defaultDebtRemFn"); WsTester.Result result = request.execute(); @@ -282,7 +275,6 @@ public class RulesWebServiceMediumTest { ); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, "debtChar,debtCharName,debtSubChar,debtSubCharName,debtRemFn,debtOverloaded,defaultDebtChar,defaultDebtSubChar,defaultDebtRemFn"); WsTester.Result result = request.execute(); @@ -339,7 +331,6 @@ public class RulesWebServiceMediumTest { ); session.commit(); - MockUserSession.set(); WsTester.Result result = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD) .setParam(SearchOptions.PARAM_FIELDS, "debtChar,debtCharName,debtSubChar,debtSubCharName,debtRemFn,debtOverloaded,defaultDebtChar,defaultDebtSubChar,defaultDebtRemFn") .setParam("debt_characteristics", "SOFT_RELIABILITY") @@ -355,7 +346,6 @@ public class RulesWebServiceMediumTest { ruleDao.insert(session, RuleTesting.newXooX2()).setTemplateId(templateRule.getId()); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, "isTemplate"); request.setParam(SearchAction.PARAM_IS_TEMPLATE, "true"); @@ -370,7 +360,6 @@ public class RulesWebServiceMediumTest { ruleDao.insert(session, RuleTesting.newXooX2()).setTemplateId(templateRule.getId()); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, "templateKey"); request.setParam(SearchAction.PARAM_TEMPLATE_KEY, "xoo:x1"); @@ -390,7 +379,6 @@ public class RulesWebServiceMediumTest { tester.get(ActiveRuleDao.class).insert(session, activeRule); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_TEXT_QUERY, "x1"); request.setParam(SearchAction.PARAM_ACTIVATION, "true"); @@ -420,7 +408,6 @@ public class RulesWebServiceMediumTest { session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_TEXT_QUERY, "x1"); request.setParam(SearchAction.PARAM_ACTIVATION, "true"); @@ -457,7 +444,6 @@ public class RulesWebServiceMediumTest { session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_TEXT_QUERY, "x1"); request.setParam(SearchAction.PARAM_ACTIVATION, "true"); @@ -501,7 +487,6 @@ public class RulesWebServiceMediumTest { tester.get(ActiveRuleDao.class).addParam(session, activeRule, activeRuleParam2); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_TEXT_QUERY, "x1"); request.setParam(SearchAction.PARAM_ACTIVATION, "true"); @@ -527,7 +512,6 @@ public class RulesWebServiceMediumTest { ruleDao.insert(session, rule2); session.commit(); - MockUserSession.set(); tester.wsTester().newGetRequest(API_ENDPOINT, API_TAGS_METHOD).execute().assertJson(this.getClass(), "get_tags.json"); tester.wsTester().newGetRequest(API_ENDPOINT, API_TAGS_METHOD) .setParam("ps", "1").execute().assertJson(this.getClass(), "get_tags_limited.json"); @@ -543,7 +527,6 @@ public class RulesWebServiceMediumTest { ruleDao.insert(session, rule); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, "htmlNote, mdNote"); WsTester.Result result = request.execute(); @@ -560,7 +543,6 @@ public class RulesWebServiceMediumTest { .setSystemTags(ImmutableSet.of("tag2"))); session.commit(); - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchAction.PARAM_TAGS, "tag1"); request.setParam(SearchOptions.PARAM_FIELDS, "sysTags, tags"); @@ -604,7 +586,6 @@ public class RulesWebServiceMediumTest { session.commit(); // 1. Sort Name Asc - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, ""); request.setParam(SearchOptions.PARAM_SORT, "name"); @@ -634,7 +615,6 @@ public class RulesWebServiceMediumTest { Date since = new Date(); // 1. find today's rules - MockUserSession.set(); WsTester.TestRequest request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, ""); request.setParam(SearchAction.PARAM_AVAILABLE_SINCE, DateUtils.formatDate(since)); @@ -647,7 +627,6 @@ public class RulesWebServiceMediumTest { c.add(Calendar.DATE, 1); // number of days to add // 2. no rules since tomorrow - MockUserSession.set(); request = tester.wsTester().newGetRequest(API_ENDPOINT, API_SEARCH_METHOD); request.setParam(SearchOptions.PARAM_FIELDS, ""); request.setParam(SearchAction.PARAM_AVAILABLE_SINCE, DateUtils.formatDate(c.getTime())); diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/ShowActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/ShowActionMediumTest.java index 0eb34a9428c..3a63e84a41a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/ShowActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/ShowActionMediumTest.java @@ -23,6 +23,7 @@ package org.sonar.server.rule.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; @@ -40,7 +41,7 @@ import org.sonar.server.rule.RuleService; import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static com.google.common.collect.Sets.newHashSet; @@ -49,6 +50,9 @@ public class ShowActionMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester).logon() + .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); WsTester wsTester; @@ -72,10 +76,6 @@ public class ShowActionMediumTest { @Test public void show_rule() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - RuleDto ruleDto = ruleDao.insert(session, RuleTesting.newDto(RuleKey.of("java", "S001")) .setName("Rule S001") @@ -100,10 +100,6 @@ public class ShowActionMediumTest { @Test public void show_rule_with_default_debt_infos() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - CharacteristicDto characteristicDto = new CharacteristicDto().setKey("API").setName("Api").setEnabled(true); tester.get(CharacteristicDao.class).insert(characteristicDto, session); CharacteristicDto subCharacteristicDto = new CharacteristicDto().setKey("API_ABUSE").setName("API Abuse").setEnabled(true).setParentId(characteristicDto.getId()); @@ -138,10 +134,6 @@ public class ShowActionMediumTest { @Test public void show_rule_with_overridden_debt() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - CharacteristicDto characteristicDto = new CharacteristicDto().setKey("API").setName("Api").setEnabled(true); tester.get(CharacteristicDao.class).insert(characteristicDto, session); CharacteristicDto subCharacteristicDto = new CharacteristicDto().setKey("API_ABUSE").setName("API Abuse").setEnabled(true).setParentId(characteristicDto.getId()); @@ -174,10 +166,6 @@ public class ShowActionMediumTest { @Test public void show_rule_with_default_and_overridden_debt_infos() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - CharacteristicDto defaultCharacteristic = new CharacteristicDto().setKey("API").setName("Api").setEnabled(true); tester.get(CharacteristicDao.class).insert(defaultCharacteristic, session); CharacteristicDto defaultSubCharacteristic = new CharacteristicDto().setKey("API_ABUSE").setName("API Abuse").setEnabled(true).setParentId(defaultCharacteristic.getId()); @@ -215,10 +203,6 @@ public class ShowActionMediumTest { @Test public void show_rule_with_no_default_and_no_overridden_debt() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - RuleDto ruleDto = ruleDao.insert(session, RuleTesting.newDto(RuleKey.of("java", "S001")) .setName("Rule S001") @@ -247,10 +231,6 @@ public class ShowActionMediumTest { @Test public void show_rule_with_overridden_disable_debt() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - RuleDto ruleDto = ruleDao.insert(session, RuleTesting.newDto(RuleKey.of("java", "S001")) .setName("Rule S001") @@ -278,10 +258,6 @@ public class ShowActionMediumTest { @Test public void encode_html_description_of_custom_rule() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - // Template rule RuleDto templateRule = ruleDao.insert(session, RuleTesting.newTemplateRule(RuleKey.of("java", "S001"))); session.commit(); @@ -302,10 +278,6 @@ public class ShowActionMediumTest { @Test public void encode_html_description_of_manual_rule() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - // Manual rule NewRule manualRule = NewRule.createForManualRule("MY_MANUAL") .setName("My manual") diff --git a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionMediumTest.java index 2db2133379a..fa6bae4d887 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/rule/ws/UpdateActionMediumTest.java @@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableMap; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; @@ -38,7 +39,7 @@ import org.sonar.server.rule.RuleService; import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; @@ -48,6 +49,9 @@ public class UpdateActionMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester). + logon().setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); WsTester wsTester; @@ -71,10 +75,6 @@ public class UpdateActionMediumTest { @Test public void update_custom_rule() throws Exception { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - // Template rule RuleDto templateRule = ruleDao.insert(session, RuleTesting.newTemplateRule(RuleKey.of("java", "S001"))); RuleParamDto param = RuleParamDto.createFor(templateRule).setName("regex").setType("STRING").setDescription("Reg ex").setDefaultValue(".*"); @@ -103,10 +103,6 @@ public class UpdateActionMediumTest { @Test public void fail_to_update_custom_when_description_is_empty() { - MockUserSession.set() - .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN) - .setLogin("me"); - // Template rule RuleDto templateRule = ruleDao.insert(session, RuleTesting.newTemplateRule(RuleKey.of("java", "S001"))); diff --git a/server/sonar-server/src/test/java/org/sonar/server/search/QueryContextTest.java b/server/sonar-server/src/test/java/org/sonar/server/search/QueryContextTest.java index f08ad8f41d3..fa621d6a04d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/search/QueryContextTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/search/QueryContextTest.java @@ -21,23 +21,24 @@ package org.sonar.server.search; import com.google.common.collect.ImmutableList; +import java.util.Arrays; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; -import org.sonar.server.user.MockUserSession; - -import java.util.Arrays; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; public class QueryContextTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone().logon("john").setUserGroups("sonar-users"); QueryContext options; @Before public void setUp() { - MockUserSession.set().setLogin("john").setUserGroups("sonar-users"); - options = new QueryContext(); + options = new QueryContext(userSessionRule); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/search/SearchClientMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/search/SearchClientMediumTest.java index 6682c53e321..9661a4b6ed2 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/search/SearchClientMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/search/SearchClientMediumTest.java @@ -22,8 +22,10 @@ package org.sonar.server.search; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.server.tester.ServerTester; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; @@ -32,6 +34,8 @@ public class SearchClientMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); SearchClient searchClient; diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/ws/HashActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/source/ws/HashActionTest.java index c869d8b0788..e25e14ddf96 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/ws/HashActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/ws/HashActionTest.java @@ -19,6 +19,7 @@ */ package org.sonar.server.source.ws; +import org.junit.Rule; import org.sonar.server.source.db.FileSourceDao; import org.junit.After; @@ -35,7 +36,7 @@ import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import org.sonar.test.DbTests; import static org.assertj.core.api.Assertions.assertThat; @@ -50,6 +51,8 @@ public class HashActionTest { @ClassRule public static DbTester db = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); DbSession session; @@ -62,7 +65,7 @@ public class HashActionTest { DbClient dbClient = new DbClient(db.database(), db.myBatis(), new FileSourceDao(db.myBatis()), new ComponentDao()); - tester = new WsTester(new SourcesWs(new HashAction(dbClient))); + tester = new WsTester(new SourcesWs(new HashAction(dbClient, userSessionRule))); } @After @@ -73,7 +76,7 @@ public class HashActionTest { @Test public void show_hashes() throws Exception { db.prepareDbUnit(getClass(), "shared.xml"); - MockUserSession.set().setLogin("polop").addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); + userSessionRule.logon("polop").addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); WsTester.TestRequest request = tester.newGetRequest("api/sources", "hash").setParam("key", COMPONENT_KEY); assertThat(request.execute().outputAsString()).isEqualTo("987654"); @@ -82,7 +85,7 @@ public class HashActionTest { @Test public void hashes_empty_if_no_source() throws Exception { db.prepareDbUnit(getClass(), "no_source.xml"); - MockUserSession.set().setLogin("polop").addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); + userSessionRule.logon("polop").addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); WsTester.TestRequest request = tester.newGetRequest("api/sources", "hash").setParam("key", COMPONENT_KEY); request.execute().assertNoContent(); @@ -90,7 +93,7 @@ public class HashActionTest { @Test public void fail_to_show_hashes_if_file_does_not_exist() { - MockUserSession.set().setLogin("polop").addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); + userSessionRule.logon("polop").addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); try { WsTester.TestRequest request = tester.newGetRequest("api/sources", "hash").setParam("key", COMPONENT_KEY); request.execute(); @@ -104,7 +107,7 @@ public class HashActionTest { public void fail_on_missing_permission() throws Exception { db.prepareDbUnit(getClass(), "shared.xml"); - MockUserSession.set().setLogin("polop"); + userSessionRule.logon("polop"); tester.newGetRequest("api/sources", "hash").setParam("key", COMPONENT_KEY).execute(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/ws/IndexActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/source/ws/IndexActionTest.java index 32dc4aa4b04..e73ffc217cc 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/ws/IndexActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/ws/IndexActionTest.java @@ -21,6 +21,7 @@ package org.sonar.server.source.ws; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -34,7 +35,7 @@ import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.source.SourceService; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static com.google.common.collect.Lists.newArrayList; @@ -43,6 +44,8 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class IndexActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock DbClient dbClient; @@ -65,13 +68,13 @@ public class IndexActionTest { public void setUp() { when(dbClient.componentDao()).thenReturn(componentDao); when(dbClient.openSession(false)).thenReturn(session); - tester = new WsTester(new SourcesWs(new IndexAction(dbClient, sourceService))); + tester = new WsTester(new SourcesWs(new IndexAction(dbClient, sourceService, userSessionRule))); } @Test public void get_json() throws Exception { String fileKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); when(componentDao.getByKey(session, fileKey)).thenReturn(file); when(sourceService.getLinesAsTxt(file.uuid(), 1, null)).thenReturn(newArrayList( @@ -86,7 +89,7 @@ public class IndexActionTest { @Test public void limit_range() throws Exception { String fileKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); when(componentDao.getByKey(session, fileKey)).thenReturn(file); when(sourceService.getLinesAsTxt(file.uuid(), 1, 2)).thenReturn(newArrayList( @@ -101,14 +104,13 @@ public class IndexActionTest { @Test(expected = ForbiddenException.class) public void requires_code_viewer_permission() throws Exception { - MockUserSession.set(); tester.newGetRequest("api/sources", "index").setParam("resource", "any").execute(); } @Test public void close_db_session() throws Exception { String fileKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); when(componentDao.getByKey(session, fileKey)).thenThrow(new NotFoundException()); WsTester.TestRequest request = tester.newGetRequest("api/sources", "index").setParam("resource", fileKey); diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/ws/LinesActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/source/ws/LinesActionTest.java index c1da0aca749..e838bbd5233 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/ws/LinesActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/ws/LinesActionTest.java @@ -21,9 +21,11 @@ package org.sonar.server.source.ws; import com.google.common.collect.ImmutableList; +import java.util.Date; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.api.web.UserRole; @@ -40,11 +42,9 @@ import org.sonar.server.source.HtmlSourceDecorator; import org.sonar.server.source.index.SourceLineDoc; import org.sonar.server.source.index.SourceLineIndex; import org.sonar.server.source.index.SourceLineIndexDefinition; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.Date; - import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown; import static org.junit.Assert.fail; @@ -57,9 +57,10 @@ public class LinesActionTest { @ClassRule public static EsTester esTester = new EsTester().addDefinitions(new SourceLineIndexDefinition(new Settings())); - @ClassRule public static DbTester dbTester = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); SourceLineIndex sourceLineIndex; @@ -81,9 +82,7 @@ public class LinesActionTest { componentDao = new ComponentDao(); DbClient dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), componentDao); session = dbClient.openSession(false); - wsTester = new WsTester(new SourcesWs(new LinesAction(dbClient, sourceLineIndex, htmlSourceDecorator))); - - MockUserSession.set(); + wsTester = new WsTester(new SourcesWs(new LinesAction(dbClient, sourceLineIndex, htmlSourceDecorator, userSessionRule))); } @After @@ -156,7 +155,7 @@ public class LinesActionTest { esTester.putDocuments(SourceLineIndexDefinition.INDEX, SourceLineIndexDefinition.TYPE, line1, line2, line3); - MockUserSession.set().setLogin("login").addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.logon("login").addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); WsTester.TestRequest request = wsTester.newGetRequest("api/sources", "lines").setParam("uuid", FILE_UUID); request.execute().assertJson(getClass(), "show_source.json"); @@ -166,7 +165,7 @@ public class LinesActionTest { public void fail_to_show_source_if_no_source_found() { newFile(); - MockUserSession.set().setLogin("login").addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.logon("login").addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); try { WsTester.TestRequest request = wsTester.newGetRequest("api/sources", "lines").setParam("uuid", FILE_UUID); @@ -181,7 +180,7 @@ public class LinesActionTest { public void show_source_with_from_and_to_params() throws Exception { newFile(); - MockUserSession.set().setLogin("login").addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.logon("login").addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); esTester.putDocuments(SourceLineIndexDefinition.INDEX, SourceLineIndexDefinition.TYPE, new SourceLineDoc() @@ -237,7 +236,7 @@ public class LinesActionTest { .setUpdateDate(new Date()) ); - MockUserSession.set().setLogin("login").addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.logon("login").addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); WsTester.TestRequest request = wsTester.newGetRequest("api/sources", "lines").setParam("key", FILE_KEY); request.execute().assertJson(getClass(), "show_source_by_file_key.json"); @@ -246,7 +245,7 @@ public class LinesActionTest { @Test public void fail_when_no_uuid_or_key_param() throws Exception { newFile(); - MockUserSession.set().setLogin("login").addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.logon("login").addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); WsTester.TestRequest request = wsTester.newGetRequest("api/sources", "lines"); try { @@ -261,7 +260,7 @@ public class LinesActionTest { public void should_check_permission() throws Exception { newFile(); - MockUserSession.set().setLogin("login"); + userSessionRule.logon("login"); wsTester.newGetRequest("api/sources", "lines") .setParam("uuid", FILE_UUID) diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/ws/RawActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/source/ws/RawActionTest.java index 2f4c27d7296..6b53c32faa4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/ws/RawActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/ws/RawActionTest.java @@ -21,6 +21,7 @@ package org.sonar.server.source.ws; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -33,7 +34,7 @@ import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.source.SourceService; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static com.google.common.collect.Lists.newArrayList; @@ -42,6 +43,8 @@ import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class RawActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock DbClient dbClient; @@ -64,13 +67,13 @@ public class RawActionTest { public void setUp() { when(dbClient.componentDao()).thenReturn(componentDao); when(dbClient.openSession(false)).thenReturn(session); - tester = new WsTester(new SourcesWs(new RawAction(dbClient, sourceService))); + tester = new WsTester(new SourcesWs(new RawAction(dbClient, sourceService, userSessionRule))); } @Test public void get_txt() throws Exception { String fileKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); when(componentDao.getByKey(session, fileKey)).thenReturn(file); when(sourceService.getLinesAsTxt(file.uuid(), null, null)).thenReturn(newArrayList( @@ -85,7 +88,6 @@ public class RawActionTest { @Test(expected = ForbiddenException.class) public void requires_code_viewer_permission() throws Exception { - MockUserSession.set(); tester.newGetRequest("api/sources", "raw").setParam("key", "any").execute(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/ws/ScmActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/source/ws/ScmActionTest.java index 83d87337034..25de3e5c916 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/ws/ScmActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/ws/ScmActionTest.java @@ -20,9 +20,11 @@ package org.sonar.server.source.ws; +import java.util.Date; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.api.utils.DateUtils; @@ -38,11 +40,9 @@ import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.source.index.SourceLineDoc; import org.sonar.server.source.index.SourceLineIndex; import org.sonar.server.source.index.SourceLineIndexDefinition; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.Date; - public class ScmActionTest { private static final String FILE_KEY = "FILE_KEY"; @@ -51,9 +51,10 @@ public class ScmActionTest { @ClassRule public static DbTester dbTester = new DbTester(); - @ClassRule public static EsTester esTester = new EsTester().addDefinitions(new SourceLineIndexDefinition(new Settings())); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WsTester tester; @@ -68,7 +69,7 @@ public class ScmActionTest { dbClient = new DbClient(dbTester.database(), dbTester.myBatis(), new ComponentDao()); session = dbClient.openSession(false); - tester = new WsTester(new SourcesWs(new ScmAction(dbClient, new SourceLineIndex(esTester.client())))); + tester = new WsTester(new SourcesWs(new ScmAction(dbClient, new SourceLineIndex(esTester.client()), userSessionRule))); } @After @@ -79,7 +80,7 @@ public class ScmActionTest { @Test public void show_scm() throws Exception { initFile(); - MockUserSession.set().addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); esTester.putDocuments(SourceLineIndexDefinition.INDEX, SourceLineIndexDefinition.TYPE, newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 1) @@ -92,7 +93,7 @@ public class ScmActionTest { @Test public void show_scm_from_given_range_lines() throws Exception { initFile(); - MockUserSession.set().addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); esTester.putDocuments(SourceLineIndexDefinition.INDEX, SourceLineIndexDefinition.TYPE, newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 1), @@ -108,7 +109,7 @@ public class ScmActionTest { @Test public void not_group_lines_by_commit() throws Exception { initFile(); - MockUserSession.set().addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); // lines 1 and 2 are the same commit, but not 3 (different date) esTester.putDocuments(SourceLineIndexDefinition.INDEX, SourceLineIndexDefinition.TYPE, @@ -125,7 +126,7 @@ public class ScmActionTest { @Test public void group_lines_by_commit() throws Exception { initFile(); - MockUserSession.set().addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); // lines 1 and 2 are the same commit, but not 3 (different date) esTester.putDocuments(SourceLineIndexDefinition.INDEX, SourceLineIndexDefinition.TYPE, @@ -142,7 +143,7 @@ public class ScmActionTest { @Test public void accept_negative_value_in_from_parameter() throws Exception { initFile(); - MockUserSession.set().addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); esTester.putDocuments(SourceLineIndexDefinition.INDEX, SourceLineIndexDefinition.TYPE, newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 1), @@ -158,7 +159,7 @@ public class ScmActionTest { @Test public void return_empty_value_when_no_scm() throws Exception { initFile(); - MockUserSession.set().addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.CODEVIEWER, PROJECT_UUID); esTester.putDocuments(SourceLineIndexDefinition.INDEX, SourceLineIndexDefinition.TYPE, newSourceLine(null, null, null, 1) @@ -171,7 +172,7 @@ public class ScmActionTest { @Test(expected = ForbiddenException.class) public void fail_without_code_viewer_permission() throws Exception { initFile(); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, PROJECT_UUID); WsTester.TestRequest request = tester.newGetRequest("api/sources", "scm").setParam("key", FILE_KEY); request.execute(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/ws/ShowActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/source/ws/ShowActionTest.java index 3600020ac85..f8647337c60 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/ws/ShowActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/ws/ShowActionTest.java @@ -20,6 +20,7 @@ package org.sonar.server.source.ws; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -32,14 +33,20 @@ import org.sonar.server.component.db.ComponentDao; import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.source.SourceService; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static com.google.common.collect.Lists.newArrayList; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class ShowActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); SourceService sourceService = mock(SourceService.class); @@ -61,13 +68,13 @@ public class ShowActionTest { public void setUp() { when(dbClient.componentDao()).thenReturn(componentDao); when(dbClient.openSession(false)).thenReturn(session); - tester = new WsTester(new SourcesWs(new ShowAction(sourceService, dbClient))); + tester = new WsTester(new SourcesWs(new ShowAction(sourceService, dbClient, userSessionRule))); } @Test public void show_source() throws Exception { String fileKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); when(componentDao.getByKey(session, fileKey)).thenReturn(file); when(sourceService.getLinesAsHtml(eq(file.uuid()), anyInt(), anyInt())).thenReturn(newArrayList( "/*", @@ -85,7 +92,7 @@ public class ShowActionTest { @Test public void show_source_with_from_and_to_params() throws Exception { String fileKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); when(componentDao.getByKey(session, fileKey)).thenReturn(file); when(sourceService.getLinesAsHtml(file.uuid(), 3, 5)).thenReturn(newArrayList( " */", @@ -103,7 +110,7 @@ public class ShowActionTest { @Test public void show_source_accept_from_less_than_one() throws Exception { String fileKey = "src/Foo.java"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, "polop", fileKey); when(componentDao.getByKey(session, fileKey)).thenReturn(file); when(sourceService.getLinesAsHtml(file.uuid(), 1, 5)).thenReturn(newArrayList( " */", @@ -122,7 +129,6 @@ public class ShowActionTest { @Test(expected = ForbiddenException.class) public void require_code_viewer() throws Exception { String fileKey = "src/Foo.java"; - MockUserSession.set(); tester.newGetRequest("api/sources", "show").setParam("key", fileKey).execute(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/source/ws/SourcesWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/source/ws/SourcesWsTest.java index dc7022937cc..4db59860efe 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/source/ws/SourcesWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/source/ws/SourcesWsTest.java @@ -20,24 +20,28 @@ package org.sonar.server.source.ws; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.ws.WebService; import org.sonar.server.db.DbClient; import org.sonar.server.source.HtmlSourceDecorator; import org.sonar.server.source.SourceService; import org.sonar.server.source.index.SourceLineIndex; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; public class SourcesWsTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); - ShowAction showAction = new ShowAction(mock(SourceService.class), mock(DbClient.class)); - RawAction rawAction = new RawAction(mock(DbClient.class), mock(SourceService.class)); - LinesAction linesAction = new LinesAction(mock(DbClient.class), mock(SourceLineIndex.class), mock(HtmlSourceDecorator.class)); - HashAction hashAction = new HashAction(mock(DbClient.class)); - IndexAction indexAction = new IndexAction(mock(DbClient.class), mock(SourceService.class)); + ShowAction showAction = new ShowAction(mock(SourceService.class), mock(DbClient.class), userSessionRule); + RawAction rawAction = new RawAction(mock(DbClient.class), mock(SourceService.class), userSessionRule); + LinesAction linesAction = new LinesAction(mock(DbClient.class), mock(SourceLineIndex.class), mock(HtmlSourceDecorator.class), userSessionRule); + HashAction hashAction = new HashAction(mock(DbClient.class), userSessionRule); + IndexAction indexAction = new IndexAction(mock(DbClient.class), mock(SourceService.class), userSessionRule); WsTester tester = new WsTester(new SourcesWs(showAction, rawAction, linesAction, hashAction, indexAction)); @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/test/CoverageServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/test/CoverageServiceTest.java index abefeed4382..f018335a00e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/test/CoverageServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/test/CoverageServiceTest.java @@ -20,7 +20,9 @@ package org.sonar.server.test; +import java.util.Collections; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; @@ -33,18 +35,23 @@ import org.sonar.core.component.SnapshotPerspectives; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; import org.sonar.server.measure.persistence.MeasureDao; -import org.sonar.server.user.MockUserSession; - -import java.util.Collections; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class CoverageServiceTest { static final String COMPONENT_KEY = "org.sonar.sample:Sample"; - @org.junit.Rule + + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + @Rule public ExpectedException thrown = ExpectedException.none(); @Mock DbSession session; @@ -58,13 +65,13 @@ public class CoverageServiceTest { public void setUp() { MyBatis myBatis = mock(MyBatis.class); when(myBatis.openSession(false)).thenReturn(session); - service = new CoverageService(myBatis, measureDao, snapshotPerspectives); + service = new CoverageService(myBatis, measureDao, snapshotPerspectives, userSessionRule); } @Test public void check_permission() { String projectKey = "org.sonar.sample"; - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, projectKey, COMPONENT_KEY); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, projectKey, COMPONENT_KEY); service.checkPermission(COMPONENT_KEY); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsCoveredFilesActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsCoveredFilesActionTest.java index 65aa8094bb9..635b215edf2 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsCoveredFilesActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsCoveredFilesActionTest.java @@ -20,18 +20,18 @@ package org.sonar.server.test.ws; +import java.util.Arrays; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.web.UserRole; import org.sonar.core.persistence.DbSession; import org.sonar.server.db.DbClient; import org.sonar.server.test.index.CoveredFileDoc; import org.sonar.server.test.index.TestIndex; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.Arrays; - import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyList; import static org.mockito.Matchers.anyString; @@ -43,6 +43,8 @@ import static org.sonar.server.component.ComponentTesting.newProjectDto; import static org.sonar.server.test.ws.TestsCoveredFilesAction.TEST_UUID; public class TestsCoveredFilesActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WsTester ws; private DbClient dbClient; @@ -52,12 +54,12 @@ public class TestsCoveredFilesActionTest { public void setUp() { dbClient = mock(DbClient.class, RETURNS_DEEP_STUBS); testIndex = mock(TestIndex.class, RETURNS_DEEP_STUBS); - ws = new WsTester(new TestsWs(new TestsCoveredFilesAction(dbClient, testIndex))); + ws = new WsTester(new TestsWs(new TestsCoveredFilesAction(dbClient, testIndex, userSessionRule))); } @Test public void covered_files() throws Exception { - MockUserSession.set().addComponentUuidPermission(UserRole.CODEVIEWER, "SonarQube", "test-file-uuid"); + userSessionRule.addComponentUuidPermission(UserRole.CODEVIEWER, "SonarQube", "test-file-uuid"); when(testIndex.searchByTestUuid(anyString()).fileUuid()).thenReturn("test-file-uuid"); when(testIndex.coveredFiles("test-uuid")).thenReturn(Arrays.asList( diff --git a/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsListActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsListActionTest.java index 6a33608844e..27862aeb2b7 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsListActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsListActionTest.java @@ -20,9 +20,12 @@ package org.sonar.server.test.ws; +import java.util.Arrays; +import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.api.web.UserRole; @@ -37,12 +40,9 @@ import org.sonar.server.test.index.CoveredFileDoc; import org.sonar.server.test.index.TestDoc; import org.sonar.server.test.index.TestIndex; import org.sonar.server.test.index.TestIndexDefinition; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; -import java.util.Arrays; -import java.util.List; - public class TestsListActionTest { DbClient dbClient; DbSession dbSession; @@ -54,6 +54,8 @@ public class TestsListActionTest { public static DbTester db = new DbTester(); @ClassRule public static EsTester es = new EsTester().addDefinitions(new TestIndexDefinition(new Settings())); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Before public void setUp() { @@ -63,7 +65,7 @@ public class TestsListActionTest { es.truncateIndices(); testIndex = new TestIndex(es.client()); - ws = new WsTester(new TestsWs(new TestsListAction(dbClient, testIndex))); + ws = new WsTester(new TestsWs(new TestsListAction(dbClient, testIndex, userSessionRule))); } @After @@ -73,7 +75,7 @@ public class TestsListActionTest { @Test public void list_based_on_test_uuid() throws Exception { - MockUserSession.set().addProjectUuidPermissions(UserRole.CODEVIEWER, TestFile1.PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.CODEVIEWER, TestFile1.PROJECT_UUID); dbClient.componentDao().insert(dbSession, TestFile1.newDto()); dbSession.commit(); @@ -97,7 +99,7 @@ public class TestsListActionTest { @Test public void list_based_on_test_file_uuid() throws Exception { - MockUserSession.set().addProjectUuidPermissions(UserRole.CODEVIEWER, TestFile1.PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.CODEVIEWER, TestFile1.PROJECT_UUID); dbClient.componentDao().insert(dbSession, TestFile1.newDto()); dbSession.commit(); @@ -119,7 +121,7 @@ public class TestsListActionTest { @Test public void list_based_on_test_file_key() throws Exception { - MockUserSession.set().addComponentPermission(UserRole.CODEVIEWER, TestFile1.PROJECT_UUID, TestFile1.KEY); + userSessionRule.addComponentPermission(UserRole.CODEVIEWER, TestFile1.PROJECT_UUID, TestFile1.KEY); dbClient.componentDao().insert(dbSession, TestFile1.newDto()); dbSession.commit(); @@ -143,7 +145,7 @@ public class TestsListActionTest { @Test public void list_based_on_main_file_and_line_number() throws Exception { String mainFileUuid = "MAIN-FILE-UUID"; - MockUserSession.set().addProjectUuidPermissions(UserRole.CODEVIEWER, TestFile1.PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.CODEVIEWER, TestFile1.PROJECT_UUID); dbClient.componentDao().insert(dbSession, new ComponentDto() .setUuid(TestFile1.FILE_UUID) @@ -201,7 +203,7 @@ public class TestsListActionTest { @Test(expected = ForbiddenException.class) public void fail_when_no_sufficent_privilege_on_file_uuid() throws Exception { - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, TestFile1.PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, TestFile1.PROJECT_UUID); dbClient.componentDao().insert(dbSession, TestFile1.newDto()); dbSession.commit(); ws.newGetRequest("api/tests", "list").setParam(TestsListAction.TEST_FILE_UUID, TestFile1.FILE_UUID).execute(); @@ -209,7 +211,7 @@ public class TestsListActionTest { @Test(expected = ForbiddenException.class) public void fail_when_no_sufficent_privilege_on_test_uuid() throws Exception { - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, TestFile1.PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, TestFile1.PROJECT_UUID); dbClient.componentDao().insert(dbSession, TestFile1.newDto()); dbSession.commit(); ws.newGetRequest("api/tests", "list").setParam(TestsListAction.TEST_FILE_UUID, TestFile1.FILE_UUID).execute(); @@ -217,7 +219,7 @@ public class TestsListActionTest { @Test(expected = ForbiddenException.class) public void fail_when_no_sufficent_privilege_on_file_key() throws Exception { - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, TestFile1.PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, TestFile1.PROJECT_UUID); dbClient.componentDao().insert(dbSession, TestFile1.newDto()); dbSession.commit(); ws.newGetRequest("api/tests", "list").setParam(TestsListAction.TEST_FILE_KEY, TestFile1.KEY).execute(); @@ -225,7 +227,7 @@ public class TestsListActionTest { @Test(expected = ForbiddenException.class) public void fail_when_no_sufficient_privilege_on_main_file_uuid() throws Exception { - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, TestFile1.PROJECT_UUID); + userSessionRule.addProjectUuidPermissions(UserRole.USER, TestFile1.PROJECT_UUID); String mainFileUuid = "MAIN-FILE-UUID"; dbClient.componentDao().insert(dbSession, new ComponentDto().setUuid(mainFileUuid).setProjectUuid(TestFile1.PROJECT_UUID)); dbSession.commit(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsWsTest.java index b854c9cd419..c052d9c03bd 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/test/ws/TestsWsTest.java @@ -21,24 +21,28 @@ package org.sonar.server.test.ws; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.server.ws.WebService; import org.sonar.server.db.DbClient; import org.sonar.server.test.index.TestIndex; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; public class TestsWsTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WebService.Controller controller; @Before public void setUp() { WsTester tester = new WsTester(new TestsWs( - new TestsListAction(mock(DbClient.class), mock(TestIndex.class)), - new TestsCoveredFilesAction(mock(DbClient.class), mock(TestIndex.class)))); + new TestsListAction(mock(DbClient.class), mock(TestIndex.class), userSessionRule), + new TestsCoveredFilesAction(mock(DbClient.class), mock(TestIndex.class), userSessionRule))); controller = tester.controller("api/tests"); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/UserSessionTestUtils.java b/server/sonar-server/src/test/java/org/sonar/server/tester/AnonymousMockUserSession.java similarity index 67% rename from server/sonar-server/src/test/java/org/sonar/server/user/UserSessionTestUtils.java rename to server/sonar-server/src/test/java/org/sonar/server/tester/AnonymousMockUserSession.java index 9b80ce0d583..799c425bd1a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/UserSessionTestUtils.java +++ b/server/sonar-server/src/test/java/org/sonar/server/tester/AnonymousMockUserSession.java @@ -17,15 +17,24 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.user; +package org.sonar.server.tester; -public class UserSessionTestUtils { +import org.sonar.server.exceptions.UnauthorizedException; +import org.sonar.server.user.UserSession; - private UserSessionTestUtils() { - // Utility class +public class AnonymousMockUserSession extends MockUserSession { + public AnonymousMockUserSession() { + super(); } - public static void setUserSession(UserSession session) { - UserSession.set(session); + @Override + public boolean isLoggedIn() { + return false; } + + @Override + public UserSession checkLoggedIn() { + throw new UnauthorizedException("Authentication is required"); + } + } diff --git a/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSession.java b/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSession.java new file mode 100644 index 00000000000..25b5f2081c9 --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSession.java @@ -0,0 +1,153 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.tester; + +import com.google.common.base.Preconditions; +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import javax.annotation.Nullable; +import org.sonar.server.user.AbstractUserSession; +import org.sonar.server.user.UserSession; + +import static com.google.common.collect.Lists.newArrayList; +import static com.google.common.collect.Maps.newHashMap; + +public class MockUserSession extends AbstractUserSession implements UserSession { + private Map projectKeyByComponentKey = newHashMap(); + + protected MockUserSession() { + super(MockUserSession.class); + } + + public MockUserSession(String login) { + this(); + setLogin(Preconditions.checkNotNull(login)); + } + + public MockUserSession(MockUserSession ruleUserSession) { + this(); + this.userId = ruleUserSession.userId; + this.login = ruleUserSession.login; + this.userGroups = ruleUserSession.userGroups; + this.globalPermissions = ruleUserSession.globalPermissions; + this.projectKeyByPermission = ruleUserSession.projectKeyByPermission; + this.projectUuidByPermission = ruleUserSession.projectUuidByPermission; + this.projectUuidByComponentUuid = ruleUserSession.projectUuidByComponentUuid; + this.projectPermissions = ruleUserSession.projectPermissions; + this.name = ruleUserSession.name; + this.locale = ruleUserSession.locale; + } + + @Override + public boolean isLoggedIn() { + return true; + } + + public MockUserSession setGlobalPermissions(String... globalPermissions) { + this.globalPermissions = Arrays.asList(globalPermissions); + return this; + } + + @Override + public MockUserSession setLogin(@Nullable String s) { + return super.setLogin(s); + } + + @Override + public MockUserSession setName(@Nullable String s) { + return super.setName(s); + } + + @Override + public MockUserSession setUserId(@Nullable Integer userId) { + return super.setUserId(userId); + } + + @Override + public MockUserSession setUserGroups(@Nullable String... userGroups) { + return super.setUserGroups(userGroups); + } + + @Override + public MockUserSession setLocale(@Nullable Locale l) { + return super.setLocale(l); + } + + /** + * Deprecated, please use {@link #addProjectUuidPermissions} + */ + @Deprecated + public MockUserSession addProjectPermissions(String projectPermission, String... projectKeys) { + this.projectPermissions.add(projectPermission); + this.projectKeyByPermission.putAll(projectPermission, newArrayList(projectKeys)); + return this; + } + + public MockUserSession addProjectUuidPermissions(String projectPermission, String... projectUuids) { + this.projectPermissions.add(projectPermission); + this.projectUuidByPermission.putAll(projectPermission, newArrayList(projectUuids)); + return this; + } + + /** + * Deprecated, please use {@link #addComponentUuidPermission} + */ + @Deprecated + public MockUserSession addComponentPermission(String projectPermission, String projectKey, String componentKey) { + this.projectKeyByComponentKey.put(componentKey, projectKey); + addProjectPermissions(projectPermission, projectKey); + return this; + } + + public MockUserSession addComponentUuidPermission(String projectPermission, String projectUuid, String componentUuid) { + this.projectUuidByComponentUuid.put(componentUuid, projectUuid); + addProjectUuidPermissions(projectPermission, projectUuid); + return this; + } + + @Override + public List globalPermissions() { + return globalPermissions; + } + + @Override + public boolean hasProjectPermission(String permission, String projectKey) { + return projectPermissions.contains(permission) && projectKeyByPermission.get(permission).contains(projectKey); + } + + @Override + public boolean hasProjectPermissionByUuid(String permission, String projectUuid) { + return projectPermissions.contains(permission) && projectUuidByPermission.get(permission).contains(projectUuid); + } + + @Override + public boolean hasComponentPermission(String permission, String componentKey) { + String projectKey = projectKeyByComponentKey.get(componentKey); + return projectKey != null && hasProjectPermission(permission, projectKey); + } + + @Override + public boolean hasComponentUuidPermission(String permission, String componentUuid) { + String projectUuid = projectUuidByComponentUuid.get(componentUuid); + return projectUuid != null && hasProjectPermissionByUuid(permission, projectUuid); + } +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/MockUserSessionTest.java b/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSessionTest.java similarity index 89% rename from server/sonar-server/src/test/java/org/sonar/server/user/MockUserSessionTest.java rename to server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSessionTest.java index 8a2b0acc4f9..f324062cb8e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/MockUserSessionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/tester/MockUserSessionTest.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.user; +package org.sonar.server.tester; import org.junit.Test; @@ -26,9 +26,8 @@ import static org.assertj.core.api.Assertions.assertThat; public class MockUserSessionTest { @Test public void set_mock_session() { - MockUserSession.set().setLogin("simon").setUserGroups("sonar-users"); + MockUserSession mock = new MockUserSession("simon").setUserGroups("sonar-users"); - UserSession mock = UserSession.get(); assertThat(mock.login()).isEqualTo("simon"); assertThat(mock.userGroups()).containsOnly("sonar-users", "Anyone"); assertThat(mock.globalPermissions()).isEmpty(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java b/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java new file mode 100644 index 00000000000..32ab416fb7e --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/tester/UserSessionRule.java @@ -0,0 +1,316 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.tester; + +import com.google.common.base.Preconditions; +import java.util.List; +import java.util.Locale; +import java.util.Set; +import javax.annotation.CheckForNull; +import javax.annotation.Nullable; +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; +import org.sonar.server.user.ThreadLocalUserSession; +import org.sonar.server.user.UserSession; + +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; + +/** + * {@code UserSessionRule} is intended to be used as a {@link org.junit.Rule} to easily manage {@link UserSession} in + * unit tests. + *

+ * It can be used as a {@link org.junit.ClassRule} but be careful not to modify its states from inside tests methods + * unless you purposely want to have side effects between each tests. + *

+ *

+ * {@code UserSessionRule} is intended to be used either standalone (in which case use the static factory method + * {@link #standalone()} or with {@link ServerTester} (in which case use static factory method + * {@link #forServerTester(ServerTester)}). + *

+ *

+ * In both cases, one can define user session behavior which should apply on all tests directly on the property, eg.: + *

+ * {@literal @}Rule
+ * public UserSessionRule userSessionRule = UserSessionRule.standalone().logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN);
+ * 
+ *

+ *

+ * Behavior defined at property-level can obviously be override at test method level. For example, one could define + * all methods to use an authenticated session such as presented above but can easily overwrite that behavior in a + * specific test method as follow: + *

+ * {@literal @}Test
+ * public void test_method() {
+ *   userSessionRule.standalone();
+ *   {@literal [...]}
+ * }
+ * 
+ *

+ *

+ * {@code UserSessionRule}, being standalone or associated to a {@link ServerTester}, emulates by default an anonymous + * session. Therefore, call {@code UserSessionRule.standalone()} is equivalent to calling + * {@code UserSessionRule.standalone().anonymous()}. + *

+ *

+ * To emulate an identified user, either use method {@link #logon(String)} if you want to specify the user's login, or + * method {@link #logon()} which will do the same but using the value of {@link #DEFAULT_LOGIN} as the user's login. + *

+ */ +public class UserSessionRule implements TestRule, UserSession { + public static final String DEFAULT_LOGIN = "default_login"; + + @CheckForNull + private final ServerTester serverTester; + private UserSession currentUserSession; + + private UserSessionRule(@Nullable ServerTester serverTester) { + this.serverTester = serverTester; + anonymous(); + } + + public static UserSessionRule standalone() { + return new UserSessionRule(null); + } + + public static UserSessionRule forServerTester(ServerTester serverTester) { + return new UserSessionRule(Preconditions.checkNotNull(serverTester)); + } + + /** + * Log on with the default login {@link #DEFAULT_LOGIN} + */ + public UserSessionRule logon() { + return logon(DEFAULT_LOGIN); + } + + /** + * Log on with the specified login + */ + public UserSessionRule logon(String login) { + setCurrentUserSession(new MockUserSession(login)); + return this; + } + + /** + * Disconnect/go anonymous + */ + public UserSessionRule anonymous() { + setCurrentUserSession(new AnonymousMockUserSession()); + return this; + } + + @Override + public Statement apply(Statement statement, Description description) { + return this.statement(statement); + } + + private Statement statement(final Statement base) { + return new Statement() { + public void evaluate() throws Throwable { + UserSessionRule.this.before(); + + try { + base.evaluate(); + } finally { + UserSessionRule.this.after(); + } + + } + }; + } + + protected void before() throws Throwable { + setCurrentUserSession(currentUserSession); + } + + protected void after() { + this.currentUserSession = null; + if (serverTester != null) { + serverTester.get(ThreadLocalUserSession.class).remove(); + } + } + + public void set(UserSession userSession) { + checkState(serverTester == null, "Can set a specific session and use ServerTester at the same time"); + checkNotNull(userSession); + setCurrentUserSession(userSession); + } + + public UserSessionRule setGlobalPermissions(String... globalPermissions) { + ensureMockUserSession().setGlobalPermissions(globalPermissions); + return this; + } + + public UserSessionRule addProjectUuidPermissions(String projectPermission, String... projectUuids) { + ensureMockUserSession().addProjectUuidPermissions(projectPermission, projectUuids); + return this; + } + + @Deprecated + public UserSessionRule addComponentPermission(String projectPermission, String projectKey, String componentKey) { + ensureMockUserSession().addComponentPermission(projectPermission, projectKey, componentKey); + return this; + } + + @Deprecated + public UserSessionRule addProjectPermissions(String projectPermission, String... projectKeys) { + ensureMockUserSession().addProjectPermissions(projectPermission, projectKeys); + return this; + } + + public UserSessionRule setUserId(@Nullable Integer userId) { + ensureMockUserSession().setUserId(userId); + return this; + } + + public UserSessionRule setUserGroups(@Nullable String... userGroups) { + ensureMockUserSession().setUserGroups(userGroups); + return this; + } + + public UserSessionRule setLocale(@Nullable Locale l) { + ensureMockUserSession().setLocale(l); + return this; + } + + public UserSessionRule addComponentUuidPermission(String projectPermission, String projectUuid, String componentUuid) { + ensureMockUserSession().addComponentUuidPermission(projectPermission, projectUuid, componentUuid); + return this; + } + + public UserSessionRule setName(@Nullable String s) { + ensureMockUserSession().setName(s); + return this; + } + + private MockUserSession ensureMockUserSession() { + checkState(currentUserSession instanceof MockUserSession, "rule state can not be changed if a UserSession has explicitly been provided"); + return (MockUserSession) currentUserSession; + } + + private void setCurrentUserSession(UserSession userSession) { + this.currentUserSession = Preconditions.checkNotNull(userSession); + if (serverTester != null) { + serverTester.get(ThreadLocalUserSession.class).set(currentUserSession); + } + } + + @Override + public List globalPermissions() { + return currentUserSession.globalPermissions(); + } + + @Override + public boolean hasProjectPermission(String permission, String projectKey) { + return currentUserSession.hasProjectPermission(permission, projectKey); + } + + @Override + public boolean hasProjectPermissionByUuid(String permission, String projectUuid) { + return currentUserSession.hasProjectPermissionByUuid(permission, projectUuid); + } + + @Override + public boolean hasComponentPermission(String permission, String componentKey) { + return currentUserSession.hasComponentPermission(permission, componentKey); + } + + @Override + public boolean hasComponentUuidPermission(String permission, String componentUuid) { + return currentUserSession.hasComponentUuidPermission(permission, componentUuid); + } + + @Override + @CheckForNull + public String login() { + return currentUserSession.login(); + } + + @Override + @CheckForNull + public String name() { + return currentUserSession.name(); + } + + @Override + @CheckForNull + public Integer userId() { + return currentUserSession.userId(); + } + + @Override + public Set userGroups() { + return currentUserSession.userGroups(); + } + + @Override + public boolean isLoggedIn() { + return currentUserSession.isLoggedIn(); + } + + @Override + public Locale locale() { + return currentUserSession.locale(); + } + + @Override + public UserSession checkLoggedIn() { + return currentUserSession.checkLoggedIn(); + } + + @Override + public UserSession checkGlobalPermission(String globalPermission) { + return currentUserSession.checkGlobalPermission(globalPermission); + } + + @Override + public UserSession checkGlobalPermission(String globalPermission, @Nullable String errorMessage) { + return currentUserSession.checkGlobalPermission(globalPermission, errorMessage); + } + + @Override + public boolean hasGlobalPermission(String globalPermission) { + return currentUserSession.hasGlobalPermission(globalPermission); + } + + @Override + public UserSession checkProjectPermission(String projectPermission, String projectKey) { + return currentUserSession.checkProjectPermission(projectPermission, projectKey); + } + + @Override + public UserSession checkProjectUuidPermission(String projectPermission, String projectUuid) { + return currentUserSession.checkProjectUuidPermission(projectPermission, projectUuid); + } + + @Override + public UserSession checkComponentPermission(String projectPermission, String componentKey) { + return currentUserSession.checkComponentPermission(projectPermission, componentKey); + } + + @Override + public UserSession checkComponentUuidPermission(String permission, String componentUuid) { + return currentUserSession.checkComponentUuidPermission(permission, componentUuid); + } + + +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/ui/JRubyI18nTest.java b/server/sonar-server/src/test/java/org/sonar/server/ui/JRubyI18nTest.java index acda1ad907c..47be0865a74 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ui/JRubyI18nTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ui/JRubyI18nTest.java @@ -19,7 +19,10 @@ */ package org.sonar.server.ui; +import java.util.Date; +import java.util.Locale; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -27,9 +30,7 @@ import org.mockito.runners.MockitoJUnitRunner; import org.sonar.api.i18n.I18n; import org.sonar.api.utils.Duration; import org.sonar.api.utils.Durations; - -import java.util.Date; -import java.util.Locale; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.any; @@ -38,6 +39,8 @@ import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) public class JRubyI18nTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); @Mock I18n i18n; @@ -50,7 +53,7 @@ public class JRubyI18nTest { @Before public void setUp() { - jRubyI18n = new JRubyI18n(i18n, durations); + jRubyI18n = new JRubyI18n(i18n, durations, userSessionRule); } @Test diff --git a/server/sonar-server/src/test/java/org/sonar/server/ui/ViewProxyTest.java b/server/sonar-server/src/test/java/org/sonar/server/ui/ViewProxyTest.java index db1cf9f28b0..2895462beed 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ui/ViewProxyTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ui/ViewProxyTest.java @@ -20,6 +20,7 @@ package org.sonar.server.ui; import com.google.common.collect.Lists; +import java.util.List; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -33,9 +34,7 @@ import org.sonar.api.web.WidgetProperties; import org.sonar.api.web.WidgetProperty; import org.sonar.api.web.WidgetPropertyType; import org.sonar.api.web.WidgetScope; -import org.sonar.server.user.MockUserSession; - -import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Iterables.getOnlyElement; import static org.assertj.core.api.Assertions.assertThat; @@ -43,14 +42,16 @@ import static org.sonar.server.component.ComponentTesting.newProjectDto; public class ViewProxyTest { + @Rule + public UserSessionRule userSession = UserSessionRule.standalone(); @Rule public ExpectedException exception = ExpectedException.none(); @Test public void compareTo() { - assertThat(new ViewProxy(new FakeView("aaa")).compareTo(new ViewProxy(new FakeView("bbb")))).isLessThan(0); - assertThat(new ViewProxy(new FakeView("aaa")).compareTo(new ViewProxy(new FakeView("aaa")))).isZero(); - assertThat(new ViewProxy(new FakeView("bbb")).compareTo(new ViewProxy(new FakeView("aaa")))).isGreaterThan(0); + assertThat(new ViewProxy<>(new FakeView("aaa"), userSession).compareTo(new ViewProxy<>(new FakeView("bbb"), userSession))).isLessThan(0); + assertThat(new ViewProxy<>(new FakeView("aaa"), userSession).compareTo(new ViewProxy<>(new FakeView("aaa"), userSession))).isZero(); + assertThat(new ViewProxy<>(new FakeView("bbb"), userSession).compareTo(new ViewProxy<>(new FakeView("aaa"), userSession))).isGreaterThan(0); } @Test @@ -65,7 +66,7 @@ public class ViewProxyTest { } View view = new MyView(); - ViewProxy proxy = new ViewProxy(view); + ViewProxy proxy = new ViewProxy<>(view, userSession); assertThat(proxy.getTarget()).isEqualTo(view); assertThat(proxy.getSections()).isEqualTo(new String[] {NavigationSection.RESOURCE}); @@ -81,7 +82,7 @@ public class ViewProxyTest { } } View view = new MyView(); - ViewProxy proxy = new ViewProxy(view); + ViewProxy proxy = new ViewProxy<>(view, userSession); assertThat(proxy.getTarget()).isEqualTo(view); assertThat(proxy.getSections()).isEqualTo(new String[] {NavigationSection.HOME}); @@ -97,7 +98,7 @@ public class ViewProxyTest { } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); assertThat(proxy.isDefaultTab()).isTrue(); assertThat(proxy.getDefaultTabForMetrics()).isEmpty(); @@ -110,7 +111,7 @@ public class ViewProxyTest { super("fake"); } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); assertThat(proxy.isDefaultTab()).isFalse(); assertThat(proxy.getDefaultTabForMetrics()).isEmpty(); @@ -124,7 +125,7 @@ public class ViewProxyTest { super("fake"); } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); assertThat(proxy.isDefaultTab()).isFalse(); assertThat(proxy.getDefaultTabForMetrics()).isEqualTo(new String[] {"ncloc", "coverage"}); @@ -132,7 +133,7 @@ public class ViewProxyTest { @Test public void widget_should_be_editable() { - ViewProxy proxy = new ViewProxy(new EditableWidget()); + ViewProxy proxy = new ViewProxy(new EditableWidget(), userSession); assertThat(proxy.isEditable()).isTrue(); assertThat(proxy.getWidgetProperties()).hasSize(3); @@ -140,7 +141,7 @@ public class ViewProxyTest { @Test public void load_widget_properties_in_the_same_order_than_annotations() { - ViewProxy proxy = new ViewProxy(new EditableWidget()); + ViewProxy proxy = new ViewProxy(new EditableWidget(), userSession); List widgetProperties = Lists.newArrayList(proxy.getWidgetProperties()); assertThat(widgetProperties).hasSize(3); @@ -151,21 +152,21 @@ public class ViewProxyTest { @Test public void widget_should_have_text_property() { - ViewProxy proxy = new ViewProxy(new TextWidget()); + ViewProxy proxy = new ViewProxy(new TextWidget(), userSession); assertThat(getOnlyElement(proxy.getWidgetProperties()).type()).isEqualTo(WidgetPropertyType.TEXT); } @Test public void widget_should_not_be_global_by_default() { - ViewProxy proxy = new ViewProxy(new EditableWidget()); + ViewProxy proxy = new ViewProxy(new EditableWidget(), userSession); assertThat(proxy.isGlobal()).isFalse(); } @Test public void widget_should_be_global() { - ViewProxy proxy = new ViewProxy(new GlobalWidget()); + ViewProxy proxy = new ViewProxy(new GlobalWidget(), userSession); assertThat(proxy.isGlobal()).isTrue(); } @@ -176,18 +177,18 @@ public class ViewProxyTest { exception.expectMessage("INVALID"); exception.expectMessage("WidgetWithInvalidScope"); - new ViewProxy(new WidgetWithInvalidScope()); + new ViewProxy(new WidgetWithInvalidScope(), userSession); } @Test public void widgetShouldRequireMandatoryProperties() { - ViewProxy proxy = new ViewProxy(new EditableWidget()); + ViewProxy proxy = new ViewProxy(new EditableWidget(), userSession); assertThat(proxy.hasRequiredProperties()).isTrue(); } @Test public void widgetShouldDefineOnlyOptionalProperties() { - ViewProxy proxy = new ViewProxy(new WidgetWithOptionalProperties()); + ViewProxy proxy = new ViewProxy(new WidgetWithOptionalProperties(), userSession); assertThat(proxy.hasRequiredProperties()).isFalse(); } @@ -198,7 +199,7 @@ public class ViewProxyTest { super("fake"); } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); assertThat(proxy.acceptsAvailableMeasures(new String[] {"lines", "ncloc", "coverage"})).isTrue(); } @@ -211,7 +212,7 @@ public class ViewProxyTest { super("fake"); } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); assertThat(proxy.acceptsAvailableMeasures(new String[] {"lines", "ncloc", "coverage"})).isTrue(); assertThat(proxy.acceptsAvailableMeasures(new String[] {"lines", "coverage"})).isFalse(); @@ -225,7 +226,7 @@ public class ViewProxyTest { super("fake"); } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); assertThat(proxy.acceptsAvailableMeasures(new String[] {"lines", "coverage"})).isTrue(); assertThat(proxy.acceptsAvailableMeasures(new String[] {"complexity", "coverage"})).isFalse(); @@ -239,7 +240,7 @@ public class ViewProxyTest { super("fake"); } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); // ok, mandatory measures and 1 needed measure assertThat(proxy.acceptsAvailableMeasures(new String[] {"lines", "ncloc", "coverage", "duplications"})).isTrue(); @@ -259,9 +260,8 @@ public class ViewProxyTest { } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); - MockUserSession.set(); assertThat(proxy.isUserAuthorized()).isTrue(); } @@ -276,9 +276,9 @@ public class ViewProxyTest { } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); - MockUserSession.set().setGlobalPermissions("palap"); + userSession.setGlobalPermissions("palap"); assertThat(proxy.isUserAuthorized()).isTrue(); } @@ -293,9 +293,9 @@ public class ViewProxyTest { } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); - MockUserSession.set().setGlobalPermissions("pilip"); + userSession.setGlobalPermissions("pilip"); assertThat(proxy.isUserAuthorized()).isFalse(); } @@ -309,9 +309,8 @@ public class ViewProxyTest { } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); - MockUserSession.set(); assertThat(proxy.isUserAuthorized(newProjectDto("abcd"))).isTrue(); } @@ -326,9 +325,9 @@ public class ViewProxyTest { } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); - MockUserSession.set().addProjectUuidPermissions("palap", "abcd"); + userSession.addProjectUuidPermissions("palap", "abcd"); assertThat(proxy.isUserAuthorized(newProjectDto("abcd"))).isTrue(); } @@ -343,9 +342,9 @@ public class ViewProxyTest { } } - ViewProxy proxy = new ViewProxy(new MyView()); + ViewProxy proxy = new ViewProxy<>(new MyView(), userSession); - MockUserSession.set().addProjectUuidPermissions("pilip", "abcd"); + userSession.addProjectUuidPermissions("pilip", "abcd"); assertThat(proxy.isUserAuthorized(newProjectDto("abcd"))).isFalse(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ui/ViewsTest.java b/server/sonar-server/src/test/java/org/sonar/server/ui/ViewsTest.java index 7143e4d7b7e..72904514454 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ui/ViewsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ui/ViewsTest.java @@ -19,6 +19,8 @@ */ package org.sonar.server.ui; +import java.util.List; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.resources.Java; import org.sonar.api.resources.Qualifiers; @@ -27,8 +29,7 @@ import org.sonar.api.web.NavigationSection; import org.sonar.api.web.Page; import org.sonar.api.web.View; import org.sonar.api.web.Widget; - -import java.util.List; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -36,6 +37,9 @@ import static org.mockito.Mockito.when; public class ViewsTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); + private static FakeResourceViewer FAKE_TAB = new FakeResourceViewer(); private static FakeWidget FAKE_WIDGET = new FakeWidget(); private static FakePage FAKE_PAGE = new FakePage(); @@ -43,7 +47,7 @@ public class ViewsTest { @Test public void should_get_page_by_id() { - final Views views = new Views(VIEWS); + final Views views = new Views(userSessionRule, VIEWS); assertThat(views.getPage("fake-page").getTarget().getClass()).isEqualTo(FakePage.class); assertThat(views.getPage("fake-widget")).isNull(); assertThat(views.getPage("foo")).isNull(); @@ -52,7 +56,7 @@ public class ViewsTest { @Test public void should_get_pages_by_section() { - final Views views = new Views(VIEWS); + final Views views = new Views(userSessionRule, VIEWS); List> pages = views.getPages(NavigationSection.RESOURCE); assertThat(pages.size()).isEqualTo(1); @@ -64,7 +68,7 @@ public class ViewsTest { @Test public void should_get_widgets() { - final Views views = new Views(VIEWS); + final Views views = new Views(userSessionRule, VIEWS); List> widgets = views.getWidgets(null, null, null, null); assertThat(widgets.size()).isEqualTo(1); assertThat(widgets.get(0).getTarget().getClass()).isEqualTo(FakeWidget.class); @@ -72,7 +76,7 @@ public class ViewsTest { @Test public void should_sort_views_by_title() { - final Views views = new Views(new View[] {new FakeWidget("ccc", "ccc"), new FakeWidget("aaa", "aaa"), new FakeWidget("bbb", "bbb")}); + final Views views = new Views(userSessionRule, new View[] {new FakeWidget("ccc", "ccc"), new FakeWidget("aaa", "aaa"), new FakeWidget("bbb", "bbb")}); List> widgets = views.getWidgets(null, null, null, null); assertThat(widgets.size()).isEqualTo(3); assertThat(widgets.get(0).getId()).isEqualTo("aaa"); @@ -82,7 +86,7 @@ public class ViewsTest { @Test public void should_prefix_title_by_number_to_display_first() { - final Views views = new Views(new View[] {new FakeWidget("other", "Other"), new FakeWidget("1id", "1widget"), new FakeWidget("2id", "2widget")}); + final Views views = new Views(userSessionRule, new View[] {new FakeWidget("other", "Other"), new FakeWidget("1id", "1widget"), new FakeWidget("2id", "2widget")}); List> widgets = views.getWidgets(null, null, null, null); assertThat(widgets.size()).isEqualTo(3); assertThat(widgets.get(0).getId()).isEqualTo("1id"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/ComponentNavigationActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/ComponentNavigationActionTest.java index fe1bd5d59c9..497b6b49d01 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/ComponentNavigationActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/ComponentNavigationActionTest.java @@ -19,9 +19,12 @@ */ package org.sonar.server.ui.ws; +import java.util.Date; +import java.util.Locale; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -56,14 +59,11 @@ import org.sonar.server.db.DbClient; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; import org.sonar.server.measure.persistence.MeasureDao; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ui.Views; -import org.sonar.server.user.MockUserSession; import org.sonar.server.user.db.UserDao; import org.sonar.server.ws.WsTester; -import java.util.Date; -import java.util.Locale; - import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -72,6 +72,8 @@ public class ComponentNavigationActionTest { @ClassRule public static final DbTester dbTester = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private DbSession session; @@ -123,14 +125,14 @@ public class ComponentNavigationActionTest { @Test(expected = IllegalArgumentException.class) public void fail_on_missing_parameters() throws Exception { - wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(null, null, null, null, null))); + wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(null, null, null, null, null, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").execute(); } @Test(expected = NotFoundException.class) public void fail_on_unexistent_key() throws Exception { - wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, null, null, null, null))); + wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, null, null, null, null, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute(); } @@ -140,8 +142,7 @@ public class ComponentNavigationActionTest { dbClient.componentDao().insert(session, ComponentTesting.newProjectDto("abcd").setKey("polop")); session.commit(); - MockUserSession.set(); - wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, null, null, null, null))); + wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, null, null, null, null, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute(); } @@ -152,9 +153,9 @@ public class ComponentNavigationActionTest { .setKey("polop").setName("Polop")); session.commit(); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, "abcd"); + userSessionRule.addProjectUuidPermissions(UserRole.USER, "abcd"); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - new Views(), i18n, resourceTypes))); + new Views(userSessionRule), i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute().assertJson(getClass(), "no_snapshot.json"); } @@ -167,10 +168,10 @@ public class ComponentNavigationActionTest { dbClient.propertiesDao().setProperty(new PropertyDto().setKey("favourite").setResourceId(project.getId()).setUserId((long) userId), session); session.commit(); - MockUserSession.set().setLogin("obiwan").setUserId(userId).addProjectUuidPermissions(UserRole.USER, "abcd"); + userSessionRule.logon("obiwan").setUserId(userId).addProjectUuidPermissions(UserRole.USER, "abcd"); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - new Views(), i18n, resourceTypes))); + new Views(userSessionRule), i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute().assertJson(getClass(), "no_snapshot_user_favourite.json"); } @@ -186,10 +187,10 @@ public class ComponentNavigationActionTest { .setLast(true).setQualifier(project.qualifier()).setResourceId(project.getId()).setRootProjectId(project.getId()).setScope(project.scope())); session.commit(); - MockUserSession.set().setLogin("obiwan").setUserId(userId).addProjectUuidPermissions(UserRole.USER, "abcd"); + userSessionRule.logon("obiwan").setUserId(userId).addProjectUuidPermissions(UserRole.USER, "abcd"); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - new Views(), i18n, resourceTypes))); + new Views(userSessionRule), i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute().assertJson(getClass(), "with_snapshot_and_connected_user.json"); } @@ -203,10 +204,10 @@ public class ComponentNavigationActionTest { activeDashboardDao.insert(new ActiveDashboardDto().setDashboardId(dashboard.getId())); session.commit(); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, "abcd"); + userSessionRule.addProjectUuidPermissions(UserRole.USER, "abcd"); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - new Views(), i18n, resourceTypes))); + new Views(userSessionRule), i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute().assertJson(getClass(), "with_dashboards.json"); } @@ -220,10 +221,10 @@ public class ComponentNavigationActionTest { activeDashboardDao.insert(new ActiveDashboardDto().setDashboardId(dashboard.getId())); session.commit(); - MockUserSession.set().setLogin("obiwan").addProjectUuidPermissions(UserRole.USER, "abcd"); + userSessionRule.logon("obiwan").addProjectUuidPermissions(UserRole.USER, "abcd"); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - new Views(), i18n, resourceTypes))); + new Views(userSessionRule), i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute().assertJson(getClass(), "with_default_dashboards.json"); } @@ -236,12 +237,12 @@ public class ComponentNavigationActionTest { .setLast(true).setQualifier(project.qualifier()).setResourceId(project.getId()).setRootProjectId(project.getId()).setScope(project.scope())); session.commit(); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, "abcd"); + userSessionRule.addProjectUuidPermissions(UserRole.USER, "abcd"); Views views = createViews(); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - views, i18n, resourceTypes))); + views, i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute().assertJson(getClass(), "with_extensions.json"); } @@ -254,14 +255,14 @@ public class ComponentNavigationActionTest { .setLast(true).setQualifier(project.qualifier()).setResourceId(project.getId()).setRootProjectId(project.getId()).setScope(project.scope())); session.commit(); - MockUserSession.set() + userSessionRule .addProjectUuidPermissions(UserRole.USER, "abcd") .addProjectUuidPermissions(UserRole.ADMIN, "abcd"); Views views = createViews(); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - views, i18n, resourceTypes))); + views, i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute().assertJson(getClass(), "admin_with_extensions.json"); } @@ -318,7 +319,7 @@ public class ComponentNavigationActionTest { } } Page adminPage = new AdminPage(); - Views views = new Views(new Page[] {page1, page2, adminPage}); + Views views = new Views(userSessionRule, new Page[] {page1, page2, adminPage}); return views; } @@ -330,7 +331,7 @@ public class ComponentNavigationActionTest { .setKey("polop").setName("Polop").setLanguage(language)); session.commit(); - MockUserSession.set().setLogin("obiwan").setUserId(userId) + userSessionRule.logon("obiwan").setUserId(userId) .addProjectUuidPermissions(UserRole.USER, "abcd") .addProjectUuidPermissions(UserRole.ADMIN, "abcd"); @@ -369,7 +370,7 @@ public class ComponentNavigationActionTest { Page page2 = new SecondPage(); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - new Views(new Page[] {page1, page2}), i18n, resourceTypes))); + new Views(userSessionRule, new Page[] {page1, page2}), i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute().assertJson(getClass(), "with_admin_rights.json"); } @@ -382,7 +383,7 @@ public class ComponentNavigationActionTest { dbClient.componentDao().insert(session, project); session.commit(); - MockUserSession.set().setLogin("obiwan").setUserId(userId) + userSessionRule.logon("obiwan").setUserId(userId) .addProjectUuidPermissions(UserRole.USER, "abcd") .addProjectUuidPermissions(UserRole.ADMIN, "abcd"); @@ -398,7 +399,7 @@ public class ComponentNavigationActionTest { .thenReturn(projectResourceType); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - new Views(), i18n, resourceTypes))); + new Views(userSessionRule), i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute().assertJson(getClass(), "with_all_properties.json"); } @@ -413,12 +414,12 @@ public class ComponentNavigationActionTest { dbClient.componentDao().insert(session, project, module); session.commit(); - MockUserSession.set().setLogin("obiwan").setUserId(userId) + userSessionRule.logon("obiwan").setUserId(userId) .addProjectUuidPermissions(UserRole.USER, "abcd") .addProjectUuidPermissions(UserRole.ADMIN, "abcd"); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - new Views(), i18n, resourceTypes))); + new Views(userSessionRule), i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "palap").execute().assertJson(getClass(), "on_module.json"); } @@ -431,7 +432,7 @@ public class ComponentNavigationActionTest { .setKey("polop").setName("Polop").setLanguage(language)); session.commit(); - MockUserSession.set().setLogin("obiwan").setUserId(userId) + userSessionRule.logon("obiwan").setUserId(userId) .addProjectUuidPermissions(UserRole.USER, "abcd") .setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); @@ -450,7 +451,7 @@ public class ComponentNavigationActionTest { Page page = new FirstPage(); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - new Views(new Page[] {page}), i18n, resourceTypes))); + new Views(userSessionRule, new Page[] {page}), i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "polop").execute().assertJson(getClass(), "quality_profile_admin.json"); } @@ -497,10 +498,10 @@ public class ComponentNavigationActionTest { session.commit(); - MockUserSession.set().addProjectUuidPermissions(UserRole.USER, "abcd"); + userSessionRule.addProjectUuidPermissions(UserRole.USER, "abcd"); wsTester = new WsTester(new NavigationWs(new ComponentNavigationAction(dbClient, activeDashboardDao, - new Views(), i18n, resourceTypes))); + new Views(userSessionRule), i18n, resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "component").setParam("componentKey", "palap:src/main/xoo/Source.xoo").execute().assertJson(getClass(), "breadcrumbs.json"); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalNavigationActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalNavigationActionTest.java index 92adb3f3a38..94fe1731ba6 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalNavigationActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/GlobalNavigationActionTest.java @@ -22,6 +22,7 @@ package org.sonar.server.ui.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.api.resources.ResourceType; @@ -41,8 +42,8 @@ import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.DbTester; import org.sonar.core.user.UserDto; import org.sonar.server.db.DbClient; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ui.Views; -import org.sonar.server.user.MockUserSession; import org.sonar.server.user.db.UserDao; import org.sonar.server.ws.WsTester; @@ -52,6 +53,8 @@ public class GlobalNavigationActionTest { @ClassRule public static final DbTester dbTester = new DbTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private DbSession session; @@ -83,9 +86,7 @@ public class GlobalNavigationActionTest { @Test public void empty_call() throws Exception { - wsTester = new WsTester(new NavigationWs(new GlobalNavigationAction(activeDashboardDao, new Views(), new Settings(), new ResourceTypes()))); - - MockUserSession.set(); + wsTester = new WsTester(new NavigationWs(new GlobalNavigationAction(activeDashboardDao, new Views(userSessionRule), new Settings(), new ResourceTypes(), userSessionRule))); wsTester.newGetRequest("api/navigation", "global").execute().assertJson(getClass(), "empty.json"); } @@ -105,22 +106,18 @@ public class GlobalNavigationActionTest { .addRelations("PAL", "LAP") .build() }); - wsTester = new WsTester(new NavigationWs(new GlobalNavigationAction(activeDashboardDao, new Views(), new Settings(), resourceTypes))); - - MockUserSession.set(); + wsTester = new WsTester(new NavigationWs(new GlobalNavigationAction(activeDashboardDao, new Views(userSessionRule), new Settings(), resourceTypes, userSessionRule))); wsTester.newGetRequest("api/navigation", "global").execute().assertJson(getClass(), "with_qualifiers.json"); } @Test public void only_logo() throws Exception { - wsTester = new WsTester(new NavigationWs(new GlobalNavigationAction(activeDashboardDao, new Views(), + wsTester = new WsTester(new NavigationWs(new GlobalNavigationAction(activeDashboardDao, new Views(userSessionRule), new Settings() .setProperty("sonar.lf.logoUrl", "http://some-server.tld/logo.png") .setProperty("sonar.lf.logoWidthPx", "123"), - new ResourceTypes()))); - - MockUserSession.set(); + new ResourceTypes(), userSessionRule))); wsTester.newGetRequest("api/navigation", "global").execute().assertJson(getClass(), "only_logo.json"); } @@ -129,8 +126,6 @@ public class GlobalNavigationActionTest { public void nominal_call_for_anonymous() throws Exception { nominalSetup(); - MockUserSession.set(); - wsTester.newGetRequest("api/navigation", "global").execute().assertJson(getClass(), "anonymous.json"); } @@ -138,7 +133,7 @@ public class GlobalNavigationActionTest { public void nominal_call_for_user() throws Exception { nominalSetup(); - MockUserSession.set().setLogin("obiwan"); + userSessionRule.logon("obiwan"); wsTester.newGetRequest("api/navigation", "global").execute().assertJson(getClass(), "user.json"); } @@ -147,7 +142,7 @@ public class GlobalNavigationActionTest { public void nominal_call_for_admin() throws Exception { nominalSetup(); - MockUserSession.set().setLogin("obiwan").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("obiwan").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); wsTester.newGetRequest("api/navigation", "global").execute().assertJson(getClass(), "admin.json"); } @@ -156,7 +151,7 @@ public class GlobalNavigationActionTest { public void nominal_call_for_user_without_configured_dashboards() throws Exception { nominalSetup(); - MockUserSession.set().setLogin("anakin"); + userSessionRule.logon("anakin"); wsTester.newGetRequest("api/navigation", "global").execute().assertJson(getClass(), "anonymous.json"); } @@ -170,7 +165,7 @@ public class GlobalNavigationActionTest { Settings settings = new Settings() .setProperty("sonar.lf.logoUrl", "http://some-server.tld/logo.png") .setProperty("sonar.lf.logoWidthPx", "123"); - wsTester = new WsTester(new NavigationWs(new GlobalNavigationAction(activeDashboardDao, createViews(), settings, new ResourceTypes()))); + wsTester = new WsTester(new NavigationWs(new GlobalNavigationAction(activeDashboardDao, createViews(), settings, new ResourceTypes(), userSessionRule))); } private void createAndConfigureDashboardForUser() { @@ -245,6 +240,6 @@ public class GlobalNavigationActionTest { return "admin_page"; } } - return new Views(new View[] {page, controller, new AdminPage()}); + return new Views(userSessionRule, new View[] {page, controller, new AdminPage()}); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/SettingsNavigationActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/SettingsNavigationActionTest.java index 7be8ff71cf6..980c7064e91 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ui/ws/SettingsNavigationActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ui/ws/SettingsNavigationActionTest.java @@ -19,7 +19,9 @@ */ package org.sonar.server.ui.ws; +import java.util.Locale; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -30,18 +32,18 @@ import org.sonar.api.web.Page; import org.sonar.api.web.View; import org.sonar.core.permission.GlobalPermissions; import org.sonar.server.plugins.UpdateCenterClient; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ui.Views; -import org.sonar.server.user.MockUserSession; import org.sonar.server.ws.WsTester; -import java.util.Locale; - import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class SettingsNavigationActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private WsTester wsTester; @@ -64,24 +66,24 @@ public class SettingsNavigationActionTest { @Test public void empty() throws Exception { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); - wsTester = new WsTester(new NavigationWs(new SettingsNavigationAction(settings, new Views(), i18n))); + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + wsTester = new WsTester(new NavigationWs(new SettingsNavigationAction(settings, new Views(userSessionRule), i18n, userSessionRule))); wsTester.newGetRequest("api/navigation", "settings").execute().assertJson(getClass(), "empty.json"); } @Test public void with_provisioning() throws Exception { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.PROVISIONING); - wsTester = new WsTester(new NavigationWs(new SettingsNavigationAction(settings, new Views(), i18n))); + userSessionRule.setGlobalPermissions(GlobalPermissions.PROVISIONING); + wsTester = new WsTester(new NavigationWs(new SettingsNavigationAction(settings, new Views(userSessionRule), i18n, userSessionRule))); wsTester.newGetRequest("api/navigation", "settings").execute().assertJson(getClass(), "with_provisioning.json"); } @Test public void with_views() throws Exception { - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); - wsTester = new WsTester(new NavigationWs(new SettingsNavigationAction(settings, createViews(), i18n))); + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + wsTester = new WsTester(new NavigationWs(new SettingsNavigationAction(settings, createViews(), i18n, userSessionRule))); wsTester.newGetRequest("api/navigation", "settings").execute().assertJson(getClass(), "with_views.json"); } @@ -89,17 +91,16 @@ public class SettingsNavigationActionTest { @Test public void with_update_center() throws Exception { settings.setProperty(UpdateCenterClient.ACTIVATION_PROPERTY, true); - MockUserSession.set().setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); - wsTester = new WsTester(new NavigationWs(new SettingsNavigationAction(settings, new Views(), i18n))); + userSessionRule.setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + wsTester = new WsTester(new NavigationWs(new SettingsNavigationAction(settings, new Views(userSessionRule), i18n, userSessionRule))); wsTester.newGetRequest("api/navigation", "settings").execute().assertJson(getClass(), "with_update_center.json"); } @Test public void with_views_and_update_center_but_not_admin() throws Exception { - MockUserSession.set(); settings.setProperty(UpdateCenterClient.ACTIVATION_PROPERTY, true); - wsTester = new WsTester(new NavigationWs(new SettingsNavigationAction(settings, createViews(), i18n))); + wsTester = new WsTester(new NavigationWs(new SettingsNavigationAction(settings, createViews(), i18n, userSessionRule))); wsTester.newGetRequest("api/navigation", "settings").execute().assertJson(getClass(), "empty.json"); } @@ -135,6 +136,6 @@ public class SettingsNavigationActionTest { Page page = new FirstPage(); Page controller = new SecondPage(); - return new Views(new View[] {page, controller}); + return new Views(userSessionRule, new View[] {page, controller}); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/DefaultUserServiceTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/DefaultUserServiceTest.java index b2e0de9de51..c4598b2685c 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/DefaultUserServiceTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/DefaultUserServiceTest.java @@ -21,6 +21,7 @@ package org.sonar.server.user; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; +import java.util.Map; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -33,10 +34,9 @@ import org.sonar.api.user.UserQuery; import org.sonar.core.permission.GlobalPermissions; import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.ForbiddenException; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.index.UserIndex; -import java.util.Map; - import static com.google.common.collect.Lists.newArrayList; import static com.google.common.collect.Maps.newHashMap; import static org.assertj.core.api.Assertions.assertThat; @@ -49,11 +49,13 @@ import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) public class DefaultUserServiceTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); UserIndex userIndex = mock(UserIndex.class); UserFinder finder = mock(UserFinder.class); UserUpdater userUpdater = mock(UserUpdater.class); - DefaultUserService service = new DefaultUserService(userIndex, userUpdater, finder); + DefaultUserService service = new DefaultUserService(userIndex, userUpdater, finder, userSessionRule); @Rule public ExpectedException thrown = ExpectedException.none(); @@ -93,7 +95,7 @@ public class DefaultUserServiceTest { @Test public void self_deactivation_is_not_possible() { try { - MockUserSession.set().setLogin("simon").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("simon").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); service.deactivate("simon"); fail(); } catch (BadRequestException e) { @@ -105,7 +107,7 @@ public class DefaultUserServiceTest { @Test public void user_deactivation_requires_admin_permission() { try { - MockUserSession.set().setLogin("simon").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); + userSessionRule.logon("simon").setGlobalPermissions(GlobalPermissions.QUALITY_PROFILE_ADMIN); service.deactivate("julien"); fail(); } catch (ForbiddenException e) { @@ -115,14 +117,14 @@ public class DefaultUserServiceTest { @Test public void deactivate_user() { - MockUserSession.set().setLogin("simon").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("simon").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); service.deactivate("julien"); verify(userUpdater).deactivateUserByLogin("julien"); } @Test public void fail_to_deactivate_when_blank_login() { - MockUserSession.set().setLogin("simon").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("simon").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); try { service.deactivate(""); fail(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/DoPrivilegedTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/DoPrivilegedTest.java index 5fbdf07f4b4..9ca8fb4c95a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/DoPrivilegedTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/DoPrivilegedTest.java @@ -25,28 +25,30 @@ import static org.assertj.core.api.Assertions.assertThat; public class DoPrivilegedTest { + ThreadLocalUserSession threadLocalUserSession = new ThreadLocalUserSession(); + @Test public void should_allow_everything_in_privileged_block_only() { - DoPrivileged.execute(new DoPrivileged.Task() { + DoPrivileged.execute(new DoPrivileged.Task(threadLocalUserSession) { @Override protected void doPrivileged() { - UserSession userSession = UserSession.get(); + UserSession userSession = threadLocalUserSession.get(); assertThat(userSession.isLoggedIn()).isFalse(); assertThat(userSession.hasGlobalPermission("any permission")).isTrue(); assertThat(userSession.hasProjectPermission("any permission", "any project")).isTrue(); } }); - assertThat(UserSession.get().isLoggedIn()).isFalse(); + assertThat(threadLocalUserSession.isLoggedIn()).isFalse(); } @Test public void should_lose_privileges_on_exception() { try { - DoPrivileged.execute(new DoPrivileged.Task() { + DoPrivileged.execute(new DoPrivileged.Task(threadLocalUserSession) { @Override protected void doPrivileged() { - UserSession userSession = UserSession.get(); + UserSession userSession = threadLocalUserSession.get(); assertThat(userSession.isLoggedIn()).isTrue(); assertThat(userSession.hasGlobalPermission("any permission")).isTrue(); assertThat(userSession.hasProjectPermission("any permission", "any project")).isTrue(); @@ -55,7 +57,7 @@ public class DoPrivilegedTest { } }); } catch(Throwable ignored) { - assertThat(UserSession.get().isLoggedIn()).isFalse(); + assertThat(threadLocalUserSession.isLoggedIn()).isFalse(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/MockUserSession.java b/server/sonar-server/src/test/java/org/sonar/server/user/MockUserSession.java deleted file mode 100644 index 0080d9656cd..00000000000 --- a/server/sonar-server/src/test/java/org/sonar/server/user/MockUserSession.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * SonarQube, open source software quality management tool. - * Copyright (C) 2008-2014 SonarSource - * mailto:contact AT sonarsource DOT com - * - * SonarQube is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * SonarQube is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.user; - -import com.google.common.collect.HashMultimap; -import org.sonar.core.resource.ResourceDao; -import org.sonar.core.user.AuthorizationDao; - -import javax.annotation.Nullable; - -import java.util.Arrays; -import java.util.Collections; -import java.util.Locale; - -import static com.google.common.collect.Lists.newArrayList; -import static org.mockito.Mockito.mock; - -public class MockUserSession extends UserSession { - - private final AuthorizationDao authorizationDao; - - private final ResourceDao resourceDao; - - private MockUserSession() { - globalPermissions = Collections.emptyList(); - projectKeyByPermission = HashMultimap.create(); - projectUuidByPermission = HashMultimap.create(); - authorizationDao = mock(AuthorizationDao.class); - resourceDao = mock(ResourceDao.class); - } - - public static MockUserSession set() { - MockUserSession session = create(); - UserSession.set(session); - return session; - } - - public static MockUserSession create() { - return new MockUserSession(); - } - - public MockUserSession setLocale(@Nullable Locale locale) { - super.setLocale(locale); - return this; - } - - public MockUserSession setLogin(@Nullable String login) { - super.setLogin(login); - return this; - } - - public MockUserSession setName(@Nullable String name) { - super.setName(name); - return this; - } - - public MockUserSession setUserId(@Nullable Integer userId) { - super.setUserId(userId); - return this; - } - - public MockUserSession setUserGroups(@Nullable String... userGroups) { - super.setUserGroups(userGroups); - return this; - } - - public MockUserSession setGlobalPermissions(String... globalPermissions) { - this.globalPermissions = Arrays.asList(globalPermissions); - return this; - } - - /** - * Deprecated, please use {@link #addProjectUuidPermissions} - */ - @Deprecated - public MockUserSession addProjectPermissions(String projectPermission, String... projectKeys) { - this.projectPermissions.add(projectPermission); - this.projectKeyByPermission.putAll(projectPermission, newArrayList(projectKeys)); - return this; - } - - public MockUserSession addProjectUuidPermissions(String projectPermission, String... projectUuids) { - this.projectPermissions.add(projectPermission); - this.projectUuidByPermission.putAll(projectPermission, newArrayList(projectUuids)); - return this; - } - - /** - * Deprecated, please use {@link #addComponentUuidPermission} - */ - @Deprecated - public MockUserSession addComponentPermission(String projectPermission, String projectKey, String componentKey) { - this.projectKeyByComponentKey.put(componentKey, projectKey); - addProjectPermissions(projectPermission, projectKey); - return this; - } - - public MockUserSession addComponentUuidPermission(String projectPermission, String projectUuid, String componentUuid) { - this.projectUuidByComponentUuid.put(componentUuid, projectUuid); - addProjectUuidPermissions(projectPermission, projectUuid); - return this; - } - - @Override - AuthorizationDao authorizationDao() { - return authorizationDao; - } - - @Override - ResourceDao resourceDao() { - return resourceDao; - } -} diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/RubyUserSessionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/RubyUserSessionTest.java index a435689aa07..80b6b61e735 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/RubyUserSessionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/RubyUserSessionTest.java @@ -19,19 +19,34 @@ */ package org.sonar.server.user; -import org.junit.Test; - import java.util.Locale; +import org.junit.Before; +import org.junit.Test; +import org.sonar.core.platform.ComponentContainer; +import org.sonar.server.platform.Platform; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class RubyUserSessionTest { + Platform platform = mock(Platform.class); + ComponentContainer componentContainer = mock(ComponentContainer.class); + ThreadLocalUserSession threadLocalUserSession = new ThreadLocalUserSession(); + RubyUserSession underTest = new RubyUserSession(platform); + + @Before + public void setUp() throws Exception { + when(platform.getContainer()).thenReturn(componentContainer); + when(componentContainer.getComponentByType(ThreadLocalUserSession.class)).thenReturn(threadLocalUserSession); + } + @Test public void should_set_session() { - RubyUserSession.setSession(123, "karadoc", "Karadoc", newArrayList("sonar-users"), "fr"); + underTest.setSessionImpl(123, "karadoc", "Karadoc", newArrayList("sonar-users"), "fr"); - UserSession session = UserSession.get(); + UserSession session = threadLocalUserSession.get(); assertThat(session).isNotNull(); assertThat(session.login()).isEqualTo("karadoc"); @@ -44,9 +59,9 @@ public class RubyUserSessionTest { @Test public void should_set_anonymous_session() { - RubyUserSession.setSession(null, null, null, null, "fr"); + underTest.setSessionImpl(null, null, null, null, "fr"); - UserSession session = UserSession.get(); + UserSession session = threadLocalUserSession.get(); assertThat(session).isNotNull(); assertThat(session.login()).isNull(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/UserSessionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ServerUserSessionTest.java similarity index 62% rename from server/sonar-server/src/test/java/org/sonar/server/user/UserSessionTest.java rename to server/sonar-server/src/test/java/org/sonar/server/user/ServerUserSessionTest.java index ec163751110..d9c6ba1cfff 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/UserSessionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ServerUserSessionTest.java @@ -19,8 +19,8 @@ */ package org.sonar.server.user; +import java.util.Arrays; import org.junit.Test; -import org.junit.rules.ExpectedException; import org.sonar.api.web.UserRole; import org.sonar.core.component.ComponentDto; import org.sonar.core.permission.GlobalPermissions; @@ -30,57 +30,25 @@ import org.sonar.core.user.AuthorizationDao; import org.sonar.server.component.ComponentTesting; import org.sonar.server.exceptions.ForbiddenException; -import javax.annotation.Nullable; -import java.util.Arrays; -import java.util.Locale; - import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class UserSessionTest { - - @org.junit.Rule - public ExpectedException thrown = ExpectedException.none(); - - @Test - public void getSession_get_anonymous_by_default() { - UserSession.remove(); - - UserSession session = UserSession.get(); - - assertThat(session).isNotNull(); - assertThat(session.login()).isNull(); - assertThat(session.userId()).isNull(); - assertThat(session.isLoggedIn()).isFalse(); - // default locale - assertThat(session.locale()).isEqualTo(Locale.ENGLISH); - } - - @Test - public void get_session() { - UserSession.set(new UserSession().setUserId(123).setLogin("karadoc").setLocale(Locale.FRENCH)); - - UserSession session = UserSession.get(); - assertThat(session).isNotNull(); - assertThat(session.userId()).isEqualTo(123); - assertThat(session.login()).isEqualTo("karadoc"); - assertThat(session.isLoggedIn()).isTrue(); - assertThat(session.locale()).isEqualTo(Locale.FRENCH); - } +public class ServerUserSessionTest { + AuthorizationDao authorizationDao = mock(AuthorizationDao.class); + ResourceDao resourceDao = mock(ResourceDao.class); @Test public void login_should_not_be_empty() { - UserSession session = new UserSession().setLogin(""); + UserSession session = newServerUserSession().setLogin(""); assertThat(session.login()).isNull(); assertThat(session.isLoggedIn()).isFalse(); } @Test public void has_global_permission() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao); + UserSession session = newServerUserSession().setLogin("marius"); when(authorizationDao.selectGlobalPermissions("marius")).thenReturn(Arrays.asList("profileadmin", "admin")); @@ -91,8 +59,7 @@ public class UserSessionTest { @Test public void check_global_Permission_ok() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao); + UserSession session = newServerUserSession().setLogin("marius"); when(authorizationDao.selectGlobalPermissions("marius")).thenReturn(Arrays.asList("profileadmin", "admin")); @@ -101,8 +68,7 @@ public class UserSessionTest { @Test(expected = ForbiddenException.class) public void check_global_Permission_ko() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao); + UserSession session = newServerUserSession().setLogin("marius"); when(authorizationDao.selectGlobalPermissions("marius")).thenReturn(Arrays.asList("profileadmin", "admin")); @@ -111,8 +77,7 @@ public class UserSessionTest { @Test public void has_project_permission() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); when(authorizationDao.selectAuthorizedRootProjectsKeys(1, UserRole.USER)).thenReturn(newArrayList("com.foo:Bar")); assertThat(session.hasProjectPermission(UserRole.USER, "com.foo:Bar")).isTrue(); @@ -122,8 +87,7 @@ public class UserSessionTest { @Test public void has_project_permission_by_uuid() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); when(authorizationDao.selectAuthorizedRootProjectsUuids(1, UserRole.USER)).thenReturn(newArrayList("ABCD")); assertThat(session.hasProjectPermissionByUuid(UserRole.USER, "ABCD")).isTrue(); @@ -133,8 +97,7 @@ public class UserSessionTest { @Test public void check_project_permission_ok() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); when(authorizationDao.selectAuthorizedRootProjectsKeys(1, UserRole.USER)).thenReturn(newArrayList("com.foo:Bar")); session.checkProjectPermission(UserRole.USER, "com.foo:Bar"); @@ -142,8 +105,7 @@ public class UserSessionTest { @Test(expected = ForbiddenException.class) public void check_project_permission_ko() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); when(authorizationDao.selectAuthorizedRootProjectsKeys(1, UserRole.USER)).thenReturn(newArrayList("com.foo:Bar2")); session.checkProjectPermission(UserRole.USER, "com.foo:Bar"); @@ -151,8 +113,7 @@ public class UserSessionTest { @Test public void check_project_uuid_permission_ok() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); ComponentDto project = ComponentTesting.newProjectDto(); when(authorizationDao.selectAuthorizedRootProjectsUuids(1, UserRole.USER)).thenReturn(newArrayList(project.uuid())); @@ -162,8 +123,7 @@ public class UserSessionTest { @Test(expected = ForbiddenException.class) public void check_project_uuid_permission_ko() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); ComponentDto project = ComponentTesting.newProjectDto(); when(authorizationDao.selectAuthorizedRootProjectsUuids(1, UserRole.USER)).thenReturn(newArrayList(project.uuid())); @@ -173,9 +133,7 @@ public class UserSessionTest { @Test public void has_component_permission() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - ResourceDao resourceDao = mock(ResourceDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao, resourceDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); String componentKey = "com.foo:Bar:BarFile.xoo"; when(resourceDao.getRootProjectByComponentKey(componentKey)).thenReturn(new ResourceDto().setKey(componentKey)); @@ -188,9 +146,7 @@ public class UserSessionTest { @Test public void check_component_key_permission_ok() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - ResourceDao resourceDao = mock(ResourceDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao, resourceDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); when(resourceDao.getRootProjectByComponentKey("com.foo:Bar:BarFile.xoo")).thenReturn(new ResourceDto().setKey("com.foo:Bar")); when(authorizationDao.selectAuthorizedRootProjectsKeys(1, UserRole.USER)).thenReturn(newArrayList("com.foo:Bar")); @@ -200,9 +156,7 @@ public class UserSessionTest { @Test(expected = ForbiddenException.class) public void check_component_key_permission_ko() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - ResourceDao resourceDao = mock(ResourceDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao, resourceDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); when(resourceDao.getRootProjectByComponentKey("com.foo:Bar:BarFile.xoo")).thenReturn(new ResourceDto().setKey("com.foo:Bar2")); when(authorizationDao.selectAuthorizedRootProjectsKeys(1, UserRole.USER)).thenReturn(newArrayList("com.foo:Bar")); @@ -212,9 +166,7 @@ public class UserSessionTest { @Test public void check_component_uuid_permission_ok() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - ResourceDao resourceDao = mock(ResourceDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao,resourceDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); ComponentDto project = ComponentTesting.newProjectDto(); ComponentDto file = ComponentTesting.newFileDto(project, "file-uuid"); @@ -226,9 +178,7 @@ public class UserSessionTest { @Test(expected = ForbiddenException.class) public void check_component_uuid_permission_ko() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - ResourceDao resourceDao = mock(ResourceDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao,resourceDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); ComponentDto project = ComponentTesting.newProjectDto(); ComponentDto file = ComponentTesting.newFileDto(project, "file-uuid"); @@ -240,9 +190,7 @@ public class UserSessionTest { @Test(expected = ForbiddenException.class) public void check_component_key_permission_when_project_not_found() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - ResourceDao resourceDao = mock(ResourceDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao, resourceDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); when(resourceDao.getRootProjectByComponentKey("com.foo:Bar:BarFile.xoo")).thenReturn(null); @@ -251,9 +199,7 @@ public class UserSessionTest { @Test(expected = ForbiddenException.class) public void check_component_dto_permission_ko() { - AuthorizationDao authorizationDao = mock(AuthorizationDao.class); - ResourceDao resourceDao = mock(ResourceDao.class); - UserSession session = new SpyUserSession("marius", authorizationDao, resourceDao).setUserId(1); + UserSession session = newServerUserSession().setLogin("marius").setUserId(1); ComponentDto project = ComponentTesting.newProjectDto(); when(authorizationDao.selectAuthorizedRootProjectsKeys(1, UserRole.USER)).thenReturn(newArrayList(project.uuid())); @@ -261,29 +207,8 @@ public class UserSessionTest { session.checkComponentPermission(UserRole.USER, "another"); } - static class SpyUserSession extends UserSession { - private AuthorizationDao authorizationDao; - private ResourceDao resourceDao; - - SpyUserSession(String login, AuthorizationDao authorizationDao) { - this(login, authorizationDao, null); - } - - SpyUserSession(String login, AuthorizationDao authorizationDao, @Nullable ResourceDao resourceDao) { - this.authorizationDao = authorizationDao; - this.resourceDao = resourceDao; - setLogin(login); - } - - @Override - AuthorizationDao authorizationDao() { - return authorizationDao; - } - - @Override - ResourceDao resourceDao() { - return resourceDao; - } - + private ServerUserSession newServerUserSession() { + return new ServerUserSession(authorizationDao, resourceDao); } + } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ThreadLocalUserSessionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ThreadLocalUserSessionTest.java new file mode 100644 index 00000000000..69de8cc00bd --- /dev/null +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ThreadLocalUserSessionTest.java @@ -0,0 +1,65 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.user; + +import java.util.Locale; +import org.junit.Before; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.sonar.server.tester.MockUserSession; + +import static org.assertj.core.api.Assertions.assertThat; + +public class ThreadLocalUserSessionTest { + + ThreadLocalUserSession threadLocalUserSession = new ThreadLocalUserSession(); + @org.junit.Rule + public ExpectedException thrown = ExpectedException.none(); + + @Before + public void setUp() throws Exception { + threadLocalUserSession.remove(); + } + + @Test + public void getSession_get_anonymous_by_default() throws Exception { + UserSession session = threadLocalUserSession.get(); + + assertThat(session).isNotNull(); + assertThat(session.login()).isNull(); + assertThat(session.userId()).isNull(); + assertThat(session.isLoggedIn()).isFalse(); + // default locale + assertThat(session.locale()).isEqualTo(Locale.ENGLISH); + } + + @Test + public void get_session() throws Exception { + threadLocalUserSession.set(new MockUserSession("karadoc").setUserId(123).setLocale(Locale.FRENCH)); + + UserSession session = threadLocalUserSession.get(); + assertThat(session).isNotNull(); + assertThat(session.userId()).isEqualTo(123); + assertThat(session.login()).isEqualTo("karadoc"); + assertThat(session.isLoggedIn()).isTrue(); + assertThat(session.locale()).isEqualTo(Locale.FRENCH); + } + +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/UserSessionFilterTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/UserSessionFilterTest.java index 0e8e466a575..2b2f7c545ea 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/UserSessionFilterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/UserSessionFilterTest.java @@ -19,44 +19,60 @@ */ package org.sonar.server.user; -import org.junit.Before; -import org.junit.Test; - +import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; +import javax.servlet.ServletException; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.sonar.core.platform.ComponentContainer; +import org.sonar.server.platform.Platform; +import org.sonar.server.tester.MockUserSession; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; public class UserSessionFilterTest { + private ThreadLocalUserSession threadLocalUserSession = new ThreadLocalUserSession(); + private Platform platform = mock(Platform.class); + private ComponentContainer componentContainer = mock(ComponentContainer.class); @Before public void setUp() { + when(platform.getContainer()).thenReturn(componentContainer); + when(componentContainer.getComponentByType(ThreadLocalUserSession.class)).thenReturn(threadLocalUserSession); // for test isolation - UserSession.remove(); + threadLocalUserSession.remove(); + } + + @After + public void tearDown() throws Exception { + threadLocalUserSession.remove(); } @Test - public void should_cleanup_user_session_after_request_handling() throws Exception { + public void should_cleanup_user_session_after_request_handling() throws IOException, ServletException { HttpServletRequest httpRequest = mock(HttpServletRequest.class); ServletResponse httpResponse = mock(ServletResponse.class); FilterChain chain = mock(FilterChain.class); - MockUserSession.set().setUserId(123).setLogin("karadoc"); - assertThat(UserSession.hasSession()).isTrue(); - UserSessionFilter filter = new UserSessionFilter(); + threadLocalUserSession.set(new MockUserSession("karadoc").setUserId(123)); + assertThat(threadLocalUserSession.hasSession()).isTrue(); + UserSessionFilter filter = new UserSessionFilter(platform); filter.doFilter(httpRequest, httpResponse, chain); verify(chain).doFilter(httpRequest, httpResponse); - assertThat(UserSession.hasSession()).isFalse(); + assertThat(threadLocalUserSession.hasSession()).isFalse(); } @Test - public void just_for_fun_and_coverage() throws Exception { - UserSessionFilter filter = new UserSessionFilter(); + public void just_for_fun_and_coverage() throws ServletException { + UserSessionFilter filter = new UserSessionFilter(platform); filter.init(mock(FilterConfig.class)); filter.destroy(); // do not fail diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/ChangePasswordActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/ChangePasswordActionTest.java index 885117eca6f..bf11bb03311 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/ChangePasswordActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/ChangePasswordActionTest.java @@ -23,6 +23,7 @@ package org.sonar.server.user.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.api.server.ws.WebService; @@ -36,7 +37,7 @@ import org.sonar.server.db.DbClient; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.NewUserNotifier; import org.sonar.server.user.UserUpdater; import org.sonar.server.user.db.GroupDao; @@ -60,6 +61,8 @@ public class ChangePasswordActionTest { @ClassRule public static final EsTester esTester = new EsTester().addDefinitions(new UserIndexDefinition(settings)); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone().logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); WebService.Controller controller; @@ -89,10 +92,8 @@ public class ChangePasswordActionTest { userIndexer = (UserIndexer) new UserIndexer(dbClient, esTester.client()).setEnabled(true); index = new UserIndex(esTester.client()); - tester = new WsTester(new UsersWs(new ChangePasswordAction(new UserUpdater(mock(NewUserNotifier.class), settings, dbClient, userIndexer, system2)))); + tester = new WsTester(new UsersWs(new ChangePasswordAction(new UserUpdater(mock(NewUserNotifier.class), settings, dbClient, userIndexer, system2), userSessionRule))); controller = tester.controller("api/users"); - - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); } @After @@ -104,7 +105,7 @@ public class ChangePasswordActionTest { public void fail_on_missing_permission() throws Exception { createUser(); - MockUserSession.set().setLogin("polop"); + userSessionRule.logon("polop"); tester.newPostRequest("api/users", "change_password") .setParam("login", "john") .execute(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java index db4e2b27821..3ef6f083c88 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/CreateActionTest.java @@ -23,6 +23,7 @@ package org.sonar.server.user.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -39,7 +40,7 @@ import org.sonar.core.user.UserDto; import org.sonar.server.db.DbClient; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.ForbiddenException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.NewUserNotifier; import org.sonar.server.user.UserUpdater; import org.sonar.server.user.db.GroupDao; @@ -67,6 +68,8 @@ public class CreateActionTest { @ClassRule public static final EsTester esTester = new EsTester().addDefinitions(new UserIndexDefinition(settings)); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WebService.Controller controller; @@ -101,7 +104,7 @@ public class CreateActionTest { index = new UserIndex(esTester.client()); tester = new WsTester(new UsersWs(new CreateAction(index, new UserUpdater(mock(NewUserNotifier.class), settings, dbClient, userIndexer, system2), - i18n))); + i18n, userSessionRule))); controller = tester.controller("api/users"); } @@ -113,7 +116,7 @@ public class CreateActionTest { @Test public void create_user() throws Exception { - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); tester.newPostRequest("api/users", "create") .setParam("login", "john") @@ -133,7 +136,7 @@ public class CreateActionTest { @Test public void reactivate_user() throws Exception { - MockUserSession.set().setLogin("admin").setLocale(Locale.FRENCH).setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setLocale(Locale.FRENCH).setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); dbClient.userDao().insert(session, new UserDto() .setEmail("john@email.com") @@ -160,7 +163,7 @@ public class CreateActionTest { @Test(expected = ForbiddenException.class) public void fail_on_missing_permission() throws Exception { - MockUserSession.set().setLogin("not_admin"); + userSessionRule.logon("not_admin"); tester.newPostRequest("api/users", "create") .setParam("login", "john") diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/CurrentUserActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/CurrentUserActionTest.java index 82b91f197ad..2a6d6502896 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/CurrentUserActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/CurrentUserActionTest.java @@ -20,29 +20,31 @@ package org.sonar.server.user.ws; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.sonar.core.permission.GlobalPermissions; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.ws.WsTester; public class CurrentUserActionTest { + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); private WsTester tester; @Before public void before() { - tester = new WsTester(new UsersWs(new CurrentUserAction())); + tester = new WsTester(new UsersWs(new CurrentUserAction(userSessionRule))); } @Test public void anonymous() throws Exception { - MockUserSession.set(); tester.newGetRequest("api/users", "current").execute().assertJson(getClass(), "anonymous.json"); } @Test public void authenticated() throws Exception { - MockUserSession.set().setLogin("obiwan.kenobi").setName("Obiwan Kenobi") + userSessionRule.logon("obiwan.kenobi").setName("Obiwan Kenobi") .setGlobalPermissions(GlobalPermissions.ALL.toArray(new String[0])); tester.newGetRequest("api/users", "current").execute().assertJson(getClass(), "authenticated.json"); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java index d7edbbc6b78..005ec57c260 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/DeactivateActionTest.java @@ -23,6 +23,7 @@ package org.sonar.server.user.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -39,7 +40,7 @@ import org.sonar.server.db.DbClient; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.ForbiddenException; import org.sonar.server.exceptions.NotFoundException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.NewUserNotifier; import org.sonar.server.user.UserUpdater; import org.sonar.server.user.db.UserDao; @@ -59,9 +60,10 @@ public class DeactivateActionTest { @ClassRule public static final DbTester dbTester = new DbTester(); - @ClassRule public static final EsTester esTester = new EsTester().addDefinitions(new UserIndexDefinition(settings)); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WebService.Controller controller; @@ -92,7 +94,7 @@ public class DeactivateActionTest { userIndexer = (UserIndexer) new UserIndexer(dbClient, esTester.client()).setEnabled(true); index = new UserIndex(esTester.client()); tester = new WsTester(new UsersWs(new DeactivateAction(index, - new UserUpdater(mock(NewUserNotifier.class), settings, dbClient, userIndexer, system2)))); + new UserUpdater(mock(NewUserNotifier.class), settings, dbClient, userIndexer, system2), userSessionRule))); controller = tester.controller("api/users"); } @@ -106,7 +108,7 @@ public class DeactivateActionTest { public void deactivate_user() throws Exception { createUser(); - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); tester.newPostRequest("api/users", "deactivate") .setParam("login", "john") .execute() @@ -120,14 +122,14 @@ public class DeactivateActionTest { public void fail_on_missing_permission() throws Exception { createUser(); - MockUserSession.set().setLogin("not_admin"); + userSessionRule.logon("not_admin"); tester.newPostRequest("api/users", "deactivate") .setParam("login", "john").execute(); } @Test(expected = NotFoundException.class) public void fail_on_unknown_user() throws Exception { - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); tester.newPostRequest("api/users", "deactivate") .setParam("login", "john").execute(); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java index a5e893e4a1f..42c31591d83 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UpdateActionTest.java @@ -23,6 +23,7 @@ package org.sonar.server.user.ws; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.config.Settings; import org.sonar.api.server.ws.WebService; @@ -35,7 +36,7 @@ import org.sonar.core.user.UserDto; import org.sonar.server.db.DbClient; import org.sonar.server.es.EsTester; import org.sonar.server.exceptions.ForbiddenException; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.NewUserNotifier; import org.sonar.server.user.UserUpdater; import org.sonar.server.user.db.GroupDao; @@ -55,9 +56,11 @@ public class UpdateActionTest { @ClassRule public static final DbTester dbTester = new DbTester(); - @ClassRule public static final EsTester esTester = new EsTester().addDefinitions(new UserIndexDefinition(settings)); + @Rule + public final UserSessionRule userSessionRule = UserSessionRule.standalone().logon("admin") + .setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); WebService.Controller controller; @@ -88,10 +91,8 @@ public class UpdateActionTest { userIndexer = (UserIndexer) new UserIndexer(dbClient, esTester.client()).setEnabled(true); index = new UserIndex(esTester.client()); tester = new WsTester(new UsersWs(new UpdateAction(index, - new UserUpdater(mock(NewUserNotifier.class), settings, dbClient, userIndexer, system2)))); + new UserUpdater(mock(NewUserNotifier.class), settings, dbClient, userIndexer, system2), userSessionRule))); controller = tester.controller("api/users"); - - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); } @After @@ -103,7 +104,7 @@ public class UpdateActionTest { public void fail_on_missing_permission() throws Exception { createUser(); - MockUserSession.set().setLogin("polop"); + userSessionRule.logon("polop"); tester.newPostRequest("api/users", "update") .setParam("login", "john") .execute(); diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UsersWsTest.java b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UsersWsTest.java index 78270a6904b..62dd223058e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/ws/UsersWsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/user/ws/UsersWsTest.java @@ -21,10 +21,12 @@ package org.sonar.server.user.ws; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.i18n.I18n; import org.sonar.api.server.ws.RailsHandler; import org.sonar.api.server.ws.WebService; +import org.sonar.server.tester.UserSessionRule; import org.sonar.server.user.UserUpdater; import org.sonar.server.user.index.UserIndex; import org.sonar.server.ws.WsTester; @@ -33,17 +35,18 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; public class UsersWsTest { - + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); WebService.Controller controller; @Before public void setUp() { WsTester tester = new WsTester(new UsersWs( - new CreateAction(mock(UserIndex.class), mock(UserUpdater.class), mock(I18n.class)), - new UpdateAction(mock(UserIndex.class), mock(UserUpdater.class)), - new CurrentUserAction(), - new DeactivateAction(mock(UserIndex.class), mock(UserUpdater.class)), - new ChangePasswordAction(mock(UserUpdater.class)))); + new CreateAction(mock(UserIndex.class), mock(UserUpdater.class), mock(I18n.class), userSessionRule), + new UpdateAction(mock(UserIndex.class), mock(UserUpdater.class), userSessionRule), + new CurrentUserAction(userSessionRule), + new DeactivateAction(mock(UserIndex.class), mock(UserUpdater.class), userSessionRule), + new ChangePasswordAction(mock(UserUpdater.class), userSessionRule))); controller = tester.controller("api/users"); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/view/index/ViewIndexerMediumTest.java b/server/sonar-server/src/test/java/org/sonar/server/view/index/ViewIndexerMediumTest.java index 2fa57a53d62..0493cc734ef 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/view/index/ViewIndexerMediumTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/view/index/ViewIndexerMediumTest.java @@ -23,6 +23,7 @@ package org.sonar.server.view.index; import org.junit.After; import org.junit.Before; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.security.DefaultGroups; import org.sonar.api.web.UserRole; @@ -47,7 +48,7 @@ import org.sonar.server.permission.PermissionChange; import org.sonar.server.rule.RuleTesting; import org.sonar.server.rule.db.RuleDao; import org.sonar.server.tester.ServerTester; -import org.sonar.server.user.MockUserSession; +import org.sonar.server.tester.UserSessionRule; import static com.google.common.collect.Lists.newArrayList; import static org.assertj.core.api.Assertions.assertThat; @@ -62,6 +63,8 @@ public class ViewIndexerMediumTest { @ClassRule public static ServerTester tester = new ServerTester(); + @Rule + public UserSessionRule userSessionRule = UserSessionRule.forServerTester(tester); DbSession dbSession; @@ -99,7 +102,7 @@ public class ViewIndexerMediumTest { indexer.index(viewUuid); // Execute issue query on view -> 1 issue on view - SearchResult docs = tester.get(IssueIndex.class).search(IssueQuery.builder().viewUuids(newArrayList(viewUuid)).build(), + SearchResult docs = tester.get(IssueIndex.class).search(IssueQuery.builder(userSessionRule).viewUuids(newArrayList(viewUuid)).build(), new SearchOptions()); assertThat(docs.getDocs()).hasSize(1); @@ -111,7 +114,7 @@ public class ViewIndexerMediumTest { indexer.index(viewUuid); // Execute issue query on view -> issue of project2 are well taken into account : the cache has been cleared - assertThat(tester.get(IssueIndex.class).search(IssueQuery.builder().viewUuids(newArrayList(viewUuid)).build(), new SearchOptions()).getDocs()).hasSize(2); + assertThat(tester.get(IssueIndex.class).search(IssueQuery.builder(userSessionRule).viewUuids(newArrayList(viewUuid)).build(), new SearchOptions()).getDocs()).hasSize(2); } private ComponentDto addProjectWithIssue(RuleDto rule) { @@ -131,9 +134,8 @@ public class ViewIndexerMediumTest { private void setDefaultProjectPermission(ComponentDto project) { // project can be seen by anyone and by code viewer - MockUserSession.set().setLogin("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); + userSessionRule.logon("admin").setGlobalPermissions(GlobalPermissions.SYSTEM_ADMIN); tester.get(InternalPermissionService.class).addPermission(new PermissionChange().setComponentKey(project.getKey()).setGroup(DefaultGroups.ANYONE).setPermission(UserRole.USER)); - MockUserSession.set(); } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java b/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java index 3441a74bf73..19ea3af700a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ws/WebServiceEngineTest.java @@ -20,9 +20,15 @@ package org.sonar.server.ws; import com.google.common.collect.Maps; +import java.io.IOException; +import java.io.InputStream; +import java.util.Locale; +import java.util.Map; +import javax.annotation.Nullable; import org.apache.commons.io.IOUtils; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.sonar.api.i18n.I18n; import org.sonar.api.server.ws.Request; @@ -34,14 +40,7 @@ import org.sonar.server.exceptions.BadRequestException; import org.sonar.server.exceptions.Errors; import org.sonar.server.exceptions.Message; import org.sonar.server.plugins.MimeTypes; -import org.sonar.server.user.MockUserSession; - -import javax.annotation.Nullable; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Locale; -import java.util.Map; +import org.sonar.server.tester.UserSessionRule; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -93,8 +92,10 @@ public class WebServiceEngineTest { } + @Rule + public UserSessionRule userSessionRule = UserSessionRule.standalone(); I18n i18n = mock(I18n.class); - WebServiceEngine engine = new WebServiceEngine(new WebService[] {new SystemWebService()}, i18n); + WebServiceEngine engine = new WebServiceEngine(new WebService[] {new SystemWebService()}, i18n, userSessionRule); @Before public void start() { @@ -239,7 +240,7 @@ public class WebServiceEngineTest { @Test public void bad_request_with_i18n_message() { - MockUserSession.set().setLocale(Locale.ENGLISH); + userSessionRule.setLocale(Locale.ENGLISH); ValidatingRequest request = new SimpleRequest("GET").setParam("count", "3"); ServletResponse response = new ServletResponse(); when(i18n.message(Locale.ENGLISH, "bad.request.reason", "bad.request.reason", 0)).thenReturn("reason #0"); @@ -271,7 +272,7 @@ public class WebServiceEngineTest { @Test public void bad_request_with_multiple_i18n_messages() { - MockUserSession.set().setLocale(Locale.ENGLISH); + userSessionRule.setLocale(Locale.ENGLISH); ValidatingRequest request = new SimpleRequest("GET").setParam("count", "3"); ServletResponse response = new ServletResponse(); -- 2.39.5