OpenSearch/rest-api-spec/test
Karel Minarik ad3bf79c6a Changed the "Indices Analyze" test to better correspond with the new test structure
1. Move the "text format" test into separate file
2. Remove the "JSON format" from test names
2013-09-09 23:36:44 +02:00
..
bulk Corrected test names for "Bulk" test suite 2013-09-09 23:36:43 +02:00
cluster.node_info cluster.node_info 2013-07-24 17:13:03 +02:00
cluster.node_stats cluster.node_stats 2013-07-24 16:51:38 +02:00
cluster.put_settings Basic tests for get/set cluster settings 2013-07-18 16:46:41 +02:00
cluster.reroute super basic test for cluster.reroute 2013-07-18 16:36:20 +02:00
cluster.state cluster state 2013-07-24 17:08:54 +02:00
create text ids 2013-07-11 02:32:35 +02:00
delete Removed client-specific `ignore_missing` parameter 2013-09-09 23:36:43 +02:00
delete_by_query Delete by query tests 2013-07-22 00:40:20 +02:00
exists Removed test for client-side default type in `exists` API 2013-09-09 23:36:43 +02:00
explain Added version skip commands for source filtering tests 2013-07-30 14:00:23 +02:00
get Changed the missing `type` to `_all` in "Get" test 2013-09-09 23:36:44 +02:00
get_source Changed the missing `type` to `_all` in "Get Source" test 2013-09-09 23:36:43 +02:00
index unicode in index name, dot in type name 2013-07-14 15:43:07 +02:00
indices.analyze Changed the "Indices Analyze" test to better correspond with the new test structure 2013-09-09 23:36:44 +02:00
indices.clear_cache indices.clear_cache 2013-07-24 16:51:55 +02:00
indices.delete_alias formattings issues 2013-07-23 19:20:40 +02:00
indices.delete_mapping Delete mapping tests 2013-07-15 15:01:48 +02:00
indices.exists Tests for indices.exists 2013-07-15 15:04:56 +02:00
indices.get_mapping enable skip to be in the middle of a test 2013-07-23 20:24:46 +02:00
indices.open open/close index tests 2013-07-24 03:47:52 +02:00
indices.optimize Optimize tests 2013-07-24 03:57:58 +02:00
indices.put_alias formattings issues 2013-07-23 19:20:40 +02:00
indices.put_mapping Make put_mapping tests work for 0.90.2 and master 2013-07-23 20:26:58 +02:00
indices.put_settings Indices settings tests 2013-07-22 00:49:53 +02:00
indices.put_template Template APIs tests 2013-07-20 21:12:27 +02:00
indices.put_warmer Warmer APIs 2013-07-24 01:28:27 +02:00
indices.segments indices.segments 2013-07-24 16:05:21 +02:00
indices.snapshot_index indices.snapshot_index 2013-07-24 16:05:38 +02:00
indices.stats sanity check for stats 2013-07-24 15:59:08 +02:00
indices.status indices.status 2013-07-24 03:51:57 +02:00
indices.update_aliases update_aliases basic tests 2013-07-24 01:17:51 +02:00
indices.validate_query validate query 2013-07-24 04:12:03 +02:00
info lucene_version is only in es sine 0.90.1 2013-07-11 13:51:36 +02:00
mget Added version skip commands for source filtering tests 2013-07-30 14:00:23 +02:00
mlt Super simple super useless mlt test 2013-07-24 01:47:28 +02:00
msearch msearch tests 2013-07-22 00:40:12 +02:00
percolate Percolate tests 2013-07-24 01:39:20 +02:00
ping Renamed "ok" and "not_ok" to "is_true" and "is_false" 2013-07-01 15:58:23 +02:00
scroll Basic scroll tests 2013-07-16 16:43:47 +02:00
search Changed the "default index/type" to use `index: _all` and renamed to "All indices" 2013-09-09 23:36:43 +02:00
suggest Siggest api broken in current release 2013-07-23 20:10:59 +02:00
update Removed client-specific `ignore_missing` parameter 2013-09-09 23:36:43 +02:00
README.asciidoc enable skip to be in the middle of a test 2013-07-23 20:24:46 +02:00

