Do not throw an error on token refresh when starting a workspace

pull/609/head
ivinokur 2023-11-14 10:51:45 +02:00
parent 92b37d2b6e
commit 379ce02be2
2 changed files with 53 additions and 1 deletions

View File

@ -43,6 +43,8 @@ import org.eclipse.che.api.factory.server.scm.exception.UnknownScmProviderExcept
import org.eclipse.che.api.factory.server.scm.exception.UnsatisfiedScmPreconditionException;
import org.eclipse.che.api.factory.shared.dto.FactoryMetaDto;
import org.eclipse.che.security.oauth.AuthorisationRequestManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Defines Factory REST API.
@ -61,6 +63,8 @@ public class FactoryService extends Service {
/** Validate query parameter. If true, factory will be validated */
public static final String VALIDATE_QUERY_PARAMETER = "validate";
private static final Logger LOG = LoggerFactory.getLogger(FactoryService.class);
private final FactoryAcceptValidator acceptValidator;
private final FactoryParametersResolverHolder factoryParametersResolverHolder;
private final AdditionalFilenamesProvider additionalFilenamesProvider;
@ -160,7 +164,8 @@ public class FactoryService extends Service {
| ScmConfigurationPersistenceException
| UnknownScmProviderException
| UnsatisfiedScmPreconditionException e) {
throw new ApiException(e);
// Do not throw an exception here, proceed the workspace start.
LOG.debug("Failed to update the OAuth token", e);
} catch (ScmUnauthorizedException e) {
throw toApiException(e);
}

View File

@ -55,6 +55,10 @@ import org.eclipse.che.api.factory.server.FactoryService.FactoryParametersResolv
import org.eclipse.che.api.factory.server.builder.FactoryBuilder;
import org.eclipse.che.api.factory.server.impl.SourceStorageParametersValidator;
import org.eclipse.che.api.factory.server.scm.PersonalAccessTokenManager;
import org.eclipse.che.api.factory.server.scm.exception.ScmCommunicationException;
import org.eclipse.che.api.factory.server.scm.exception.ScmConfigurationPersistenceException;
import org.eclipse.che.api.factory.server.scm.exception.UnknownScmProviderException;
import org.eclipse.che.api.factory.server.scm.exception.UnsatisfiedScmPreconditionException;
import org.eclipse.che.api.factory.server.urlfactory.RemoteFactoryUrl;
import org.eclipse.che.api.factory.shared.dto.FactoryDto;
import org.eclipse.che.api.user.server.PreferenceManager;
@ -72,6 +76,7 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.testng.MockitoTestNGListener;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@ -309,6 +314,48 @@ public class FactoryServiceTest {
"Factory url required");
}
@Test(dataProvider = "exceptionProvider")
public void shouldNotThrowExceptionOtherThenScmUnauthorizedException(
Class<Throwable> throwableClass) throws Exception {
// given
final FactoryParametersResolverHolder dummyHolder = spy(factoryParametersResolverHolder);
FactoryParametersResolver factoryParametersResolver = mock(FactoryParametersResolver.class);
doReturn(factoryParametersResolver).when(dummyHolder).getFactoryParametersResolver(anyMap());
RemoteFactoryUrl remoteFactoryUrl = mock(RemoteFactoryUrl.class);
when(factoryParametersResolver.parseFactoryUrl(eq("someUrl"))).thenReturn(remoteFactoryUrl);
when(remoteFactoryUrl.getProviderUrl()).thenReturn(scmServerUrl);
when(authorisationRequestManager.isStored(any())).thenReturn(false);
when(personalAccessTokenManager.getAndStore(any())).thenThrow(throwableClass);
service =
new FactoryService(
acceptValidator,
dummyHolder,
additionalFilenamesProvider,
personalAccessTokenManager,
authorisationRequestManager);
// when
Response response =
given()
.contentType(ContentType.JSON)
.when()
.queryParam("url", "someUrl")
.post(SERVICE_PATH + "/token/refresh");
// then
assertEquals(response.getStatusCode(), 204);
}
@DataProvider(name = "exceptionProvider")
private Object[] exceptionClasses() {
return new Class[] {
ScmCommunicationException.class,
ScmConfigurationPersistenceException.class,
UnknownScmProviderException.class,
UnsatisfiedScmPreconditionException.class
};
}
@Test
public void shouldReturnDefaultFactoryParameterResolver() throws Exception {
// given