Skip to content

Commit cd94000

Browse files
raju249diemol
andauthored
Honour registration secret in LocalDistributor (SeleniumHQ#8793)
* Pass registration secret for node registering in local distributor * Add tests for adding node with incorrect secret * Add tests for adding node with correct secret Co-authored-by: Diego Molina <diemol@users.noreply.github.com>
1 parent 1a3f5af commit cd94000

3 files changed

Lines changed: 63 additions & 1 deletion

File tree

java/server/src/org/openqa/selenium/grid/commands/Hub.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ protected void execute(Config config) {
135135
bus,
136136
clientFactory,
137137
sessions,
138-
null);
138+
serverOptions.getRegistrationSecret());
139139
handler.addHandler(distributor);
140140

141141
Router router = new Router(tracer, clientFactory, sessions, distributor);

java/server/test/org/openqa/selenium/grid/distributor/AddingNodesTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,54 @@ public void shouldBeAbleToRegisterALocalNode() throws URISyntaxException {
125125
assertEquals(1, getStereotypes(status).get(CAPS).intValue());
126126
}
127127

128+
@Test
129+
public void shouldNotRegisterALocalNodeWithWrongRegistrationSecret() throws URISyntaxException {
130+
URI sessionUri = new URI("http://example:1234");
131+
HttpClient.Factory clientFactory = new RoutableHttpClientFactory(
132+
externalUrl,
133+
handler,
134+
HttpClient.Factory.createDefault());
135+
136+
Secret registrationSecret = new Secret("my_secret");
137+
138+
Node node = LocalNode.builder(tracer, bus, externalUrl.toURI(), externalUrl.toURI(), null)
139+
.add(CAPS, new TestSessionFactory((id, caps) -> new Session(id, sessionUri, stereotype, caps, Instant.now())))
140+
.build();
141+
handler.addHandler(node);
142+
143+
LocalSessionMap sessions = new LocalSessionMap(tracer, bus);
144+
Distributor secretDistributor = new LocalDistributor(tracer, bus, clientFactory, sessions, registrationSecret);
145+
146+
bus.fire(new NodeStatusEvent(node.getStatus()));
147+
148+
assertEquals(0, secretDistributor.getAvailableNodes().size());
149+
}
150+
151+
@Test
152+
public void shouldRegisterALocalNodeWithCorrectRegistrationSecret() throws URISyntaxException {
153+
URI sessionUri = new URI("http://example:1234");
154+
HttpClient.Factory clientFactory = new RoutableHttpClientFactory(
155+
externalUrl,
156+
handler,
157+
HttpClient.Factory.createDefault());
158+
159+
Secret registrationSecret = new Secret("my_secret");
160+
161+
Node node = LocalNode.builder(tracer, bus, externalUrl.toURI(), externalUrl.toURI(), registrationSecret)
162+
.add(CAPS, new TestSessionFactory((id, caps) -> new Session(id, sessionUri, stereotype, caps, Instant.now())))
163+
.build();
164+
handler.addHandler(node);
165+
166+
LocalSessionMap sessions = new LocalSessionMap(tracer, bus);
167+
Distributor secretDistributor = new LocalDistributor(tracer, bus, clientFactory, sessions, registrationSecret);
168+
169+
bus.fire(new NodeStatusEvent(node.getStatus()));
170+
171+
wait.until(obj -> secretDistributor.getStatus().hasCapacity());
172+
173+
assertEquals(1, secretDistributor.getAvailableNodes().size());
174+
}
175+
128176
@Test
129177
public void shouldBeAbleToRegisterACustomNode() throws URISyntaxException {
130178
URI sessionUri = new URI("http://example:1234");

java/server/test/org/openqa/selenium/grid/distributor/local/LocalDistributorTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@
2727
import org.openqa.selenium.grid.data.CreateSessionResponse;
2828
import org.openqa.selenium.grid.data.DistributorStatus;
2929
import org.openqa.selenium.grid.data.NodeStatus;
30+
import org.openqa.selenium.grid.data.NodeStatusEvent;
3031
import org.openqa.selenium.grid.data.Session;
3132
import org.openqa.selenium.grid.distributor.Distributor;
3233
import org.openqa.selenium.grid.node.Node;
3334
import org.openqa.selenium.grid.node.local.LocalNode;
35+
import org.openqa.selenium.grid.security.Secret;
3436
import org.openqa.selenium.grid.sessionmap.local.LocalSessionMap;
3537
import org.openqa.selenium.grid.testing.TestSessionFactory;
3638
import org.openqa.selenium.remote.HttpSessionId;
@@ -100,6 +102,18 @@ public void testAddNodeToDistributor() {
100102
assertThat(distributorNode.getUri()).isEqualTo(uri);
101103
}
102104

105+
@Test
106+
public void testShouldNotAddNodeWithWrongSecret() {
107+
Secret secret = new Secret("my_secret");
108+
Distributor secretDistributor = new LocalDistributor(tracer, bus, clientFactory, new LocalSessionMap(tracer, bus), secret);
109+
bus.fire(new NodeStatusEvent(localNode.getStatus()));
110+
DistributorStatus status = secretDistributor.getStatus();
111+
112+
//Check the size
113+
final Set<NodeStatus> nodes = status.getNodes();
114+
assertThat(nodes.size()).isEqualTo(0);
115+
}
116+
103117
@Test
104118
public void testRemoveNodeFromDistributor() {
105119
Distributor distributor = new LocalDistributor(tracer, bus, clientFactory, new LocalSessionMap(tracer, bus), null);

0 commit comments

Comments
 (0)