Skip to content

Commit 22d2498

Browse files
committed
[grid] Migrate RegistrationRequest.toJson to not use GSON
1 parent 41f1681 commit 22d2498

File tree

4 files changed

+75
-72
lines changed

4 files changed

+75
-72
lines changed

java/server/src/org/openqa/grid/common/RegistrationRequest.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@
2727
import org.openqa.grid.common.exception.GridConfigurationException;
2828
import org.openqa.grid.internal.utils.configuration.GridNodeConfiguration;
2929
import org.openqa.grid.internal.utils.configuration.GridNodeConfiguration.CollectionOfDesiredCapabilitiesDeSerializer;
30-
import org.openqa.grid.internal.utils.configuration.GridNodeConfiguration.CollectionOfDesiredCapabilitiesSerializer;
3130
import org.openqa.selenium.MutableCapabilities;
3231

3332
import java.util.List;
33+
import java.util.Map;
34+
import java.util.TreeMap;
3435

3536
/**
3637
* Helper to register to the grid. Using JSON to exchange the object between the node and the hub.
@@ -117,17 +118,13 @@ public GridNodeConfiguration getConfiguration() {
117118
return configuration;
118119
}
119120

120-
public JsonObject toJson() {
121-
GsonBuilder builder = new GsonBuilder();
122-
builder.registerTypeAdapter(new TypeToken<List<MutableCapabilities>>(){}.getType(),
123-
new CollectionOfDesiredCapabilitiesSerializer());
124-
125-
// note: it's very important that nulls are serialized for this type.
126-
return builder.serializeNulls()
127-
.excludeFieldsWithoutExposeAnnotation()
128-
.create()
129-
.toJsonTree(this, RegistrationRequest.class)
130-
.getAsJsonObject();
121+
public Map<String, Object> toJson() {
122+
Map<String, Object> json = new TreeMap<>();
123+
json.put("class", getClass());
124+
json.put("name", getName());
125+
json.put("description", getDescription());
126+
json.put("configuration", getConfiguration());
127+
return json;
131128
}
132129

133130
/**

java/server/test/org/openqa/grid/common/RegistrationRequestTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.openqa.grid.internal.utils.configuration.GridNodeConfiguration;
3232
import org.openqa.selenium.MutableCapabilities;
3333
import org.openqa.selenium.Platform;
34+
import org.openqa.selenium.json.Json;
3435
import org.openqa.selenium.remote.BrowserType;
3536
import org.openqa.selenium.remote.DesiredCapabilities;
3637

@@ -67,7 +68,7 @@ public void testToJson() {
6768
req.getConfiguration().capabilities.add(cap);
6869
}
6970

70-
String json = req.toJson().toString();
71+
String json = new Json().toJson(req.toJson());
7172

7273
RegistrationRequest req2 = RegistrationRequest.fromJson(json);
7374

java/server/test/org/openqa/grid/web/servlet/BaseServletTest.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919

2020
import com.google.gson.JsonObject;
2121

22+
import org.openqa.selenium.json.Json;
2223
import org.openqa.testing.FakeHttpServletRequest;
2324
import org.openqa.testing.FakeHttpServletResponse;
2425
import org.openqa.testing.UrlInfo;
2526

2627
import java.io.IOException;
28+
import java.util.Map;
2729

2830
import javax.servlet.ServletException;
2931
import javax.servlet.http.HttpServlet;
@@ -41,14 +43,16 @@ protected static UrlInfo createUrl(String path) {
4143

4244
protected FakeHttpServletResponse sendCommand(String method, String commandPath)
4345
throws IOException, ServletException {
44-
return sendCommand(method, commandPath, null);
46+
return sendCommand(method, commandPath, (Map<String, Object>) null);
4547
}
4648

47-
protected FakeHttpServletResponse sendCommand(String method, String commandPath,
48-
JsonObject parameters) throws IOException, ServletException {
49+
protected FakeHttpServletResponse sendCommand(
50+
String method,
51+
String commandPath,
52+
Map<String, Object> parameters) throws IOException, ServletException {
4953
FakeHttpServletRequest request = new FakeHttpServletRequest(method, createUrl(commandPath));
5054
if (parameters != null) {
51-
request.setBody(parameters.toString());
55+
request.setBody(new Json().toJson(parameters));
5256
}
5357
FakeHttpServletResponse response = new FakeHttpServletResponse();
5458
servlet.service(request, response);

java/server/test/org/openqa/grid/web/servlet/RegistrationServletTest.java

Lines changed: 56 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@
2020
import static org.junit.Assert.assertEquals;
2121
import static org.junit.Assert.assertNotNull;
2222

23-
import com.google.gson.GsonBuilder;
24-
import com.google.gson.JsonObject;
25-
import com.google.gson.annotations.SerializedName;
23+
import com.google.common.collect.ImmutableList;
24+
import com.google.common.collect.ImmutableMap;
2625

2726
import org.junit.Before;
2827
import org.junit.Test;
@@ -34,40 +33,42 @@
3433
import org.openqa.grid.internal.utils.configuration.GridHubConfiguration;
3534
import org.openqa.grid.internal.utils.configuration.GridNodeConfiguration;
3635
import org.openqa.grid.web.Hub;
37-
import org.openqa.selenium.remote.DesiredCapabilities;
36+
import org.openqa.selenium.firefox.FirefoxOptions;
3837
import org.openqa.testing.FakeHttpServletResponse;
3938
import org.seleniumhq.jetty9.server.handler.ContextHandler;
4039

41-
import java.util.ArrayList;
42-
import java.util.HashMap;
43-
import java.util.List;
4440
import java.util.Map;
41+
import java.util.TreeMap;
4542

4643
import javax.servlet.ServletContext;
4744
import javax.servlet.ServletException;
4845
import javax.servlet.http.HttpServletResponse;
4946

5047
public class RegistrationServletTest extends BaseServletTest {
51-
private class BaseRequest {
52-
final String name = "proxy-foo";
53-
final String description = "a fictitious proxy";
54-
@SerializedName( "class" )
55-
final String clazz = BaseRequest.class.getCanonicalName();
56-
String id;
57-
}
5848

59-
private final class RequestV2 extends BaseRequest {
60-
final Map<String, Object> configuration = new HashMap<>();
61-
final List<DesiredCapabilities> capabilities = new ArrayList<>();
62-
}
49+
private Map<String, Object> requestWithoutConfig;
50+
private Map<String, Object> grid2Request;
51+
private Map<String, Object> grid3Request;
6352

64-
private final class InvalidV2Request extends BaseRequest {
65-
final List<DesiredCapabilities> capabilities = new ArrayList<>();
66-
}
67-
68-
private final class RequestV3Beta extends BaseRequest {
69-
final GridNodeConfiguration configuration = new GridNodeConfiguration();
70-
final List<DesiredCapabilities> capabilities = new ArrayList<>();
53+
@Before
54+
public void fillBaseRequest() {
55+
// This base request contains most of the fields we normally see serialised, but lacks the
56+
// "configuration" and "capabilities" fields.
57+
Map<String, Object> baseRequest = new TreeMap<>();
58+
baseRequest.put("name", "proxy-foo");
59+
baseRequest.put("description", "a fictitious proxy");
60+
baseRequest.put("class", "com.example.grid.BaseRequest");
61+
62+
requestWithoutConfig = new TreeMap<>(baseRequest);
63+
requestWithoutConfig.put("capabilities", ImmutableList.of());
64+
65+
grid2Request = new TreeMap<>(baseRequest);
66+
grid2Request.put("capabilities", ImmutableList.of());
67+
grid2Request.put("configuration", ImmutableMap.of());
68+
69+
grid3Request = new TreeMap<>(baseRequest);
70+
grid3Request.put("capabilities", ImmutableList.of());
71+
grid3Request.put("configuration", new GridNodeConfiguration());
7172
}
7273

7374
@Before
@@ -106,71 +107,71 @@ private void waitForServletToAddProxy() throws Exception {
106107
*/
107108
@Test(expected = GridConfigurationException.class)
108109
public void testInvalidV2Registration() throws Exception {
109-
final InvalidV2Request request = new InvalidV2Request();
110-
request.capabilities.add(DesiredCapabilities.firefox());
111-
request.id = "http://dummynode:1111";
112-
final JsonObject json = new GsonBuilder().serializeNulls().create()
113-
.toJsonTree(request, InvalidV2Request.class).getAsJsonObject();
114-
sendCommand("POST", "/", json);
115-
}
110+
requestWithoutConfig.put("capabilities", ImmutableList.of(new FirefoxOptions()));
111+
requestWithoutConfig.put("id", "http://dummynode:1111");
116112

