From e462678fb06f9873d66f1f8a3f4fa8165fe5cc8f Mon Sep 17 00:00:00 2001 From: Dmytro Nochevnov Date: Mon, 25 Sep 2017 17:36:59 +0300 Subject: [PATCH] Add ability to create test workspaces for the non-default user (#6318) Signed-off-by: Dmytro Nochevnov --- selenium/che-selenium-core/pom.xml | 4 ++ .../client/TestWorkspaceServiceClient.java | 32 ++++++++---- .../TestWorkspaceServiceClientFactory.java | 16 ++++++ .../TestUserHttpJsonRequestFactory.java | 6 ++- ...TestUserHttpJsonRequestFactoryCreator.java | 16 ++++++ .../selenium/core/user/DefaultTestUser.java | 15 ++---- .../selenium/core/user/TestUserFactory.java | 23 ++++++++ .../che/selenium/core/user/TestUserImpl.java | 52 ++++++++++++++----- .../selenium/core/user/TestUserInjector.java | 11 +--- .../core/workspace/TestWorkspaceImpl.java | 4 +- .../workspace/TestWorkspaceProviderImpl.java | 21 +++++--- selenium/che-selenium-test/pom.xml | 4 ++ .../selenium/core/CheSeleniumSuiteModule.java | 16 +++++- 13 files changed, 166 insertions(+), 54 deletions(-) create mode 100644 selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/client/TestWorkspaceServiceClientFactory.java create mode 100644 selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/requestfactory/TestUserHttpJsonRequestFactoryCreator.java create mode 100644 selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserFactory.java diff --git a/selenium/che-selenium-core/pom.xml b/selenium/che-selenium-core/pom.xml index 30e73ed2d4..a8a41176c3 100644 --- a/selenium/che-selenium-core/pom.xml +++ b/selenium/che-selenium-core/pom.xml @@ -30,6 +30,10 @@ com.google.inject guice + + com.google.inject.extensions + guice-assistedinject + commons-io commons-io diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/client/TestWorkspaceServiceClient.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/client/TestWorkspaceServiceClient.java index 7ded184ff2..acde4a5539 100644 --- a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/client/TestWorkspaceServiceClient.java +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/client/TestWorkspaceServiceClient.java @@ -16,7 +16,8 @@ import static org.eclipse.che.api.core.model.workspace.WorkspaceStatus.RUNNING; import static org.eclipse.che.api.core.model.workspace.WorkspaceStatus.STOPPED; import com.google.inject.Inject; -import com.google.inject.Singleton; +import com.google.inject.assistedinject.Assisted; +import com.google.inject.assistedinject.AssistedInject; import java.io.File; import java.nio.charset.Charset; import java.util.List; @@ -32,6 +33,7 @@ import org.eclipse.che.api.workspace.shared.dto.WorkspaceConfigDto; import org.eclipse.che.api.workspace.shared.dto.WorkspaceDto; import org.eclipse.che.dto.server.DtoFactory; 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.core.user.TestUserNamespaceResolver; import org.eclipse.che.selenium.core.utils.WaitUtils; @@ -39,24 +41,38 @@ import org.eclipse.che.selenium.core.workspace.MemoryMeasure; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -/** @author Musienko Maxim */ -@Singleton +/** + * @author Musienko Maxim + * @author Dmytro Nochevnov + */ public class TestWorkspaceServiceClient { private static final Logger LOG = LoggerFactory.getLogger(TestWorkspaceServiceClient.class); private final TestApiEndpointUrlProvider apiEndpointProvider; private final HttpJsonRequestFactory requestFactory; - private final TestUserNamespaceResolver testUserNamespaceResolver; + private final TestUserNamespaceResolver userNamespaceResolver; @Inject public TestWorkspaceServiceClient( TestApiEndpointUrlProvider apiEndpointProvider, HttpJsonRequestFactory requestFactory, - TestUserNamespaceResolver testUserNamespaceResolver) { + TestUserNamespaceResolver userNamespaceResolver) { this.apiEndpointProvider = apiEndpointProvider; this.requestFactory = requestFactory; - this.testUserNamespaceResolver = testUserNamespaceResolver; + this.userNamespaceResolver = userNamespaceResolver; + } + + @AssistedInject + public TestWorkspaceServiceClient( + TestApiEndpointUrlProvider apiEndpointProvider, + TestUserNamespaceResolver userNamespaceResolver, + TestUserHttpJsonRequestFactoryCreator userHttpJsonRequestFactoryCreator, + @Assisted String authToken) { + this( + apiEndpointProvider, + userHttpJsonRequestFactoryCreator.create(authToken), + userNamespaceResolver); } private String getBaseUrl() { @@ -258,7 +274,7 @@ public class TestWorkspaceServiceClient { } private String getNameBasedUrl(String workspaceName, String username) { - return getBaseUrl() + "/" + testUserNamespaceResolver.resolve(username) + "/" + workspaceName; + return getBaseUrl() + "/" + userNamespaceResolver.resolve(username) + "/" + workspaceName; } private String getIdBasedUrl(String workspaceId) { @@ -288,8 +304,6 @@ public class TestWorkspaceServiceClient { * Delete workspaces which could be created from factory * * @param originalName name workspace which was used to create factory - * @param username - * @throws Exception */ public void deleteFactoryWorkspaces(String originalName, String username) throws Exception { String workspace2delete = originalName; diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/client/TestWorkspaceServiceClientFactory.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/client/TestWorkspaceServiceClientFactory.java new file mode 100644 index 0000000000..c4ae3644a5 --- /dev/null +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/client/TestWorkspaceServiceClientFactory.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2012-2017 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; + +/** @author Dmytro Nochevnov */ +public interface TestWorkspaceServiceClientFactory { + TestWorkspaceServiceClient create(String authToken); +} diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/requestfactory/TestUserHttpJsonRequestFactory.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/requestfactory/TestUserHttpJsonRequestFactory.java index 34a2189b76..9f19304e12 100644 --- a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/requestfactory/TestUserHttpJsonRequestFactory.java +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/requestfactory/TestUserHttpJsonRequestFactory.java @@ -10,15 +10,17 @@ */ package org.eclipse.che.selenium.core.requestfactory; +import com.google.inject.assistedinject.Assisted; import java.util.Objects; -import javax.validation.constraints.NotNull; +import javax.inject.Inject; /** @author Dmytro Nochevnov */ public class TestUserHttpJsonRequestFactory extends TestHttpJsonRequestFactory { private final String authToken; - public TestUserHttpJsonRequestFactory(@NotNull String authToken) { + @Inject + public TestUserHttpJsonRequestFactory(@Assisted String authToken) { Objects.requireNonNull(authToken); this.authToken = authToken; } diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/requestfactory/TestUserHttpJsonRequestFactoryCreator.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/requestfactory/TestUserHttpJsonRequestFactoryCreator.java new file mode 100644 index 0000000000..ff7ecb8b86 --- /dev/null +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/requestfactory/TestUserHttpJsonRequestFactoryCreator.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2012-2017 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.requestfactory; + +/** @author Dmytro Nochevnov */ +public interface TestUserHttpJsonRequestFactoryCreator { + TestUserHttpJsonRequestFactory create(String authToken); +} diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/DefaultTestUser.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/DefaultTestUser.java index 878dc8ac20..33f6529e9d 100644 --- a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/DefaultTestUser.java +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/DefaultTestUser.java @@ -12,17 +12,15 @@ package org.eclipse.che.selenium.core.user; import com.google.inject.Inject; import com.google.inject.Singleton; -import org.eclipse.che.selenium.core.client.TestAuthServiceClient; -import org.eclipse.che.selenium.core.client.TestUserServiceClient; -import org.eclipse.che.selenium.core.client.TestWorkspaceServiceClient; /** * Default {@link TestUser} that will be created before all tests and will be deleted after them. * All tests share the same default user. * - *

To have move users per tests see {@link InjectTestUser}. + *

To have more users per tests see {@link InjectTestUser}. * * @author Anatolii Bazko + * @author Dmytro Nochevnov */ @Singleton public class DefaultTestUser implements TestUser { @@ -30,13 +28,8 @@ public class DefaultTestUser implements TestUser { private final TestUser testUser; @Inject - public DefaultTestUser( - TestUserServiceClient testUserServiceClient, - TestWorkspaceServiceClient workspaceServiceClient, - TestAuthServiceClient authServiceClient) - throws Exception { - this.testUser = - new TestUserImpl(testUserServiceClient, workspaceServiceClient, authServiceClient); + public DefaultTestUser(TestUser testUser) throws Exception { + this.testUser = testUser; } @Override diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserFactory.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserFactory.java new file mode 100644 index 0000000000..be5e5e79a3 --- /dev/null +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserFactory.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2012-2017 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.user; + +import com.google.inject.assistedinject.Assisted; + +/** + * @author Anton Korneta + * @author Dmytro Nochevnov + */ +public interface TestUserFactory { + TestUser create(@Assisted("email") String email); + + TestUser create(@Assisted("email") String email, @Assisted("password") String password); +} diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserImpl.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserImpl.java index f9a694d3f1..22a69e7581 100644 --- a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserImpl.java +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserImpl.java @@ -13,6 +13,8 @@ package org.eclipse.che.selenium.core.user; import static java.lang.String.format; import com.google.inject.Inject; +import com.google.inject.assistedinject.Assisted; +import com.google.inject.assistedinject.AssistedInject; import java.util.ArrayList; import java.util.List; import javax.annotation.PreDestroy; @@ -20,11 +22,17 @@ import org.eclipse.che.commons.lang.NameGenerator; import org.eclipse.che.selenium.core.client.TestAuthServiceClient; import org.eclipse.che.selenium.core.client.TestUserServiceClient; import org.eclipse.che.selenium.core.client.TestWorkspaceServiceClient; +import org.eclipse.che.selenium.core.client.TestWorkspaceServiceClientFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -/** @author Anatolii Bazko */ +/** + * @author Anatolii Bazko + * @author Dmytro Nochevnov + * @author Anton Korneta + */ public class TestUserImpl implements TestUser { + private static final Logger LOG = LoggerFactory.getLogger(TestUserImpl.class); private final String email; @@ -36,31 +44,34 @@ public class TestUserImpl implements TestUser { private final TestUserServiceClient userServiceClient; private final TestWorkspaceServiceClient workspaceServiceClient; + /** To instantiate user with generated email and password. */ @Inject public TestUserImpl( TestUserServiceClient userServiceClient, - TestWorkspaceServiceClient workspaceServiceClient, - TestAuthServiceClient authServiceClient) + TestAuthServiceClient authServiceClient, + TestWorkspaceServiceClientFactory workspaceServiceClientFactory) throws Exception { this( - NameGenerator.generate("user", 6) + "@some.mail", userServiceClient, - workspaceServiceClient, - authServiceClient); + authServiceClient, + workspaceServiceClientFactory, + NameGenerator.generate("user", 6) + "@some.mail", + NameGenerator.generate("Pwd1", 6)); } - /** To instantiate user with specific e-mail. */ + /** To instantiate user with specific e-mail and password. */ + @AssistedInject public TestUserImpl( - String email, TestUserServiceClient userServiceClient, - TestWorkspaceServiceClient workspaceServiceClient, - TestAuthServiceClient authServiceClient) + TestAuthServiceClient authServiceClient, + TestWorkspaceServiceClientFactory workspaceServiceClientFactory, + @Assisted("email") String email, + @Assisted("password") String password) throws Exception { this.userServiceClient = userServiceClient; - this.workspaceServiceClient = workspaceServiceClient; this.email = email; - this.password = NameGenerator.generate("Pwd1", 6); + this.password = password; this.name = email.split("@")[0]; this.id = userServiceClient.create(email, password).getId(); @@ -68,6 +79,23 @@ public class TestUserImpl implements TestUser { LOG.info("User name='{}', password '{}', id='{}' has been created", name, password, id); this.authToken = authServiceClient.login(getName(), getPassword()); + this.workspaceServiceClient = workspaceServiceClientFactory.create(authToken); + } + + /** To instantiate user with password. */ + @AssistedInject + public TestUserImpl( + TestUserServiceClient userServiceClient, + TestAuthServiceClient authServiceClient, + TestWorkspaceServiceClientFactory workspaceServiceClientFactory, + @Assisted("email") String email) + throws Exception { + this( + userServiceClient, + authServiceClient, + workspaceServiceClientFactory, + email, + NameGenerator.generate("Pwd1", 6)); } @Override diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserInjector.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserInjector.java index 755b42a2c2..4043655059 100644 --- a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserInjector.java +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/user/TestUserInjector.java @@ -14,9 +14,6 @@ import com.google.inject.Injector; import com.google.inject.MembersInjector; import com.google.inject.Provider; import java.lang.reflect.Field; -import org.eclipse.che.selenium.core.client.TestAuthServiceClient; -import org.eclipse.che.selenium.core.client.TestUserServiceClient; -import org.eclipse.che.selenium.core.client.TestWorkspaceServiceClient; /** * Injector for custom annotation {@link InjectTestUser}. @@ -39,13 +36,7 @@ public class TestUserInjector implements MembersInjector { public void injectMembers(T t) { try { field.setAccessible(true); - field.set( - t, - new TestUserImpl( - injectTestUser.value(), - injector.getInstance(TestUserServiceClient.class), - injector.getInstance(TestWorkspaceServiceClient.class), - injector.getInstance(TestAuthServiceClient.class))); + field.set(t, injector.getInstance(TestUserFactory.class).create(injectTestUser.value())); } catch (Exception e) { throw new RuntimeException("Failed to instantiate user in " + t.getClass().getName(), e); } diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/workspace/TestWorkspaceImpl.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/workspace/TestWorkspaceImpl.java index 69dd73cd6b..de083735a3 100644 --- a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/workspace/TestWorkspaceImpl.java +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/workspace/TestWorkspaceImpl.java @@ -39,11 +39,11 @@ public class TestWorkspaceImpl implements TestWorkspace { TestUser owner, int memoryInGB, String template, - TestWorkspaceServiceClient workspaceServiceClient) { + TestWorkspaceServiceClient testWorkspaceServiceClient) { this.name = name; this.owner = owner; this.id = new AtomicReference<>(); - this.workspaceServiceClient = workspaceServiceClient; + this.workspaceServiceClient = testWorkspaceServiceClient; this.future = CompletableFuture.runAsync( diff --git a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/workspace/TestWorkspaceProviderImpl.java b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/workspace/TestWorkspaceProviderImpl.java index f0237a3db8..49c0b4cfd7 100644 --- a/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/workspace/TestWorkspaceProviderImpl.java +++ b/selenium/che-selenium-core/src/main/java/org/eclipse/che/selenium/core/workspace/TestWorkspaceProviderImpl.java @@ -25,6 +25,7 @@ import org.eclipse.che.api.core.model.workspace.WorkspaceStatus; import org.eclipse.che.commons.lang.NameGenerator; import org.eclipse.che.commons.lang.concurrent.LoggingUncaughtExceptionHandler; import org.eclipse.che.selenium.core.client.TestWorkspaceServiceClient; +import org.eclipse.che.selenium.core.client.TestWorkspaceServiceClientFactory; import org.eclipse.che.selenium.core.configuration.ConfigurationException; import org.eclipse.che.selenium.core.user.DefaultTestUser; import org.eclipse.che.selenium.core.user.TestUser; @@ -45,17 +46,20 @@ public class TestWorkspaceProviderImpl implements TestWorkspaceProvider { private final ScheduledExecutorService executor; private final DefaultTestUser defaultUser; private final int defaultMemoryGb; - private final TestWorkspaceServiceClient workspaceServiceClient; + private final TestWorkspaceServiceClient testWorkspaceServiceClient; + private final TestWorkspaceServiceClientFactory testWorkspaceServiceClientFactory; @Inject public TestWorkspaceProviderImpl( @Named("sys.threads") int threads, @Named("workspace.default_memory_gb") int defaultMemoryGb, DefaultTestUser defaultUser, - TestWorkspaceServiceClient workspaceServiceClient) { + TestWorkspaceServiceClient testWorkspaceServiceClient, + TestWorkspaceServiceClientFactory testWorkspaceServiceClientFactory) { this.defaultUser = defaultUser; this.defaultMemoryGb = defaultMemoryGb; - this.workspaceServiceClient = workspaceServiceClient; + this.testWorkspaceServiceClient = testWorkspaceServiceClient; + this.testWorkspaceServiceClientFactory = testWorkspaceServiceClientFactory; if (threads == 0) { throw new ConfigurationException("Threads number is 0"); @@ -80,7 +84,12 @@ public class TestWorkspaceProviderImpl implements TestWorkspaceProvider { return doGetWorkspaceFromPool(); } - return new TestWorkspaceImpl(generateName(), owner, memoryGB, template, workspaceServiceClient); + return new TestWorkspaceImpl( + generateName(), + owner, + memoryGB, + template, + testWorkspaceServiceClientFactory.create(owner.getAuthToken())); } private boolean hasDefaultValues(TestUser testUser, int memoryGB, String template) { @@ -94,10 +103,10 @@ public class TestWorkspaceProviderImpl implements TestWorkspaceProvider { // insure workspace is running TestWorkspace testWorkspace = testWorkspaceQueue.take(); WorkspaceStatus testWorkspaceStatus = - workspaceServiceClient.getById(testWorkspace.getId()).getStatus(); + testWorkspaceServiceClient.getById(testWorkspace.getId()).getStatus(); if (testWorkspaceStatus != WorkspaceStatus.RUNNING) { - workspaceServiceClient.start( + testWorkspaceServiceClient.start( testWorkspace.getId(), testWorkspace.getName(), testWorkspace.getOwner()); } diff --git a/selenium/che-selenium-test/pom.xml b/selenium/che-selenium-test/pom.xml index 55882d7fd2..ed7636a104 100644 --- a/selenium/che-selenium-test/pom.xml +++ b/selenium/che-selenium-test/pom.xml @@ -37,6 +37,10 @@ com.google.inject guice + + com.google.inject.extensions + guice-assistedinject + javax.annotation javax.annotation-api diff --git a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/core/CheSeleniumSuiteModule.java b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/core/CheSeleniumSuiteModule.java index 7715beae4c..2664c1f982 100644 --- a/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/core/CheSeleniumSuiteModule.java +++ b/selenium/che-selenium-test/src/main/java/org/eclipse/che/selenium/core/CheSeleniumSuiteModule.java @@ -15,6 +15,7 @@ import static org.eclipse.che.selenium.core.utils.PlatformUtils.isMac; import com.google.inject.AbstractModule; import com.google.inject.Provider; import com.google.inject.Provides; +import com.google.inject.assistedinject.FactoryModuleBuilder; import com.google.inject.name.Names; import javax.inject.Named; import org.eclipse.che.api.core.rest.HttpJsonRequestFactory; @@ -25,6 +26,7 @@ import org.eclipse.che.selenium.core.client.CheTestAuthServiceClient; import org.eclipse.che.selenium.core.client.CheTestMachineServiceClient; import org.eclipse.che.selenium.core.client.TestAuthServiceClient; import org.eclipse.che.selenium.core.client.TestMachineServiceClient; +import org.eclipse.che.selenium.core.client.TestWorkspaceServiceClientFactory; import org.eclipse.che.selenium.core.configuration.SeleniumTestConfiguration; import org.eclipse.che.selenium.core.configuration.TestConfiguration; import org.eclipse.che.selenium.core.provider.CheTestApiEndpointUrlProvider; @@ -42,11 +44,13 @@ import org.eclipse.che.selenium.core.provider.TestSvnRepo1Provider; import org.eclipse.che.selenium.core.provider.TestSvnRepo2Provider; import org.eclipse.che.selenium.core.provider.TestSvnUsernameProvider; import org.eclipse.che.selenium.core.requestfactory.TestDefaultUserHttpJsonRequestFactory; +import org.eclipse.che.selenium.core.requestfactory.TestUserHttpJsonRequestFactoryCreator; import org.eclipse.che.selenium.core.user.AdminTestUser; import org.eclipse.che.selenium.core.user.CheAdminTestUser; import org.eclipse.che.selenium.core.user.CheTestUserNamespaceResolver; import org.eclipse.che.selenium.core.user.DefaultTestUser; import org.eclipse.che.selenium.core.user.TestUser; +import org.eclipse.che.selenium.core.user.TestUserFactory; import org.eclipse.che.selenium.core.user.TestUserImpl; import org.eclipse.che.selenium.core.user.TestUserNamespaceResolver; import org.eclipse.che.selenium.core.workspace.CheTestWorkspaceUrlResolver; @@ -81,14 +85,22 @@ public class CheSeleniumSuiteModule extends AbstractModule { bind(TestDashboardUrlProvider.class).to(CheTestDashboardUrlProvider.class); bind(HttpJsonRequestFactory.class).to(TestDefaultUserHttpJsonRequestFactory.class); - - bind(AdminTestUser.class).to(CheAdminTestUser.class); + install(new FactoryModuleBuilder().build(TestUserHttpJsonRequestFactoryCreator.class)); bind(TestAuthServiceClient.class).to(CheTestAuthServiceClient.class); bind(TestMachineServiceClient.class).to(CheTestMachineServiceClient.class); bind(TestUser.class).to(TestUserImpl.class); bind(TestWorkspaceProvider.class).to(TestWorkspaceProviderImpl.class).asEagerSingleton(); + + install(new FactoryModuleBuilder().build(TestWorkspaceServiceClientFactory.class)); + + install( + new FactoryModuleBuilder() + .implement(TestUser.class, TestUserImpl.class) + .build(TestUserFactory.class)); + + bind(AdminTestUser.class).to(CheAdminTestUser.class); } @Provides