fixup! Return the default resolver if the factory URL refers directly to a devfile

pull/519/head
Igor Vinokur 2023-06-06 09:33:27 +03:00
parent 1d0388e251
commit 9fe13feb3f
10 changed files with 37 additions and 36 deletions

View File

@ -23,7 +23,7 @@ import java.util.Map;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.che.api.core.ApiException;
import org.eclipse.che.api.factory.server.DefaultFactoryParameterResolver;
import org.eclipse.che.api.factory.server.RawDevfileUrlFactoryParameterResolver;
import org.eclipse.che.api.factory.server.scm.PersonalAccessTokenManager;
import org.eclipse.che.api.factory.server.urlfactory.ProjectConfigDtoMerger;
import org.eclipse.che.api.factory.server.urlfactory.RemoteFactoryUrl;
@ -45,7 +45,7 @@ import org.eclipse.che.api.workspace.shared.dto.devfile.SourceDto;
* @author Anatolii Bazko
*/
@Singleton
public class AzureDevOpsFactoryParametersResolver extends DefaultFactoryParameterResolver {
public class AzureDevOpsFactoryParametersResolver extends RawDevfileUrlFactoryParameterResolver {
/** Parser which will allow to check validity of URLs and create objects. */
private final AzureDevOpsURLParser azureDevOpsURLParser;

View File

@ -22,7 +22,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.che.api.core.ApiException;
import org.eclipse.che.api.core.BadRequestException;
import org.eclipse.che.api.factory.server.DefaultFactoryParameterResolver;
import org.eclipse.che.api.factory.server.RawDevfileUrlFactoryParameterResolver;
import org.eclipse.che.api.factory.server.scm.PersonalAccessTokenManager;
import org.eclipse.che.api.factory.server.urlfactory.RemoteFactoryUrl;
import org.eclipse.che.api.factory.server.urlfactory.URLFactoryBuilder;
@ -43,7 +43,7 @@ import org.eclipse.che.api.workspace.shared.dto.devfile.SourceDto;
*/
@Singleton
public class BitbucketServerAuthorizingFactoryParametersResolver
extends DefaultFactoryParameterResolver {
extends RawDevfileUrlFactoryParameterResolver {
/** Parser which will allow to check validity of URLs and create objects. */
private final BitbucketServerURLParser bitbucketURLParser;

View File

@ -22,7 +22,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.che.api.core.ApiException;
import org.eclipse.che.api.core.BadRequestException;
import org.eclipse.che.api.factory.server.DefaultFactoryParameterResolver;
import org.eclipse.che.api.factory.server.RawDevfileUrlFactoryParameterResolver;
import org.eclipse.che.api.factory.server.scm.PersonalAccessTokenManager;
import org.eclipse.che.api.factory.server.urlfactory.ProjectConfigDtoMerger;
import org.eclipse.che.api.factory.server.urlfactory.RemoteFactoryUrl;
@ -38,7 +38,7 @@ import org.eclipse.che.api.workspace.shared.dto.devfile.ProjectDto;
/** Provides Factory Parameters resolver for bitbucket repositories. */
@Singleton
public class BitbucketFactoryParametersResolver extends DefaultFactoryParameterResolver {
public class BitbucketFactoryParametersResolver extends RawDevfileUrlFactoryParameterResolver {
/** Parser which will allow to check validity of URLs and create objects. */
private final BitbucketURLParser bitbucketURLParser;

View File

@ -20,7 +20,7 @@ import java.util.Map;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.che.api.core.ApiException;
import org.eclipse.che.api.factory.server.DefaultFactoryParameterResolver;
import org.eclipse.che.api.factory.server.RawDevfileUrlFactoryParameterResolver;
import org.eclipse.che.api.factory.server.scm.PersonalAccessTokenManager;
import org.eclipse.che.api.factory.server.urlfactory.RemoteFactoryUrl;
import org.eclipse.che.api.factory.server.urlfactory.URLFactoryBuilder;
@ -39,7 +39,7 @@ import org.eclipse.che.api.workspace.shared.dto.devfile.SourceDto;
* @author Anatolii Bazko
*/
@Singleton
public class GitSshFactoryParametersResolver extends DefaultFactoryParameterResolver {
public class GitSshFactoryParametersResolver extends RawDevfileUrlFactoryParameterResolver {
private final GitSshURLParser gitSshURLParser;

View File

@ -23,7 +23,7 @@ import javax.inject.Named;
import javax.inject.Singleton;
import org.eclipse.che.api.core.ApiException;
import org.eclipse.che.api.core.BadRequestException;
import org.eclipse.che.api.factory.server.DefaultFactoryParameterResolver;
import org.eclipse.che.api.factory.server.RawDevfileUrlFactoryParameterResolver;
import org.eclipse.che.api.factory.server.scm.PersonalAccessTokenManager;
import org.eclipse.che.api.factory.server.urlfactory.ProjectConfigDtoMerger;
import org.eclipse.che.api.factory.server.urlfactory.RemoteFactoryUrl;
@ -44,7 +44,7 @@ import org.eclipse.che.commons.annotation.Nullable;
* @author Florent Benoit
*/
@Singleton
public class GithubFactoryParametersResolver extends DefaultFactoryParameterResolver {
public class GithubFactoryParametersResolver extends RawDevfileUrlFactoryParameterResolver {
/** Parser which will allow to check validity of URLs and create objects. */
private final GithubURLParser githubUrlParser;

View File

@ -22,7 +22,7 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.che.api.core.ApiException;
import org.eclipse.che.api.core.BadRequestException;
import org.eclipse.che.api.factory.server.DefaultFactoryParameterResolver;
import org.eclipse.che.api.factory.server.RawDevfileUrlFactoryParameterResolver;
import org.eclipse.che.api.factory.server.scm.PersonalAccessTokenManager;
import org.eclipse.che.api.factory.server.urlfactory.RemoteFactoryUrl;
import org.eclipse.che.api.factory.server.urlfactory.URLFactoryBuilder;
@ -41,7 +41,7 @@ import org.eclipse.che.api.workspace.shared.dto.devfile.SourceDto;
* @author Max Shaposhnyk
*/
@Singleton
public class GitlabFactoryParametersResolver extends DefaultFactoryParameterResolver {
public class GitlabFactoryParametersResolver extends RawDevfileUrlFactoryParameterResolver {
private final GitlabUrlParser gitlabURLParser;
private final PersonalAccessTokenManager personalAccessTokenManager;

View File

@ -175,7 +175,7 @@ public class FactoryService extends Service {
@SuppressWarnings("unused")
private Set<FactoryParametersResolver> specificFactoryParametersResolvers;
@Inject private DefaultFactoryParameterResolver defaultFactoryResolver;
@Inject private RawDevfileUrlFactoryParameterResolver defaultFactoryResolver;
/**
* Provides a suitable resolver for the given parameters. If there is no at least one resolver

View File

@ -42,12 +42,11 @@ import org.eclipse.che.api.workspace.shared.dto.devfile.DevfileDto;
import org.eclipse.che.api.workspace.shared.dto.devfile.ProjectDto;
/**
* Default {@link FactoryParametersResolver} implementation. Tries to resolve factory based on
* provided parameters. Presumes url parameter as direct URL to a devfile content. Extracts and
* applies devfile values override parameters.
* {@link FactoryParametersResolver} implementation to resolve factory based on url parameter as a
* direct URL to a devfile content. Extracts and applies devfile values override parameters.
*/
@Singleton
public class DefaultFactoryParameterResolver implements FactoryParametersResolver {
public class RawDevfileUrlFactoryParameterResolver implements FactoryParametersResolver {
private static final String OVERRIDE_PREFIX = "override.";
@ -56,7 +55,7 @@ public class DefaultFactoryParameterResolver implements FactoryParametersResolve
@Inject private DevfileFilenamesProvider devfileFilenamesProvider;
@Inject
public DefaultFactoryParameterResolver(
public RawDevfileUrlFactoryParameterResolver(
URLFactoryBuilder urlFactoryBuilder, URLFetcher urlFetcher) {
this.urlFactoryBuilder = urlFactoryBuilder;
this.urlFetcher = urlFetcher;

View File

@ -107,7 +107,7 @@ public class FactoryServiceTest {
@Mock private PreferenceManager preferenceManager;
@Mock private UserManager userManager;
@Mock private AdditionalFilenamesProvider additionalFilenamesProvider;
@Mock private DefaultFactoryParameterResolver defaultFactoryParameterResolver;
@Mock private RawDevfileUrlFactoryParameterResolver rawDevfileUrlFactoryParameterResolver;
@Mock private PersonalAccessTokenManager personalAccessTokenManager;
@InjectMocks private FactoryParametersResolverHolder factoryParametersResolverHolder;
@ -153,7 +153,7 @@ public class FactoryServiceTest {
@Test
public void shouldThrowBadRequestWhenNoURLParameterGiven() throws Exception {
final FactoryParametersResolverHolder dummyHolder = spy(factoryParametersResolverHolder);
doReturn(defaultFactoryParameterResolver)
doReturn(rawDevfileUrlFactoryParameterResolver)
.when(dummyHolder)
.getFactoryParametersResolver(anyMap());
// service instance with dummy holder
@ -180,7 +180,7 @@ public class FactoryServiceTest {
@Test
public void checkValidateResolver() throws Exception {
final FactoryParametersResolverHolder dummyHolder = spy(factoryParametersResolverHolder);
doReturn(defaultFactoryParameterResolver)
doReturn(rawDevfileUrlFactoryParameterResolver)
.when(dummyHolder)
.getFactoryParametersResolver(anyMap());
// service instance with dummy holder
@ -199,7 +199,7 @@ public class FactoryServiceTest {
newDto(FactoryDto.class).withV(CURRENT_VERSION).withName("matchingResolverFactory");
// accept resolver
when(defaultFactoryParameterResolver.createFactory(anyMap())).thenReturn(expectFactory);
when(rawDevfileUrlFactoryParameterResolver.createFactory(anyMap())).thenReturn(expectFactory);
// when
final Map<String, String> map = new HashMap<>();
@ -217,7 +217,7 @@ public class FactoryServiceTest {
// check we call resolvers
dummyHolder.getFactoryParametersResolver(anyMap());
verify(defaultFactoryParameterResolver).createFactory(anyMap());
verify(rawDevfileUrlFactoryParameterResolver).createFactory(anyMap());
// check we call validator
verify(acceptValidator).validateOnAccept(any());
@ -270,7 +270,7 @@ public class FactoryServiceTest {
public void shouldReturnDefaultFactoryParameterResolver() throws Exception {
// given
Map<String, String> params = singletonMap(URL_PARAMETER_NAME, "https://host/path/devfile.yaml");
when(defaultFactoryParameterResolver.accept(eq(params))).thenReturn(true);
when(rawDevfileUrlFactoryParameterResolver.accept(eq(params))).thenReturn(true);
// when
FactoryParametersResolver factoryParametersResolver =
@ -281,7 +281,7 @@ public class FactoryServiceTest {
factoryParametersResolver
.getClass()
.getName()
.startsWith(DefaultFactoryParameterResolver.class.getName()));
.startsWith(RawDevfileUrlFactoryParameterResolver.class.getName()));
}
private FactoryImpl createFactory() {

View File

@ -54,7 +54,7 @@ import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(value = {MockitoTestNGListener.class})
public class DefaultFactoryParameterResolverTest {
public class RawDevfileUrlFactoryParameterResolverTest {
private static final String DEVFILE =
""
@ -70,7 +70,7 @@ public class DefaultFactoryParameterResolverTest {
private final DevfileFilenamesProvider devfileFilenamesProvider =
new DevfileFilenamesProvider("devfile.yaml, .devfile.yaml");
@InjectMocks private DefaultFactoryParameterResolver defaultFactoryParameterResolver;
@InjectMocks private RawDevfileUrlFactoryParameterResolver rawDevfileUrlFactoryParameterResolver;
@Test
public void shouldResolveRelativeFiles() throws Exception {
@ -94,8 +94,8 @@ public class DefaultFactoryParameterResolverTest {
new URLFactoryBuilder(
"editor", "plugin", false, devfileParser, new DevfileVersionDetector());
DefaultFactoryParameterResolver res =
new DefaultFactoryParameterResolver(factoryBuilder, urlFetcher);
RawDevfileUrlFactoryParameterResolver res =
new RawDevfileUrlFactoryParameterResolver(factoryBuilder, urlFetcher);
// set up our factory with the location of our devfile that is referencing our localfile
Map<String, String> factoryParameters = new HashMap<>();
@ -116,8 +116,8 @@ public class DefaultFactoryParameterResolverTest {
URLFactoryBuilder urlFactoryBuilder = mock(URLFactoryBuilder.class);
URLFetcher urlFetcher = mock(URLFetcher.class);
DefaultFactoryParameterResolver res =
new DefaultFactoryParameterResolver(urlFactoryBuilder, urlFetcher);
RawDevfileUrlFactoryParameterResolver res =
new RawDevfileUrlFactoryParameterResolver(urlFactoryBuilder, urlFetcher);
Map<String, String> factoryParameters = new HashMap<>();
factoryParameters.put(URL_PARAMETER_NAME, "http://myloc/devfile");
@ -147,8 +147,8 @@ public class DefaultFactoryParameterResolverTest {
URLFactoryBuilder urlFactoryBuilder = mock(URLFactoryBuilder.class);
URLFetcher urlFetcher = mock(URLFetcher.class);
DefaultFactoryParameterResolver res =
new DefaultFactoryParameterResolver(urlFactoryBuilder, urlFetcher);
RawDevfileUrlFactoryParameterResolver res =
new RawDevfileUrlFactoryParameterResolver(urlFactoryBuilder, urlFetcher);
Map<String, String> factoryParameters = new HashMap<>();
factoryParameters.put(URL_PARAMETER_NAME, url);
@ -171,13 +171,15 @@ public class DefaultFactoryParameterResolverTest {
throws NoSuchFieldException, IllegalAccessException {
// given
Field field =
defaultFactoryParameterResolver.getClass().getDeclaredField("devfileFilenamesProvider");
rawDevfileUrlFactoryParameterResolver
.getClass()
.getDeclaredField("devfileFilenamesProvider");
field.setAccessible(true);
field.set(defaultFactoryParameterResolver, devfileFilenamesProvider);
field.set(rawDevfileUrlFactoryParameterResolver, devfileFilenamesProvider);
// when
boolean result =
defaultFactoryParameterResolver.accept(
rawDevfileUrlFactoryParameterResolver.accept(
Collections.singletonMap(URL_PARAMETER_NAME, "https://host/path/" + devfileName));
// then