Skip to content

Commit 6ef198f

Browse files
authored
return parsing exception 400 for parsing errors (#1603)
add more ut in restupdateconnector Signed-off-by: Xun Zhang <[email protected]>
1 parent bf51943 commit 6ef198f

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

plugin/src/main/java/org/opensearch/ml/rest/RestMLUpdateConnectorAction.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.List;
1717
import java.util.Locale;
1818

19+
import org.opensearch.OpenSearchParseException;
1920
import org.opensearch.client.node.NodeClient;
2021
import org.opensearch.core.xcontent.XContentParser;
2122
import org.opensearch.ml.common.transport.connector.MLUpdateConnectorAction;
@@ -63,14 +64,17 @@ private MLUpdateConnectorRequest getRequest(RestRequest request) throws IOExcept
6364
throw new IllegalStateException(UPDATE_CONNECTOR_DISABLED_ERR_MSG);
6465
}
6566
if (!request.hasContent()) {
66-
throw new IOException("Failed to update connector: Request body is empty");
67+
throw new OpenSearchParseException("Failed to update connector: Request body is empty");
6768
}
6869

6970
String connectorId = getParameterId(request, PARAMETER_CONNECTOR_ID);
7071

71-
XContentParser parser = request.contentParser();
72-
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser);
73-
74-
return MLUpdateConnectorRequest.parse(parser, connectorId);
72+
try {
73+
XContentParser parser = request.contentParser();
74+
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser);
75+
return MLUpdateConnectorRequest.parse(parser, connectorId);
76+
} catch (IllegalStateException illegalStateException) {
77+
throw new OpenSearchParseException(illegalStateException.getMessage());
78+
}
7579
}
7680
}

plugin/src/test/java/org/opensearch/ml/rest/RestMLUpdateConnectorActionTests.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import static org.mockito.Mockito.when;
1515
import static org.opensearch.ml.utils.MLExceptionUtils.REMOTE_INFERENCE_DISABLED_ERR_MSG;
1616

17-
import java.io.IOException;
1817
import java.util.HashMap;
1918
import java.util.List;
2019
import java.util.Map;
@@ -25,6 +24,7 @@
2524
import org.mockito.ArgumentCaptor;
2625
import org.mockito.Mock;
2726
import org.mockito.MockitoAnnotations;
27+
import org.opensearch.OpenSearchParseException;
2828
import org.opensearch.action.update.UpdateResponse;
2929
import org.opensearch.client.node.NodeClient;
3030
import org.opensearch.common.settings.Settings;
@@ -114,8 +114,15 @@ public void testUpdateConnectorRequest() throws Exception {
114114
assertEquals("2", updateConnectorRequest.getUpdateContent().getVersion());
115115
}
116116

117+
public void testUpdateConnectorRequestWithParsingException() throws Exception {
118+
exceptionRule.expect(OpenSearchParseException.class);
119+
exceptionRule.expectMessage("Can't get text on a VALUE_NULL");
120+
RestRequest request = getRestRequestWithNullValue();
121+
restMLUpdateConnectorAction.handleRequest(request, channel, client);
122+
}
123+
117124
public void testUpdateConnectorRequestWithEmptyContent() throws Exception {
118-
exceptionRule.expect(IOException.class);
125+
exceptionRule.expect(OpenSearchParseException.class);
119126
exceptionRule.expectMessage("Failed to update connector: Request body is empty");
120127
RestRequest request = getRestRequestWithEmptyContent();
121128
restMLUpdateConnectorAction.handleRequest(request, channel, client);
@@ -152,6 +159,20 @@ private RestRequest getRestRequest() {
152159
return request;
153160
}
154161

162+
private RestRequest getRestRequestWithNullValue() {
163+
RestRequest.Method method = RestRequest.Method.POST;
164+
String requestContent = "{\"version\":\"2\",\"description\":null}";
165+
Map<String, String> params = new HashMap<>();
166+
params.put("connector_id", "test_connectorId");
167+
RestRequest request = new FakeRestRequest.Builder(NamedXContentRegistry.EMPTY)
168+
.withMethod(method)
169+
.withPath("/_plugins/_ml/connectors/_update/{connector_id}")
170+
.withParams(params)
171+
.withContent(new BytesArray(requestContent), XContentType.JSON)
172+
.build();
173+
return request;
174+
}
175+
155176
private RestRequest getRestRequestWithEmptyContent() {
156177
RestRequest.Method method = RestRequest.Method.POST;
157178
Map<String, String> params = new HashMap<>();

0 commit comments

Comments
 (0)