113+
sendCommand("POST", "/", requestWithoutConfig);
114+
}
117115

118116
/**
119117
* Tests that the registration request servlet can process a V2 RegistrationRequest which
120118
* contains servlets as a comma separated String.
121119
*/
122120
@Test
123121
public void testLegacyV2Registration() throws Exception {
124-
final RequestV2 request = new RequestV2();
125-
request.configuration.put("servlets", "foo,bar,baz");
126-
request.configuration.put("registerCycle", 30001);
127-
request.configuration.put("proxy", null);
128-
request.capabilities.add(DesiredCapabilities.firefox());
129-
request.id = "http://dummynode:1234";
130-
final JsonObject json = new GsonBuilder().serializeNulls().create()
131-
.toJsonTree(request, RequestV2.class).getAsJsonObject();
132-
final FakeHttpServletResponse response = sendCommand("POST", "/", json);
122+
Map<String, Object> config = new TreeMap<>();
123+
config.put("servlets", "foo,bar,baz");
124+
config.put("registerCycle", 30001);
125+
config.put("proxy", null);
126+
grid2Request.put("configuration", config);
127+
128+
grid2Request.put("capabilities", ImmutableList.of(new FirefoxOptions()));
129+
String id = "http://dummynode:1234";
130+
grid2Request.put("id", id);
131+
132+
final FakeHttpServletResponse response = sendCommand("POST", "/", grid2Request);
133133
waitForServletToAddProxy();
134134

135135
assertEquals(HttpServletResponse.SC_OK, response.getStatus());
136136
assertEquals(((RegistrationServlet) servlet).getRegistry().getAllProxies().size(), 1);
137137

138138
final RemoteProxy proxy = ((RegistrationServlet) servlet).getRegistry().getAllProxies()
139-
.getProxyById(request.id);
139+
.getProxyById(id);
140140
assertNotNull(proxy);
141141
assertEquals(3, proxy.getConfig().servlets.size());
142142
assertEquals(1, proxy.getConfig().capabilities.size());
143143
assertEquals(30001, proxy.getConfig().registerCycle.intValue());
144-
assertEquals(request.id, proxy.getConfig().id);
144+
assertEquals(id, proxy.getConfig().id);
145145
}
146146

