Browse Source

[Connector API] Improve create connector endpoints (#108766)

Jedr Blaszyk 1 year ago
parent
commit
bb5cac9e64
17 changed files with 291 additions and 320 deletions
  1. 5 4
      docs/reference/connector/apis/create-connector-api.asciidoc
  2. 1 1
      rest-api-spec/src/main/resources/rest-api-spec/api/connector.post.json
  3. 7 1
      rest-api-spec/src/main/resources/rest-api-spec/api/connector.put.json
  4. 33 0
      x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/10_connector_put.yml
  5. 14 0
      x-pack/plugin/ent-search/qa/rest/src/yamlRestTest/resources/rest-api-spec/test/entsearch/connector/15_connector_post.yml
  6. 28 68
      x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/ConnectorIndexService.java
  7. 80 0
      x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/ConnectorCreateActionResponse.java
  8. 5 49
      x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PostConnectorAction.java
  9. 10 58
      x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PutConnectorAction.java
  10. 8 6
      x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPostConnectorAction.java
  11. 13 7
      x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPutConnectorAction.java
  12. 12 3
      x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPostConnectorAction.java
  13. 12 3
      x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPutConnectorAction.java
  14. 48 90
      x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/ConnectorIndexServiceTests.java
  15. 8 7
      x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PostConnectorActionResponseBWCSerializingTests.java
  16. 7 7
      x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionResponseBWCSerializingTests.java
  17. 0 16
      x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionTests.java

+ 5 - 4
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/<connector_id>`
+* `PUT _connector/<connector_id>`
 
 
 [[create-connector-api-prereqs]]
@@ -54,7 +54,7 @@ Creates a connector document in the internal index and initializes its configura
 ==== {api-path-parms-title}
 
 `<connector_id>`::
-(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"
 }
 ----
 ////

+ 1 - 1
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
     }
   }
 }

+ 7 - 1
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
     }
   }
 }

+ 33 - 0
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':

+ 14 - 0
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:

+ 28 - 68
x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/ConnectorIndexService.java

@@ -41,8 +41,7 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
 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 class ConnectorIndexService {
     }
 
     /**
-     * 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<DocWriteResponse> 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<ConnectorCreateActionResponse> 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 class ConnectorIndexService {
                     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<PostConnectorAction.Response> 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) {

+ 80 - 0
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);
+    }
+}

+ 5 - 49
x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PostConnectorAction.java

@@ -9,7 +9,6 @@ package org.elasticsearch.xpack.application.connector.action;
 
 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.XContentBuilder;
 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 @@ import static org.elasticsearch.xcontent.ConstructingObjectParser.optionalConstr
 public class PostConnectorAction {
 
     public static final String NAME = "indices:data/write/xpack/connector/post";
-    public static final ActionType<PostConnectorAction.Response> INSTANCE = new ActionType<>(NAME);
+    public static final ActionType<ConnectorCreateActionResponse> INSTANCE = new ActionType<>(NAME);
 
     private PostConnectorAction() {/* no instances */}
 
@@ -61,6 +59,10 @@ public class PostConnectorAction {
             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 class PostConnectorAction {
             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);
-        }
-    }
 }

+ 10 - 58
x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PutConnectorAction.java

@@ -9,9 +9,7 @@ package org.elasticsearch.xpack.application.connector.action;
 
 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.StreamInput;
 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 org.elasticsearch.xcontent.XContentType;
 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<PutConnectorAction.Response> INSTANCE = new ActionType<>(NAME);
+    public static final ActionType<ConnectorCreateActionResponse> 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 class PutConnectorAction {
             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 class PutConnectorAction {
             }
         }
 
+        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 class PutConnectorAction {
 
             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 class PutConnectorAction {
             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);
-        }
-    }
 }

+ 8 - 6
x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPostConnectorAction.java

@@ -10,7 +10,6 @@ package org.elasticsearch.xpack.application.connector.action;
 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 class RestPostConnectorAction extends BaseRestHandler {
 
     @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)
         );
     }
 }

+ 13 - 7
x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/RestPutConnectorAction.java

@@ -29,20 +29,26 @@ public class RestPutConnectorAction extends BaseRestHandler {
 
     @Override
     public List<Route> 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)
         );
     }
 }

+ 12 - 3
x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPostConnectorAction.java

@@ -17,7 +17,7 @@ import org.elasticsearch.tasks.Task;
 import org.elasticsearch.transport.TransportService;
 import org.elasticsearch.xpack.application.connector.ConnectorIndexService;
 
-public class TransportPostConnectorAction extends HandledTransportAction<PostConnectorAction.Request, PostConnectorAction.Response> {
+public class TransportPostConnectorAction extends HandledTransportAction<PostConnectorAction.Request, ConnectorCreateActionResponse> {
 
     protected final ConnectorIndexService connectorIndexService;
 
@@ -34,7 +34,16 @@ public class TransportPostConnectorAction extends HandledTransportAction<PostCon
     }
 
     @Override
-    protected void doExecute(Task task, PostConnectorAction.Request request, ActionListener<PostConnectorAction.Response> listener) {
-        connectorIndexService.createConnectorWithAutoGeneratedId(request, listener);
+    protected void doExecute(Task task, PostConnectorAction.Request request, ActionListener<ConnectorCreateActionResponse> listener) {
+        connectorIndexService.createConnector(
+            null,
+            request.getDescription(),
+            request.getIndexName(),
+            request.getIsNative(),
+            request.getLanguage(),
+            request.getName(),
+            request.getServiceType(),
+            listener
+        );
     }
 }

+ 12 - 3
x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/TransportPutConnectorAction.java

@@ -17,7 +17,7 @@ import org.elasticsearch.tasks.Task;
 import org.elasticsearch.transport.TransportService;
 import org.elasticsearch.xpack.application.connector.ConnectorIndexService;
 
-public class TransportPutConnectorAction extends HandledTransportAction<PutConnectorAction.Request, PutConnectorAction.Response> {
+public class TransportPutConnectorAction extends HandledTransportAction<PutConnectorAction.Request, ConnectorCreateActionResponse> {
 
     protected final ConnectorIndexService connectorIndexService;
 
@@ -34,7 +34,16 @@ public class TransportPutConnectorAction extends HandledTransportAction<PutConne
     }
 
     @Override
-    protected void doExecute(Task task, PutConnectorAction.Request request, ActionListener<PutConnectorAction.Response> listener) {
-        connectorIndexService.createConnectorWithDocId(request, listener.map(r -> new PutConnectorAction.Response(r.getResult())));
+    protected void doExecute(Task task, PutConnectorAction.Request request, ActionListener<ConnectorCreateActionResponse> listener) {
+        connectorIndexService.createConnector(
+            request.getConnectorId(),
+            request.getDescription(),
+            request.getIndexName(),
+            request.getIsNative(),
+            request.getLanguage(),
+            request.getName(),
+            request.getServiceType(),
+            listener
+        );
     }
 }

+ 48 - 90
x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/ConnectorIndexServiceTests.java

@@ -23,8 +23,7 @@ import org.elasticsearch.script.ScriptEngine;
 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 @@ public class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
     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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
 
     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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         List<String> 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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
     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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
     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<String, Object> connectorNewConfiguration = connector.getConfiguration()
@@ -175,7 +174,7 @@ public class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
     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<String> configKeys = connector.getConfiguration().keySet();
@@ -221,7 +220,7 @@ public class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
     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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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<ConnectorFiltering> filteringList = IntStream.range(0, 10)
@@ -262,7 +261,7 @@ public class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
     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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
     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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
     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 class ConnectorIndexServiceTests extends ESSingleNodeTestCase {
         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<DocWriteResponse> resp = new AtomicReference<>(null);
+        final AtomicReference<ConnectorCreateActionResponse> resp = new AtomicReference<>(null);
         final AtomicReference<Exception> 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<PostConnectorAction.Response> resp = new AtomicReference<>(null);
-        final AtomicReference<Exception> 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();
     }
 

+ 8 - 7
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<PostConnectorAction.Response> {
+public class PostConnectorActionResponseBWCSerializingTests extends AbstractBWCWireSerializationTestCase<ConnectorCreateActionResponse> {
     @Override
-    protected Writeable.Reader<PostConnectorAction.Response> instanceReader() {
-        return PostConnectorAction.Response::new;
+    protected Writeable.Reader<ConnectorCreateActionResponse> 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;
     }
 }

+ 7 - 7
x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionResponseBWCSerializingTests.java

@@ -14,24 +14,24 @@ import org.elasticsearch.xpack.core.ml.AbstractBWCWireSerializationTestCase;
 
 import java.io.IOException;
 
-public class PutConnectorActionResponseBWCSerializingTests extends AbstractBWCWireSerializationTestCase<PutConnectorAction.Response> {
+public class PutConnectorActionResponseBWCSerializingTests extends AbstractBWCWireSerializationTestCase<ConnectorCreateActionResponse> {
     @Override
-    protected Writeable.Reader<PutConnectorAction.Response> instanceReader() {
-        return PutConnectorAction.Response::new;
+    protected Writeable.Reader<ConnectorCreateActionResponse> 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;
     }
 }

+ 0 - 16
x-pack/plugin/ent-search/src/test/java/org/elasticsearch/xpack/application/connector/action/PutConnectorActionTests.java

@@ -31,22 +31,6 @@ public class PutConnectorActionTests extends ESTestCase {
         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),