aboutsummaryrefslogtreecommitdiffstats
path: root/it/it-tests
diff options
context:
space:
mode:
authorJulien Lancelot <julien.lancelot@sonarsource.com>2017-04-10 09:49:29 +0200
committerJulien Lancelot <julien.lancelot@sonarsource.com>2017-04-13 11:51:55 +0200
commite94c7b5f322a16ecf8c278114e119d9913b6505c (patch)
treefe48f7f5ba9313d3519aaa4bfc037b03eebaf434 /it/it-tests
parent5967fbf0de2e02ab48e4c57bd33bddb888b5cf51 (diff)
downloadsonarqube-e94c7b5f322a16ecf8c278114e119d9913b6505c.tar.gz
sonarqube-e94c7b5f322a16ecf8c278114e119d9913b6505c.zip
Move all organization ITs to Category 6
Diffstat (limited to 'it/it-tests')
-rw-r--r--it/it-tests/src/test/java/it/Category3Suite.java8
-rw-r--r--it/it-tests/src/test/java/it/Category5Suite.java6
-rw-r--r--it/it-tests/src/test/java/it/Category6Suite.java61
-rw-r--r--it/it-tests/src/test/java/it/organization/IssueAssignTest.java72
-rw-r--r--it/it-tests/src/test/java/it/organization/OrganizationMembershipTest.java31
-rw-r--r--it/it-tests/src/test/java/it/organization/OrganizationQualityProfilesPageTest.java27
-rw-r--r--it/it-tests/src/test/java/it/organization/OrganizationTest.java120
-rw-r--r--it/it-tests/src/test/java/it/organization/RootTest.java32
-rw-r--r--it/it-tests/src/test/java/util/ItUtils.java14
9 files changed, 223 insertions, 148 deletions
diff --git a/it/it-tests/src/test/java/it/Category3Suite.java b/it/it-tests/src/test/java/it/Category3Suite.java
index 24f7baf5ec8..bad425d3544 100644
--- a/it/it-tests/src/test/java/it/Category3Suite.java
+++ b/it/it-tests/src/test/java/it/Category3Suite.java
@@ -34,9 +34,6 @@ import it.analysis.ScannerTest;
import it.analysis.SettingsEncryptionTest;
import it.analysis.TempFolderTest;
import it.measure.DecimalScaleMetricTest;
-import it.organization.IssueAssignTest;
-import it.organization.OrganizationTest;
-import it.organization.RootTest;
import it.plugins.VersionPluginTest;
import it.webhook.WebhooksTest;
import org.junit.ClassRule;
@@ -65,11 +62,6 @@ import static util.ItUtils.xooPlugin;
FavoriteTest.class,
// measures
DecimalScaleMetricTest.class,
- // organization
- OrganizationTest.class,
- IssueAssignTest.class,
- // root users
- RootTest.class,
WebhooksTest.class
})
public class Category3Suite {
diff --git a/it/it-tests/src/test/java/it/Category5Suite.java b/it/it-tests/src/test/java/it/Category5Suite.java
index 5bd6f18cc49..fbe817e6588 100644
--- a/it/it-tests/src/test/java/it/Category5Suite.java
+++ b/it/it-tests/src/test/java/it/Category5Suite.java
@@ -19,8 +19,7 @@
*/
package it;
-import it.organization.OrganizationMembershipTest;
-import it.organization.OrganizationQualityProfilesPageTest;
+import it.organization.RootTest;
import it.serverSystem.ClusterTest;
import it.serverSystem.RestartTest;
import it.serverSystem.ServerSystemRestartingOrchestrator;
@@ -48,8 +47,7 @@ import org.junit.runners.Suite;
UpdateCenterTest.class,
RealmAuthenticationTest.class,
SsoAuthenticationTest.class,
- OrganizationMembershipTest.class,
- OrganizationQualityProfilesPageTest.class
+ RootTest.class
})
public class Category5Suite {
diff --git a/it/it-tests/src/test/java/it/Category6Suite.java b/it/it-tests/src/test/java/it/Category6Suite.java
new file mode 100644
index 00000000000..adfbca5970d
--- /dev/null
+++ b/it/it-tests/src/test/java/it/Category6Suite.java
@@ -0,0 +1,61 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2017 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program 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.
+ *
+ * This program 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 it;
+
+import com.sonar.orchestrator.Orchestrator;
+import it.organization.IssueAssignTest;
+import it.organization.OrganizationMembershipTest;
+import it.organization.OrganizationQualityProfilesPageTest;
+import it.organization.OrganizationTest;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+import static java.util.Collections.emptyMap;
+import static util.ItUtils.xooPlugin;
+
+/**
+ * This category is used only when organizations feature is activated
+ */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+ // organization
+ OrganizationTest.class,
+ OrganizationMembershipTest.class,
+ IssueAssignTest.class,
+ OrganizationQualityProfilesPageTest.class
+})
+public class Category6Suite {
+
+ @ClassRule
+ public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+ .addPlugin(xooPlugin())
+ .build();
+
+ @BeforeClass
+ public static void enableOrganizations() {
+ enableOrganizationsSupport();
+ }
+
+ public static void enableOrganizationsSupport() {
+ ORCHESTRATOR.getServer().post("api/organizations/enable_support", emptyMap());
+ }
+}
diff --git a/it/it-tests/src/test/java/it/organization/IssueAssignTest.java b/it/it-tests/src/test/java/it/organization/IssueAssignTest.java
index 6b53b7c1fdd..dd275e2e7a5 100644
--- a/it/it-tests/src/test/java/it/organization/IssueAssignTest.java
+++ b/it/it-tests/src/test/java/it/organization/IssueAssignTest.java
@@ -21,11 +21,12 @@
package it.organization;
import com.sonar.orchestrator.Orchestrator;
-import it.Category3Suite;
+import it.Category6Suite;
import java.util.List;
import java.util.stream.Collectors;
import org.junit.After;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
@@ -42,37 +43,27 @@ import org.sonarqube.ws.client.project.CreateRequest;
import org.sonarqube.ws.client.qualityprofile.AddProjectRequest;
import pageobjects.Navigation;
import pageobjects.issues.IssuesPage;
-import util.ItUtils;
import util.issue.IssueRule;
import util.user.UserRule;
+import static it.Category6Suite.enableOrganizationsSupport;
import static java.lang.String.format;
-import static java.util.Collections.emptyMap;
import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.deleteOrganizationsIfExists;
import static util.ItUtils.newAdminWsClient;
+import static util.ItUtils.newOrganizationKey;
+import static util.ItUtils.restoreProfile;
import static util.ItUtils.runProjectAnalysis;
import static util.ItUtils.setServerProperty;
public class IssueAssignTest {
- @Test
- public void auto_assign_issues_to_user_if_default_assignee_is_member_of_project_organization() throws Exception {
- userRule.createUser(ASSIGNEE_LOGIN, ASSIGNEE_LOGIN);
- adminClient.organizations().addMember(ORGANIZATION_KEY, ASSIGNEE_LOGIN);
- provisionProject(SAMPLE_PROJECT_KEY, ORGANIZATION_KEY);
- setServerProperty(orchestrator, "sample", "sonar.issues.defaultAssigneeLogin", ASSIGNEE_LOGIN);
-
- analyseProject(SAMPLE_PROJECT_KEY, ORGANIZATION_KEY);
-
- assertThat(issueRule.getRandomIssue().getAssignee()).isEqualTo(ASSIGNEE_LOGIN);
- }
-
+ private final static String ORGANIZATION_KEY = newOrganizationKey();
+ private final static String OTHER_ORGANIZATION_KEY = newOrganizationKey();
private final static String SAMPLE_PROJECT_KEY = "sample";
- private final static String ORGANIZATION_KEY = "organization-key";
- private final static String OTHER_ORGANIZATION_KEY = "other-organization-key";
-
private static final String ASSIGNEE_LOGIN = "bob";
+ private static final String OTHER_LOGIN = "neo";
@Rule
public ExpectedException expectedException = ExpectedException.none();
@@ -81,7 +72,7 @@ public class IssueAssignTest {
public Navigation nav = Navigation.get(orchestrator);
@ClassRule
- public static Orchestrator orchestrator = Category3Suite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = Category6Suite.ORCHESTRATOR;
@ClassRule
public static UserRule userRule = UserRule.from(orchestrator);
@@ -91,21 +82,34 @@ public class IssueAssignTest {
private WsClient adminClient = newAdminWsClient(orchestrator);
+ @BeforeClass
+ public static void enableOrganizations() throws Exception {
+ enableOrganizationsSupport();
+ }
+
@Before
public void setUp() throws Exception {
- orchestrator.resetData();
- userRule.resetUsers();
-
- orchestrator.getServer().post("api/organizations/enable_support", emptyMap());
+ userRule.deactivateUsers(ASSIGNEE_LOGIN, OTHER_LOGIN);
createOrganization(ORGANIZATION_KEY);
- ItUtils.restoreProfile(orchestrator, getClass().getResource("/organization/IssueAssignTest/one-issue-per-file-profile.xml"), ORGANIZATION_KEY);
+ restoreProfile(orchestrator, getClass().getResource("/organization/IssueAssignTest/one-issue-per-file-profile.xml"), ORGANIZATION_KEY);
}
@After
public void tearDown() throws Exception {
- adminClient.organizations().search(org.sonarqube.ws.client.organization.SearchWsRequest.builder().setOrganizations(ORGANIZATION_KEY, OTHER_ORGANIZATION_KEY).build())
- .getOrganizationsList()
- .forEach(organization -> adminClient.organizations().delete(organization.getKey()));
+ userRule.deactivateUsers(ASSIGNEE_LOGIN, OTHER_LOGIN);
+ deleteOrganizationsIfExists(orchestrator, ORGANIZATION_KEY, OTHER_ORGANIZATION_KEY);
+ }
+
+ @Test
+ public void auto_assign_issues_to_user_if_default_assignee_is_member_of_project_organization() throws Exception {
+ userRule.createUser(ASSIGNEE_LOGIN, ASSIGNEE_LOGIN);
+ adminClient.organizations().addMember(ORGANIZATION_KEY, ASSIGNEE_LOGIN);
+ provisionProject(SAMPLE_PROJECT_KEY, ORGANIZATION_KEY);
+ setServerProperty(orchestrator, "sample", "sonar.issues.defaultAssigneeLogin", ASSIGNEE_LOGIN);
+
+ analyseProject(SAMPLE_PROJECT_KEY, ORGANIZATION_KEY);
+
+ assertThat(issueRule.getRandomIssue().getAssignee()).isEqualTo(ASSIGNEE_LOGIN);
}
@Test
@@ -150,7 +154,7 @@ public class IssueAssignTest {
@Test
public void bulk_assign_issues_to_user_being_only_member_of_same_organization_as_project_issue_organization() throws Exception {
createOrganization(OTHER_ORGANIZATION_KEY);
- ItUtils.restoreProfile(orchestrator, getClass().getResource("/organization/IssueAssignTest/one-issue-per-file-profile.xml"), OTHER_ORGANIZATION_KEY);
+ restoreProfile(orchestrator, getClass().getResource("/organization/IssueAssignTest/one-issue-per-file-profile.xml"), OTHER_ORGANIZATION_KEY);
userRule.createUser(ASSIGNEE_LOGIN, ASSIGNEE_LOGIN);
// User is only member of "organization-key", not of "other-organization-key"
adminClient.organizations().addMember(ORGANIZATION_KEY, ASSIGNEE_LOGIN);
@@ -170,12 +174,12 @@ public class IssueAssignTest {
createOrganization(OTHER_ORGANIZATION_KEY);
userRule.createUser(ASSIGNEE_LOGIN, ASSIGNEE_LOGIN);
adminClient.organizations().addMember(ORGANIZATION_KEY, ASSIGNEE_LOGIN);
- userRule.createUser("neo", "pwd");
+ userRule.createUser(OTHER_LOGIN, "pwd");
provisionAndAnalyseProject(SAMPLE_PROJECT_KEY, ORGANIZATION_KEY);
IssuesPage page = nav.logIn().asAdmin().openIssues();
page.getFirstIssue()
.shouldAllowAssign()
- .assigneeSearchResultCount("neo", 0)
+ .assigneeSearchResultCount(OTHER_LOGIN, 0)
.assigneeSearchResultCount(ASSIGNEE_LOGIN, 1);
}
@@ -184,13 +188,13 @@ public class IssueAssignTest {
createOrganization(OTHER_ORGANIZATION_KEY);
userRule.createUser(ASSIGNEE_LOGIN, ASSIGNEE_LOGIN);
adminClient.organizations().addMember(ORGANIZATION_KEY, ASSIGNEE_LOGIN);
- userRule.createUser("neo", "pwd");
+ userRule.createUser(OTHER_LOGIN, "pwd");
provisionAndAnalyseProject(SAMPLE_PROJECT_KEY, ORGANIZATION_KEY);
IssuesPage page = nav.logIn().asAdmin().openComponentIssues(SAMPLE_PROJECT_KEY);
page
.bulkChangeOpen()
.bulkChangeAssigneeSearchCount(ASSIGNEE_LOGIN, 1)
- .bulkChangeAssigneeSearchCount("neo", 0);
+ .bulkChangeAssigneeSearchCount(OTHER_LOGIN, 0);
}
@Test
@@ -198,13 +202,13 @@ public class IssueAssignTest {
createOrganization(OTHER_ORGANIZATION_KEY);
userRule.createUser(ASSIGNEE_LOGIN, ASSIGNEE_LOGIN);
adminClient.organizations().addMember(ORGANIZATION_KEY, ASSIGNEE_LOGIN);
- userRule.createUser("neo", "pwd");
+ userRule.createUser(OTHER_LOGIN, "pwd");
provisionAndAnalyseProject(SAMPLE_PROJECT_KEY, ORGANIZATION_KEY);
IssuesPage page = nav.logIn().asAdmin().openIssues();
page
.bulkChangeOpen()
.bulkChangeAssigneeSearchCount(ASSIGNEE_LOGIN, 1)
- .bulkChangeAssigneeSearchCount("neo", 1);
+ .bulkChangeAssigneeSearchCount(OTHER_LOGIN, 1);
}
private void createOrganization(String organizationKey) {
diff --git a/it/it-tests/src/test/java/it/organization/OrganizationMembershipTest.java b/it/it-tests/src/test/java/it/organization/OrganizationMembershipTest.java
index 7f91c3c686f..cc4a7b56cc2 100644
--- a/it/it-tests/src/test/java/it/organization/OrganizationMembershipTest.java
+++ b/it/it-tests/src/test/java/it/organization/OrganizationMembershipTest.java
@@ -21,6 +21,8 @@
package it.organization;
import com.sonar.orchestrator.Orchestrator;
+import it.Category6Suite;
+import org.junit.After;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
@@ -34,22 +36,22 @@ import pageobjects.Navigation;
import pageobjects.organization.MembersPage;
import util.user.UserRule;
+import static it.Category6Suite.enableOrganizationsSupport;
import static java.lang.String.format;
-import static java.util.Collections.emptyMap;
-import static java.util.Locale.ENGLISH;
import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic;
import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.deleteOrganizationsIfExists;
import static util.ItUtils.newAdminWsClient;
+import static util.ItUtils.newOrganizationKey;
import static util.ItUtils.newUserWsClient;
import static util.ItUtils.setServerProperty;
-import static util.ItUtils.xooPlugin;
public class OrganizationMembershipTest {
+ private static final String KEY = newOrganizationKey();
+
@ClassRule
- public static final Orchestrator orchestrator = Orchestrator.builderEnv()
- .addPlugin(xooPlugin())
- .build();
+ public static Orchestrator orchestrator = Category6Suite.ORCHESTRATOR;
@ClassRule
public static UserRule userRule = UserRule.from(orchestrator);
@@ -65,8 +67,14 @@ public class OrganizationMembershipTest {
@BeforeClass
public static void setUp() throws Exception {
adminClient = newAdminWsClient(orchestrator);
- orchestrator.getServer().post("api/organizations/enable_support", emptyMap());
+ enableOrganizationsSupport();
setServerProperty(orchestrator, "sonar.organizations.anyoneCanCreate", "true");
+ deleteOrganizationsIfExists(orchestrator, KEY);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ deleteOrganizationsIfExists(orchestrator, KEY);
}
@Test
@@ -247,9 +255,8 @@ public class OrganizationMembershipTest {
}
private static String createOrganization() {
- String keyAndName = newOrganizationKey();
- adminClient.organizations().create(new CreateWsRequest.Builder().setKey(keyAndName).setName(keyAndName).build()).getOrganization();
- return keyAndName;
+ adminClient.organizations().create(new CreateWsRequest.Builder().setKey(KEY).setName(KEY).build()).getOrganization();
+ return KEY;
}
private static String createUser() {
@@ -258,8 +265,4 @@ public class OrganizationMembershipTest {
return login;
}
- private static String newOrganizationKey() {
- return randomAlphabetic(32).toLowerCase(ENGLISH);
- }
-
}
diff --git a/it/it-tests/src/test/java/it/organization/OrganizationQualityProfilesPageTest.java b/it/it-tests/src/test/java/it/organization/OrganizationQualityProfilesPageTest.java
index f214c76456f..b67c9e14fd3 100644
--- a/it/it-tests/src/test/java/it/organization/OrganizationQualityProfilesPageTest.java
+++ b/it/it-tests/src/test/java/it/organization/OrganizationQualityProfilesPageTest.java
@@ -22,7 +22,9 @@ package it.organization;
import com.codeborne.selenide.Condition;
import com.sonar.orchestrator.Orchestrator;
import com.sonar.orchestrator.build.SonarScanner;
+import it.Category6Suite;
import org.junit.After;
+import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
@@ -34,30 +36,32 @@ import org.sonarqube.ws.client.organization.CreateWsRequest;
import pageobjects.Navigation;
import static com.codeborne.selenide.Selenide.$;
-import static java.util.Collections.emptyMap;
+import static it.Category6Suite.enableOrganizationsSupport;
+import static util.ItUtils.deleteOrganizationsIfExists;
import static util.ItUtils.newAdminWsClient;
import static util.ItUtils.projectDir;
-import static util.ItUtils.xooPlugin;
import static util.selenium.Selenese.runSelenese;
public class OrganizationQualityProfilesPageTest {
- @ClassRule
- public static final Orchestrator orchestrator = Orchestrator.builderEnv()
- .addPlugin(xooPlugin())
- .build();
-
private static WsClient adminWsClient;
private static final String ORGANIZATION = "test-org";
+ @ClassRule
+ public static Orchestrator orchestrator = Category6Suite.ORCHESTRATOR;
+
@BeforeClass
public static void setUp() {
adminWsClient = newAdminWsClient(orchestrator);
- orchestrator.resetData();
- orchestrator.getServer().post("api/organizations/enable_support", emptyMap());
+ enableOrganizationsSupport();
createOrganization();
}
+ @AfterClass
+ public static void tearDown() throws Exception {
+ deleteOrganizationsIfExists(orchestrator, ORGANIZATION);
+ }
+
@Before
public void createSampleProfile() {
createProfile("xoo", "sample");
@@ -74,7 +78,7 @@ public class OrganizationQualityProfilesPageTest {
}
@Test
- public void testNoGlobalPage(){
+ public void testNoGlobalPage() {
Navigation nav = Navigation.get(orchestrator);
nav.open("/profiles");
$(".page-wrapper-simple").should(Condition.visible);
@@ -174,8 +178,7 @@ public class OrganizationQualityProfilesPageTest {
orchestrator.executeBuild(SonarScanner.create(projectDir(path)).setProperties(
"sonar.organization", ORGANIZATION,
"sonar.login", "admin",
- "sonar.password", "admin"
- ));
+ "sonar.password", "admin"));
}
private static void addProfileToProject(String language, String profileName, String projectKey) {
diff --git a/it/it-tests/src/test/java/it/organization/OrganizationTest.java b/it/it-tests/src/test/java/it/organization/OrganizationTest.java
index fcd92a5828a..93dbd368a19 100644
--- a/it/it-tests/src/test/java/it/organization/OrganizationTest.java
+++ b/it/it-tests/src/test/java/it/organization/OrganizationTest.java
@@ -21,12 +21,13 @@ package it.organization;
import com.sonar.orchestrator.Orchestrator;
import com.sonar.orchestrator.build.BuildFailureException;
-import it.Category3Suite;
-import java.util.Collections;
+import it.Category6Suite;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
+import org.junit.After;
import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
@@ -50,11 +51,14 @@ import util.user.GroupManagement;
import util.user.Groups;
import util.user.UserRule;
+import static it.Category6Suite.enableOrganizationsSupport;
import static java.util.Collections.singletonList;
import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
+import static util.ItUtils.deleteOrganizationsIfExists;
import static util.ItUtils.newAdminWsClient;
+import static util.ItUtils.resetSettings;
public class OrganizationTest {
private static final String DEFAULT_ORGANIZATION_KEY = "default-organization";
@@ -66,7 +70,7 @@ public class OrganizationTest {
private static final String SETTING_ANYONE_CAN_CREATE_ORGANIZATIONS = "sonar.organizations.anyoneCanCreate";
@ClassRule
- public static Orchestrator orchestrator = Category3Suite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = Category6Suite.ORCHESTRATOR;
@ClassRule
public static UserRule userRule = UserRule.from(orchestrator);
@Rule
@@ -76,16 +80,25 @@ public class OrganizationTest {
private OrganizationService anonymousOrganizationService = ItUtils.newWsClient(orchestrator).organizations();
private OrganizationService adminOrganizationService = adminClient.organizations();
+ @BeforeClass
+ public static void enableOrganizations() throws Exception {
+ enableOrganizationsSupport();
+ }
+
@Before
public void setUp() throws Exception {
- orchestrator.resetData();
- ItUtils.resetSettings(orchestrator, null, SETTING_ANYONE_CAN_CREATE_ORGANIZATIONS);
- orchestrator.getServer().post("api/organizations/enable_support", Collections.emptyMap());
+ resetSettings(orchestrator, null, SETTING_ANYONE_CAN_CREATE_ORGANIZATIONS);
+ deleteOrganizationsIfExists(orchestrator, KEY, "an-org");
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ deleteOrganizationsIfExists(orchestrator, KEY, "an-org");
}
@Test
public void create_update_delete_organizations_and_check_security() {
- verifyNoExtraOrganization();
+ verifyOrganizationDoesNotExit(KEY);
Organizations.Organization createdOrganization = adminOrganizationService.create(new CreateWsRequest.Builder()
.setName(NAME)
@@ -135,7 +148,7 @@ public class OrganizationTest {
// delete organization
adminOrganizationService.delete(createdOrganization.getKey());
- verifyNoExtraOrganization();
+ verifyOrganizationDoesNotExit(KEY);
adminOrganizationService.create(new CreateWsRequest.Builder()
.setName(NAME)
@@ -169,9 +182,6 @@ public class OrganizationTest {
verifySingleSearchResult(
verifyUserAuthorized("john", "doh", service -> service.create(new CreateWsRequest.Builder().setName("An org").build())).getOrganization(),
"An org", null, null, null);
-
- // clean-up
- adminOrganizationService.delete("an-org");
}
private void verifyAnonymousNotAuthorized(Consumer<OrganizationService> consumer) {
@@ -255,52 +265,47 @@ public class OrganizationTest {
@Test
public void an_organization_member_can_analyze_project() {
- verifyNoExtraOrganization();
+ verifyOrganizationDoesNotExit(KEY);
- String orgKeyAndName = "org-key";
Organizations.Organization createdOrganization = adminOrganizationService.create(new CreateWsRequest.Builder()
- .setName(orgKeyAndName)
- .setKey(orgKeyAndName)
+ .setName(KEY)
+ .setKey(KEY)
.build())
.getOrganization();
- verifySingleSearchResult(createdOrganization, orgKeyAndName, null, null, null);
+ verifySingleSearchResult(createdOrganization, KEY, null, null, null);
userRule.createUser("bob", "bob");
userRule.removeGroups("sonar-users");
- adminOrganizationService.addMember(orgKeyAndName, "bob");
- addPermissionsToUser(orgKeyAndName, "bob", "provisioning", "scan");
+ adminOrganizationService.addMember(KEY, "bob");
+ addPermissionsToUser(KEY, "bob", "provisioning", "scan");
ItUtils.runProjectAnalysis(orchestrator, "shared/xoo-sample",
- "sonar.organization", orgKeyAndName, "sonar.login", "bob", "sonar.password", "bob");
+ "sonar.organization", KEY, "sonar.login", "bob", "sonar.password", "bob");
ComponentsService componentsService = ItUtils.newAdminWsClient(orchestrator).components();
- assertThat(searchSampleProject(orgKeyAndName, componentsService).getComponentsList()).hasSize(1);
-
- adminOrganizationService.delete(orgKeyAndName);
+ assertThat(searchSampleProject(KEY, componentsService).getComponentsList()).hasSize(1);
}
@Test
public void by_default_anonymous_cannot_analyse_project_on_organization() {
- verifyNoExtraOrganization();
+ verifyOrganizationDoesNotExit(KEY);
- String orgKeyAndName = "org-key";
Organizations.Organization createdOrganization = adminOrganizationService.create(new CreateWsRequest.Builder()
- .setName(orgKeyAndName)
- .setKey(orgKeyAndName)
+ .setName(KEY)
+ .setKey(KEY)
.build())
.getOrganization();
- verifySingleSearchResult(createdOrganization, orgKeyAndName, null, null, null);
+ verifySingleSearchResult(createdOrganization, KEY, null, null, null);
try {
ItUtils.runProjectAnalysis(orchestrator, "shared/xoo-sample",
- "sonar.organization", orgKeyAndName);
+ "sonar.organization", KEY);
fail();
} catch (BuildFailureException e) {
assertThat(e.getResult().getLogs()).contains("Insufficient privileges");
}
ComponentsService componentsService = ItUtils.newAdminWsClient(orchestrator).components();
- assertThat(searchSampleProject(orgKeyAndName, componentsService).getComponentsCount()).isEqualTo(0);
- adminOrganizationService.delete(orgKeyAndName);
+ assertThat(searchSampleProject(KEY, componentsService).getComponentsCount()).isEqualTo(0);
}
private void addPermissionsToUser(String orgKeyAndName, String login, String permission, String... otherPermissions) {
@@ -313,62 +318,58 @@ public class OrganizationTest {
@Test
public void deleting_an_organization_also_deletes_projects_and_check_security() {
- verifyNoExtraOrganization();
+ verifyOrganizationDoesNotExit(KEY);
- String orgKeyAndName = "org-key";
Organizations.Organization createdOrganization = adminOrganizationService.create(new CreateWsRequest.Builder()
- .setName(orgKeyAndName)
- .setKey(orgKeyAndName)
+ .setName(KEY)
+ .setKey(KEY)
.build())
.getOrganization();
- verifySingleSearchResult(createdOrganization, orgKeyAndName, null, null, null);
+ verifySingleSearchResult(createdOrganization, KEY, null, null, null);
- GroupManagement groupManagement = userRule.forOrganization(orgKeyAndName);
+ GroupManagement groupManagement = userRule.forOrganization(KEY);
userRule.createUser("bob", "bob");
- adminOrganizationService.addMember(orgKeyAndName, "bob");
+ adminOrganizationService.addMember(KEY, "bob");
groupManagement.createGroup("grp1");
groupManagement.createGroup("grp2");
groupManagement.associateGroupsToUser("bob", "grp1", "grp2");
assertThat(groupManagement.getUserGroups("bob").getGroups())
.extracting(Groups.Group::getName)
.contains("grp1", "grp2");
- addPermissionsToUser(orgKeyAndName, "bob", "provisioning", "scan");
+ addPermissionsToUser(KEY, "bob", "provisioning", "scan");
ItUtils.runProjectAnalysis(orchestrator, "shared/xoo-sample",
- "sonar.organization", orgKeyAndName, "sonar.login", "bob", "sonar.password", "bob");
+ "sonar.organization", KEY, "sonar.login", "bob", "sonar.password", "bob");
ComponentsService componentsService = ItUtils.newAdminWsClient(orchestrator).components();
- assertThat(searchSampleProject(orgKeyAndName, componentsService).getComponentsList()).hasSize(1);
+ assertThat(searchSampleProject(KEY, componentsService).getComponentsList()).hasSize(1);
- adminOrganizationService.delete(orgKeyAndName);
+ adminOrganizationService.delete(KEY);
- expect404HttpError(() -> searchSampleProject(orgKeyAndName, componentsService));
- verifyNoExtraOrganization();
+ expect404HttpError(() -> searchSampleProject(KEY, componentsService));
+ verifyOrganizationDoesNotExit(KEY);
}
@Test
public void return_groups_belonging_to_a_user_on_an_organization() throws Exception {
String userLogin = randomAlphabetic(10);
String groupName = randomAlphabetic(10);
- String orgKeyAndName = "org-key";
- adminClient.organizations().create(new CreateWsRequest.Builder().setKey(orgKeyAndName).setName(orgKeyAndName).build()).getOrganization();
+ adminClient.organizations().create(new CreateWsRequest.Builder().setKey(KEY).setName(KEY).build()).getOrganization();
userRule.createUser(userLogin, userLogin);
- adminOrganizationService.addMember(orgKeyAndName, userLogin);
+ adminOrganizationService.addMember(KEY, userLogin);
adminClient.wsConnector().call(new PostRequest("api/user_groups/create")
.setParam("name", groupName)
.setParam("description", groupName)
- .setParam("organization", orgKeyAndName)).failIfNotSuccessful();
+ .setParam("organization", KEY)).failIfNotSuccessful();
adminClient.wsConnector().call(new PostRequest("api/user_groups/add_user")
.setParam("login", userLogin)
.setParam("name", groupName)
- .setParam("organization", orgKeyAndName)).failIfNotSuccessful();
+ .setParam("organization", KEY)).failIfNotSuccessful();
List<WsUsers.GroupsWsResponse.Group> result = adminClient.users().groups(
- GroupsRequest.builder().setLogin(userLogin).setOrganization(orgKeyAndName).build()).getGroupsList();
+ GroupsRequest.builder().setLogin(userLogin).setOrganization(KEY).build()).getGroupsList();
assertThat(result).extracting(WsUsers.GroupsWsResponse.Group::getName).containsOnly(groupName);
-
- adminOrganizationService.delete(orgKeyAndName);
}
private WsComponents.SearchWsResponse searchSampleProject(String organizationKey, ComponentsService componentsService) {
@@ -397,22 +398,17 @@ public class OrganizationTest {
}
}
- private void verifyNoExtraOrganization() {
- Organizations.SearchWsResponse searchWsResponse = anonymousOrganizationService.search(new SearchWsRequest.Builder().build());
- List<Organizations.Organization> organizationsList = searchWsResponse.getOrganizationsList();
- assertThat(organizationsList).hasSize(1);
- assertThat(organizationsList.iterator().next().getKey()).isEqualTo(DEFAULT_ORGANIZATION_KEY);
+ private void verifyOrganizationDoesNotExit(String organizationKey) {
+ Organizations.SearchWsResponse searchWsResponse = anonymousOrganizationService.search(new SearchWsRequest.Builder().setOrganizations(organizationKey).build());
+ assertThat(searchWsResponse.getOrganizationsList()).isEmpty();
}
private void verifySingleSearchResult(Organizations.Organization createdOrganization, String name, String description, String url,
String avatarUrl) {
- List<Organizations.Organization> organizations = anonymousOrganizationService.search(new SearchWsRequest.Builder()
+ List<Organizations.Organization> organizations = anonymousOrganizationService.search(new SearchWsRequest.Builder().setOrganizations(createdOrganization.getKey())
.build()).getOrganizationsList();
- assertThat(organizations).hasSize(2);
- Organizations.Organization searchedOrganization = organizations.stream()
- .filter(organization -> !DEFAULT_ORGANIZATION_KEY.equals(organization.getKey()))
- .findFirst()
- .get();
+ assertThat(organizations).hasSize(1);
+ Organizations.Organization searchedOrganization = organizations.get(0);
assertThat(searchedOrganization.getKey()).isEqualTo(createdOrganization.getKey());
assertThat(searchedOrganization.getName()).isEqualTo(name);
if (description == null) {
diff --git a/it/it-tests/src/test/java/it/organization/RootTest.java b/it/it-tests/src/test/java/it/organization/RootTest.java
index 5283f3341b9..9dd3a3410a7 100644
--- a/it/it-tests/src/test/java/it/organization/RootTest.java
+++ b/it/it-tests/src/test/java/it/organization/RootTest.java
@@ -20,12 +20,10 @@
package it.organization;
import com.sonar.orchestrator.Orchestrator;
-import it.Category3Suite;
import java.sql.SQLException;
import java.util.Collections;
+import org.junit.After;
import org.junit.Before;
-import org.junit.ClassRule;
-import org.junit.Rule;
import org.junit.Test;
import org.sonarqube.ws.WsRoot;
import org.sonarqube.ws.client.HttpException;
@@ -39,14 +37,24 @@ import static util.ItUtils.newUserWsClient;
import static util.ItUtils.newWsClient;
public class RootTest {
- @ClassRule
- public static Orchestrator orchestrator = Category3Suite.ORCHESTRATOR;
- @Rule
- public UserRule userRule = UserRule.from(orchestrator);
+
+ private static Orchestrator orchestrator;
+
+ private static UserRule userRule;
@Before
- public void before() {
- orchestrator.resetData();
+ public void start() {
+ orchestrator = Orchestrator.builderEnv().build();
+ orchestrator.start();
+ userRule = UserRule.from(orchestrator);
+ }
+
+ @After
+ public void stop() {
+ if (orchestrator != null) {
+ orchestrator.stop();
+ userRule = null;
+ }
}
@Test
@@ -61,7 +69,6 @@ public class RootTest {
@Test
public void system_administrator_is_flagged_as_root_when_he_enables_organization_support() {
enableOrganizationSupport();
-
assertThat(newAdminWsClient(orchestrator).rootService().search().getRootsList())
.extracting(WsRoot.Root::getLogin)
.containsOnly(UserRule.ADMIN_LOGIN);
@@ -70,7 +77,6 @@ public class RootTest {
@Test
public void a_root_can_flag_other_user_as_root() {
enableOrganizationSupport();
-
userRule.createUser("bar", "foo");
userRule.setRoot("bar");
@@ -82,14 +88,12 @@ public class RootTest {
@Test
public void last_root_can_not_be_unset_root() throws SQLException {
enableOrganizationSupport();
-
verifyHttpError(() -> newAdminWsClient(orchestrator).rootService().unsetRoot(UserRule.ADMIN_LOGIN), 400);
}
@Test
public void root_can_be_set_and_unset_via_web_services() {
enableOrganizationSupport();
-
userRule.createUser("root1", "bar");
userRule.createUser("root2", "bar");
WsClient root1WsClient = newUserWsClient(orchestrator, "root1", "bar");
@@ -111,7 +115,7 @@ public class RootTest {
root2WsClient.rootService().unsetRoot("root2");
}
- private void enableOrganizationSupport() {
+ private static void enableOrganizationSupport() {
orchestrator.getServer().post("api/organizations/enable_support", Collections.emptyMap());
}
diff --git a/it/it-tests/src/test/java/util/ItUtils.java b/it/it-tests/src/test/java/util/ItUtils.java
index f852643d8a0..e2ea7869296 100644
--- a/it/it-tests/src/test/java/util/ItUtils.java
+++ b/it/it-tests/src/test/java/util/ItUtils.java
@@ -70,6 +70,8 @@ import org.sonarqube.ws.client.WsClient;
import org.sonarqube.ws.client.WsClientFactories;
import org.sonarqube.ws.client.component.ShowWsRequest;
import org.sonarqube.ws.client.measure.ComponentWsRequest;
+import org.sonarqube.ws.client.organization.OrganizationService;
+import org.sonarqube.ws.client.organization.SearchWsRequest;
import org.sonarqube.ws.client.qualityprofile.RestoreWsRequest;
import org.sonarqube.ws.client.setting.ResetRequest;
import org.sonarqube.ws.client.setting.SetRequest;
@@ -80,6 +82,8 @@ import static com.sonar.orchestrator.container.Server.ADMIN_PASSWORD;
import static java.lang.Double.parseDouble;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
+import static java.util.Locale.ENGLISH;
+import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
@@ -360,6 +364,16 @@ public class ItUtils {
.build());
}
+ public static String newOrganizationKey() {
+ return randomAlphabetic(32).toLowerCase(ENGLISH);
+ }
+
+ public static void deleteOrganizationsIfExists(Orchestrator orchestrator, String... organizationKeys) {
+ OrganizationService adminOrganizationService = newAdminWsClient(orchestrator).organizations();
+ adminOrganizationService.search(SearchWsRequest.builder().setOrganizations(organizationKeys).build()).getOrganizationsList()
+ .forEach(organization -> adminOrganizationService.delete(organization.getKey()));
+ }
+
public static class ComponentNavigation {
private String version;
private String snapshotDate;