147147

148148
/**
149149
* Tests that the registration request servlet can process a V2 RegistrationRequest from
150-
* a 3.0.0-beta node.
150+
* a 3.x node.
151151
*/
152152
@Test
153153
public void testLegacyV3BetaRegistration() throws Exception {
154-
final RequestV3Beta request = new RequestV3Beta();
155-
request.configuration.capabilities.clear();
156-
request.configuration.proxy = null;
157-
request.capabilities.add(DesiredCapabilities.firefox());
158-
request.id = "http://dummynode:2345";
159-
final JsonObject json = new GsonBuilder().serializeNulls().create()
160-
.toJsonTree(request, RequestV3Beta.class).getAsJsonObject();
161-
final FakeHttpServletResponse response = sendCommand("POST", "/", json);
154+
GridNodeConfiguration config = new GridNodeConfiguration();
155+
config.capabilities.clear();
156+
config.proxy = null;
157+
grid3Request.put("configuration", config);
158+
159+
grid3Request.put("capabilities", ImmutableList.of(new FirefoxOptions()));
160+
String id = "http://dummynode:2345";
161+
grid3Request.put("id", id);
162+
final FakeHttpServletResponse response = sendCommand("POST", "/", grid3Request);
162163
waitForServletToAddProxy();
163164

164165
assertEquals(HttpServletResponse.SC_OK, response.getStatus());
165166
assertEquals(((RegistrationServlet) servlet).getRegistry().getAllProxies().size(), 1);
166167

167168
final RemoteProxy proxy = ((RegistrationServlet) servlet).getRegistry().getAllProxies()
168-
.getProxyById(request.id);
169+
.getProxyById(id);
169170
assertNotNull(proxy);
170171
assertEquals(0, proxy.getConfig().servlets.size());
171172
assertEquals(1, proxy.getConfig().capabilities.size());
172-
assertEquals(request.configuration.registerCycle.intValue(), proxy.getConfig().registerCycle.intValue());
173-
assertEquals(request.id, proxy.getConfig().id);
173+
assertEquals(config.registerCycle.intValue(), proxy.getConfig().registerCycle.intValue());
174+
assertEquals(id, proxy.getConfig().id);
174175
}
175176

176177

0 commit comments

Comments
 (0)