README.asciidoc

Test Suite:
===========

The tests in each YAML file should be run in order as a single set of dependent tests.
Before each file, the test cluster should be "reset" (eg deleting indices etc),
the `response` var and the `stash` should be cleared (see below).

Dot notation:
-------------
Dot notation is used for (1) method calls and (2) hierarchical data structures.  For
instance, a method call like `cluster.health` would do the equivalent of:

    client.cluster.health(...params...)

A test against `_tokens.1.token` would examine the `token` key, in the second element
of the `tokens` array, inside the `response` var (see below):

    $val = $response->{tokens}[1]{token}  # Perl syntax roolz!

If one of the levels (eg `tokens`) does not exist, it should return an undefined value.
If no field name is given (ie the empty string) then return the current
$val -- used for testing the whole response body.

Use \. to specify paths that actually contain '.' in the key name, for example
in the `indices.get_settings` API.

Skipping tests:
---------------
If any tests should be skipped on particular versions of Elasticsearch, there
should be an entry called `skip` containing the range of versions to be
skipped, and the reason why the tests are skipped.  For instance:

....
    "Parent":
     - skip:
          version:     "0 - 0.90.2"
          reason:      Delete ignores the parent param

     - do:
       ... test definitions ...
....

All tests in the file following the skip statement should be skipped if:
`min <= current <= max`.

The `version` range should always have an upper bound. Versions should
either have each version part compared numerically, or should be converted
to a string with sufficient digits to allow string comparison, eg

    0.90.2 -> 000-090-002

Snapshot versions and versions of the form `1.0.0.Beta1` can be treated
as the rounded down version, eg `1.0.0`.

Required operators:
-------------------

=== `do`

The `do` operator calls a method on the client. For instance:

....
    - do:
        cluster.health:
            level: shards
....

The response from the `do` operator should be stored in the `response` var, which
is reset (1) at the beginning of a file or (2) on the next `do`.

If the arguments to `do` include `catch`, then we are expecting an error, which should
be caught and tested.  For instance:

....
    - do:
        catch:        missing
        get:
            index:    test
            type:    test
            id:        1
....

The argument to `catch` can be any of:

[horizontal]
`missing`::     a 404 response from ES
`conflict`::    a 409 response from ES
`request`::     a generic error response from ES
`param`::       a client-side error indicating an unknown parameter has been passed
                to the method
`/foo bar/`::   the text of the error message matches this regular expression

If `catch` is specified, then the `response` var must be cleared, and the test
should fail if no error is thrown.

=== `set`

For some tests, it is necessary to extract a value from the previous `response`, in
order to reuse it in a subsequent `do` and other tests.  For instance, when
testing indexing a document without a specified ID:

....
    - do:
        index:
            index: test
            type:  test
    - set:  { _id: id }   # stash the value of `response._id` as `id`
    - do:
        get:
            index: test
            type:  test
            id:    $id    # replace `$id` with the stashed value
    - match: { _id: $id } # the returned `response._id` matches the stashed `id`
....

The stash should be reset at the beginning of each test file.

=== `is_true`

The specified key exists and has a true value (ie not `0`, `false`, `undefined`, `null`
or the empty string), eg:

....
    - is_true:  fields._parent  # the _parent key exists in the fields hash and is "true"
....

=== `is_false`

The specified key doesn't exist or has a false value (ie `0`, `false`, `undefined`,
`null` or the empty string), eg:

....
    - is_false:  fields._source  # the _source key doesn't exist in the fields hash or is "false"
....

=== `match`

Used to compare two variables (could be scalars, arrays or hashes).  The two variables
should be identical, eg:

....
    - match: { _source: { foo: bar }}
....

=== `lt` and `gt`

Compares two numeric values, eg:

....
    - lt: { fields._ttl: 10000 }  # the `_ttl` value is less than 10,000
....

=== `length`

This depends on the datatype of the value being examined, eg:

....
    - length: { _id: 22    }   # the `_id` string is 22 chars long
    - length: { _tokens: 3 }   # the `_tokens` array has 3 elements
    - length: { _source: 5 }   # the `_source` hash has 5 keys
....