From 965ba42fd6cd10c583340d8df1749fa301cee89d Mon Sep 17 00:00:00 2001 From: Jedr Blaszyk Date: Fri, 17 May 2024 12:55:20 +0200 Subject: [PATCH] [Connector API] Improve create connector endpoints --- .../apis/create-connector-api.asciidoc | 9 +- .../rest-api-spec/api/connector.post.json | 2 +- .../rest-api-spec/api/connector.put.json | 8 +- .../entsearch/connector/10_connector_put.yml | 33 +++++ .../entsearch/connector/15_connector_post.yml | 14 ++ .../connector/ConnectorIndexService.java | 96 ++++-------- .../action/ConnectorCreateActionResponse.java | 80 ++++++++++ .../connector/action/PostConnectorAction.java | 54 +------ .../connector/action/PutConnectorAction.java | 68 ++------- .../action/RestPostConnectorAction.java | 14 +- .../action/RestPutConnectorAction.java | 20 ++- .../action/TransportPostConnectorAction.java | 15 +- .../action/TransportPutConnectorAction.java | 15 +- .../connector/ConnectorIndexServiceTests.java | 138 ++++++------------ ...ctorActionResponseBWCSerializingTests.java | 15 +- ...ctorActionResponseBWCSerializingTests.java | 14 +- .../action/PutConnectorActionTests.java | 16 -- 17 files changed, 291 insertions(+), 320 deletions(-) create mode 100644 x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/ConnectorCreateActionResponse.java diff --git a/docs/reference/connector/apis/create-connector-api.asciidoc b/docs/reference/connector/apis/create-connector-api.asciidoc index 04f91acc8640..2d7944c52f21 100644 --- a/docs/reference/connector/apis/create-connector-api.asciidoc +++ b/docs/reference/connector/apis/create-connector-api.asciidoc @@ -33,9 +33,9 @@ DELETE _connector/my-connector [[create-connector-api-request]] ==== {api-request-title} -`POST _connector` +* `POST _connector` -`PUT _connector/` +* `PUT _connector/` [[create-connector-api-prereqs]] @@ -54,7 +54,7 @@ Creates a connector document in the internal index and initializes its configura ==== {api-path-parms-title} ``:: -(Required, string) Unique identifier of a connector. +(Optional, string) Unique identifier of a connector. [role="child_attributes"] @@ -123,7 +123,8 @@ The API returns the following result: [source,console-result] ---- { - "result": "created" + "result": "created", + "id": "my-connector" } ---- //// diff --git a/rest-api-spec/src/main/resources/rest-api-spec/api/connector.post.json b/rest-api-spec/src/main/resources/rest-api-spec/api/connector.post.json index edc865012876..365c5353b2f4 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/api/connector.post.json +++ b/rest-api-spec/src/main/resources/rest-api-spec/api/connector.post.json @@ -26,7 +26,7 @@ }, "body": { "description": "The connector configuration.", - "required": true + "required": false } } } diff --git a/rest-api-spec/src/main/resources/rest-api-spec/api/connector.put.json b/rest-api-spec/src/main/resources/rest-api-spec/api/connector.put.json index af733de6aa06..dfcda983cfc4 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/api/connector.put.json +++ b/rest-api-spec/src/main/resources/rest-api-spec/api/connector.put.json @@ -27,12 +27,18 @@ "description": "The unique identifier of the connector to be created or updated." } } + }, + { + "path": "/_connector", + "methods": [ + "PUT" + ] } ] }, "body": { "description": "The connector configuration.", - "required": true + "required": false } } } diff --git a/x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/10_connector_put.yml b/x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/10_connector_put.yml index 878d81e09596..5cfb016e1b6d 100644 --- a/x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/10_connector_put.yml +++ b/x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/10_connector_put.yml @@ -115,7 +115,40 @@ setup: is_native: false service_type: super-connector +--- +'Create Connector - Id returned as part of response': + - do: + connector.put: + connector_id: test-connector-1 + body: + index_name: search-test + + - match: { result: 'created' } + - match: { id: test-connector-1 } + +--- +'Create Connector - Succeeds if body not provided': + - do: + connector.put: + connector_id: test-connector-1 + + - match: { result: 'created' } + - match: { id: test-connector-1 } + + +--- +'Create Connector - Succeeds if body not provided and id not provided': + - do: + connector.put: { } + + - set: { id: id } + - match: { id: $id } + + - do: + connector.get: + connector_id: $id + - match: { id: $id } --- 'Create Connector - Index name used by another connector': diff --git a/x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/15_connector_post.yml b/x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/15_connector_post.yml index b724b50a726a..1cbff6a35e18 100644 --- a/x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/15_connector_post.yml +++ b/x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/15_connector_post.yml @@ -29,6 +29,20 @@ setup: - match: { is_native: false } - match: { service_type: super-connector } +--- +'Create Connector - Succeeds if body not provided': + - do: + connector.post: { } + + - set: { id: id } + - match: { id: $id } + + - do: + connector.get: + connector_id: $id + + - match: { id: $id } + --- 'Create Connector - Default values are initialized correctly': - do: diff --git a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/ConnectorIndexService.java b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/ConnectorIndexService.java index 1d2ed5d77cd8..50e2633bb8c7 100644 --- a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/ConnectorIndexService.java +++ b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/ConnectorIndexService.java @@ -41,8 +41,7 @@ import org.elasticsearch.search.sort.SortOrder; import org.elasticsearch.xcontent.ToXContent; import org.elasticsearch.xcontent.XContentType; -import org.elasticsearch.xpack.application.connector.action.PostConnectorAction; -import org.elasticsearch.xpack.application.connector.action.PutConnectorAction; +import org.elasticsearch.xpack.application.connector.action.ConnectorCreateActionResponse; import org.elasticsearch.xpack.application.connector.action.UpdateConnectorApiKeyIdAction; import org.elasticsearch.xpack.application.connector.action.UpdateConnectorConfigurationAction; import org.elasticsearch.xpack.application.connector.action.UpdateConnectorErrorAction; @@ -96,25 +95,28 @@ public ConnectorIndexService(Client client) { } /** - * Creates or updates the {@link Connector} in the underlying index with a specific doc ID. - * - * @param request Request for creating the connector. + * Creates or updates the {@link Connector} in the underlying index with a specific doc ID + * if connectorId is provided. Otherwise, the connector doc is indexed with auto-generated doc ID. + * @param connectorId The id of the connector object. If null, id will be auto-generated. + * @param description The description of the connector. + * @param indexName The name of the index associated with the connector. It can be null to indicate that index is not attached yet. + * @param isNative Flag indicating if the connector is native; defaults to false if null. + * @param language The language supported by the connector. + * @param name The name of the connector; defaults to an empty string if null. + * @param serviceType The type of service the connector integrates with. * @param listener The action listener to invoke on response/failure. */ - public void createConnectorWithDocId(PutConnectorAction.Request request, ActionListener listener) { - - String indexName = request.getIndexName(); - String connectorId = request.getConnectorId(); - - Connector connector = createConnectorWithDefaultValues( - request.getDescription(), - request.getIndexName(), - request.getIsNative(), - request.getLanguage(), - request.getName(), - request.getServiceType() - ); - + public void createConnector( + String connectorId, + String description, + String indexName, + Boolean isNative, + String language, + String name, + String serviceType, + ActionListener listener + ) { + Connector connector = createConnectorWithDefaultValues(description, indexName, isNative, language, name, serviceType); try { isDataIndexNameAlreadyInUse(indexName, connectorId, listener.delegateFailure((l, isIndexNameInUse) -> { if (isIndexNameInUse) { @@ -127,62 +129,20 @@ public void createConnectorWithDocId(PutConnectorAction.Request request, ActionL return; } try { - final IndexRequest indexRequest = new IndexRequest(CONNECTOR_INDEX_NAME).opType(DocWriteRequest.OpType.INDEX) - .id(connectorId) + IndexRequest indexRequest = new IndexRequest(CONNECTOR_INDEX_NAME).opType(DocWriteRequest.OpType.INDEX) .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE) .source(connector.toXContent(jsonBuilder(), ToXContent.EMPTY_PARAMS)); - client.index(indexRequest, listener); - } catch (Exception e) { - listener.onFailure(e); - } - })); - } catch (Exception e) { - listener.onFailure(e); - } - } - - /** - * Creates or updates the {@link Connector} in the underlying index with an auto-generated doc ID. - * - * @param request Request for creating the connector. - * @param listener The action listener to invoke on response/failure. - */ - public void createConnectorWithAutoGeneratedId( - PostConnectorAction.Request request, - ActionListener listener - ) { - - String indexName = request.getIndexName(); - - Connector connector = createConnectorWithDefaultValues( - request.getDescription(), - indexName, - request.getIsNative(), - request.getLanguage(), - request.getName(), - request.getServiceType() - ); - try { - isDataIndexNameAlreadyInUse(indexName, null, listener.delegateFailure((l, isIndexNameInUse) -> { - if (isIndexNameInUse) { - l.onFailure( - new ElasticsearchStatusException( - "Index name [" + indexName + "] is used by another connector.", - RestStatus.BAD_REQUEST - ) - ); - return; - } - try { - final IndexRequest indexRequest = new IndexRequest(CONNECTOR_INDEX_NAME).opType(DocWriteRequest.OpType.INDEX) - .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE) - .source(connector.toXContent(jsonBuilder(), ToXContent.EMPTY_PARAMS)); + if (Strings.isNullOrEmpty(connectorId) == false) { + indexRequest = indexRequest.id(connectorId); + } client.index( indexRequest, listener.delegateFailureAndWrap( - (ll, indexResponse) -> ll.onResponse(new PostConnectorAction.Response(indexResponse.getId())) + (ll, indexResponse) -> ll.onResponse( + new ConnectorCreateActionResponse(indexResponse.getId(), indexResponse.getResult()) + ) ) ); } catch (Exception e) { diff --git a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/ConnectorCreateActionResponse.java b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/ConnectorCreateActionResponse.java new file mode 100644 index 000000000000..2c585a842e12 --- /dev/null +++ b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/ConnectorCreateActionResponse.java @@ -0,0 +1,80 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +package org.elasticsearch.xpack.application.connector.action; + +import org.elasticsearch.action.ActionResponse; +import org.elasticsearch.action.DocWriteResponse; +import org.elasticsearch.common.io.stream.StreamInput; +import org.elasticsearch.common.io.stream.StreamOutput; +import org.elasticsearch.rest.RestStatus; +import org.elasticsearch.xcontent.ToXContentObject; +import org.elasticsearch.xcontent.XContentBuilder; + +import java.io.IOException; +import java.util.Objects; + +public class ConnectorCreateActionResponse extends ActionResponse implements ToXContentObject { + + private final String id; + private final DocWriteResponse.Result result; + + public ConnectorCreateActionResponse(StreamInput in) throws IOException { + super(in); + this.id = in.readString(); + this.result = DocWriteResponse.Result.readFrom(in); + } + + public ConnectorCreateActionResponse(String id, DocWriteResponse.Result result) { + this.id = id; + this.result = result; + } + + public String getId() { + return id; + } + + public DocWriteResponse.Result getResult() { + return result; + } + + @Override + public void writeTo(StreamOutput out) throws IOException { + out.writeString(id); + result.writeTo(out); + } + + @Override + public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { + builder.startObject(); + builder.field("id", this.id); + builder.field("result", this.result.getLowercase()); + builder.endObject(); + return builder; + } + + public RestStatus status() { + return switch (result) { + case CREATED -> RestStatus.CREATED; + case NOT_FOUND -> RestStatus.NOT_FOUND; + default -> RestStatus.OK; + }; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ConnectorCreateActionResponse that = (ConnectorCreateActionResponse) o; + return Objects.equals(id, that.id) && result == that.result; + } + + @Override + public int hashCode() { + return Objects.hash(id, result); + } +} diff --git a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PostConnectorAction.java b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PostConnectorAction.java index d465418cb979..26371ffbed15 100644 --- a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PostConnectorAction.java +++ b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PostConnectorAction.java @@ -9,7 +9,6 @@ import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.action.ActionRequestValidationException; -import org.elasticsearch.action.ActionResponse; import org.elasticsearch.action.ActionType; import org.elasticsearch.common.bytes.BytesReference; import org.elasticsearch.common.io.stream.StreamInput; @@ -23,7 +22,6 @@ import org.elasticsearch.xcontent.XContentParser; import org.elasticsearch.xcontent.XContentParserConfiguration; import org.elasticsearch.xcontent.XContentType; -import org.elasticsearch.xpack.application.connector.Connector; import java.io.IOException; import java.util.Objects; @@ -33,7 +31,7 @@ public class PostConnectorAction { public static final String NAME = "indices:data/write/xpack/connector/post"; - public static final ActionType INSTANCE = new ActionType<>(NAME); + public static final ActionType INSTANCE = new ActionType<>(NAME); private PostConnectorAction() {/* no instances */} @@ -61,6 +59,10 @@ public Request(String description, String indexName, Boolean isNative, String la this.serviceType = serviceType; } + public Request() { + this(null, null, false, null, null, null); + } + public Request(StreamInput in) throws IOException { super(in); this.description = in.readOptionalString(); @@ -194,50 +196,4 @@ public int hashCode() { return Objects.hash(description, indexName, isNative, language, name, serviceType); } } - - public static class Response extends ActionResponse implements ToXContentObject { - - private final String id; - - public Response(StreamInput in) throws IOException { - super(in); - this.id = in.readString(); - } - - public Response(String id) { - this.id = id; - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - out.writeString(id); - } - - public String getId() { - return id; - } - - @Override - public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { - builder.startObject(); - { - builder.field(Connector.ID_FIELD.getPreferredName(), id); - } - builder.endObject(); - return builder; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Response response = (Response) o; - return Objects.equals(id, response.id); - } - - @Override - public int hashCode() { - return Objects.hash(id); - } - } } diff --git a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PutConnectorAction.java b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PutConnectorAction.java index 75f9ad24bef3..96ef48323682 100644 --- a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PutConnectorAction.java +++ b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PutConnectorAction.java @@ -9,9 +9,7 @@ import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.action.ActionRequestValidationException; -import org.elasticsearch.action.ActionResponse; import org.elasticsearch.action.ActionType; -import org.elasticsearch.action.DocWriteResponse; import org.elasticsearch.action.IndicesRequest; import org.elasticsearch.common.Strings; import org.elasticsearch.common.bytes.BytesReference; @@ -19,7 +17,6 @@ import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.core.Nullable; -import org.elasticsearch.rest.RestStatus; import org.elasticsearch.xcontent.ConstructingObjectParser; import org.elasticsearch.xcontent.ParseField; import org.elasticsearch.xcontent.ToXContentObject; @@ -31,20 +28,19 @@ import java.io.IOException; import java.util.Objects; -import static org.elasticsearch.action.ValidateActions.addValidationError; import static org.elasticsearch.xcontent.ConstructingObjectParser.optionalConstructorArg; public class PutConnectorAction { public static final String NAME = "indices:data/write/xpack/connector/put"; - public static final ActionType INSTANCE = new ActionType<>(NAME); + public static final ActionType INSTANCE = new ActionType<>(NAME); private PutConnectorAction() {/* no instances */} public static class Request extends ConnectorActionRequest implements IndicesRequest, ToXContentObject { + @Nullable private final String connectorId; - @Nullable private final String description; @Nullable @@ -76,6 +72,10 @@ public Request( this.serviceType = serviceType; } + public Request(String connectorId) { + this(connectorId, null, null, false, null, null, null); + } + public Request(StreamInput in) throws IOException { super(in); this.connectorId = in.readString(); @@ -118,6 +118,10 @@ public static Request fromXContentBytes(String connectorId, BytesReference sourc } } + public boolean isConnectorIdNullOrEmpty() { + return Strings.isNullOrEmpty(connectorId); + } + public static Request fromXContent(XContentParser parser, String connectorId) throws IOException { return PARSER.parse(parser, connectorId); } @@ -154,10 +158,6 @@ public ActionRequestValidationException validate() { ActionRequestValidationException validationException = null; - if (Strings.isNullOrEmpty(getConnectorId())) { - validationException = addValidationError("[connector_id] cannot be [null] or [\"\"]", validationException); - } - validationException = validateIndexName(indexName, validationException); return validationException; @@ -222,52 +222,4 @@ public int hashCode() { return Objects.hash(connectorId, description, indexName, isNative, language, name, serviceType); } } - - public static class Response extends ActionResponse implements ToXContentObject { - - final DocWriteResponse.Result result; - - public Response(StreamInput in) throws IOException { - super(in); - result = DocWriteResponse.Result.readFrom(in); - } - - public Response(DocWriteResponse.Result result) { - this.result = result; - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - this.result.writeTo(out); - } - - @Override - public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { - builder.startObject(); - builder.field("result", this.result.getLowercase()); - builder.endObject(); - return builder; - } - - public RestStatus status() { - return switch (result) { - case CREATED -> RestStatus.CREATED; - case NOT_FOUND -> RestStatus.NOT_FOUND; - default -> RestStatus.OK; - }; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Response response = (Response) o; - return result == response.result; - } - - @Override - public int hashCode() { - return Objects.hash(result); - } - } } diff --git a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPostConnectorAction.java b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPostConnectorAction.java index 2c5f1dda4e55..51ddcac3cd58 100644 --- a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPostConnectorAction.java +++ b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPostConnectorAction.java @@ -10,7 +10,6 @@ import org.elasticsearch.client.internal.node.NodeClient; import org.elasticsearch.rest.BaseRestHandler; import org.elasticsearch.rest.RestRequest; -import org.elasticsearch.rest.RestStatus; import org.elasticsearch.rest.Scope; import org.elasticsearch.rest.ServerlessScope; import org.elasticsearch.rest.action.RestToXContentListener; @@ -35,14 +34,17 @@ public List routes() { @Override protected RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient client) { - PostConnectorAction.Request request = PostConnectorAction.Request.fromXContentBytes( - restRequest.content(), - restRequest.getXContentType() - ); + PostConnectorAction.Request request; + // Handle empty REST request body + if (restRequest.hasContent()) { + request = PostConnectorAction.Request.fromXContentBytes(restRequest.content(), restRequest.getXContentType()); + } else { + request = new PostConnectorAction.Request(); + } return channel -> client.execute( PostConnectorAction.INSTANCE, request, - new RestToXContentListener<>(channel, r -> RestStatus.CREATED, r -> null) + new RestToXContentListener<>(channel, ConnectorCreateActionResponse::status, r -> null) ); } } diff --git a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPutConnectorAction.java b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPutConnectorAction.java index 1d1254bfda3c..fcd292eefc53 100644 --- a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPutConnectorAction.java +++ b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPutConnectorAction.java @@ -29,20 +29,26 @@ public String getName() { @Override public List routes() { - return List.of(new Route(PUT, "/" + EnterpriseSearch.CONNECTOR_API_ENDPOINT + "/{connector_id}")); + return List.of( + new Route(PUT, "/" + EnterpriseSearch.CONNECTOR_API_ENDPOINT + "/{connector_id}"), + new Route(PUT, "/" + EnterpriseSearch.CONNECTOR_API_ENDPOINT) + ); } @Override protected RestChannelConsumer prepareRequest(RestRequest restRequest, NodeClient client) { - PutConnectorAction.Request request = PutConnectorAction.Request.fromXContentBytes( - restRequest.param("connector_id"), - restRequest.content(), - restRequest.getXContentType() - ); + String connectorId = restRequest.param("connector_id"); + PutConnectorAction.Request request; + // Handle empty REST request body + if (restRequest.hasContent()) { + request = PutConnectorAction.Request.fromXContentBytes(connectorId, restRequest.content(), restRequest.getXContentType()); + } else { + request = new PutConnectorAction.Request(connectorId); + } return channel -> client.execute( PutConnectorAction.INSTANCE, request, - new RestToXContentListener<>(channel, PutConnectorAction.Response::status, r -> null) + new RestToXContentListener<>(channel, ConnectorCreateActionResponse::status, r -> null) ); } } diff --git a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPostConnectorAction.java b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPostConnectorAction.java index f482ed206cd3..bf0f9ebd0230 100644 --- a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPostConnectorAction.java +++ b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPostConnectorAction.java @@ -17,7 +17,7 @@ import org.elasticsearch.transport.TransportService; import org.elasticsearch.xpack.application.connector.ConnectorIndexService; -public class TransportPostConnectorAction extends HandledTransportAction { +public class TransportPostConnectorAction extends HandledTransportAction { protected final ConnectorIndexService connectorIndexService; @@ -34,7 +34,16 @@ public TransportPostConnectorAction(TransportService transportService, ActionFil } @Override - protected void doExecute(Task task, PostConnectorAction.Request request, ActionListener listener) { - connectorIndexService.createConnectorWithAutoGeneratedId(request, listener); + protected void doExecute(Task task, PostConnectorAction.Request request, ActionListener listener) { + connectorIndexService.createConnector( + null, + request.getDescription(), + request.getIndexName(), + request.getIsNative(), + request.getLanguage(), + request.getName(), + request.getServiceType(), + listener + ); } } diff --git a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPutConnectorAction.java b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPutConnectorAction.java index c078eb2ccd87..825b53a16399 100644 --- a/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPutConnectorAction.java +++ b/x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPutConnectorAction.java @@ -17,7 +17,7 @@ import org.elasticsearch.transport.TransportService; import org.elasticsearch.xpack.application.connector.ConnectorIndexService; -public class TransportPutConnectorAction extends HandledTransportAction { +public class TransportPutConnectorAction extends HandledTransportAction { protected final ConnectorIndexService connectorIndexService; @@ -34,7 +34,16 @@ public TransportPutConnectorAction(TransportService transportService, ActionFilt } @Override - protected void doExecute(Task task, PutConnectorAction.Request request, ActionListener listener) { - connectorIndexService.createConnectorWithDocId(request, listener.map(r -> new PutConnectorAction.Response(r.getResult()))); + protected void doExecute(Task task, PutConnectorAction.Request request, ActionListener listener) { + connectorIndexService.createConnector( + request.getConnectorId(), + request.getDescription(), + request.getIndexName(), + request.getIsNative(), + request.getLanguage(), + request.getName(), + request.getServiceType(), + listener + ); } } diff --git a/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/ConnectorIndexServiceTests.java b/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/ConnectorIndexServiceTests.java index 6800adecd11a..522ae4b5dffc 100644 --- a/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/ConnectorIndexServiceTests.java +++ b/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/ConnectorIndexServiceTests.java @@ -23,8 +23,7 @@ import org.elasticsearch.script.UpdateScript; import org.elasticsearch.test.ESSingleNodeTestCase; import org.elasticsearch.xcontent.XContentType; -import org.elasticsearch.xpack.application.connector.action.PostConnectorAction; -import org.elasticsearch.xpack.application.connector.action.PutConnectorAction; +import org.elasticsearch.xpack.application.connector.action.ConnectorCreateActionResponse; import org.elasticsearch.xpack.application.connector.action.UpdateConnectorApiKeyIdAction; import org.elasticsearch.xpack.application.connector.action.UpdateConnectorConfigurationAction; import org.elasticsearch.xpack.application.connector.action.UpdateConnectorErrorAction; @@ -85,7 +84,7 @@ protected Collection> getPlugins() { public void testPutConnector() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); Connector indexedConnector = awaitGetConnector(connectorId); @@ -94,7 +93,7 @@ public void testPutConnector() throws Exception { public void testPostConnector() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); - PostConnectorAction.Response resp = buildRequestAndAwaitPostConnector(connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(null, connector); Connector indexedConnector = awaitGetConnector(resp.getId()); assertThat(resp.getId(), equalTo(indexedConnector.getConnectorId())); @@ -105,7 +104,7 @@ public void testDeleteConnector() throws Exception { List connectorIds = new ArrayList<>(); for (int i = 0; i < numConnectors; i++) { Connector connector = ConnectorTestUtils.getRandomConnector(); - PostConnectorAction.Response resp = buildRequestAndAwaitPostConnector(connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(null, connector); connectorIds.add(resp.getId()); } @@ -120,7 +119,7 @@ public void testDeleteConnector() throws Exception { public void testUpdateConnectorConfiguration_FullConfiguration() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); UpdateConnectorConfigurationAction.Request updateConfigurationRequest = new UpdateConnectorConfigurationAction.Request( @@ -140,7 +139,7 @@ public void testUpdateConnectorConfiguration_FullConfiguration() throws Exceptio public void testUpdateConnectorConfiguration_PartialValuesUpdate() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); Map connectorNewConfiguration = connector.getConfiguration() @@ -175,7 +174,7 @@ public void testUpdateConnectorConfiguration_PartialValuesUpdate() throws Except public void testUpdateConnectorConfiguration_PartialValuesUpdate_SelectedKeys() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); Set configKeys = connector.getConfiguration().keySet(); @@ -221,7 +220,7 @@ public void testUpdateConnectorConfiguration_PartialValuesUpdate_SelectedKeys() public void testUpdateConnectorPipeline() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); ConnectorIngestPipeline updatedPipeline = new ConnectorIngestPipeline.Builder().setName("test-pipeline") @@ -245,7 +244,7 @@ public void testUpdateConnectorFiltering() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); List filteringList = IntStream.range(0, 10) @@ -262,7 +261,7 @@ public void testUpdateConnectorFiltering_updateDraft() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); FilteringAdvancedSnippet advancedSnippet = ConnectorTestUtils.getRandomConnectorFiltering().getDraft().getAdvancedSnippet(); @@ -296,7 +295,7 @@ public void testUpdateConnectorFiltering_updateDraftWithDefaultRuleOnly() throws Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); FilteringAdvancedSnippet advancedSnippet = ConnectorTestUtils.getRandomConnectorFiltering().getDraft().getAdvancedSnippet(); @@ -333,7 +332,7 @@ public void testUpdateConnectorFiltering_updateDraftWithEmptyRules() throws Exce Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); FilteringAdvancedSnippet advancedSnippet = ConnectorTestUtils.getRandomConnectorFiltering().getDraft().getAdvancedSnippet(); @@ -371,7 +370,7 @@ public void testUpdateConnectorFilteringValidation() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); FilteringValidationInfo validationInfo = ConnectorTestUtils.getRandomFilteringValidationInfo(); @@ -388,7 +387,7 @@ public void testActivateConnectorDraftFiltering_draftValid_shouldActivate() thro Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); // Populate draft filtering @@ -419,7 +418,7 @@ public void testActivateConnectorDraftFiltering_draftNotValid_expectFailure() th Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); FilteringValidationInfo validationFailure = new FilteringValidationInfo.Builder().setValidationState( @@ -436,7 +435,7 @@ public void testUpdateConnectorLastSeen() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); UpdateConnectorLastSeenAction.Request checkInRequest = new UpdateConnectorLastSeenAction.Request(connectorId); @@ -460,7 +459,7 @@ public void testUpdateConnectorLastSyncStats() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); ConnectorSyncInfo syncStats = ConnectorTestUtils.getRandomConnectorSyncInfo(); @@ -479,7 +478,7 @@ public void testUpdateConnectorScheduling() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); ConnectorScheduling updatedScheduling = ConnectorTestUtils.getRandomConnectorScheduling(); @@ -500,7 +499,7 @@ public void testUpdateConnectorScheduling_OnlyFullSchedule() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); // Update scheduling for full, incremental and access_control @@ -537,7 +536,7 @@ public void testUpdateConnectorIndexName() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); String newIndexName = randomAlphaOfLengthBetween(3, 10); @@ -558,7 +557,7 @@ public void testUpdateConnectorIndexName_WithTheSameIndexName() throws Exception Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); UpdateConnectorIndexNameAction.Request updateIndexNameRequest = new UpdateConnectorIndexNameAction.Request( @@ -574,7 +573,7 @@ public void testUpdateConnectorServiceType() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); String newServiceType = randomAlphaOfLengthBetween(3, 10); @@ -594,7 +593,7 @@ public void testUpdateConnectorServiceType() throws Exception { public void testUpdateConnectorError() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); UpdateConnectorErrorAction.Request updateErrorRequest = new UpdateConnectorErrorAction.Request( @@ -612,7 +611,7 @@ public void testUpdateConnectorError() throws Exception { public void testUpdateConnectorNameOrDescription() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); UpdateConnectorNameAction.Request updateNameDescriptionRequest = new UpdateConnectorNameAction.Request( @@ -633,7 +632,7 @@ public void testUpdateConnectorNative() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); boolean isNative = randomBoolean(); @@ -651,7 +650,7 @@ public void testUpdateConnectorStatus() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); Connector indexedConnector = awaitGetConnector(connectorId); @@ -671,7 +670,7 @@ public void testUpdateConnectorStatus_WithInvalidStatus() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); Connector indexedConnector = awaitGetConnector(connectorId); ConnectorStatus newInvalidStatus = ConnectorTestUtils.getRandomInvalidConnectorNextStatus(indexedConnector.getStatus()); @@ -684,7 +683,7 @@ public void testUpdateConnectorStatus_WithInvalidStatus() throws Exception { public void testUpdateConnectorApiKeyIdOrApiKeySecretId() throws Exception { Connector connector = ConnectorTestUtils.getRandomConnector(); String connectorId = randomUUID(); - DocWriteResponse resp = buildRequestAndAwaitPutConnector(connectorId, connector); + ConnectorCreateActionResponse resp = awaitCreateConnector(connectorId, connector); assertThat(resp.status(), anyOf(equalTo(RestStatus.CREATED), equalTo(RestStatus.OK))); UpdateConnectorApiKeyIdAction.Request updateApiKeyIdRequest = new UpdateConnectorApiKeyIdAction.Request( @@ -726,78 +725,37 @@ public void onFailure(Exception e) { return resp.get(); } - private DocWriteResponse buildRequestAndAwaitPutConnector(String docId, Connector connector) throws Exception { - PutConnectorAction.Request putConnectorRequest = new PutConnectorAction.Request( - docId, - connector.getDescription(), - connector.getIndexName(), - connector.isNative(), - connector.getLanguage(), - connector.getName(), - connector.getServiceType() - ); - return awaitPutConnector(putConnectorRequest); - } - - private DocWriteResponse awaitPutConnector(PutConnectorAction.Request request) throws Exception { + private ConnectorCreateActionResponse awaitCreateConnector(String connectorId, Connector connector) throws Exception { CountDownLatch latch = new CountDownLatch(1); - final AtomicReference resp = new AtomicReference<>(null); + final AtomicReference resp = new AtomicReference<>(null); final AtomicReference exc = new AtomicReference<>(null); - connectorIndexService.createConnectorWithDocId(request, new ActionListener<>() { - @Override - public void onResponse(DocWriteResponse indexResponse) { - resp.set(indexResponse); - latch.countDown(); - } - - @Override - public void onFailure(Exception e) { - exc.set(e); - latch.countDown(); - } - }); - assertTrue("Timeout waiting for put request", latch.await(REQUEST_TIMEOUT_SECONDS, TimeUnit.SECONDS)); - if (exc.get() != null) { - throw exc.get(); - } - assertNotNull("Received null response from put request", resp.get()); - return resp.get(); - } - - private PostConnectorAction.Response buildRequestAndAwaitPostConnector(Connector connector) throws Exception { - PostConnectorAction.Request postConnectorRequest = new PostConnectorAction.Request( + connectorIndexService.createConnector( + connectorId, connector.getDescription(), connector.getIndexName(), connector.isNative(), connector.getLanguage(), connector.getName(), - connector.getServiceType() - ); - return awaitPostConnector(postConnectorRequest); - } - - private PostConnectorAction.Response awaitPostConnector(PostConnectorAction.Request request) throws Exception { - CountDownLatch latch = new CountDownLatch(1); - final AtomicReference resp = new AtomicReference<>(null); - final AtomicReference exc = new AtomicReference<>(null); - connectorIndexService.createConnectorWithAutoGeneratedId(request, new ActionListener<>() { - @Override - public void onResponse(PostConnectorAction.Response indexResponse) { - resp.set(indexResponse); - latch.countDown(); - } - - @Override - public void onFailure(Exception e) { - exc.set(e); - latch.countDown(); + connector.getServiceType(), + new ActionListener<>() { + @Override + public void onResponse(ConnectorCreateActionResponse createResponse) { + resp.set(createResponse); + latch.countDown(); + } + + @Override + public void onFailure(Exception e) { + exc.set(e); + latch.countDown(); + } } - }); - assertTrue("Timeout waiting for post connector request", latch.await(REQUEST_TIMEOUT_SECONDS, TimeUnit.SECONDS)); + ); + assertTrue("Timeout waiting for create connector request", latch.await(REQUEST_TIMEOUT_SECONDS, TimeUnit.SECONDS)); if (exc.get() != null) { throw exc.get(); } - assertNotNull("Received null response from post connector request", resp.get()); + assertNotNull("Received null response from create connector request", resp.get()); return resp.get(); } diff --git a/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PostConnectorActionResponseBWCSerializingTests.java b/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PostConnectorActionResponseBWCSerializingTests.java index fbce905cb477..859d92f86236 100644 --- a/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PostConnectorActionResponseBWCSerializingTests.java +++ b/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PostConnectorActionResponseBWCSerializingTests.java @@ -8,29 +8,30 @@ package org.elasticsearch.xpack.application.connector.action; import org.elasticsearch.TransportVersion; +import org.elasticsearch.action.DocWriteResponse; import org.elasticsearch.common.io.stream.Writeable; import org.elasticsearch.xpack.core.ml.AbstractBWCWireSerializationTestCase; import java.io.IOException; -public class PostConnectorActionResponseBWCSerializingTests extends AbstractBWCWireSerializationTestCase { +public class PostConnectorActionResponseBWCSerializingTests extends AbstractBWCWireSerializationTestCase { @Override - protected Writeable.Reader instanceReader() { - return PostConnectorAction.Response::new; + protected Writeable.Reader instanceReader() { + return ConnectorCreateActionResponse::new; } @Override - protected PostConnectorAction.Response createTestInstance() { - return new PostConnectorAction.Response(randomUUID()); + protected ConnectorCreateActionResponse createTestInstance() { + return new ConnectorCreateActionResponse(randomUUID(), randomFrom(DocWriteResponse.Result.values())); } @Override - protected PostConnectorAction.Response mutateInstance(PostConnectorAction.Response instance) throws IOException { + protected ConnectorCreateActionResponse mutateInstance(ConnectorCreateActionResponse instance) throws IOException { return randomValueOtherThan(instance, this::createTestInstance); } @Override - protected PostConnectorAction.Response mutateInstanceForVersion(PostConnectorAction.Response instance, TransportVersion version) { + protected ConnectorCreateActionResponse mutateInstanceForVersion(ConnectorCreateActionResponse instance, TransportVersion version) { return instance; } } diff --git a/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionResponseBWCSerializingTests.java b/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionResponseBWCSerializingTests.java index 94be7e9b6b9c..badddb2d0448 100644 --- a/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionResponseBWCSerializingTests.java +++ b/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionResponseBWCSerializingTests.java @@ -14,24 +14,24 @@ import java.io.IOException; -public class PutConnectorActionResponseBWCSerializingTests extends AbstractBWCWireSerializationTestCase { +public class PutConnectorActionResponseBWCSerializingTests extends AbstractBWCWireSerializationTestCase { @Override - protected Writeable.Reader instanceReader() { - return PutConnectorAction.Response::new; + protected Writeable.Reader instanceReader() { + return ConnectorCreateActionResponse::new; } @Override - protected PutConnectorAction.Response createTestInstance() { - return new PutConnectorAction.Response(randomFrom(DocWriteResponse.Result.values())); + protected ConnectorCreateActionResponse createTestInstance() { + return new ConnectorCreateActionResponse(randomUUID(), randomFrom(DocWriteResponse.Result.values())); } @Override - protected PutConnectorAction.Response mutateInstance(PutConnectorAction.Response instance) throws IOException { + protected ConnectorCreateActionResponse mutateInstance(ConnectorCreateActionResponse instance) throws IOException { return randomValueOtherThan(instance, this::createTestInstance); } @Override - protected PutConnectorAction.Response mutateInstanceForVersion(PutConnectorAction.Response instance, TransportVersion version) { + protected ConnectorCreateActionResponse mutateInstanceForVersion(ConnectorCreateActionResponse instance, TransportVersion version) { return instance; } } diff --git a/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionTests.java b/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionTests.java index a35c5c7e408f..873e102e4093 100644 --- a/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionTests.java +++ b/x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionTests.java @@ -31,22 +31,6 @@ public void testValidate_WhenConnectorIdAndIndexNamePresent_ExpectNoValidationEr assertThat(exception, nullValue()); } - public void testValidate_WhenConnectorIdIsNull_ExpectValidationError() { - PutConnectorAction.Request requestWithMissingConnectorId = new PutConnectorAction.Request( - null, - randomAlphaOfLength(10), - randomAlphaOfLength(10), - randomBoolean(), - randomAlphaOfLength(10), - randomAlphaOfLength(10), - randomAlphaOfLength(10) - ); - ActionRequestValidationException exception = requestWithMissingConnectorId.validate(); - - assertThat(exception, notNullValue()); - assertThat(exception.getMessage(), containsString("[connector_id] cannot be [null] or [\"\"]")); - } - public void testValidate_WhenMalformedIndexName_ExpectValidationError() { PutConnectorAction.Request requestWithMissingConnectorId = new PutConnectorAction.Request( randomAlphaOfLength(10),