Skip to content

Commit 2bf0470

Browse files
author
Igor Vinokur
authored
CHE-3930: Move SshServiceClient from wsmaster to wsagent war (eclipse-che#4386)
1 parent 4c3bd93 commit 2bf0470

10 files changed

Lines changed: 237 additions & 137 deletions

File tree

assembly/assembly-wsagent-war/src/main/java/org/eclipse/che/wsagent/server/WsAgentModule.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@
1010
*******************************************************************************/
1111
package org.eclipse.che.wsagent.server;
1212

13-
import elemental.json.Json;
14-
import elemental.json.JsonFactory;
15-
16-
import com.google.gson.Gson;
1713
import com.google.gson.JsonParser;
1814
import com.google.inject.AbstractModule;
1915
import com.google.inject.Provides;
@@ -40,14 +36,13 @@
4036
import org.eclipse.che.api.git.GitUserResolver;
4137
import org.eclipse.che.api.git.LocalGitUserResolver;
4238
import org.eclipse.che.api.project.server.ProjectApiModule;
43-
import org.eclipse.che.api.ssh.server.HttpSshServiceClient;
44-
import org.eclipse.che.api.ssh.server.SshServiceClient;
4539
import org.eclipse.che.api.user.server.spi.PreferenceDao;
4640
import org.eclipse.che.commons.lang.Pair;
47-
import org.eclipse.che.dto.server.DtoFactory;
4841
import org.eclipse.che.git.impl.jgit.JGitConnectionFactory;
4942
import org.eclipse.che.inject.DynaModule;
5043
import org.eclipse.che.plugin.java.server.rest.WsAgentURLProvider;
44+
import org.eclipse.che.plugin.ssh.key.HttpSshServiceClient;
45+
import org.eclipse.che.plugin.ssh.key.SshServiceClient;
5146
import org.eclipse.che.security.oauth.RemoteOAuthTokenProvider;
5247

5348
import javax.inject.Named;
@@ -126,7 +121,7 @@ private void configureJsonRpc() {
126121

127122
@Provides
128123
@Singleton
129-
public JsonParser jsonParser(){
124+
public JsonParser jsonParser() {
130125
return new JsonParser();
131126
}
132127
}

plugins/plugin-github/che-plugin-github-server/pom.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,6 @@
6565
<groupId>org.eclipse.che.core</groupId>
6666
<artifactId>che-core-api-project</artifactId>
6767
</dependency>
68-
<dependency>
69-
<groupId>org.eclipse.che.core</groupId>
70-
<artifactId>che-core-api-ssh</artifactId>
71-
</dependency>
7268
<dependency>
7369
<groupId>org.eclipse.che.core</groupId>
7470
<artifactId>che-core-api-ssh-shared</artifactId>

plugins/plugin-github/che-plugin-github-server/src/main/java/org/eclipse/che/plugin/github/server/rest/GitHubService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.eclipse.che.api.core.ServerException;
1616
import org.eclipse.che.api.core.UnauthorizedException;
1717
import org.eclipse.che.api.git.exception.GitException;
18-
import org.eclipse.che.api.ssh.server.SshServiceClient;
1918
import org.eclipse.che.api.ssh.shared.dto.GenerateSshPairRequest;
2019
import org.eclipse.che.api.ssh.shared.model.SshPair;
2120
import org.eclipse.che.plugin.github.server.GitHubDTOFactory;
@@ -29,6 +28,7 @@
2928
import org.eclipse.che.plugin.github.shared.GitHubRepository;
3029
import org.eclipse.che.plugin.github.shared.GitHubRepositoryList;
3130
import org.eclipse.che.plugin.github.shared.GitHubUser;
31+
import org.eclipse.che.plugin.ssh.key.SshServiceClient;
3232
import org.kohsuke.github.GHIssueState;
3333
import org.kohsuke.github.GHPullRequest;
3434
import org.kohsuke.github.GHRepository;

plugins/plugin-ssh-key/che-plugin-ssh-key-server/pom.xml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,16 +39,16 @@
3939
<artifactId>javax.inject</artifactId>
4040
</dependency>
4141
<dependency>
42-
<groupId>org.eclipse.che.core</groupId>
43-
<artifactId>che-core-api-core</artifactId>
42+
<groupId>javax.ws.rs</groupId>
43+
<artifactId>javax.ws.rs-api</artifactId>
4444
</dependency>
4545
<dependency>
4646
<groupId>org.eclipse.che.core</groupId>
47-
<artifactId>che-core-api-dto</artifactId>
47+
<artifactId>che-core-api-core</artifactId>
4848
</dependency>
4949
<dependency>
5050
<groupId>org.eclipse.che.core</groupId>
51-
<artifactId>che-core-api-ssh</artifactId>
51+
<artifactId>che-core-api-dto</artifactId>
5252
</dependency>
5353
<dependency>
5454
<groupId>org.eclipse.che.core</groupId>
@@ -58,6 +58,16 @@
5858
<groupId>org.slf4j</groupId>
5959
<artifactId>slf4j-api</artifactId>
6060
</dependency>
61+
<dependency>
62+
<groupId>org.eclipse.che.core</groupId>
63+
<artifactId>che-core-api-ssh</artifactId>
64+
<scope>test</scope>
65+
</dependency>
66+
<dependency>
67+
<groupId>org.eclipse.che.core</groupId>
68+
<artifactId>che-core-commons-test</artifactId>
69+
<scope>test</scope>
70+
</dependency>
6171
<dependency>
6272
<groupId>org.hamcrest</groupId>
6373
<artifactId>hamcrest-core</artifactId>

wsmaster/che-core-api-ssh/src/main/java/org/eclipse/che/api/ssh/server/HttpSshServiceClient.java renamed to plugins/plugin-ssh-key/che-plugin-ssh-key-server/src/main/java/org/eclipse/che/plugin/ssh/key/HttpSshServiceClient.java

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Contributors:
99
* Codenvy, S.A. - initial API and implementation
1010
*******************************************************************************/
11-
package org.eclipse.che.api.ssh.server;
11+
package org.eclipse.che.plugin.ssh.key;
1212

1313
import org.eclipse.che.api.core.ApiException;
1414
import org.eclipse.che.api.core.BadRequestException;
@@ -24,7 +24,6 @@
2424
import javax.inject.Inject;
2525
import javax.inject.Named;
2626
import javax.inject.Singleton;
27-
import javax.ws.rs.core.UriBuilder;
2827
import java.io.IOException;
2928

3029
/**
@@ -38,24 +37,16 @@ public class HttpSshServiceClient implements SshServiceClient {
3837
private final HttpJsonRequestFactory requestFactory;
3938

4039
@Inject
41-
public HttpSshServiceClient(@Named("che.api") String apiUrl,
42-
HttpJsonRequestFactory requestFactory) {
43-
this.sshUrl = UriBuilder.fromUri(apiUrl)
44-
.path(SshService.class)
45-
.build()
46-
.toString();
40+
public HttpSshServiceClient(@Named("che.api") String apiUrl, HttpJsonRequestFactory requestFactory) {
41+
this.sshUrl = apiUrl + "/ssh";
4742
this.requestFactory = requestFactory;
4843
}
4944

5045
@Override
5146
public SshPairDto generatePair(GenerateSshPairRequest request) throws ServerException {
5247
try {
53-
final String url = UriBuilder.fromUri(sshUrl)
54-
.path(SshService.class, "generatePair")
55-
.build()
56-
.toString();
57-
return requestFactory.fromUrl(url)
58-
.useGetMethod()
48+
return requestFactory.fromUrl(sshUrl + "/generate")
49+
.usePostMethod()
5950
.setBody(request)
6051
.request()
6152
.asDto(SshPairDto.class);
@@ -67,12 +58,8 @@ public SshPairDto generatePair(GenerateSshPairRequest request) throws ServerExce
6758
@Override
6859
public void createPair(SshPairDto sshPair) throws ServerException {
6960
try {
70-
final String url = UriBuilder.fromUri(sshUrl)
71-
.path(SshService.class, "createPair")
72-
.build()
73-
.toString();
74-
requestFactory.fromUrl(url)
75-
.useGetMethod()
61+
requestFactory.fromUrl(sshUrl)
62+
.usePostMethod()
7663
.setBody(sshPair)
7764
.request()
7865
.asDto(SshPairDto.class);
@@ -84,12 +71,7 @@ public void createPair(SshPairDto sshPair) throws ServerException {
8471
@Override
8572
public SshPairDto getPair(String service, String name) throws ServerException, NotFoundException {
8673
try {
87-
final String url = UriBuilder.fromUri(sshUrl)
88-
.path(SshService.class, "getPair")
89-
.build(service)
90-
.toString();
91-
92-
return requestFactory.fromUrl(url)
74+
return requestFactory.fromUrl(sshUrl + "/" + service + "/find")
9375
.useGetMethod()
9476
.addQueryParam("name", name)
9577
.request()
@@ -102,12 +84,7 @@ public SshPairDto getPair(String service, String name) throws ServerException, N
10284
@Override
10385
public void removePair(String service, String name) throws ServerException, NotFoundException {
10486
try {
105-
final String url = UriBuilder.fromUri(sshUrl)
106-
.path(SshService.class, "removePair")
107-
.build(service)
108-
.toString();
109-
110-
requestFactory.fromUrl(url)
87+
requestFactory.fromUrl(sshUrl + "/" + service)
11188
.useDeleteMethod()
11289
.addQueryParam("name", name)
11390
.request();

wsmaster/che-core-api-ssh/src/main/java/org/eclipse/che/api/ssh/server/SshServiceClient.java renamed to plugins/plugin-ssh-key/che-plugin-ssh-key-server/src/main/java/org/eclipse/che/plugin/ssh/key/SshServiceClient.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* Contributors:
99
* Codenvy, S.A. - initial API and implementation
1010
*******************************************************************************/
11-
package org.eclipse.che.api.ssh.server;
11+
package org.eclipse.che.plugin.ssh.key;
1212

1313
import org.eclipse.che.api.core.NotFoundException;
1414
import org.eclipse.che.api.core.ServerException;
@@ -29,7 +29,6 @@ public interface SshServiceClient {
2929
* @return instance of generated ssh pair
3030
* @throws ServerException
3131
* when some error occurred while generating or saving ssh pair
32-
* @see {@link SshService#generatePair(GenerateSshPairRequest)}
3332
*/
3433
SshPairDto generatePair(GenerateSshPairRequest request) throws ServerException;
3534

@@ -40,7 +39,6 @@ public interface SshServiceClient {
4039
* ssh pair to create
4140
* @throws ServerException
4241
* when some error occurred while creating ssh pair
43-
* @see {@link SshService#createPair(SshPairDto)}
4442
*/
4543
void createPair(SshPairDto sshPair) throws ServerException;
4644

@@ -56,7 +54,6 @@ public interface SshServiceClient {
5654
* when ssh pair is not found
5755
* @throws ServerException
5856
* when any other error occurs during ssh pair fetching
59-
* @see {@link SshService#getPair(String, String)}}
6057
*/
6158
SshPairDto getPair(String service, String name) throws ServerException, NotFoundException;
6259

@@ -71,7 +68,6 @@ public interface SshServiceClient {
7168
* when ssh pair is not found
7269
* @throws ServerException
7370
* when any other error occurs during ssh pair removing
74-
* @see {@link SshService#removePair(String, String)}
7571
*/
7672
void removePair(String service, String name) throws ServerException, NotFoundException;
7773
}

plugins/plugin-ssh-key/che-plugin-ssh-key-server/src/main/java/org/eclipse/che/plugin/ssh/key/script/SshKeyProviderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
import org.eclipse.che.api.core.ServerException;
1818
import org.eclipse.che.api.core.UnauthorizedException;
1919
import org.eclipse.che.api.core.rest.shared.dto.ExtendedError;
20-
import org.eclipse.che.api.ssh.server.SshServiceClient;
2120
import org.eclipse.che.api.ssh.shared.model.SshPair;
2221
import org.eclipse.che.dto.server.DtoFactory;
22+
import org.eclipse.che.plugin.ssh.key.SshServiceClient;
2323
import org.eclipse.che.plugin.ssh.key.utils.UrlUtils;
2424
import org.slf4j.Logger;
2525
import org.slf4j.LoggerFactory;
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2012-2017 Codenvy, S.A.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v1.0
5+
* which accompanies this distribution, and is available at
6+
* http://www.eclipse.org/legal/epl-v10.html
7+
*
8+
* Contributors:
9+
* Codenvy, S.A. - initial API and implementation
10+
*******************************************************************************/
11+
package org.eclipse.che.plugin.ssh.key;
12+
13+
import org.eclipse.che.api.core.rest.HttpJsonRequest;
14+
import org.eclipse.che.api.core.rest.HttpJsonRequestFactory;
15+
import org.eclipse.che.api.core.rest.HttpJsonResponse;
16+
import org.eclipse.che.api.ssh.server.SshService;
17+
import org.eclipse.che.api.ssh.shared.dto.GenerateSshPairRequest;
18+
import org.eclipse.che.api.ssh.shared.dto.SshPairDto;
19+
import org.eclipse.che.commons.test.mockito.answer.SelfReturningAnswer;
20+
import org.mockito.Mock;
21+
import org.mockito.testng.MockitoTestNGListener;
22+
import org.testng.annotations.BeforeMethod;
23+
import org.testng.annotations.Listeners;
24+
import org.testng.annotations.Test;
25+
26+
import static javax.ws.rs.core.UriBuilder.fromUri;
27+
import static org.mockito.Matchers.anyString;
28+
import static org.mockito.Matchers.eq;
29+
import static org.mockito.Mockito.mock;
30+
import static org.mockito.Mockito.verify;
31+
import static org.mockito.Mockito.when;
32+
33+
/**
34+
* Tests for {@link HttpSshServiceClient}
35+
*
36+
* @author Igor Vinokur
37+
*/
38+
@Listeners(MockitoTestNGListener.class)
39+
public class HttpSshServiceClientTest {
40+
private final static String SSH_KEY_SERVICE = "service";
41+
private final static String SSH_SERVICE_URL = "apiUrl/ssh";
42+
private final static String SSH_KEY_NAME = "name";
43+
private final static String API_URL = "apiUrl";
44+
45+
@Mock
46+
private HttpJsonRequestFactory requestFactory;
47+
@Mock
48+
private HttpJsonResponse jsonResponse;
49+
50+
private HttpJsonRequest jsonRequest;
51+
private HttpSshServiceClient client;
52+
53+
@BeforeMethod
54+
public void setup() throws Exception {
55+
jsonRequest = mock(HttpJsonRequest.class, new SelfReturningAnswer());
56+
when(jsonRequest.request()).thenReturn(jsonResponse);
57+
when(requestFactory.fromUrl(anyString())).thenReturn(jsonRequest);
58+
59+
client = new HttpSshServiceClient(API_URL, requestFactory);
60+
}
61+
62+
@Test
63+
public void shouldMakeGeneratePairRequest() throws Exception {
64+
//given
65+
GenerateSshPairRequest sshPairRequest = mock(GenerateSshPairRequest.class);
66+
67+
//when
68+
client.generatePair(sshPairRequest);
69+
70+
//then
71+
String url = fromUri(SSH_SERVICE_URL).path(SshService.class, "generatePair").build().toString();
72+
verify(requestFactory).fromUrl(eq(url));
73+
verify(jsonRequest).usePostMethod();
74+
verify(jsonRequest).setBody(eq(sshPairRequest));
75+
verify(jsonRequest).request();
76+
verify(jsonResponse).asDto(eq(SshPairDto.class));
77+
}
78+
79+
@Test
80+
public void shouldMakeCreatePairRequest() throws Exception {
81+
//given
82+
SshPairDto sshPairDto = mock(SshPairDto.class);
83+
84+
//when
85+
client.createPair(sshPairDto);
86+
87+
//then
88+
String url = fromUri(SSH_SERVICE_URL).path(SshService.class.getMethod("createPair", SshPairDto.class)).build().toString();
89+
verify(requestFactory).fromUrl(eq(url));
90+
verify(jsonRequest).usePostMethod();
91+
verify(jsonRequest).setBody(eq(sshPairDto));
92+
verify(jsonRequest).request();
93+
verify(jsonResponse).asDto(eq(SshPairDto.class));
94+
}
95+
96+
@Test
97+
public void shouldMakeGetPairRequest() throws Exception {
98+
//when
99+
client.getPair(SSH_KEY_SERVICE, SSH_KEY_NAME);
100+
101+
//then
102+
String url = fromUri(SSH_SERVICE_URL).path(SshService.class, "getPair").build(SSH_KEY_SERVICE).toString();
103+
verify(requestFactory).fromUrl(eq(url));
104+
verify(jsonRequest).useGetMethod();
105+
verify(jsonRequest).addQueryParam(eq("name"), eq(SSH_KEY_NAME));
106+
verify(jsonRequest).request();
107+
verify(jsonResponse).asDto(eq(SshPairDto.class));
108+
}
109+
110+
@Test
111+
public void shouldMakeRemovePairRequest() throws Exception {
112+
//when
113+
client.removePair(SSH_KEY_SERVICE, SSH_KEY_NAME);
114+
115+
//then
116+
String url = fromUri(SSH_SERVICE_URL).path(SshService.class, "removePair").build(SSH_KEY_SERVICE).toString();
117+
verify(requestFactory).fromUrl(eq(url));
118+
verify(jsonRequest).useDeleteMethod();
119+
verify(jsonRequest).addQueryParam(eq("name"), eq(SSH_KEY_NAME));
120+
verify(jsonRequest).request();
121+
}
122+
}

0 commit comments

Comments
 (0)