Skip to content

Commit 0b1650d

Browse files
authored
Ensure RestHandler.Wrapper delegates all implementations to the wrapped handler (#16154)
* Ensure RestHandler.Wrapper delegates all implementations to the wrapper handler Signed-off-by: Craig Perkins <[email protected]> * Add to CHANGELOG Signed-off-by: Craig Perkins <[email protected]> * Fix typo Signed-off-by: Craig Perkins <[email protected]> --------- Signed-off-by: Craig Perkins <[email protected]>
1 parent 908fefe commit 0b1650d

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
3939
- Add support for docker compose v2 in TestFixturesPlugin ([#16049](https://github.com/opensearch-project/OpenSearch/pull/16049))
4040
- Remove identity-related feature flagged code from the RestController ([#15430](https://github.com/opensearch-project/OpenSearch/pull/15430))
4141
- Remove Identity FeatureFlag ([#16024](https://github.com/opensearch-project/OpenSearch/pull/16024))
42+
- Ensure RestHandler.Wrapper delegates all implementations to the wrapped handler ([#16154](https://github.com/opensearch-project/OpenSearch/pull/16154))
4243

4344

4445
### Deprecated

server/src/main/java/org/opensearch/rest/RestHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,16 @@ public List<ReplacedRoute> replacedRoutes() {
192192
public boolean allowSystemIndexAccessByDefault() {
193193
return delegate.allowSystemIndexAccessByDefault();
194194
}
195+
196+
@Override
197+
public boolean isActionPaginated() {
198+
return delegate.isActionPaginated();
199+
}
200+
201+
@Override
202+
public boolean supportsStreaming() {
203+
return delegate.supportsStreaming();
204+
}
195205
}
196206

197207
/**

server/src/test/java/org/opensearch/rest/BaseRestHandlerTests.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import org.opensearch.client.node.NodeClient;
3636
import org.opensearch.common.Table;
3737
import org.opensearch.common.settings.Settings;
38+
import org.opensearch.core.common.bytes.BytesArray;
39+
import org.opensearch.core.rest.RestStatus;
3840
import org.opensearch.rest.RestHandler.ReplacedRoute;
3941
import org.opensearch.rest.RestHandler.Route;
4042
import org.opensearch.rest.RestRequest.Method;
@@ -46,15 +48,22 @@
4648
import org.opensearch.threadpool.ThreadPool;
4749

4850
import java.io.IOException;
51+
import java.lang.reflect.Modifier;
4952
import java.util.Arrays;
5053
import java.util.Collections;
5154
import java.util.HashMap;
5255
import java.util.List;
5356
import java.util.Set;
5457
import java.util.concurrent.atomic.AtomicBoolean;
58+
import java.util.stream.Collectors;
5559

5660
import static org.hamcrest.core.StringContains.containsString;
5761
import static org.hamcrest.object.HasToString.hasToString;
62+
import static org.mockito.ArgumentMatchers.any;
63+
import static org.mockito.Mockito.spy;
64+
import static org.mockito.Mockito.times;
65+
import static org.mockito.Mockito.verify;
66+
import static org.mockito.Mockito.verifyNoMoreInteractions;
5867

5968
public class BaseRestHandlerTests extends OpenSearchTestCase {
6069
private NodeClient mockClient;
@@ -288,4 +297,36 @@ public void testReplaceRoutesMethod() throws Exception {
288297
}
289298
}
290299

300+
public void testRestHandlerWrapper() throws Exception {
301+
RestHandler rh = new RestHandler() {
302+
@Override
303+
public void handleRequest(RestRequest request, RestChannel channel, NodeClient client) throws Exception {
304+
new BytesRestResponse(RestStatus.OK, BytesRestResponse.TEXT_CONTENT_TYPE, BytesArray.EMPTY);
305+
}
306+
};
307+
RestHandler handlerSpy = spy(rh);
308+
RestHandler.Wrapper rhWrapper = new RestHandler.Wrapper(handlerSpy);
309+
310+
List<java.lang.reflect.Method> overridableMethods = Arrays.stream(RestHandler.class.getMethods())
311+
.filter(
312+
m -> !(Modifier.isPrivate(m.getModifiers()) || Modifier.isStatic(m.getModifiers()) || Modifier.isFinal(m.getModifiers()))
313+
)
314+
.collect(Collectors.toList());
315+
316+
for (java.lang.reflect.Method method : overridableMethods) {
317+
int argCount = method.getParameterCount();
318+
Object[] args = new Object[argCount];
319+
for (int i = 0; i < argCount; i++) {
320+
args[i] = any();
321+
}
322+
if (args.length > 0) {
323+
method.invoke(rhWrapper, args);
324+
} else {
325+
method.invoke(rhWrapper);
326+
}
327+
method.invoke(verify(handlerSpy, times(1)), args);
328+
}
329+
verifyNoMoreInteractions(handlerSpy);
330+
}
331+
291332
}

0 commit comments

Comments
 (0)