Skip to content

Commit

Permalink
Rework organization-related tests to be executed in multi-thread mode (
Browse files Browse the repository at this point in the history
…#9532)

Signed-off-by: Dmytro Nochevnov <dnochevnov@codenvy.com>
  • Loading branch information
dmytro-ndp committed Apr 25, 2018
1 parent 6d33172 commit 7184cf7
Show file tree
Hide file tree
Showing 27 changed files with 216 additions and 149 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,33 +14,42 @@
import static java.util.Arrays.asList;
import static org.eclipse.che.dto.server.DtoFactory.newDto;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
import java.util.List;
import org.eclipse.che.api.core.NotFoundException;
import org.eclipse.che.api.core.rest.HttpJsonRequestFactory;
import org.eclipse.che.commons.annotation.Nullable;
import org.eclipse.che.multiuser.api.permission.shared.dto.PermissionsDto;
import org.eclipse.che.multiuser.organization.shared.dto.OrganizationDto;
import org.eclipse.che.selenium.core.provider.TestApiEndpointUrlProvider;
import org.eclipse.che.selenium.core.requestfactory.TestUserHttpJsonRequestFactoryCreator;
import org.eclipse.che.selenium.core.user.TestUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/** This util is handling the requests to Organization API. */
@Singleton
public class TestOrganizationServiceClient {
private static final Logger LOG = LoggerFactory.getLogger(TestOrganizationServiceClient.class);

private final String apiEndpoint;
private final HttpJsonRequestFactory requestFactory;

@Inject
public TestOrganizationServiceClient(
TestApiEndpointUrlProvider apiEndpointUrlProvider, HttpJsonRequestFactory requestFactory) {
this.apiEndpoint = apiEndpointUrlProvider.get().toString();
this.requestFactory = requestFactory;
}

@AssistedInject
public TestOrganizationServiceClient(
TestApiEndpointUrlProvider apiEndpointUrlProvider,
TestUserHttpJsonRequestFactoryCreator testUserHttpJsonRequestFactoryCreator,
@Assisted TestUser testUser) {
this.apiEndpoint = apiEndpointUrlProvider.get().toString();
this.requestFactory = testUserHttpJsonRequestFactoryCreator.create(testUser);
}

public List<OrganizationDto> getAll() throws Exception {
return requestFactory.fromUrl(getApiUrl()).request().asList(OrganizationDto.class);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* Copyright (c) 2012-2018 Red Hat, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
package org.eclipse.che.selenium.core.client;

import com.google.inject.assistedinject.Assisted;
import org.eclipse.che.selenium.core.user.TestUser;

/** @author Dmytro Nochevnov */
public interface TestOrganizationServiceClientFactory {
TestOrganizationServiceClient create(@Assisted TestUser testUser);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@
import com.google.inject.Key;
import com.google.inject.MembersInjector;
import com.google.inject.Provider;
import com.google.inject.name.Names;
import java.lang.reflect.Field;
import org.eclipse.che.selenium.core.client.TestOrganizationServiceClient;
import org.eclipse.che.selenium.core.client.TestOrganizationServiceClientFactory;
import org.eclipse.che.selenium.core.user.AdminTestUser;

/**
* Injector for custom annotation {@link InjectTestOrganization}.
Expand Down Expand Up @@ -48,16 +49,21 @@ public void injectMembers(T instance) {
String name = generateName();
String parentPrefix = injectTestOrganization.parentPrefix();

TestOrganizationServiceClient testOrganizationServiceClient =
injector.getInstance(Key.get(TestOrganizationServiceClient.class, Names.named("admin")));
AdminTestUser adminTestUser = injector.getInstance(Key.get(AdminTestUser.class));

TestOrganizationServiceClientFactory testOrganizationServiceClient =
injector.getInstance(Key.get(TestOrganizationServiceClientFactory.class));

TestOrganizationServiceClient adminOrganizationServiceClient =
testOrganizationServiceClient.create(adminTestUser);

TestOrganization testOrganization;
try {
if (parentPrefix.isEmpty()) {
testOrganization = new TestOrganization(name, testOrganizationServiceClient);
testOrganization = new TestOrganization(name, adminOrganizationServiceClient);
} else {
String parentId = findInjectedOrganization(instance, parentPrefix);
testOrganization = new TestOrganization(name, parentId, testOrganizationServiceClient);
testOrganization = new TestOrganization(name, parentId, adminOrganizationServiceClient);
}

field.setAccessible(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,18 @@

import com.google.inject.AbstractModule;
import com.google.inject.Key;
import com.google.inject.Provides;
import com.google.inject.TypeLiteral;
import com.google.inject.assistedinject.FactoryModuleBuilder;
import com.google.inject.name.Named;
import org.eclipse.che.selenium.core.client.CheTestDefaultOrganizationServiceClient;
import org.eclipse.che.selenium.core.client.CheTestMachineServiceClient;
import org.eclipse.che.selenium.core.client.KeycloakTestAuthServiceClient;
import org.eclipse.che.selenium.core.client.TestAuthServiceClient;
import org.eclipse.che.selenium.core.client.TestMachineServiceClient;
import org.eclipse.che.selenium.core.client.TestOrganizationServiceClient;
import org.eclipse.che.selenium.core.client.TestOrganizationServiceClientFactory;
import org.eclipse.che.selenium.core.provider.AdminTestUserProvider;
import org.eclipse.che.selenium.core.provider.DefaultTestUserProvider;
import org.eclipse.che.selenium.core.provider.TestApiEndpointUrlProvider;
import org.eclipse.che.selenium.core.provider.TestUserProvider;
import org.eclipse.che.selenium.core.requestfactory.CheTestAdminHttpJsonRequestFactory;
import org.eclipse.che.selenium.core.user.AdminTestUser;
import org.eclipse.che.selenium.core.user.MultiUserCheAdminTestUserProvider;
import org.eclipse.che.selenium.core.user.MultiUserCheDefaultTestUserProvider;
Expand All @@ -50,20 +48,16 @@ protected void configure() {
bind(AdminTestUser.class).toProvider(AdminTestUserProvider.class);
bind(AdminTestUserProvider.class).to(MultiUserCheAdminTestUserProvider.class);

bind(TestOrganizationServiceClient.class).to(CheTestDefaultOrganizationServiceClient.class);

install(
new FactoryModuleBuilder()
.build(Key.get(new TypeLiteral<TestUserFactory<AdminTestUser>>() {}.getType())));

install(
new FactoryModuleBuilder()
.build(Key.get(new TypeLiteral<TestUserFactory<TestUserImpl>>() {}.getType())));
}

@Provides
@Named(CheSeleniumSuiteModule.ADMIN)
public TestOrganizationServiceClient getAdminOrganizationServiceClient(
TestApiEndpointUrlProvider apiEndpointUrlProvider,
CheTestAdminHttpJsonRequestFactory requestFactory) {
return new TestOrganizationServiceClient(apiEndpointUrlProvider, requestFactory);
install(new FactoryModuleBuilder().build(TestOrganizationServiceClientFactory.class));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
import org.eclipse.che.selenium.core.provider.TestIdeUrlProvider;
import org.eclipse.che.selenium.core.provider.TestOfflineToAccessTokenExchangeApiEndpointUrlProvider;
import org.eclipse.che.selenium.core.provider.TestWorkspaceAgentApiEndpointUrlProvider;
import org.eclipse.che.selenium.core.requestfactory.CheTestDefaultUserHttpJsonRequestFactory;
import org.eclipse.che.selenium.core.requestfactory.CheTestDefaultHttpJsonRequestFactory;
import org.eclipse.che.selenium.core.requestfactory.TestUserHttpJsonRequestFactory;
import org.eclipse.che.selenium.core.requestfactory.TestUserHttpJsonRequestFactoryCreator;
import org.eclipse.che.selenium.core.user.DefaultTestUser;
Expand All @@ -66,7 +66,6 @@
*/
public class CheSeleniumSuiteModule extends AbstractModule {

public static final String ADMIN = "admin";
public static final String AUXILIARY = "auxiliary";
public static final String DOCKER_INFRASTRUCTURE = "docker";
public static final String OPENSHIFT_INFRASTRUCTURE = "openshift";
Expand All @@ -87,7 +86,7 @@ public void configure() {
bind(TestUserServiceClient.class).to(CheTestUserServiceClient.class);

bind(HttpJsonRequestFactory.class).to(TestUserHttpJsonRequestFactory.class);
bind(TestUserHttpJsonRequestFactory.class).to(CheTestDefaultUserHttpJsonRequestFactory.class);
bind(TestUserHttpJsonRequestFactory.class).to(CheTestDefaultHttpJsonRequestFactory.class);

bind(TestApiEndpointUrlProvider.class).to(CheTestApiEndpointUrlProvider.class);
bind(TestIdeUrlProvider.class).to(CheTestIdeUrlProvider.class);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright (c) 2012-2018 Red Hat, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
package org.eclipse.che.selenium.core.client;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.eclipse.che.selenium.core.provider.TestApiEndpointUrlProvider;
import org.eclipse.che.selenium.core.requestfactory.CheTestAdminHttpJsonRequestFactory;

/** This util is handling the requests to Organization API as admin. */
@Singleton
public class CheTestAdminOrganizationServiceClient extends TestOrganizationServiceClient {

@Inject
public CheTestAdminOrganizationServiceClient(
TestApiEndpointUrlProvider apiEndpointUrlProvider,
CheTestAdminHttpJsonRequestFactory adminRequestFactory) {
super(apiEndpointUrlProvider, adminRequestFactory);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright (c) 2012-2018 Red Hat, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
package org.eclipse.che.selenium.core.client;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.eclipse.che.selenium.core.provider.TestApiEndpointUrlProvider;
import org.eclipse.che.selenium.core.requestfactory.CheTestDefaultHttpJsonRequestFactory;

/** This util is handling the requests to Organization API as default user. */
@Singleton
public class CheTestDefaultOrganizationServiceClient extends TestOrganizationServiceClient {

@Inject
public CheTestDefaultOrganizationServiceClient(
TestApiEndpointUrlProvider apiEndpointUrlProvider,
CheTestDefaultHttpJsonRequestFactory defaultRequestFactory) {
super(apiEndpointUrlProvider, defaultRequestFactory);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@
package org.eclipse.che.selenium.core.requestfactory;

import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.eclipse.che.selenium.core.client.TestAuthServiceClient;
import org.eclipse.che.selenium.core.user.DefaultTestUser;

/** @author Anton Korneta */
public class CheTestDefaultUserHttpJsonRequestFactory extends TestUserHttpJsonRequestFactory {
@Singleton
public class CheTestDefaultHttpJsonRequestFactory extends TestUserHttpJsonRequestFactory {

@Inject
public CheTestDefaultUserHttpJsonRequestFactory(
public CheTestDefaultHttpJsonRequestFactory(
TestAuthServiceClient authServiceClient, DefaultTestUser defaultTestUser) {
super(authServiceClient, defaultTestUser);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,12 @@
import org.openqa.selenium.support.ui.FluentWait;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/** @author Andrey Chizhikov */
@Singleton
public class Swagger {

private final SeleniumWebDriver seleniumWebDriver;
private static final Logger LOG = LoggerFactory.getLogger(SeleniumWebDriver.class);

@Inject
public Swagger(SeleniumWebDriver seleniumWebDriver) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import static java.lang.String.format;
import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.ELEMENT_TIMEOUT_SEC;
import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.REDRAW_UI_ELEMENTS_TIMEOUT_SEC;
import static org.eclipse.che.selenium.core.constant.TestTimeoutsConstants.WIDGET_TIMEOUT_SEC;
import static org.openqa.selenium.support.ui.ExpectedConditions.elementToBeClickable;
import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOf;
import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated;
Expand Down Expand Up @@ -197,7 +198,8 @@ public void selectFilterSuggestion(String suggestion) {
}

public void waitToolbar() {
new WebDriverWait(seleniumWebDriver, ELEMENT_TIMEOUT_SEC)
// we need increased timeout here to prevent error on Eclipse Che on OCP
new WebDriverWait(seleniumWebDriver, WIDGET_TIMEOUT_SEC)
.until(visibilityOfElementLocated(By.id(Locators.TOOLBAR_TITLE_ID)));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,11 @@ public boolean equals(Object accountToCompare) {
&& Objects.equals(lastName, ((Account) accountToCompare).getLastName());
}

@Override
public int hashCode() {
return Objects.hash(login, email, firstName, lastName);
}

@Override
public String toString() {
return format(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@
import org.eclipse.che.selenium.core.TestGroup;
import org.eclipse.che.selenium.core.organization.InjectTestOrganization;
import org.eclipse.che.selenium.core.organization.TestOrganization;
import org.eclipse.che.selenium.core.user.AdminTestUser;
import org.eclipse.che.selenium.core.user.DefaultTestUser;
import org.eclipse.che.selenium.core.user.TestUser;
import org.eclipse.che.selenium.pageobject.dashboard.CheMultiuserAdminDashboard;
import org.eclipse.che.selenium.pageobject.dashboard.NavigationBar;
import org.eclipse.che.selenium.pageobject.dashboard.NewWorkspace;
Expand Down Expand Up @@ -62,12 +61,11 @@ public class AddWorkspaceToOrganizationTest {
@Inject private WorkspaceDetails workspaceDetails;
@Inject private OrganizationPage organizationPage;
@Inject private NavigationBar navigationBar;

@Inject private AdminTestUser adminTestUser;

@Inject private NewWorkspace newWorkspace;
@Inject private Workspaces workspaces;
@Inject private DefaultTestUser testUser;

@Inject private TestUser adminTestUser;
@Inject private TestUser testUser;

@BeforeClass
public void setUp() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
*/
package org.eclipse.che.selenium.dashboard.organization;

import static org.eclipse.che.selenium.core.CheSeleniumSuiteModule.ADMIN;
import static org.eclipse.che.selenium.pageobject.dashboard.NavigationBar.MenuItem.ORGANIZATIONS;
import static org.eclipse.che.selenium.pageobject.dashboard.organization.OrganizationListPage.OrganizationListHeader.ACTIONS;
import static org.eclipse.che.selenium.pageobject.dashboard.organization.OrganizationListPage.OrganizationListHeader.AVAILABLE_RAM;
Expand All @@ -23,13 +22,15 @@
import static org.testng.Assert.assertTrue;

import com.google.inject.Inject;
import com.google.inject.name.Named;
import java.util.ArrayList;
import org.eclipse.che.selenium.core.TestGroup;
import org.eclipse.che.selenium.core.client.TestOrganizationServiceClient;
import org.eclipse.che.selenium.core.client.TestOrganizationServiceClientFactory;
import org.eclipse.che.selenium.core.organization.InjectTestOrganization;
import org.eclipse.che.selenium.core.organization.TestOrganization;
import org.eclipse.che.selenium.core.user.DefaultTestUser;
import org.eclipse.che.selenium.core.provider.TestApiEndpointUrlProvider;
import org.eclipse.che.selenium.core.requestfactory.TestUserHttpJsonRequestFactoryCreator;
import org.eclipse.che.selenium.core.user.TestUser;
import org.eclipse.che.selenium.pageobject.dashboard.CheMultiuserAdminDashboard;
import org.eclipse.che.selenium.pageobject.dashboard.NavigationBar;
import org.eclipse.che.selenium.pageobject.dashboard.organization.OrganizationListPage;
Expand All @@ -45,18 +46,16 @@
@Test(groups = {TestGroup.MULTIUSER})
public class AdminOfParentOrganizationTest {
private int initialOrgCount;
private TestOrganizationServiceClient userTestOrganizationServiceClient;

@Inject
@Named(ADMIN)
private TestOrganizationServiceClient adminTestOrganizationServiceClient;

@Inject private TestOrganizationServiceClient userTestOrganizationServiceClient;

@Inject private TestOrganizationServiceClientFactory userOrganizationServiceClientFactory;
@Inject private OrganizationListPage organizationListPage;
@Inject private OrganizationPage organizationPage;
@Inject private NavigationBar navigationBar;
@Inject private CheMultiuserAdminDashboard dashboard;
@Inject private DefaultTestUser testUser;
@Inject private TestUser testUser;
@Inject private TestApiEndpointUrlProvider apiEndpointUrlProvider;
@Inject private TestUserHttpJsonRequestFactoryCreator testUserHttpJsonRequestFactoryCreator;

@InjectTestOrganization(prefix = "parentOrg")
private TestOrganization parentOrg;
Expand All @@ -66,6 +65,8 @@ public class AdminOfParentOrganizationTest {

@BeforeClass
public void setUp() throws Exception {
userTestOrganizationServiceClient = userOrganizationServiceClientFactory.create(testUser);

parentOrg.addAdmin(testUser.getId());
childOrg.addMember(testUser.getId());
initialOrgCount = userTestOrganizationServiceClient.getAll().size();
Expand Down
Loading

0 comments on commit 7184cf7

Please sign in to comment.