diff --git a/spec/changelog.yml b/spec/changelog.yml index d90f97142..5b1a0f8e3 100644 --- a/spec/changelog.yml +++ b/spec/changelog.yml @@ -17,6 +17,9 @@ - description: Input packages don't require to define fields. type: enhancement link: https://github.com/elastic/package-spec/pull/994 + - description: Add support for script testing in data streams. + type: enhancement + link: https://github.com/elastic/package-spec/pull/985 - version: 3.5.0 changes: - description: Add `duration` variable data type with `min_duration` and `max_duration` validation properties. diff --git a/spec/integration/data_stream/_dev/test/scripts/spec.yml b/spec/integration/data_stream/_dev/test/scripts/spec.yml new file mode 100644 index 000000000..d442470b9 --- /dev/null +++ b/spec/integration/data_stream/_dev/test/scripts/spec.yml @@ -0,0 +1,12 @@ +spec: + additionalContents: false + contents: + - description: >- + Script test definitions in txtar format, with semantics based on the + testscript package, but with extensions to make it possible to interact + with an Elastic stack. You can read more about the use of txtar and + testscript at https://pkg.go.dev/github.com/rogpeppe/go-internal/testscript. + type: file + contentMediaType: "text/plain" + pattern: '^.+\.(txt|txtar)$' + required: false diff --git a/spec/integration/data_stream/_dev/test/spec.yml b/spec/integration/data_stream/_dev/test/spec.yml index f82f099c8..6da4e1375 100644 --- a/spec/integration/data_stream/_dev/test/spec.yml +++ b/spec/integration/data_stream/_dev/test/spec.yml @@ -21,3 +21,8 @@ spec: name: policy required: false $ref: "./policy/spec.yml" + - description: Folder containing script tests + type: folder + name: scripts + required: false + $ref: "./scripts/spec.yml" diff --git a/test/packages/good_v3/data_stream/script_tests/_dev/test/scripts/env.txt b/test/packages/good_v3/data_stream/script_tests/_dev/test/scripts/env.txt new file mode 100644 index 000000000..cfb8db476 --- /dev/null +++ b/test/packages/good_v3/data_stream/script_tests/_dev/test/scripts/env.txt @@ -0,0 +1,59 @@ +[!exec:echo] skip 'Skipping test requiring absent echo command' + +exec echo ${PKG} +stdout '^with_script$' + +exec echo ${PKG_ROOT} +stdout 'github\.com/elastic/elastic-package/test/packages/other/with_script$' + +exec echo ${DATA_STREAM} +stdout '^first$' + +exec echo ${DATA_STREAM_ROOT} +stdout 'github\.com/elastic/elastic-package/test/packages/other/with_script/data_stream/first$' + +exec echo ${CURRENT_VERSION} +stdout '^0\.0\.2$' + +exec echo ${PREVIOUS_VERSION} +stdout '^0\.0\.1$' + +exec echo ${FIELDS_QUERY} +cmp stdout want_query.text + +-- want_query.text -- +{ + "fields": [ + "*" + ], + "runtime_mappings": { + "my_ignored": { + "type": "keyword", + "script": { + "source": "for (def v : params['_fields']._ignored.values) { emit(v); }" + } + } + }, + "aggs": { + "all_ignored": { + "filter": { + "exists": { + "field": "_ignored" + } + }, + "aggs": { + "ignored_fields": { + "terms": { + "size": 100, + "field": "my_ignored" + } + }, + "ignored_docs": { + "top_hits": { + "size": 5 + } + } + } + } + } +} diff --git a/test/packages/good_v3/data_stream/script_tests/_dev/test/scripts/noop.txt b/test/packages/good_v3/data_stream/script_tests/_dev/test/scripts/noop.txt new file mode 100644 index 000000000..2fb83075b --- /dev/null +++ b/test/packages/good_v3/data_stream/script_tests/_dev/test/scripts/noop.txt @@ -0,0 +1 @@ +# This is a noop test. \ No newline at end of file diff --git a/test/packages/good_v3/data_stream/script_tests/_dev/test/scripts/noop.txtar b/test/packages/good_v3/data_stream/script_tests/_dev/test/scripts/noop.txtar new file mode 100644 index 000000000..2b099a371 --- /dev/null +++ b/test/packages/good_v3/data_stream/script_tests/_dev/test/scripts/noop.txtar @@ -0,0 +1 @@ +# This is a noop test. diff --git a/test/packages/good_v3/data_stream/script_tests/fields/base-fields.yml b/test/packages/good_v3/data_stream/script_tests/fields/base-fields.yml new file mode 100644 index 000000000..7c798f453 --- /dev/null +++ b/test/packages/good_v3/data_stream/script_tests/fields/base-fields.yml @@ -0,0 +1,12 @@ +- name: data_stream.type + type: constant_keyword + description: Data stream type. +- name: data_stream.dataset + type: constant_keyword + description: Data stream dataset. +- name: data_stream.namespace + type: constant_keyword + description: Data stream namespace. +- name: '@timestamp' + type: date + description: Event timestamp. diff --git a/test/packages/good_v3/data_stream/script_tests/fields/some_fields.yml b/test/packages/good_v3/data_stream/script_tests/fields/some_fields.yml new file mode 100644 index 000000000..5c0c5687a --- /dev/null +++ b/test/packages/good_v3/data_stream/script_tests/fields/some_fields.yml @@ -0,0 +1,28 @@ +- name: source + title: Source + group: 2 + type: group + fields: + - name: geo.city_name + level: core + type: keyword + description: City name. + ignore_above: 1024 + - name: geo.location + level: core + type: geo_point + description: Longitude and latitude. + - name: geo.region_iso_code + level: core + type: keyword + description: Region ISO code. + ignore_above: 1024 + - name: geo.region_name + level: core + type: keyword + description: Region name. + ignore_above: 1024 +- name: foobar + type: text + description: A field with a pattern defined + pattern: '^[a-zA-Z]$' diff --git a/test/packages/good_v3/data_stream/script_tests/manifest.yml b/test/packages/good_v3/data_stream/script_tests/manifest.yml new file mode 100644 index 000000000..eeaac10a6 --- /dev/null +++ b/test/packages/good_v3/data_stream/script_tests/manifest.yml @@ -0,0 +1,2 @@ +title: Package with script tests +type: metrics