From 999d49737f1095ad57c3ed29dd309773341d0b16 Mon Sep 17 00:00:00 2001 From: "api-clients-generation-pipeline[bot]" <54105614+api-clients-generation-pipeline[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 17:47:48 +0000 Subject: [PATCH 1/3] Add OpenAPI documentation for signal investigation queries and suggested actions endpoints (#3188) Co-authored-by: ci.datadog-api-spec --- .generator/schemas/v2/openapi.yaml | 183 ++++++++++++++++++ ...etInvestigationLogQueriesMatchingSignal.rb | 5 + .../GetSuggestedActionsMatchingSignal.rb | 5 + features/scenarios_model_mapping.rb | 6 + features/v2/security_monitoring.feature | 42 ++++ features/v2/undo.json | 12 ++ lib/datadog_api_client/inflector.rb | 4 + .../v2/api/security_monitoring_api.rb | 130 +++++++++++++ ...rity_monitoring_signal_suggested_action.rb | 165 ++++++++++++++++ ...ring_signal_suggested_action_attributes.rb | 145 ++++++++++++++ ...monitoring_signal_suggested_action_type.rb | 27 +++ ...oring_signal_suggested_actions_response.rb | 125 ++++++++++++ 12 files changed, 849 insertions(+) create mode 100644 examples/v2/security-monitoring/GetInvestigationLogQueriesMatchingSignal.rb create mode 100644 examples/v2/security-monitoring/GetSuggestedActionsMatchingSignal.rb create mode 100644 lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action.rb create mode 100644 lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action_attributes.rb create mode 100644 lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action_type.rb create mode 100644 lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_actions_response.rb diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index c1ace36c385d..97b99b1a5fa0 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -59499,6 +59499,17 @@ components: required: - data type: object + SecurityMonitoringSignalInvestigationQueryTemplateVariables: + additionalProperties: + items: + description: A value for this template variable extracted from the signal. + type: string + type: array + description: Template variables applied to the investigation log query, mapping attribute paths to values extracted from the signal. + example: + "@userIdentity.arn": + - foo + type: object SecurityMonitoringSignalListRequest: description: The request for a security signal list. properties: @@ -59884,6 +59895,82 @@ components: required: - data type: object + SecurityMonitoringSignalSuggestedAction: + description: A suggested action for a security signal. + properties: + attributes: + $ref: "#/components/schemas/SecurityMonitoringSignalSuggestedActionAttributes" + id: + description: The unique ID of the suggested action. + example: w00-t10-992 + type: string + type: + $ref: "#/components/schemas/SecurityMonitoringSignalSuggestedActionType" + required: + - id + - type + - attributes + type: object + SecurityMonitoringSignalSuggestedActionAttributes: + description: Attributes of a suggested action for a security signal. The available fields depend on the action type. + properties: + name: + description: The name of the investigation log query. + example: Cloudtrail events for user ARN + type: string + query_filter: + description: The log query filter for the investigation. + example: 'source:cloudtrail @userIdentity.arn:"foo"' + type: string + template_variables: + $ref: "#/components/schemas/SecurityMonitoringSignalInvestigationQueryTemplateVariables" + title: + description: The title of the recommended blog post. + example: Monitor Okta logs to track system access and unusual activity + type: string + url: + description: The URL of the suggested action. + example: /logs?query=source%3Acloudtrail+%40userIdentity.arn%3A%22foo%22 + type: string + type: object + SecurityMonitoringSignalSuggestedActionList: + description: List of suggested actions for a security signal. + example: + - attributes: + name: Cloudtrail events for user ARN + query_filter: 'source:cloudtrail @userIdentity.arn:"foo"' + template_variables: + "@userIdentity.arn": + - foo + url: /logs?query=source%3Acloudtrail+%40userIdentity.arn%3A%22foo%22 + id: w00-t10-992 + type: investigation_log_queries + - attributes: + title: Monitor Okta logs to track system access and unusual activity + url: https://www.datadoghq.com/blog/monitor-activity-with-okta/ + id: bxy-o8v-i1a + type: recommended_blog_posts + items: + $ref: "#/components/schemas/SecurityMonitoringSignalSuggestedAction" + type: array + SecurityMonitoringSignalSuggestedActionType: + description: The type of the suggested action resource. + enum: + - investigation_log_queries + - recommended_blog_posts + example: investigation_log_queries + type: string + x-enum-varnames: + - INVESTIGATION_LOG_QUERIES + - RECOMMENDED_BLOG_POSTS + SecurityMonitoringSignalSuggestedActionsResponse: + description: Response with suggested actions for a security signal. + properties: + data: + $ref: "#/components/schemas/SecurityMonitoringSignalSuggestedActionList" + required: + - data + type: object SecurityMonitoringSignalTriageAttributes: description: Attributes describing a triage state update operation over a security signal. properties: @@ -106943,6 +107030,54 @@ paths: operator: OR permissions: - security_monitoring_signals_write + /api/v2/security_monitoring/signals/{signal_id}/investigation_queries: + get: + description: Get the list of investigation log queries available for a given security signal. + operationId: GetInvestigationLogQueriesMatchingSignal + parameters: + - $ref: "#/components/parameters/SignalID" + responses: + "200": + content: + application/json: + example: + data: + - attributes: + name: Cloudtrail events for user ARN + query_filter: 'source:cloudtrail @userIdentity.arn:"foo"' + template_variables: + "@userIdentity.arn": + - foo + url: /logs?query=source%3Acloudtrail+%40userIdentity.arn%3A%22foo%22 + id: w00-t10-992 + type: investigation_log_queries + - attributes: + title: Monitor Okta logs to track system access and unusual activity + url: https://www.datadoghq.com/blog/monitor-activity-with-okta/ + id: bxy-o8v-i1a + type: recommended_blog_posts + schema: + $ref: "#/components/schemas/SecurityMonitoringSignalSuggestedActionsResponse" + description: OK + "403": + $ref: "#/components/responses/NotAuthorizedResponse" + "404": + $ref: "#/components/responses/NotFoundResponse" + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - security_monitoring_rules_read + - security_monitoring_signals_read + summary: Get investigation queries for a signal + tags: ["Security Monitoring"] + x-permission: + operator: AND + permissions: + - security_monitoring_rules_read + - security_monitoring_signals_read /api/v2/security_monitoring/signals/{signal_id}/state: patch: description: |- @@ -106983,6 +107118,54 @@ paths: operator: OR permissions: - security_monitoring_signals_write + /api/v2/security_monitoring/signals/{signal_id}/suggested_actions: + get: + description: Get the list of suggested actions for a given security signal. + operationId: GetSuggestedActionsMatchingSignal + parameters: + - $ref: "#/components/parameters/SignalID" + responses: + "200": + content: + application/json: + example: + data: + - attributes: + name: Cloudtrail events for user ARN + query_filter: 'source:cloudtrail @userIdentity.arn:"foo"' + template_variables: + "@userIdentity.arn": + - foo + url: /logs?query=source%3Acloudtrail+%40userIdentity.arn%3A%22foo%22 + id: w00-t10-992 + type: investigation_log_queries + - attributes: + title: Monitor Okta logs to track system access and unusual activity + url: https://www.datadoghq.com/blog/monitor-activity-with-okta/ + id: bxy-o8v-i1a + type: recommended_blog_posts + schema: + $ref: "#/components/schemas/SecurityMonitoringSignalSuggestedActionsResponse" + description: OK + "403": + $ref: "#/components/responses/NotAuthorizedResponse" + "404": + $ref: "#/components/responses/NotFoundResponse" + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - security_monitoring_rules_read + - security_monitoring_signals_read + summary: Get suggested actions for a signal + tags: ["Security Monitoring"] + x-permission: + operator: AND + permissions: + - security_monitoring_rules_read + - security_monitoring_signals_read /api/v2/sensitive-data-scanner/config: get: description: List all the Scanning groups in your organization. diff --git a/examples/v2/security-monitoring/GetInvestigationLogQueriesMatchingSignal.rb b/examples/v2/security-monitoring/GetInvestigationLogQueriesMatchingSignal.rb new file mode 100644 index 000000000000..a0f8403990f5 --- /dev/null +++ b/examples/v2/security-monitoring/GetInvestigationLogQueriesMatchingSignal.rb @@ -0,0 +1,5 @@ +# Get investigation queries for a signal returns "OK" response + +require "datadog_api_client" +api_instance = DatadogAPIClient::V2::SecurityMonitoringAPI.new +p api_instance.get_investigation_log_queries_matching_signal("AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE") diff --git a/examples/v2/security-monitoring/GetSuggestedActionsMatchingSignal.rb b/examples/v2/security-monitoring/GetSuggestedActionsMatchingSignal.rb new file mode 100644 index 000000000000..ae6c0246f5ad --- /dev/null +++ b/examples/v2/security-monitoring/GetSuggestedActionsMatchingSignal.rb @@ -0,0 +1,5 @@ +# Get suggested actions for a signal returns "OK" response + +require "datadog_api_client" +api_instance = DatadogAPIClient::V2::SecurityMonitoringAPI.new +p api_instance.get_suggested_actions_matching_signal("AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE") diff --git a/features/scenarios_model_mapping.rb b/features/scenarios_model_mapping.rb index 1862deb447bf..cef177a6048b 100644 --- a/features/scenarios_model_mapping.rb +++ b/features/scenarios_model_mapping.rb @@ -1761,10 +1761,16 @@ "signal_id" => "String", "body" => "SecurityMonitoringSignalIncidentsUpdateRequest", }, + "v2.GetInvestigationLogQueriesMatchingSignal" => { + "signal_id" => "String", + }, "v2.EditSecurityMonitoringSignalState" => { "signal_id" => "String", "body" => "SecurityMonitoringSignalStateUpdateRequest", }, + "v2.GetSuggestedActionsMatchingSignal" => { + "signal_id" => "String", + }, "v2.ListSecurityMonitoringHistsignals" => { "filter_query" => "String", "filter_from" => "Time", diff --git a/features/v2/security_monitoring.feature b/features/v2/security_monitoring.feature index afd6da263a91..1fdee4f141b9 100644 --- a/features/v2/security_monitoring.feature +++ b/features/v2/security_monitoring.feature @@ -1371,6 +1371,25 @@ Feature: Security Monitoring When the request is sent Then the response status is 200 Notification rule details. + @generated @skip @team:DataDog/k9-cloud-siem + Scenario: Get investigation queries for a signal returns "Not Found" response + Given new "GetInvestigationLogQueriesMatchingSignal" request + And request contains "signal_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/k9-cloud-siem + Scenario: Get investigation queries for a signal returns "OK" response + Given new "GetInvestigationLogQueriesMatchingSignal" request + And request contains "signal_id" parameter with value "AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "investigation_log_queries" + And the response "data[0]" has field "id" + And the response "data[0].attributes" has field "name" + And the response "data[0].attributes" has field "query_filter" + And the response "data[0].attributes" has field "url" + @skip-go @skip-java @skip-ruby @team:DataDog/k9-cloud-siem Scenario: Get rule version history returns "OK" response Given operation "GetRuleVersionHistory" enabled @@ -1384,6 +1403,29 @@ Feature: Security Monitoring And the response "data.attributes.count" is equal to 1 And the response "data.attributes.data[1].rule.name" has the same value as "security_rule.name" + @generated @skip @team:DataDog/k9-cloud-siem + Scenario: Get suggested actions for a signal returns "Not Found" response + Given new "GetSuggestedActionsMatchingSignal" request + And request contains "signal_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/k9-cloud-siem + Scenario: Get suggested actions for a signal returns "OK" response + Given new "GetSuggestedActionsMatchingSignal" request + And request contains "signal_id" parameter with value "AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "investigation_log_queries" + And the response "data[0]" has field "id" + And the response "data[0].attributes" has field "name" + And the response "data[0].attributes" has field "query_filter" + And the response "data[0].attributes" has field "url" + And the response "data[1].type" is equal to "recommended_blog_posts" + And the response "data[1]" has field "id" + And the response "data[1].attributes" has field "title" + And the response "data[1].attributes" has field "url" + @team:DataDog/k9-cloud-siem Scenario: Get suppressions affecting a specific rule returns "Not Found" response Given new "GetSuppressionsAffectingRule" request diff --git a/features/v2/undo.json b/features/v2/undo.json index 124d2e60cb49..02afc91a4bbe 100644 --- a/features/v2/undo.json +++ b/features/v2/undo.json @@ -5374,12 +5374,24 @@ "type": "idempotent" } }, + "GetInvestigationLogQueriesMatchingSignal": { + "tag": "Security Monitoring", + "undo": { + "type": "safe" + } + }, "EditSecurityMonitoringSignalState": { "tag": "Security Monitoring", "undo": { "type": "idempotent" } }, + "GetSuggestedActionsMatchingSignal": { + "tag": "Security Monitoring", + "undo": { + "type": "safe" + } + }, "ListScanningGroups": { "tag": "Sensitive Data Scanner", "undo": { diff --git a/lib/datadog_api_client/inflector.rb b/lib/datadog_api_client/inflector.rb index 8644837286c8..7b0c4d5fded8 100644 --- a/lib/datadog_api_client/inflector.rb +++ b/lib/datadog_api_client/inflector.rb @@ -4871,6 +4871,10 @@ def overrides "v2.security_monitoring_signal_state_update_attributes" => "SecurityMonitoringSignalStateUpdateAttributes", "v2.security_monitoring_signal_state_update_data" => "SecurityMonitoringSignalStateUpdateData", "v2.security_monitoring_signal_state_update_request" => "SecurityMonitoringSignalStateUpdateRequest", + "v2.security_monitoring_signal_suggested_action" => "SecurityMonitoringSignalSuggestedAction", + "v2.security_monitoring_signal_suggested_action_attributes" => "SecurityMonitoringSignalSuggestedActionAttributes", + "v2.security_monitoring_signal_suggested_actions_response" => "SecurityMonitoringSignalSuggestedActionsResponse", + "v2.security_monitoring_signal_suggested_action_type" => "SecurityMonitoringSignalSuggestedActionType", "v2.security_monitoring_signal_triage_attributes" => "SecurityMonitoringSignalTriageAttributes", "v2.security_monitoring_signal_triage_update_data" => "SecurityMonitoringSignalTriageUpdateData", "v2.security_monitoring_signal_triage_update_response" => "SecurityMonitoringSignalTriageUpdateResponse", diff --git a/lib/datadog_api_client/v2/api/security_monitoring_api.rb b/lib/datadog_api_client/v2/api/security_monitoring_api.rb index eeb9f038aaf7..7089c5958b6f 100644 --- a/lib/datadog_api_client/v2/api/security_monitoring_api.rb +++ b/lib/datadog_api_client/v2/api/security_monitoring_api.rb @@ -2504,6 +2504,71 @@ def get_finding_with_http_info(finding_id, opts = {}) return data, status_code, headers end + # Get investigation queries for a signal. + # + # @see #get_investigation_log_queries_matching_signal_with_http_info + def get_investigation_log_queries_matching_signal(signal_id, opts = {}) + data, _status_code, _headers = get_investigation_log_queries_matching_signal_with_http_info(signal_id, opts) + data + end + + # Get investigation queries for a signal. + # + # Get the list of investigation log queries available for a given security signal. + # + # @param signal_id [String] The ID of the signal. + # @param opts [Hash] the optional parameters + # @return [Array<(SecurityMonitoringSignalSuggestedActionsResponse, Integer, Hash)>] SecurityMonitoringSignalSuggestedActionsResponse data, response status code and response headers + def get_investigation_log_queries_matching_signal_with_http_info(signal_id, opts = {}) + + if @api_client.config.debugging + @api_client.config.logger.debug 'Calling API: SecurityMonitoringAPI.get_investigation_log_queries_matching_signal ...' + end + # verify the required parameter 'signal_id' is set + if @api_client.config.client_side_validation && signal_id.nil? + fail ArgumentError, "Missing the required parameter 'signal_id' when calling SecurityMonitoringAPI.get_investigation_log_queries_matching_signal" + end + # resource path + local_var_path = '/api/v2/security_monitoring/signals/{signal_id}/investigation_queries'.sub('{signal_id}', CGI.escape(signal_id.to_s).gsub('%2F', '/')) + + # query parameters + query_params = opts[:query_params] || {} + + # header parameters + header_params = opts[:header_params] || {} + # HTTP header 'Accept' (if needed) + header_params['Accept'] = @api_client.select_header_accept(['application/json']) + + # form parameters + form_params = opts[:form_params] || {} + + # http body (model) + post_body = opts[:debug_body] + + # return_type + return_type = opts[:debug_return_type] || 'SecurityMonitoringSignalSuggestedActionsResponse' + + # auth_names + auth_names = opts[:debug_auth_names] || [:apiKeyAuth, :appKeyAuth, :AuthZ] + + new_options = opts.merge( + :operation => :get_investigation_log_queries_matching_signal, + :header_params => header_params, + :query_params => query_params, + :form_params => form_params, + :body => post_body, + :auth_names => auth_names, + :return_type => return_type, + :api_version => "V2" + ) + + data, status_code, headers = @api_client.call_api(Net::HTTP::Get, local_var_path, new_options) + if @api_client.config.debugging + @api_client.config.logger.debug "API called: SecurityMonitoringAPI#get_investigation_log_queries_matching_signal\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" + end + return data, status_code, headers + end + # List resource filters. # # @see #get_resource_evaluation_filters_with_http_info @@ -3409,6 +3474,71 @@ def get_signal_notification_rules_with_http_info(opts = {}) return data, status_code, headers end + # Get suggested actions for a signal. + # + # @see #get_suggested_actions_matching_signal_with_http_info + def get_suggested_actions_matching_signal(signal_id, opts = {}) + data, _status_code, _headers = get_suggested_actions_matching_signal_with_http_info(signal_id, opts) + data + end + + # Get suggested actions for a signal. + # + # Get the list of suggested actions for a given security signal. + # + # @param signal_id [String] The ID of the signal. + # @param opts [Hash] the optional parameters + # @return [Array<(SecurityMonitoringSignalSuggestedActionsResponse, Integer, Hash)>] SecurityMonitoringSignalSuggestedActionsResponse data, response status code and response headers + def get_suggested_actions_matching_signal_with_http_info(signal_id, opts = {}) + + if @api_client.config.debugging + @api_client.config.logger.debug 'Calling API: SecurityMonitoringAPI.get_suggested_actions_matching_signal ...' + end + # verify the required parameter 'signal_id' is set + if @api_client.config.client_side_validation && signal_id.nil? + fail ArgumentError, "Missing the required parameter 'signal_id' when calling SecurityMonitoringAPI.get_suggested_actions_matching_signal" + end + # resource path + local_var_path = '/api/v2/security_monitoring/signals/{signal_id}/suggested_actions'.sub('{signal_id}', CGI.escape(signal_id.to_s).gsub('%2F', '/')) + + # query parameters + query_params = opts[:query_params] || {} + + # header parameters + header_params = opts[:header_params] || {} + # HTTP header 'Accept' (if needed) + header_params['Accept'] = @api_client.select_header_accept(['application/json']) + + # form parameters + form_params = opts[:form_params] || {} + + # http body (model) + post_body = opts[:debug_body] + + # return_type + return_type = opts[:debug_return_type] || 'SecurityMonitoringSignalSuggestedActionsResponse' + + # auth_names + auth_names = opts[:debug_auth_names] || [:apiKeyAuth, :appKeyAuth, :AuthZ] + + new_options = opts.merge( + :operation => :get_suggested_actions_matching_signal, + :header_params => header_params, + :query_params => query_params, + :form_params => form_params, + :body => post_body, + :auth_names => auth_names, + :return_type => return_type, + :api_version => "V2" + ) + + data, status_code, headers = @api_client.call_api(Net::HTTP::Get, local_var_path, new_options) + if @api_client.config.debugging + @api_client.config.logger.debug "API called: SecurityMonitoringAPI#get_suggested_actions_matching_signal\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}" + end + return data, status_code, headers + end + # Get suppressions affecting future rule. # # @see #get_suppressions_affecting_future_rule_with_http_info diff --git a/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action.rb b/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action.rb new file mode 100644 index 000000000000..736175ab6cc2 --- /dev/null +++ b/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action.rb @@ -0,0 +1,165 @@ +=begin +#Datadog API V2 Collection + +#Collection of all Datadog Public endpoints. + +The version of the OpenAPI document: 1.0 +Contact: support@datadoghq.com +Generated by: https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator + + Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + This product includes software developed at Datadog (https://www.datadoghq.com/). + Copyright 2020-Present Datadog, Inc. + +=end + +require 'date' +require 'time' + +module DatadogAPIClient::V2 + # A suggested action for a security signal. + class SecurityMonitoringSignalSuggestedAction + include BaseGenericModel + + # Attributes of a suggested action for a security signal. The available fields depend on the action type. + attr_reader :attributes + + # The unique ID of the suggested action. + attr_reader :id + + # The type of the suggested action resource. + attr_reader :type + + attr_accessor :additional_properties + + # Attribute mapping from ruby-style variable name to JSON key. + # @!visibility private + def self.attribute_map + { + :'attributes' => :'attributes', + :'id' => :'id', + :'type' => :'type' + } + end + + # Attribute type mapping. + # @!visibility private + def self.openapi_types + { + :'attributes' => :'SecurityMonitoringSignalSuggestedActionAttributes', + :'id' => :'String', + :'type' => :'SecurityMonitoringSignalSuggestedActionType' + } + end + + # Initializes the object + # @param attributes [Hash] Model attributes in the form of hash + # @!visibility private + def initialize(attributes = {}) + if (!attributes.is_a?(Hash)) + fail ArgumentError, "The input argument (attributes) must be a hash in `DatadogAPIClient::V2::SecurityMonitoringSignalSuggestedAction` initialize method" + end + + self.additional_properties = {} + # check to see if the attribute exists and convert string to symbol for hash key + attributes = attributes.each_with_object({}) { |(k, v), h| + if (!self.class.attribute_map.key?(k.to_sym)) + self.additional_properties[k.to_sym] = v + else + h[k.to_sym] = v + end + } + + if attributes.key?(:'attributes') + self.attributes = attributes[:'attributes'] + end + + if attributes.key?(:'id') + self.id = attributes[:'id'] + end + + if attributes.key?(:'type') + self.type = attributes[:'type'] + end + end + + # Check to see if the all the properties in the model are valid + # @return true if the model is valid + # @!visibility private + def valid? + return false if @attributes.nil? + return false if @id.nil? + return false if @type.nil? + true + end + + # Custom attribute writer method with validation + # @param attributes [Object] Object to be assigned + # @!visibility private + def attributes=(attributes) + if attributes.nil? + fail ArgumentError, 'invalid value for "attributes", attributes cannot be nil.' + end + @attributes = attributes + end + + # Custom attribute writer method with validation + # @param id [Object] Object to be assigned + # @!visibility private + def id=(id) + if id.nil? + fail ArgumentError, 'invalid value for "id", id cannot be nil.' + end + @id = id + end + + # Custom attribute writer method with validation + # @param type [Object] Object to be assigned + # @!visibility private + def type=(type) + if type.nil? + fail ArgumentError, 'invalid value for "type", type cannot be nil.' + end + @type = type + end + + # Returns the object in the form of hash, with additionalProperties support. + # @return [Hash] Returns the object in the form of hash + # @!visibility private + def to_hash + hash = {} + self.class.attribute_map.each_pair do |attr, param| + value = self.send(attr) + if value.nil? + is_nullable = self.class.openapi_nullable.include?(attr) + next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}")) + end + + hash[param] = _to_hash(value) + end + self.additional_properties.each_pair do |attr, value| + hash[attr] = value + end + hash + end + + # Checks equality by comparing each attribute. + # @param o [Object] Object to be compared + # @!visibility private + def ==(o) + return true if self.equal?(o) + self.class == o.class && + attributes == o.attributes && + id == o.id && + type == o.type && + additional_properties == o.additional_properties + end + + # Calculates hash code according to all attributes. + # @return [Integer] Hash code + # @!visibility private + def hash + [attributes, id, type, additional_properties].hash + end + end +end diff --git a/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action_attributes.rb b/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action_attributes.rb new file mode 100644 index 000000000000..fc653b621cf6 --- /dev/null +++ b/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action_attributes.rb @@ -0,0 +1,145 @@ +=begin +#Datadog API V2 Collection + +#Collection of all Datadog Public endpoints. + +The version of the OpenAPI document: 1.0 +Contact: support@datadoghq.com +Generated by: https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator + + Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + This product includes software developed at Datadog (https://www.datadoghq.com/). + Copyright 2020-Present Datadog, Inc. + +=end + +require 'date' +require 'time' + +module DatadogAPIClient::V2 + # Attributes of a suggested action for a security signal. The available fields depend on the action type. + class SecurityMonitoringSignalSuggestedActionAttributes + include BaseGenericModel + + # The name of the investigation log query. + attr_accessor :name + + # The log query filter for the investigation. + attr_accessor :query_filter + + # Template variables applied to the investigation log query, mapping attribute paths to values extracted from the signal. + attr_accessor :template_variables + + # The title of the recommended blog post. + attr_accessor :title + + # The URL of the suggested action. + attr_accessor :url + + attr_accessor :additional_properties + + # Attribute mapping from ruby-style variable name to JSON key. + # @!visibility private + def self.attribute_map + { + :'name' => :'name', + :'query_filter' => :'query_filter', + :'template_variables' => :'template_variables', + :'title' => :'title', + :'url' => :'url' + } + end + + # Attribute type mapping. + # @!visibility private + def self.openapi_types + { + :'name' => :'String', + :'query_filter' => :'String', + :'template_variables' => :'Hash>', + :'title' => :'String', + :'url' => :'String' + } + end + + # Initializes the object + # @param attributes [Hash] Model attributes in the form of hash + # @!visibility private + def initialize(attributes = {}) + if (!attributes.is_a?(Hash)) + fail ArgumentError, "The input argument (attributes) must be a hash in `DatadogAPIClient::V2::SecurityMonitoringSignalSuggestedActionAttributes` initialize method" + end + + self.additional_properties = {} + # check to see if the attribute exists and convert string to symbol for hash key + attributes = attributes.each_with_object({}) { |(k, v), h| + if (!self.class.attribute_map.key?(k.to_sym)) + self.additional_properties[k.to_sym] = v + else + h[k.to_sym] = v + end + } + + if attributes.key?(:'name') + self.name = attributes[:'name'] + end + + if attributes.key?(:'query_filter') + self.query_filter = attributes[:'query_filter'] + end + + if attributes.key?(:'template_variables') + self.template_variables = attributes[:'template_variables'] + end + + if attributes.key?(:'title') + self.title = attributes[:'title'] + end + + if attributes.key?(:'url') + self.url = attributes[:'url'] + end + end + + # Returns the object in the form of hash, with additionalProperties support. + # @return [Hash] Returns the object in the form of hash + # @!visibility private + def to_hash + hash = {} + self.class.attribute_map.each_pair do |attr, param| + value = self.send(attr) + if value.nil? + is_nullable = self.class.openapi_nullable.include?(attr) + next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}")) + end + + hash[param] = _to_hash(value) + end + self.additional_properties.each_pair do |attr, value| + hash[attr] = value + end + hash + end + + # Checks equality by comparing each attribute. + # @param o [Object] Object to be compared + # @!visibility private + def ==(o) + return true if self.equal?(o) + self.class == o.class && + name == o.name && + query_filter == o.query_filter && + template_variables == o.template_variables && + title == o.title && + url == o.url && + additional_properties == o.additional_properties + end + + # Calculates hash code according to all attributes. + # @return [Integer] Hash code + # @!visibility private + def hash + [name, query_filter, template_variables, title, url, additional_properties].hash + end + end +end diff --git a/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action_type.rb b/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action_type.rb new file mode 100644 index 000000000000..d872d951c553 --- /dev/null +++ b/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_action_type.rb @@ -0,0 +1,27 @@ +=begin +#Datadog API V2 Collection + +#Collection of all Datadog Public endpoints. + +The version of the OpenAPI document: 1.0 +Contact: support@datadoghq.com +Generated by: https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator + + Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + This product includes software developed at Datadog (https://www.datadoghq.com/). + Copyright 2020-Present Datadog, Inc. + +=end + +require 'date' +require 'time' + +module DatadogAPIClient::V2 + # The type of the suggested action resource. + class SecurityMonitoringSignalSuggestedActionType + include BaseEnumModel + + INVESTIGATION_LOG_QUERIES = "investigation_log_queries".freeze + RECOMMENDED_BLOG_POSTS = "recommended_blog_posts".freeze + end +end diff --git a/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_actions_response.rb b/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_actions_response.rb new file mode 100644 index 000000000000..a122810baebe --- /dev/null +++ b/lib/datadog_api_client/v2/models/security_monitoring_signal_suggested_actions_response.rb @@ -0,0 +1,125 @@ +=begin +#Datadog API V2 Collection + +#Collection of all Datadog Public endpoints. + +The version of the OpenAPI document: 1.0 +Contact: support@datadoghq.com +Generated by: https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator + + Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + This product includes software developed at Datadog (https://www.datadoghq.com/). + Copyright 2020-Present Datadog, Inc. + +=end + +require 'date' +require 'time' + +module DatadogAPIClient::V2 + # Response with suggested actions for a security signal. + class SecurityMonitoringSignalSuggestedActionsResponse + include BaseGenericModel + + # List of suggested actions for a security signal. + attr_reader :data + + attr_accessor :additional_properties + + # Attribute mapping from ruby-style variable name to JSON key. + # @!visibility private + def self.attribute_map + { + :'data' => :'data' + } + end + + # Attribute type mapping. + # @!visibility private + def self.openapi_types + { + :'data' => :'Array' + } + end + + # Initializes the object + # @param attributes [Hash] Model attributes in the form of hash + # @!visibility private + def initialize(attributes = {}) + if (!attributes.is_a?(Hash)) + fail ArgumentError, "The input argument (attributes) must be a hash in `DatadogAPIClient::V2::SecurityMonitoringSignalSuggestedActionsResponse` initialize method" + end + + self.additional_properties = {} + # check to see if the attribute exists and convert string to symbol for hash key + attributes = attributes.each_with_object({}) { |(k, v), h| + if (!self.class.attribute_map.key?(k.to_sym)) + self.additional_properties[k.to_sym] = v + else + h[k.to_sym] = v + end + } + + if attributes.key?(:'data') + if (value = attributes[:'data']).is_a?(Array) + self.data = value + end + end + end + + # Check to see if the all the properties in the model are valid + # @return true if the model is valid + # @!visibility private + def valid? + return false if @data.nil? + true + end + + # Custom attribute writer method with validation + # @param data [Object] Object to be assigned + # @!visibility private + def data=(data) + if data.nil? + fail ArgumentError, 'invalid value for "data", data cannot be nil.' + end + @data = data + end + + # Returns the object in the form of hash, with additionalProperties support. + # @return [Hash] Returns the object in the form of hash + # @!visibility private + def to_hash + hash = {} + self.class.attribute_map.each_pair do |attr, param| + value = self.send(attr) + if value.nil? + is_nullable = self.class.openapi_nullable.include?(attr) + next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}")) + end + + hash[param] = _to_hash(value) + end + self.additional_properties.each_pair do |attr, value| + hash[attr] = value + end + hash + end + + # Checks equality by comparing each attribute. + # @param o [Object] Object to be compared + # @!visibility private + def ==(o) + return true if self.equal?(o) + self.class == o.class && + data == o.data && + additional_properties == o.additional_properties + end + + # Calculates hash code according to all attributes. + # @return [Integer] Hash code + # @!visibility private + def hash + [data, additional_properties].hash + end + end +end From 1b07d2cf5c55566c66f032d0f661ab91bb285c02 Mon Sep 17 00:00:00 2001 From: "api-clients-generation-pipeline[bot]" <54105614+api-clients-generation-pipeline[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 18:35:14 +0000 Subject: [PATCH 2/3] Adding compression optional field to Amazon S3 source (#3205) Co-authored-by: ci.datadog-api-spec --- .generator/schemas/v2/openapi.yaml | 18 ++++++- ...rce-compression-returns-OK-response.frozen | 1 + ...source-compression-returns-OK-response.yml | 27 ++++++++++ .../ValidatePipeline_99164570.rb | 51 +++++++++++++++++++ features/v2/observability_pipelines.feature | 8 +++ lib/datadog_api_client/inflector.rb | 1 + ...observability_pipeline_amazon_s3_source.rb | 14 ++++- ...y_pipeline_amazon_s3_source_compression.rb | 29 +++++++++++ 8 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 cassettes/features/v2/observability_pipelines/Validate-an-observability-pipeline-with-amazon-S3-source-compression-returns-OK-response.frozen create mode 100644 cassettes/features/v2/observability_pipelines/Validate-an-observability-pipeline-with-amazon-S3-source-compression-returns-OK-response.yml create mode 100644 examples/v2/observability-pipelines/ValidatePipeline_99164570.rb create mode 100644 lib/datadog_api_client/v2/models/observability_pipeline_amazon_s3_source_compression.rb diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 97b99b1a5fa0..d235bdcd3db3 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -43045,12 +43045,14 @@ components: ObservabilityPipelineAmazonS3Source: description: |- The `amazon_s3` source ingests logs from an Amazon S3 bucket. - It supports AWS authentication and TLS encryption. + It supports AWS authentication, TLS encryption, and configurable compression. **Supported pipeline types:** logs properties: auth: $ref: "#/components/schemas/ObservabilityPipelineAwsAuth" + compression: + $ref: "#/components/schemas/ObservabilityPipelineAmazonS3SourceCompression" id: description: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the `input` to downstream components). example: aws-s3-source @@ -43073,6 +43075,20 @@ components: - region type: object x-pipeline-types: [logs] + ObservabilityPipelineAmazonS3SourceCompression: + description: Compression format for objects retrieved from the S3 bucket. Use `auto` to detect compression from the object's Content-Encoding header or file extension. + enum: + - auto + - none + - gzip + - zstd + example: gzip + type: string + x-enum-varnames: + - AUTO + - NONE + - GZIP + - ZSTD ObservabilityPipelineAmazonS3SourceType: default: amazon_s3 description: The source type. Always `amazon_s3`. diff --git a/cassettes/features/v2/observability_pipelines/Validate-an-observability-pipeline-with-amazon-S3-source-compression-returns-OK-response.frozen b/cassettes/features/v2/observability_pipelines/Validate-an-observability-pipeline-with-amazon-S3-source-compression-returns-OK-response.frozen new file mode 100644 index 000000000000..642f43ba7818 --- /dev/null +++ b/cassettes/features/v2/observability_pipelines/Validate-an-observability-pipeline-with-amazon-S3-source-compression-returns-OK-response.frozen @@ -0,0 +1 @@ +2026-04-08T12:44:25.060Z \ No newline at end of file diff --git a/cassettes/features/v2/observability_pipelines/Validate-an-observability-pipeline-with-amazon-S3-source-compression-returns-OK-response.yml b/cassettes/features/v2/observability_pipelines/Validate-an-observability-pipeline-with-amazon-S3-source-compression-returns-OK-response.yml new file mode 100644 index 000000000000..18f812103e08 --- /dev/null +++ b/cassettes/features/v2/observability_pipelines/Validate-an-observability-pipeline-with-amazon-S3-source-compression-returns-OK-response.yml @@ -0,0 +1,27 @@ +http_interactions: +- recorded_at: Wed, 08 Apr 2026 12:44:25 GMT + request: + body: + encoding: UTF-8 + string: '{"data":{"attributes":{"config":{"destinations":[{"id":"datadog-logs-destination","inputs":["my-processor-group"],"type":"datadog_logs"}],"processor_groups":[{"enabled":true,"id":"my-processor-group","include":"service:my-service","inputs":["amazon-s3-source"],"processors":[{"enabled":true,"id":"filter-processor","include":"service:my-service","type":"filter"}]}],"sources":[{"compression":"gzip","id":"amazon-s3-source","region":"us-east-1","type":"amazon_s3"}]},"name":"Pipeline + with S3 Source Compression"},"type":"pipelines"}}' + headers: + Accept: + - application/json + Content-Type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/obs-pipelines/pipelines/validate + response: + body: + encoding: UTF-8 + string: '{"errors":[]} + + ' + headers: + Content-Type: + - application/vnd.api+json + status: + code: 200 + message: OK +recorded_with: VCR 6.0.0 diff --git a/examples/v2/observability-pipelines/ValidatePipeline_99164570.rb b/examples/v2/observability-pipelines/ValidatePipeline_99164570.rb new file mode 100644 index 000000000000..bc337a5a11c4 --- /dev/null +++ b/examples/v2/observability-pipelines/ValidatePipeline_99164570.rb @@ -0,0 +1,51 @@ +# Validate an observability pipeline with amazon S3 source compression returns "OK" response + +require "datadog_api_client" +api_instance = DatadogAPIClient::V2::ObservabilityPipelinesAPI.new + +body = DatadogAPIClient::V2::ObservabilityPipelineSpec.new({ + data: DatadogAPIClient::V2::ObservabilityPipelineSpecData.new({ + attributes: DatadogAPIClient::V2::ObservabilityPipelineDataAttributes.new({ + config: DatadogAPIClient::V2::ObservabilityPipelineConfig.new({ + destinations: [ + DatadogAPIClient::V2::ObservabilityPipelineDatadogLogsDestination.new({ + id: "datadog-logs-destination", + inputs: [ + "my-processor-group", + ], + type: DatadogAPIClient::V2::ObservabilityPipelineDatadogLogsDestinationType::DATADOG_LOGS, + }), + ], + processor_groups: [ + DatadogAPIClient::V2::ObservabilityPipelineConfigProcessorGroup.new({ + enabled: true, + id: "my-processor-group", + include: "service:my-service", + inputs: [ + "amazon-s3-source", + ], + processors: [ + DatadogAPIClient::V2::ObservabilityPipelineFilterProcessor.new({ + enabled: true, + id: "filter-processor", + include: "service:my-service", + type: DatadogAPIClient::V2::ObservabilityPipelineFilterProcessorType::FILTER, + }), + ], + }), + ], + sources: [ + DatadogAPIClient::V2::ObservabilityPipelineAmazonS3Source.new({ + id: "amazon-s3-source", + type: DatadogAPIClient::V2::ObservabilityPipelineAmazonS3SourceType::AMAZON_S3, + region: "us-east-1", + compression: DatadogAPIClient::V2::ObservabilityPipelineAmazonS3SourceCompression::GZIP, + }), + ], + }), + name: "Pipeline with S3 Source Compression", + }), + type: "pipelines", + }), +}) +p api_instance.validate_pipeline(body) diff --git a/features/v2/observability_pipelines.feature b/features/v2/observability_pipelines.feature index 7e8ceefc82e4..96a0bbc6cba2 100644 --- a/features/v2/observability_pipelines.feature +++ b/features/v2/observability_pipelines.feature @@ -207,6 +207,14 @@ Feature: Observability Pipelines Then the response status is 200 OK And the response "errors" has length 0 + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with amazon S3 source compression returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["amazon-s3-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "service:my-service", "type": "filter"}]}], "sources": [{"id": "amazon-s3-source", "type": "amazon_s3", "region": "us-east-1", "compression": "gzip"}]}, "name": "Pipeline with S3 Source Compression"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + @team:DataDog/observability-pipelines Scenario: Validate an observability pipeline with destination secret key returns "OK" response Given new "ValidatePipeline" request diff --git a/lib/datadog_api_client/inflector.rb b/lib/datadog_api_client/inflector.rb index 7b0c4d5fded8..fc93e7e731b2 100644 --- a/lib/datadog_api_client/inflector.rb +++ b/lib/datadog_api_client/inflector.rb @@ -3758,6 +3758,7 @@ def overrides "v2.observability_pipeline_amazon_s3_generic_encoding_parquet" => "ObservabilityPipelineAmazonS3GenericEncodingParquet", "v2.observability_pipeline_amazon_s3_generic_encoding_parquet_type" => "ObservabilityPipelineAmazonS3GenericEncodingParquetType", "v2.observability_pipeline_amazon_s3_source" => "ObservabilityPipelineAmazonS3Source", + "v2.observability_pipeline_amazon_s3_source_compression" => "ObservabilityPipelineAmazonS3SourceCompression", "v2.observability_pipeline_amazon_s3_source_type" => "ObservabilityPipelineAmazonS3SourceType", "v2.observability_pipeline_amazon_security_lake_destination" => "ObservabilityPipelineAmazonSecurityLakeDestination", "v2.observability_pipeline_amazon_security_lake_destination_type" => "ObservabilityPipelineAmazonSecurityLakeDestinationType", diff --git a/lib/datadog_api_client/v2/models/observability_pipeline_amazon_s3_source.rb b/lib/datadog_api_client/v2/models/observability_pipeline_amazon_s3_source.rb index ab203d7204b3..b2debe4e05bd 100644 --- a/lib/datadog_api_client/v2/models/observability_pipeline_amazon_s3_source.rb +++ b/lib/datadog_api_client/v2/models/observability_pipeline_amazon_s3_source.rb @@ -18,7 +18,7 @@ module DatadogAPIClient::V2 # The `amazon_s3` source ingests logs from an Amazon S3 bucket. - # It supports AWS authentication and TLS encryption. + # It supports AWS authentication, TLS encryption, and configurable compression. # # **Supported pipeline types:** logs class ObservabilityPipelineAmazonS3Source @@ -28,6 +28,9 @@ class ObservabilityPipelineAmazonS3Source # If omitted, the system’s default credentials are used (for example, the IAM role and environment variables). attr_accessor :auth + # Compression format for objects retrieved from the S3 bucket. Use `auto` to detect compression from the object's Content-Encoding header or file extension. + attr_accessor :compression + # The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the `input` to downstream components). attr_reader :id @@ -50,6 +53,7 @@ class ObservabilityPipelineAmazonS3Source def self.attribute_map { :'auth' => :'auth', + :'compression' => :'compression', :'id' => :'id', :'region' => :'region', :'tls' => :'tls', @@ -63,6 +67,7 @@ def self.attribute_map def self.openapi_types { :'auth' => :'ObservabilityPipelineAwsAuth', + :'compression' => :'ObservabilityPipelineAmazonS3SourceCompression', :'id' => :'String', :'region' => :'String', :'tls' => :'ObservabilityPipelineTls', @@ -93,6 +98,10 @@ def initialize(attributes = {}) self.auth = attributes[:'auth'] end + if attributes.key?(:'compression') + self.compression = attributes[:'compression'] + end + if attributes.key?(:'id') self.id = attributes[:'id'] end @@ -181,6 +190,7 @@ def ==(o) return true if self.equal?(o) self.class == o.class && auth == o.auth && + compression == o.compression && id == o.id && region == o.region && tls == o.tls && @@ -193,7 +203,7 @@ def ==(o) # @return [Integer] Hash code # @!visibility private def hash - [auth, id, region, tls, type, url_key, additional_properties].hash + [auth, compression, id, region, tls, type, url_key, additional_properties].hash end end end diff --git a/lib/datadog_api_client/v2/models/observability_pipeline_amazon_s3_source_compression.rb b/lib/datadog_api_client/v2/models/observability_pipeline_amazon_s3_source_compression.rb new file mode 100644 index 000000000000..654062b42433 --- /dev/null +++ b/lib/datadog_api_client/v2/models/observability_pipeline_amazon_s3_source_compression.rb @@ -0,0 +1,29 @@ +=begin +#Datadog API V2 Collection + +#Collection of all Datadog Public endpoints. + +The version of the OpenAPI document: 1.0 +Contact: support@datadoghq.com +Generated by: https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator + + Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + This product includes software developed at Datadog (https://www.datadoghq.com/). + Copyright 2020-Present Datadog, Inc. + +=end + +require 'date' +require 'time' + +module DatadogAPIClient::V2 + # Compression format for objects retrieved from the S3 bucket. Use `auto` to detect compression from the object's Content-Encoding header or file extension. + class ObservabilityPipelineAmazonS3SourceCompression + include BaseEnumModel + + AUTO = "auto".freeze + NONE = "none".freeze + GZIP = "gzip".freeze + ZSTD = "zstd".freeze + end +end From fe664408ed8e548136f4f1f2f099b12eee50e279 Mon Sep 17 00:00:00 2001 From: "api-clients-generation-pipeline[bot]" <54105614+api-clients-generation-pipeline[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 20:59:39 +0000 Subject: [PATCH 3/3] update CODEOWNERS for various synthetics spec files (#3191) Co-authored-by: ci.datadog-api-spec --- features/v1/synthetics.feature | 198 ++++++++++++++++----------------- features/v2/synthetics.feature | 90 +++++++-------- 2 files changed, 144 insertions(+), 144 deletions(-) diff --git a/features/v1/synthetics.feature b/features/v1/synthetics.feature index 5651a4c9a5b3..38aef49ed16f 100644 --- a/features/v1/synthetics.feature +++ b/features/v1/synthetics.feature @@ -17,7 +17,7 @@ Feature: Synthetics And a valid "appKeyAuth" key in the system And an instance of "Synthetics" API - @replay-only @skip-validation @team:DataDog/synthetics-managing + @replay-only @skip-validation @team:DataDog/synthetics-orchestrating-managing Scenario: Client is resilient to enum and oneOf deserialization errors Given new "ListTests" request When the request is sent @@ -33,7 +33,7 @@ Feature: Synthetics And the response "tests[3].type" is equal to "A non existent test type" And the response "tests[4].config.request.method" is equal to "A non existent method" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a FIDO global variable returns "OK" response Given there is a valid "synthetics_api_test_multi_step" in the system And new "CreateGlobalVariable" request @@ -42,7 +42,7 @@ Feature: Synthetics Then the response status is 200 OK And the response "name" is equal to "GLOBAL_VARIABLE_FIDO_PAYLOAD_{{ unique_upper_alnum }}" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a TOTP global variable returns "OK" response Given there is a valid "synthetics_api_test_multi_step" in the system And new "CreateGlobalVariable" request @@ -51,14 +51,14 @@ Feature: Synthetics Then the response status is 200 OK And the response "name" is equal to "GLOBAL_VARIABLE_TOTP_PAYLOAD_{{ unique_upper_alnum }}" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a browser test returns "- JSON format is wrong" response Given new "CreateSyntheticsBrowserTest" request And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "files": [{}], "httpVersion": "http1", "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"} When the request is sent Then the response status is 400 - JSON format is wrong - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a browser test returns "OK - Returns saved rumSettings." response Given new "CreateSyntheticsBrowserTest" request And body from file "synthetics_browser_test_payload_with_rum_settings.json" @@ -69,7 +69,7 @@ Feature: Synthetics And the response "options.rumSettings.clientTokenId" is equal to 12345 And the response "steps[0]" has field "public_id" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a browser test returns "OK - Returns the created test details." response Given new "CreateSyntheticsBrowserTest" request And body from file "synthetics_browser_test_payload.json" @@ -81,14 +81,14 @@ Feature: Synthetics And the response "steps[0].alwaysExecute" is equal to true And the response "steps[0].exitIfSucceed" is equal to true - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a browser test returns "Test quota is reached" response Given new "CreateSyntheticsBrowserTest" request And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "files": [{}], "httpVersion": "http1", "proxy": {"url": "https://example.com"}, "service": "Greeter", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"} When the request is sent Then the response status is 402 Test quota is reached - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a browser test with advanced scheduling options returns "OK - Returns the created test details." response Given new "CreateSyntheticsBrowserTest" request And body from file "synthetics_browser_test_payload_with_advanced_scheduling.json" @@ -100,7 +100,7 @@ Feature: Synthetics And the response "options.scheduling.timeframes[1].to" is equal to "16:00" And the response "options.scheduling.timezone" is equal to "America/New_York" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a global variable from test returns "OK" response Given there is a valid "synthetics_api_test_multi_step" in the system And new "CreateGlobalVariable" request @@ -109,35 +109,35 @@ Feature: Synthetics Then the response status is 200 OK And the response "name" is equal to "GLOBAL_VARIABLE_FROM_TEST_PAYLOAD_{{ unique_upper_alnum }}" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a global variable returns "Conflict" response Given new "CreateGlobalVariable" request And body with value {"attributes": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "description": "Example description", "name": "MY_VARIABLE", "parse_test_options": {"field": "content-type", "localVariableName": "LOCAL_VARIABLE", "parser": {"type": "regex", "value": ".*"}, "type": "http_body"}, "parse_test_public_id": "abc-def-123", "tags": ["team:front", "test:workflow-1"], "value": {"secure": true, "value": "value"}} When the request is sent Then the response status is 409 Conflict - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a global variable returns "Invalid request" response Given new "CreateGlobalVariable" request And body with value {"attributes": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "description": "Example description", "name": "MY_VARIABLE", "parse_test_options": {"field": "content-type", "localVariableName": "LOCAL_VARIABLE", "parser": {"type": "regex", "value": ".*"}, "type": "http_body"}, "parse_test_public_id": "abc-def-123", "tags": ["team:front", "test:workflow-1"], "value": {"secure": true, "value": "value"}} When the request is sent Then the response status is 400 Invalid request - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a global variable returns "OK" response Given new "CreateGlobalVariable" request And body with value {"attributes": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "description": "Example description", "name": "MY_VARIABLE", "parse_test_options": {"field": "content-type", "localVariableName": "LOCAL_VARIABLE", "parser": {"type": "regex", "value": ".*"}, "type": "http_body"}, "parse_test_public_id": "abc-def-123", "tags": ["team:front", "test:workflow-1"], "value": {"secure": true, "value": "value"}} When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a mobile test returns "- JSON format is wrong" response Given new "CreateSyntheticsMobileTest" request And body with value {"config": {"variables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}]}, "device_ids": ["chrome.laptop_large"], "message": "Notification message", "name": "Example test name", "options": {"bindings": [{"principals": [], "relation": "editor"}], "ci": {"executionRule": "blocking"}, "device_ids": ["synthetics:mobile:device:apple_ipad_10th_gen_2022_ios_16"], "mobileApplication": {"applicationId": "00000000-0000-0000-0000-aaaaaaaaaaaa", "referenceId": "00000000-0000-0000-0000-aaaaaaaaaaab", "referenceType": "latest"}, "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}, "tick_every": 300}, "status": "live", "steps": [{"name": "", "params": {"check": "equals", "direction": "up", "element": {"contextType": "native", "relativePosition": {}, "userLocator": {"values": [{"type": "accessibility-id"}]}}, "positions": [{}], "variable": {"example": "", "name": "VAR_NAME"}}, "publicId": "pub-lic-id0", "type": "assertElementContent"}], "tags": ["env:production"], "type": "mobile"} When the request is sent Then the response status is 400 - JSON format is wrong - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a mobile test returns "OK - Returns the created test details." response Given new "CreateSyntheticsMobileTest" request And body from file "synthetics_mobile_test_payload.json" @@ -149,14 +149,14 @@ Feature: Synthetics And the response "options.mobileApplication.referenceId" is equal to "6115922a-5f5d-455e-bc7e-7955a57f3815" And the response "options.mobileApplication.referenceType" is equal to "version" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a mobile test returns "Test quota is reached" response Given new "CreateSyntheticsMobileTest" request And body with value {"config": {"variables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}]}, "device_ids": ["chrome.laptop_large"], "message": "Notification message", "name": "Example test name", "options": {"bindings": [{"principals": [], "relation": "editor"}], "ci": {"executionRule": "blocking"}, "device_ids": ["synthetics:mobile:device:apple_ipad_10th_gen_2022_ios_16"], "mobileApplication": {"applicationId": "00000000-0000-0000-0000-aaaaaaaaaaaa", "referenceId": "00000000-0000-0000-0000-aaaaaaaaaaab", "referenceType": "latest"}, "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}, "tick_every": 300}, "status": "live", "steps": [{"name": "", "params": {"check": "equals", "direction": "up", "element": {"contextType": "native", "relativePosition": {}, "userLocator": {"values": [{"type": "accessibility-id"}]}}, "positions": [{}], "variable": {"example": "", "name": "VAR_NAME"}}, "publicId": "pub-lic-id0", "type": "assertElementContent"}], "tags": ["env:production"], "type": "mobile"} When the request is sent Then the response status is 402 Test quota is reached - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a multi-step api test with every type of basicAuth returns "OK - Returns the created test details." response Given new "CreateSyntheticsAPITest" request And body from file "synthetics_api_test_multi_step_with_every_type_of_basic_auth.json" @@ -171,7 +171,7 @@ Feature: Synthetics And the response "config.steps[5].request.basicAuth.type" is equal to "oauth-client" And the response "config.steps[6].request.basicAuth.type" is equal to "oauth-rop" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a multistep test with subtest returns "OK" response Given there is a valid "synthetics_api_test" in the system And new "CreateSyntheticsAPITest" request @@ -179,7 +179,7 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @replay-only @team:DataDog/synthetics-managing + @replay-only @team:DataDog/synthetics-orchestrating-managing Scenario: Create a private location returns "OK" response Given there is a valid "role" in the system And new "CreatePrivateLocation" request @@ -189,21 +189,21 @@ Feature: Synthetics And the response "private_location.name" is equal to "{{ unique }}" And the response "private_location.metadata.restricted_roles[0]" has the same value as "role.data.id" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a private location returns "Private locations are not activated for the user" response Given new "CreatePrivateLocation" request And body with value {"description": "Description of private location", "metadata": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "name": "New private location", "tags": ["team:front"]} When the request is sent Then the response status is 404 Private locations are not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a private location returns "Quota reached for private locations" response Given new "CreatePrivateLocation" request And body with value {"description": "Description of private location", "metadata": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "name": "New private location", "tags": ["team:front"]} When the request is sent Then the response status is 402 Quota reached for private locations - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API GRPC test returns "OK - Returns the created test details." response Given new "CreateSyntheticsAPITest" request And body from file "synthetics_api_grpc_test_payload.json" @@ -211,7 +211,7 @@ Feature: Synthetics Then the response status is 200 OK - Returns the created test details. And the response "name" is equal to "{{ unique }}" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API HTTP test has bodyHash filled out Given new "CreateSyntheticsAPITest" request And body from file "synthetics_api_http_test_payload.json" @@ -221,7 +221,7 @@ Feature: Synthetics And the response "config.assertions[6].target" is equal to "a" And the response "config.assertions[6].type" is equal to "bodyHash" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API HTTP test returns "OK - Returns the created test details." response Given new "CreateSyntheticsAPITest" request And body from file "synthetics_api_http_test_payload.json" @@ -231,7 +231,7 @@ Feature: Synthetics And the response "config.assertions[7].type" is equal to "javascript" And the response "config.assertions[7].code" is equal to "const hello = 'world';" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API HTTP with oauth-rop test returns "OK - Returns the created test details." response Given new "CreateSyntheticsAPITest" request And body from file "synthetics_api_http_test_oauth_rop_payload.json" @@ -239,7 +239,7 @@ Feature: Synthetics Then the response status is 200 OK - Returns the created test details. And the response "name" is equal to "{{ unique }}" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API SSL test returns "OK - Returns the created test details." response Given new "CreateSyntheticsAPITest" request And body from file "synthetics_api_ssl_test_payload.json" @@ -247,28 +247,28 @@ Feature: Synthetics Then the response status is 200 OK - Returns the created test details. And the response "name" is equal to "{{ unique }}" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API test returns "- JSON format is wrong" response Given new "CreateSyntheticsAPITest" request And body with value {"config": {"assertions": [{"operator": "lessThan", "target": 1000, "type": "responseTime"}], "request": {"method": "GET", "url": "https://example.com"}}, "locations": ["aws:eu-west-3"], "message": "Notification message", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "http", "tags": ["env:production"], "type": "api"} When the request is sent Then the response status is 400 - JSON format is wrong - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API test returns "OK - Returns the created test details." response Given new "CreateSyntheticsAPITest" request And body with value {"config": {"assertions": [{"operator": "lessThan", "target": 1000, "type": "responseTime"}], "request": {"method": "GET", "url": "https://example.com"}}, "locations": ["aws:eu-west-3"], "message": "Notification message", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "http", "tags": ["env:production"], "type": "api"} When the request is sent Then the response status is 200 OK - Returns the created test details. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API test returns "Test quota is reached" response Given new "CreateSyntheticsAPITest" request And body with value {"config": {"assertions": [{"operator": "lessThan", "target": 1000, "type": "responseTime"}], "request": {"method": "GET", "url": "https://example.com"}}, "locations": ["aws:eu-west-3"], "message": "Notification message", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "http", "tags": ["env:production"], "type": "api"} When the request is sent Then the response status is 402 Test quota is reached - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API test with UDP subtype returns "OK - Returns the created test details." response Given new "CreateSyntheticsAPITest" request And body from file "synthetics_api_test_udp_payload.json" @@ -276,7 +276,7 @@ Feature: Synthetics Then the response status is 200 OK - Returns the created test details. And the response "name" is equal to "{{ unique }}" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API test with WEBSOCKET subtype returns "OK - Returns the created test details." response Given new "CreateSyntheticsAPITest" request And body from file "synthetics_api_test_websocket_payload.json" @@ -284,7 +284,7 @@ Feature: Synthetics Then the response status is 200 OK - Returns the created test details. And the response "name" is equal to "{{ unique }}" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API test with a file payload returns "OK - Returns the created test details." response Given new "CreateSyntheticsAPITest" request And body from file "synthetics_api_http_test_with_file_payload.json" @@ -296,7 +296,7 @@ Feature: Synthetics And the response "config.request.files[0].type" is equal to "file type" And the response "config.request.files[0]" has field "bucketKey" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create an API test with multi subtype returns "OK - Returns the created test details." response Given new "CreateSyntheticsAPITest" request And body from file "synthetics_api_test_multi_step_payload.json" @@ -334,56 +334,56 @@ Feature: Synthetics And the response "config.steps[8].subtype" is equal to "udp" And the response "config.steps[8].request.host" is equal to "8.8.8.8" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Delete a global variable returns "JSON format is wrong" response Given new "DeleteGlobalVariable" request And request contains "variable_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 400 JSON format is wrong - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Delete a global variable returns "Not found" response Given new "DeleteGlobalVariable" request And request contains "variable_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 Not found - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Delete a global variable returns "OK" response Given new "DeleteGlobalVariable" request And request contains "variable_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Delete a private location returns "- Private locations are not activated for the user" response Given new "DeletePrivateLocation" request And request contains "location_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 - Private locations are not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Delete a private location returns "OK" response Given new "DeletePrivateLocation" request And request contains "location_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 204 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Delete tests returns "- JSON format is wrong" response Given new "DeleteTests" request And body with value {"force_delete_dependencies": false, "public_ids": []} When the request is sent Then the response status is 400 - JSON format is wrong - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Delete tests returns "- Tests to be deleted can't be found" response Given new "DeleteTests" request And body with value {"force_delete_dependencies": false, "public_ids": []} When the request is sent Then the response status is 404 - Tests to be deleted can't be found - @skip @team:DataDog/synthetics-managing + @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Delete tests returns "OK." response Given there is a valid "synthetics_api_test" in the system And new "DeleteTests" request @@ -392,7 +392,7 @@ Feature: Synthetics Then the response status is 200 OK. And the response "deleted_tests[0].public_id" is equal to "{{ synthetics_api_test.public_id }}" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a Mobile test returns "OK" response Given there is a valid "synthetics_mobile_test" in the system And new "UpdateMobileTest" request @@ -406,7 +406,7 @@ Feature: Synthetics And the response "options.mobileApplication.referenceId" is equal to "6115922a-5f5d-455e-bc7e-7955a57f3815" And the response "options.mobileApplication.referenceType" is equal to "version" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a browser test returns "- JSON format is wrong" response Given new "UpdateBrowserTest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -414,7 +414,7 @@ Feature: Synthetics When the request is sent Then the response status is 400 - JSON format is wrong - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a browser test returns "- Synthetic Monitoring is not activated for the user" response Given new "UpdateBrowserTest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -422,7 +422,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a browser test returns "OK" response Given new "UpdateBrowserTest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -430,7 +430,7 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a global variable returns "Invalid request" response Given new "EditGlobalVariable" request And request contains "variable_id" parameter from "REPLACE.ME" @@ -438,7 +438,7 @@ Feature: Synthetics When the request is sent Then the response status is 400 Invalid request - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a global variable returns "OK" response Given new "EditGlobalVariable" request And request contains "variable_id" parameter from "REPLACE.ME" @@ -446,7 +446,7 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a mobile test returns "- JSON format is wrong" response Given new "UpdateMobileTest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -454,7 +454,7 @@ Feature: Synthetics When the request is sent Then the response status is 400 - JSON format is wrong - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a mobile test returns "- Synthetic Monitoring is not activated for the user" response Given new "UpdateMobileTest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -462,7 +462,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a mobile test returns "OK" response Given new "UpdateMobileTest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -470,7 +470,7 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a private location returns "- Private locations are not activated for the user" response Given new "UpdatePrivateLocation" request And request contains "location_id" parameter from "REPLACE.ME" @@ -478,7 +478,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 - Private locations are not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a private location returns "OK" response Given new "UpdatePrivateLocation" request And request contains "location_id" parameter from "REPLACE.ME" @@ -486,7 +486,7 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit an API test returns "- JSON format is wrong" response Given new "UpdateAPITest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -494,7 +494,7 @@ Feature: Synthetics When the request is sent Then the response status is 400 - JSON format is wrong - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit an API test returns "- Synthetic Monitoring is not activated for the user" response Given new "UpdateAPITest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -502,7 +502,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Edit an API test returns "OK" response Given there is a valid "synthetics_api_test" in the system And new "UpdateAPITest" request @@ -512,14 +512,14 @@ Feature: Synthetics Then the response status is 200 OK And the response "name" is equal to "{{ synthetics_api_test.name }}-updated" - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Fetch uptime for multiple tests returns "- JSON format is wrong" response Given new "FetchUptimes" request And body with value {"from_ts": 0, "public_ids": [], "to_ts": 0} When the request is sent Then the response status is 400 - JSON format is wrong - @replay-only @team:DataDog/synthetics-managing + @replay-only @team:DataDog/synthetics-orchestrating-managing Scenario: Fetch uptime for multiple tests returns "OK." response Given new "FetchUptimes" request And body with value {"from_ts": 1726041488, "public_ids": ["p8m-9gw-nte"], "to_ts": 1726055954} @@ -529,7 +529,7 @@ Feature: Synthetics And the response "[0].overall.uptime" is equal to 83.05682373046875 And the response "[0].overall.history" has length 2 - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Get a Mobile test returns "OK" response Given there is a valid "synthetics_mobile_test" in the system And new "GetMobileTest" request @@ -543,7 +543,7 @@ Feature: Synthetics And the response "options.mobileApplication.referenceType" is equal to "version" And the response "type" is equal to "mobile" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a browser test result returns "- Synthetic Monitoring is not activated for the user" response Given new "GetBrowserTestResult" request And request contains "public_id" parameter from "REPLACE.ME" @@ -551,7 +551,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @replay-only @team:DataDog/synthetics-managing + @replay-only @team:DataDog/synthetics-orchestrating-managing Scenario: Get a browser test result returns "OK" response Given new "GetBrowserTestResult" request And request contains "public_id" parameter with value "2yy-sem-mjh" @@ -561,28 +561,28 @@ Feature: Synthetics And the response "result_id" is equal to "5671719892074090418" And the response "probe_dc" is equal to "aws:ca-central-1" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a browser test returns "- Synthetic Monitoring is not activated for the user" response Given new "GetBrowserTest" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a browser test returns "OK" response Given new "GetBrowserTest" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a browser test's latest results summaries returns "- Synthetic Monitoring is not activated for the user" response Given new "GetBrowserTestLatestResults" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @replay-only @team:DataDog/synthetics-managing + @replay-only @team:DataDog/synthetics-orchestrating-managing Scenario: Get a browser test's latest results summaries returns "OK" response Given new "GetBrowserTestLatestResults" request And request contains "public_id" parameter with value "2yy-sem-mjh" @@ -592,75 +592,75 @@ Feature: Synthetics And the response "results[0].status" is equal to 0 And the response "results[0].probe_dc" is equal to "aws:ca-central-1" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a global variable returns "Not found" response Given new "GetGlobalVariable" request And request contains "variable_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 Not found - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a global variable returns "OK" response Given new "GetGlobalVariable" request And request contains "variable_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a mobile test returns "- Synthetic Monitoring is not activated for the user" response Given new "GetMobileTest" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a mobile test returns "OK" response Given new "GetMobileTest" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a private location returns "- Synthetic private locations are not activated for the user" response Given new "GetPrivateLocation" request And request contains "location_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 - Synthetic private locations are not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a private location returns "OK" response Given new "GetPrivateLocation" request And request contains "location_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a test configuration returns "- Synthetic is not activated for the user" response Given new "GetTest" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 - Synthetic is not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a test configuration returns "OK" response Given new "GetTest" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get all global variables returns "OK" response Given new "ListGlobalVariables" request When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get all locations (public and private) returns "OK" response Given new "ListLocations" request When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get an API test result returns "- Synthetic Monitoring is not activated for the user" response Given new "GetAPITestResult" request And request contains "public_id" parameter from "REPLACE.ME" @@ -668,7 +668,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @replay-only @team:DataDog/synthetics-managing + @replay-only @team:DataDog/synthetics-orchestrating-managing Scenario: Get an API test result returns "OK" response Given new "GetAPITestResult" request And request contains "public_id" parameter with value "hwb-332-3xe" @@ -678,7 +678,7 @@ Feature: Synthetics And the response "result_id" is equal to "3420446318379485707" And the response "probe_dc" is equal to "aws:us-west-1" - @replay-only @team:DataDog/synthetics-managing + @replay-only @team:DataDog/synthetics-orchestrating-managing Scenario: Get an API test result returns result with failure object Given there is a "synthetics_api_test_with_wrong_dns" in the system And the "synthetics_api_test_with_wrong_dns" is triggered @@ -690,28 +690,28 @@ Feature: Synthetics And the response "result.failure.code" is equal to "DNS" And the response "result.failure.message" is equal to "Error during DNS resolution of hostname app.datadfoghq.com (ENOTFOUND)." - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get an API test returns "- Synthetic Monitoring is not activated for the user" response Given new "GetAPITest" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get an API test returns "OK" response Given new "GetAPITest" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get an API test's latest results summaries returns "- Synthetic is not activated for the user" response Given new "GetAPITestLatestResults" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 - Synthetic is not activated for the user - @replay-only @team:DataDog/synthetics-managing + @replay-only @team:DataDog/synthetics-orchestrating-managing Scenario: Get an API test's latest results summaries returns "OK" response Given new "GetAPITestLatestResults" request And request contains "public_id" parameter with value "hwb-332-3xe" @@ -721,33 +721,33 @@ Feature: Synthetics And the response "results[0].status" is equal to 0 And the response "results[0].probe_dc" is equal to "aws:us-west-1" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get details of batch returns "Batch does not exist." response Given new "GetSyntheticsCIBatch" request And request contains "batch_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 Batch does not exist. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get details of batch returns "OK" response Given new "GetSyntheticsCIBatch" request And request contains "batch_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get the default locations returns "OK" response Given new "GetSyntheticsDefaultLocations" request When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get the list of all Synthetic tests returns "OK - Returns the list of all Synthetic tests." response Given new "ListTests" request When the request is sent Then the response status is 200 OK - Returns the list of all Synthetic tests. - @replay-only @skip-validation @team:DataDog/synthetics-managing @with-pagination + @replay-only @skip-validation @team:DataDog/synthetics-orchestrating-managing @with-pagination Scenario: Get the list of all Synthetic tests returns "OK - Returns the list of all Synthetic tests." response with pagination Given new "ListTests" request And request contains "page_size" parameter with value 2 @@ -755,19 +755,19 @@ Feature: Synthetics Then the response status is 200 OK - Returns the list of all Synthetic tests. And the response has 3 items - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get the list of all Synthetic tests returns "Synthetic Monitoring is not activated for the user." response Given new "ListTests" request When the request is sent Then the response status is 404 Synthetic Monitoring is not activated for the user. - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Get the list of default locations returns "OK" response Given new "GetSyntheticsDefaultLocations" request When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Patch a Synthetic test returns "- JSON format is wrong" response Given new "PatchTest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -775,7 +775,7 @@ Feature: Synthetics When the request is sent Then the response status is 400 - JSON format is wrong - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Patch a Synthetic test returns "- Synthetic Monitoring is not activated for the user" response Given new "PatchTest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -783,7 +783,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Patch a Synthetic test returns "OK" response Given there is a valid "synthetics_api_test" in the system And new "PatchTest" request @@ -792,7 +792,7 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Pause or start a test returns "- Synthetic Monitoring is not activated for the user" response Given new "UpdateTestPauseStatus" request And request contains "public_id" parameter from "REPLACE.ME" @@ -800,7 +800,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 - Synthetic Monitoring is not activated for the user - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Pause or start a test returns "JSON format is wrong." response Given new "UpdateTestPauseStatus" request And request contains "public_id" parameter from "REPLACE.ME" @@ -808,7 +808,7 @@ Feature: Synthetics When the request is sent Then the response status is 400 JSON format is wrong. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Pause or start a test returns "OK - Returns a boolean indicating if the update was successful." response Given new "UpdateTestPauseStatus" request And request contains "public_id" parameter from "REPLACE.ME" @@ -816,26 +816,26 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - Returns a boolean indicating if the update was successful. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Search Synthetic tests returns "Not found" response Given new "SearchTests" request When the request is sent Then the response status is 404 Not found - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Search Synthetic tests returns "OK - Returns the list of Synthetic tests matching the search." response Given new "SearchTests" request When the request is sent Then the response status is 200 OK - Returns the list of Synthetic tests matching the search. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Trigger Synthetic tests returns "Bad Request" response Given new "TriggerTests" request And body with value {"tests": [{"metadata": {"ci": {"pipeline": {}, "provider": {}}, "git": {}}, "public_id": "aaa-aaa-aaa"}]} When the request is sent Then the response status is 400 Bad Request - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Trigger Synthetic tests returns "OK" response Given there is a valid "synthetics_api_test" in the system And new "TriggerTests" request @@ -845,14 +845,14 @@ Feature: Synthetics And the response "triggered_check_ids" array contains value "{{ synthetics_api_test.public_id }}" And the response "results" has item with field "public_id" with value "{{ synthetics_api_test.public_id }}" - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Trigger tests from CI/CD pipelines returns "JSON format is wrong" response Given new "TriggerCITests" request And body with value {"tests": [{"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "deviceIds": ["chrome.laptop_large"], "locations": ["aws:eu-west-3"], "metadata": {"ci": {"pipeline": {}, "provider": {}}, "git": {}}, "public_id": "aaa-aaa-aaa", "retry": {}}]} When the request is sent Then the response status is 400 JSON format is wrong - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Trigger tests from CI/CD pipelines returns "OK" response Given new "TriggerCITests" request And body with value {"tests": [{"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "deviceIds": ["chrome.laptop_large"], "locations": ["aws:eu-west-3"], "metadata": {"ci": {"pipeline": {}, "provider": {}}, "git": {}}, "public_id": "aaa-aaa-aaa", "retry": {}}]} diff --git a/features/v2/synthetics.feature b/features/v2/synthetics.feature index 2cdf9231fbc6..22e61a439cd2 100644 --- a/features/v2/synthetics.feature +++ b/features/v2/synthetics.feature @@ -17,7 +17,7 @@ Feature: Synthetics And a valid "appKeyAuth" key in the system And an instance of "Synthetics" API - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Abort a multipart upload of a test file returns "API error response." response Given new "AbortTestFileMultipartUpload" request And request contains "public_id" parameter from "REPLACE.ME" @@ -25,7 +25,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Abort a multipart upload of a test file returns "No Content" response Given new "AbortTestFileMultipartUpload" request And request contains "public_id" parameter from "REPLACE.ME" @@ -33,35 +33,35 @@ Feature: Synthetics When the request is sent Then the response status is 204 No Content - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Bulk delete suites returns "API error response." response Given new "DeleteSyntheticsSuites" request And body with value {"data": {"attributes": {"public_ids": [""]}, "type": "delete_suites_request"}} When the request is sent Then the response status is 400 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Bulk delete suites returns "OK" response Given new "DeleteSyntheticsSuites" request And body with value {"data": {"attributes": {"public_ids": [""]}, "type": "delete_suites_request"}} When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Bulk delete tests returns "API error response." response Given new "DeleteSyntheticsTests" request And body with value {"data": {"attributes": {"public_ids": [""]}, "type": "delete_tests_request"}} When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Bulk delete tests returns "OK" response Given new "DeleteSyntheticsTests" request And body with value {"data": {"attributes": {"public_ids": [""]}, "type": "delete_tests_request"}} When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Complete a multipart upload of a test file returns "API error response." response Given new "CompleteTestFileMultipartUpload" request And request contains "public_id" parameter from "REPLACE.ME" @@ -69,7 +69,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Complete a multipart upload of a test file returns "No Content" response Given new "CompleteTestFileMultipartUpload" request And request contains "public_id" parameter from "REPLACE.ME" @@ -77,35 +77,35 @@ Feature: Synthetics When the request is sent Then the response status is 204 No Content - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a Network Path test returns "API error response." response Given new "CreateSyntheticsNetworkTest" request And body with value {"data": {"attributes": {"config": {"assertions": [{"operator": "lessThan", "property": "avg", "target": 500, "type": "latency"}], "request": {"e2e_queries": 50, "host": "", "max_ttl": 30, "port": 443, "tcp_method": "prefer_sack", "traceroute_queries": 3}}, "locations": ["aws:us-east-1", "agent:my-agent-name"], "message": "Network Path test notification", "name": "Example Network Path test", "options": {"monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "tcp", "tags": ["env:production"], "type": "network"}, "type": "network"}} When the request is sent Then the response status is 400 API error response. - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a Network Path test returns "OK" response Given new "CreateSyntheticsNetworkTest" request And body with value {"data": {"attributes": {"config": {"assertions": [{"operator": "lessThan", "property": "avg", "target": 500, "type": "latency"}], "request": {"host": "example.com", "port": 443, "tcp_method": "prefer_sack", "max_ttl": 30, "e2e_queries": 50, "traceroute_queries": 3}}, "locations": ["aws:us-east-1", "agent:my-agent-name"], "message": "Network Path test notification", "name": "Example Network Path test", "options": {"tick_every": 60}, "status": "live", "subtype": "tcp", "tags": ["env:production"], "type": "network"}, "type": "network"}} When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Create a test suite returns "API error response." response Given new "CreateSyntheticsSuite" request And body with value {"data": {"attributes": {"message": "Notification message", "name": "Example suite name", "options": {}, "tags": ["env:production"], "tests": [{"alerting_criticality": "critical", "public_id": ""}], "type": "suite"}, "type": "suites"}} When the request is sent Then the response status is 400 API error response. - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Create a test suite returns "OK" response Given new "CreateSyntheticsSuite" request And body with value {"data": {"attributes": {"message": "Notification message", "name": "Example suite name", "options": {}, "tags": ["env:production"], "tests": [], "type": "suite"}, "type": "suites"}} When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a Network Path test returns "API error response." response Given new "UpdateSyntheticsNetworkTest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -113,7 +113,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a Network Path test returns "OK" response Given new "UpdateSyntheticsNetworkTest" request And request contains "public_id" parameter from "REPLACE.ME" @@ -121,7 +121,7 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a test suite returns "API error response." response Given new "EditSyntheticsSuite" request And request contains "public_id" parameter from "REPLACE.ME" @@ -129,7 +129,7 @@ Feature: Synthetics When the request is sent Then the response status is 400 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Edit a test suite returns "OK" response Given new "EditSyntheticsSuite" request And request contains "public_id" parameter from "REPLACE.ME" @@ -137,35 +137,35 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a Network Path test returns "API error response." response Given new "GetSyntheticsNetworkTest" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 API error response. - @replay-only @team:DataDog/synthetics-managing + @replay-only @team:DataDog/synthetics-orchestrating-managing Scenario: Get a Network Path test returns "OK" response Given new "GetSyntheticsNetworkTest" request And request contains "public_id" parameter with value "c7a-uwa-wn2" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a fast test result returns "API error response." response Given new "GetSyntheticsFastTestResult" request And request contains "id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a fast test result returns "OK" response Given new "GetSyntheticsFastTestResult" request And request contains "id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a presigned URL for downloading a test file returns "API error response." response Given new "GetTestFileDownloadUrl" request And request contains "public_id" parameter from "REPLACE.ME" @@ -173,7 +173,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a presigned URL for downloading a test file returns "OK" response Given new "GetTestFileDownloadUrl" request And request contains "public_id" parameter from "REPLACE.ME" @@ -181,7 +181,7 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a specific version of a test returns "API error response." response Given new "GetSyntheticsTestVersion" request And request contains "public_id" parameter from "REPLACE.ME" @@ -189,7 +189,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a specific version of a test returns "OK" response Given new "GetSyntheticsTestVersion" request And request contains "public_id" parameter from "REPLACE.ME" @@ -197,56 +197,56 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a suite returns "API error response." response Given new "GetSyntheticsSuite" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get a suite returns "OK" response Given new "GetSyntheticsSuite" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get available subtests for a multistep test returns "OK" response Given new "GetApiMultistepSubtests" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get parent suites for a test returns "API error response." response Given new "GetTestParentSuites" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get parent suites for a test returns "OK" response Given new "GetTestParentSuites" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get parent tests for a subtest returns "API error response." response Given new "GetApiMultistepSubtestParents" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get parent tests for a subtest returns "OK" response Given new "GetApiMultistepSubtestParents" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get presigned URLs for uploading a test file returns "API error response." response Given new "GetTestFileMultipartPresignedUrls" request And request contains "public_id" parameter from "REPLACE.ME" @@ -254,7 +254,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get presigned URLs for uploading a test file returns "OK" response Given new "GetTestFileMultipartPresignedUrls" request And request contains "public_id" parameter from "REPLACE.ME" @@ -262,27 +262,27 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Get the on-demand concurrency cap returns "OK" response Given new "GetOnDemandConcurrencyCap" request When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get version history of a test returns "API error response." response Given new "ListSyntheticsTestVersions" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 404 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Get version history of a test returns "OK" response Given new "ListSyntheticsTestVersions" request And request contains "public_id" parameter from "REPLACE.ME" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Patch a global variable returns "Bad Request" response Given new "PatchGlobalVariable" request And request contains "variable_id" parameter from "REPLACE.ME" @@ -290,7 +290,7 @@ Feature: Synthetics When the request is sent Then the response status is 400 Bad Request - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Patch a global variable returns "Not Found" response Given new "PatchGlobalVariable" request And request contains "variable_id" parameter from "REPLACE.ME" @@ -298,7 +298,7 @@ Feature: Synthetics When the request is sent Then the response status is 404 Not Found - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Patch a global variable returns "OK" response Given new "PatchGlobalVariable" request And request contains "variable_id" parameter from "REPLACE.ME" @@ -306,7 +306,7 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Patch a test suite returns "API error response." response Given new "PatchTestSuite" request And request contains "public_id" parameter from "REPLACE.ME" @@ -314,7 +314,7 @@ Feature: Synthetics When the request is sent Then the response status is 400 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Patch a test suite returns "OK" response Given new "PatchTestSuite" request And request contains "public_id" parameter from "REPLACE.ME" @@ -322,7 +322,7 @@ Feature: Synthetics When the request is sent Then the response status is 200 OK - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Save new value for on-demand concurrency cap returns "OK" response Given new "SetOnDemandConcurrencyCap" request And body with value {"on_demand_concurrency_cap": 20} @@ -330,19 +330,19 @@ Feature: Synthetics Then the response status is 200 OK And the response "data.attributes.on_demand_concurrency_cap" is equal to 20 - @team:DataDog/synthetics-managing + @team:DataDog/synthetics-orchestrating-managing Scenario: Search Synthetics suites returns "OK" response Given new "SearchSuites" request When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Search test suites returns "API error response." response Given new "SearchSuites" request When the request is sent Then the response status is 400 API error response. - @generated @skip @team:DataDog/synthetics-managing + @generated @skip @team:DataDog/synthetics-orchestrating-managing Scenario: Search test suites returns "OK" response Given new "SearchSuites" request When the request is sent