From: Sebastian Harl Date: Fri, 10 Oct 2014 11:02:57 +0000 (+0200) Subject: integration tests: Split simple_query into query, matching, and filter. X-Git-Tag: sysdb-0.6.0~126 X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=commitdiff_plain;h=ccc66402ce78e1cdaa75b6f66f503769d24ac854 integration tests: Split simple_query into query, matching, and filter. --- diff --git a/t/Makefile.am b/t/Makefile.am index 61328af..454e4c4 100644 --- a/t/Makefile.am +++ b/t/Makefile.am @@ -1,8 +1,10 @@ EXTRA_DIST = \ coverage.sh \ testwrapper.sh \ - integration/simple_config.sh \ - integration/simple_query.sh \ + integration/config.sh \ + integration/query.sh \ + integration/matching.sh \ + integration/filter.sh \ integration/test_lib.sh \ valgrind.suppress @@ -60,7 +62,11 @@ unit_libsysdb_net_test_LDADD = $(top_builddir)/src/libsysdb.la @CHECK_LIBS@ # if INTEGRATION_TESTING -TESTS += integration/simple_config.sh integration/simple_query.sh +TESTS += \ + integration/config.sh \ + integration/query.sh \ + integration/matching.sh \ + integration/filter.sh endif check_LTLIBRARIES += integration/mock_plugin.la diff --git a/t/integration/config.sh b/t/integration/config.sh new file mode 100755 index 0000000..3bdb104 --- /dev/null +++ b/t/integration/config.sh @@ -0,0 +1,93 @@ +#! /bin/bash +# +# SysDB -- t/integration/simple_config.sh +# Copyright (C) 2012 Sebastian 'tokkee' Harl +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# +# Integration tests using simple configuration snippets. +# + +set -ex + +source "$( dirname "$0" )/test_lib.sh" + +# Very basics ;-) +run_sysdb -V +run_sysdb -h + +run_sysdbd -V +run_sysdbd -h + +# Simple invalid configuration examples. +cat < "$SYSDBD_CONF" +Invalid "option" +EOF +if run_sysdbd_foreground -D -C "$SYSDBD_CONF"; then + echo 'SysDBd accepted invalid option; expected: failure' >&2 + exit 1 +fi + +cat < "$SYSDBD_CONF" +Listen "invalid://address" +EOF +if run_sysdbd_foreground -D -C "$SYSDBD_CONF"; then + echo 'SysDBd accepted invalid listen address; expected: failure' >&2 + exit 1 +fi + +cat < "$SYSDBD_CONF" +Interval "foo" +EOF +if run_sysdbd_foreground -D -C "$SYSDBD_CONF"; then + echo 'SysDBd accepted invalid interval; expected: failure' >&2 + exit 1 +fi + +cat < "$SYSDBD_CONF" +Interval -3.0 +EOF +if run_sysdbd_foreground -D -C "$SYSDBD_CONF"; then + echo 'SysDBd accepted invalid interval; expected: failure' >&2 + exit 1 +fi + +# Simple configuration examples. +cat < "$SYSDBD_CONF" +Listen "$SOCKET_FILE" +EOF + +run_sysdbd -D -C "$SYSDBD_CONF" +wait_for_sysdbd + +# reconfigure +SOCKET_FILE="$SOCKET_FILE-2" +cat < "$SYSDBD_CONF" +Listen "${SOCKET_FILE}" +EOF +kill -HUP $SYSDBD_PID +wait_for_sysdbd + +stop_sysdbd + diff --git a/t/integration/filter.sh b/t/integration/filter.sh new file mode 100755 index 0000000..025cd57 --- /dev/null +++ b/t/integration/filter.sh @@ -0,0 +1,79 @@ +#! /bin/bash +# +# SysDB -- t/integration/simple_query.sh +# Copyright (C) 2012 Sebastian 'tokkee' Harl +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# +# Integration tests using simple queries. +# + +set -ex + +source "$( dirname "$0" )/test_lib.sh" + +cat < "$SYSDBD_CONF" +Listen "$SOCKET_FILE" +PluginDir "$PLUGIN_DIR" +Interval 2 + +LoadBackend mock_plugin + + +EOF + +run_sysdbd -D -C "$SYSDBD_CONF" + +wait_for_sysdbd +sleep 3 + +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts MATCHING attribute != 'architecture' + FILTER .age >= 0s" )" +echo "$output" \ + | grep -F '"some.host.name"' \ + | grep -F '"localhost"' +echo "$output" | grep -F 'other.host.name' && exit 1 +echo "$output" | grep -F 'host1.example.com' && exit 1 +echo "$output" | grep -F 'host2.example.com' && exit 1 + +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts MATCHING attribute != 'architecture' + FILTER .last_update < 2Y" )" +echo $output | grep -E '^\[\]$' + +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts FILTER .backend = 'backend::mock_plugin'" )" +echo "$output" \ + | grep -F '"host1.example.com"' \ + | grep -F '"host2.example.com"' \ + | grep -F '"localhost"' \ + | grep -F '"other.host.name"' \ + | grep -F '"some.host.name"' +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts FILTER .backend = 'invalid'" )" +echo $output | grep -E '^\[\]$' + +stop_sysdbd + diff --git a/t/integration/matching.sh b/t/integration/matching.sh new file mode 100755 index 0000000..d42044b --- /dev/null +++ b/t/integration/matching.sh @@ -0,0 +1,110 @@ +#! /bin/bash +# +# SysDB -- t/integration/basic_matching.sh +# Copyright (C) 2012 Sebastian 'tokkee' Harl +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# +# Integration tests for matching clauses. +# + +set -ex + +source "$( dirname "$0" )/test_lib.sh" + +cat < "$SYSDBD_CONF" +Listen "$SOCKET_FILE" +PluginDir "$PLUGIN_DIR" +Interval 2 + +LoadBackend mock_plugin + + +EOF + +run_sysdbd -D -C "$SYSDBD_CONF" + +wait_for_sysdbd +sleep 3 + +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts MATCHING metric = 'foo/bar/qux'" )" +echo "$output" \ + | grep -F '"some.host.name"' \ + | grep -F '"other.host.name"' +echo "$output" | grep -F 'localhost' && exit 1 +echo "$output" | grep -F 'host1.example.com' && exit 1 +echo "$output" | grep -F 'host2.example.com' && exit 1 + +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts MATCHING service = 'mock service'" )" +echo "$output" \ + | grep -F '"some.host.name"' \ + | grep -F '"host1.example.com"' \ + | grep -F '"host2.example.com"' +echo "$output" | grep -F 'localhost' && exit 1 +echo "$output" | grep -F 'other.host.name' && exit 1 + +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts MATCHING attribute[architecture] = 'x42'" )" +echo "$output" \ + | grep -F '"host1.example.com"' \ + | grep -F '"host2.example.com"' +echo "$output" | grep -F 'localhost' && exit 1 +echo "$output" | grep -F 'other.host.name' && exit 1 +echo "$output" | grep -F 'some.host.name' && exit 1 + +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts MATCHING attribute != 'architecture'" )" +echo "$output" \ + | grep -F '"some.host.name"' \ + | grep -F '"localhost"' +echo "$output" | grep -F 'other.host.name' && exit 1 +echo "$output" | grep -F 'host1.example.com' && exit 1 +echo "$output" | grep -F 'host2.example.com' && exit 1 + +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts MATCHING service = 'sysdbd'" )" +echo "$output" | grep -F '"localhost"' +echo "$output" | grep -F 'some.host.name' && exit 1 +echo "$output" | grep -F 'other.host.name' && exit 1 +echo "$output" | grep -F 'host1.example.com' && exit 1 +echo "$output" | grep -F 'host2.example.com' && exit 1 + +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts MATCHING host =~ 'example.com'" )" +echo "$output" \ + | grep -F '"host1.example.com"' \ + | grep -F '"host2.example.com"' +echo "$output" | grep -F 'some.host.name' && exit 1 +echo "$output" | grep -F 'other.host.name' && exit 1 +echo "$output" | grep -F 'localhost' && exit 1 + +# When querying hosts that don't exist, expect a zero exit code. +output="$( run_sysdb -H "$SOCKET_FILE" \ + -c "LOOKUP hosts MATCHING attribute[invalid] = 'none'" )" +echo $output | grep -E '^\[\]$' + +stop_sysdbd + diff --git a/t/integration/query.sh b/t/integration/query.sh new file mode 100755 index 0000000..e034e7c --- /dev/null +++ b/t/integration/query.sh @@ -0,0 +1,112 @@ +#! /bin/bash +# +# SysDB -- t/integration/basic_query.sh +# Copyright (C) 2012 Sebastian 'tokkee' Harl +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# +# Integration tests using basic queries. +# + +set -ex + +source "$( dirname "$0" )/test_lib.sh" + +cat < "$SYSDBD_CONF" +Listen "$SOCKET_FILE" +PluginDir "$PLUGIN_DIR" +Interval 2 + +LoadBackend mock_plugin + + +EOF + +run_sysdbd -D -C "$SYSDBD_CONF" + +wait_for_sysdbd +sleep 3 + +# On parse errors, expect a non-zero exit code. +output="$( run_sysdb -H "$SOCKET_FILE" -c INVALID )" && exit 1 +echo "$output" | grep "Failed to parse query 'INVALID'" +echo "$output" | grep "parse error: syntax error" + +# Simple, successful commands. +output="$( run_sysdb -H "$SOCKET_FILE" -c 'LIST hosts' )" +echo "$output" \ + | grep -F '"host1.example.com"' \ + | grep -F '"host2.example.com"' \ + | grep -F '"localhost"' \ + | grep -F '"other.host.name"' \ + | grep -F '"some.host.name"' + +output="$( echo 'LIST hosts;' | run_sysdb -H "$SOCKET_FILE" )" || echo $? +echo "$output" \ + | grep -F '"host1.example.com"' \ + | grep -F '"host2.example.com"' \ + | grep -F '"localhost"' \ + | grep -F '"other.host.name"' \ + | grep -F '"some.host.name"' + +output="$( run_sysdb -H "$SOCKET_FILE" -c 'LIST services' )" +echo "$output" \ + | grep -F '"host1.example.com"' \ + | grep -F '"host2.example.com"' \ + | grep -F '"localhost"' \ + | grep -F '"some.host.name"' \ + | grep -F '"mock service"' \ + | grep -F '"other service"' \ + | grep -F '"database"' \ + | grep -F '"example service one"' \ + | grep -F '"example service two"' \ + | grep -F '"example service three"' + +output="$( run_sysdb -H "$SOCKET_FILE" -c "FETCH host 'host1.example.com'" )" +echo "$output" \ + | grep -F '"host1.example.com"' \ + | grep -F '"mock service"' \ + | grep -E '"other attribute".*"special value"' +echo "$output" | grep -F 'host2.example.com' && exit 1 +echo "$output" | grep -F 'localhost' && exit 1 +echo "$output" | grep -F 'other.host.name' && exit 1 +echo "$output" | grep -F 'some.host.name' && exit 1 + +(echo 'LIST hosts;'; sleep 1; echo "FETCH host 'host1.example.com'") \ + | run_sysdb -H "$SOCKET_FILE" + +# When requesting information for unknown hosts, expect a non-zero exit code. +output="$( run_sysdb -H "$SOCKET_FILE" -c "FETCH host 'does.not.exist'" )" \ + && exit 1 +echo "$output" | grep -F 'not found' + +run_sysdb -H "$SOCKET_FILE" \ + -c "TIMESERIES 'invalid.host'.'invalid-metric'" && exit 1 + +# Does not work yet since there is no fetcher plugin. +run_sysdb -H "$SOCKET_FILE" \ + -c "TIMESERIES 'some.host.name'.'foo/bar/qux'" && exit 1 + +stop_sysdbd + diff --git a/t/integration/simple_config.sh b/t/integration/simple_config.sh deleted file mode 100755 index 3bdb104..0000000 --- a/t/integration/simple_config.sh +++ /dev/null @@ -1,93 +0,0 @@ -#! /bin/bash -# -# SysDB -- t/integration/simple_config.sh -# Copyright (C) 2012 Sebastian 'tokkee' Harl -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# -# Integration tests using simple configuration snippets. -# - -set -ex - -source "$( dirname "$0" )/test_lib.sh" - -# Very basics ;-) -run_sysdb -V -run_sysdb -h - -run_sysdbd -V -run_sysdbd -h - -# Simple invalid configuration examples. -cat < "$SYSDBD_CONF" -Invalid "option" -EOF -if run_sysdbd_foreground -D -C "$SYSDBD_CONF"; then - echo 'SysDBd accepted invalid option; expected: failure' >&2 - exit 1 -fi - -cat < "$SYSDBD_CONF" -Listen "invalid://address" -EOF -if run_sysdbd_foreground -D -C "$SYSDBD_CONF"; then - echo 'SysDBd accepted invalid listen address; expected: failure' >&2 - exit 1 -fi - -cat < "$SYSDBD_CONF" -Interval "foo" -EOF -if run_sysdbd_foreground -D -C "$SYSDBD_CONF"; then - echo 'SysDBd accepted invalid interval; expected: failure' >&2 - exit 1 -fi - -cat < "$SYSDBD_CONF" -Interval -3.0 -EOF -if run_sysdbd_foreground -D -C "$SYSDBD_CONF"; then - echo 'SysDBd accepted invalid interval; expected: failure' >&2 - exit 1 -fi - -# Simple configuration examples. -cat < "$SYSDBD_CONF" -Listen "$SOCKET_FILE" -EOF - -run_sysdbd -D -C "$SYSDBD_CONF" -wait_for_sysdbd - -# reconfigure -SOCKET_FILE="$SOCKET_FILE-2" -cat < "$SYSDBD_CONF" -Listen "${SOCKET_FILE}" -EOF -kill -HUP $SYSDBD_PID -wait_for_sysdbd - -stop_sysdbd - diff --git a/t/integration/simple_query.sh b/t/integration/simple_query.sh deleted file mode 100755 index 677ce2f..0000000 --- a/t/integration/simple_query.sh +++ /dev/null @@ -1,197 +0,0 @@ -#! /bin/bash -# -# SysDB -- t/integration/simple_query.sh -# Copyright (C) 2012 Sebastian 'tokkee' Harl -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# -# Integration tests using simple queries. -# - -set -ex - -source "$( dirname "$0" )/test_lib.sh" - -cat < "$SYSDBD_CONF" -Listen "$SOCKET_FILE" -PluginDir "$PLUGIN_DIR" -Interval 2 - -LoadBackend mock_plugin - - -EOF - -run_sysdbd -D -C "$SYSDBD_CONF" - -wait_for_sysdbd -sleep 3 - -# On parse errors, expect a non-zero exit code. -output="$( run_sysdb -H "$SOCKET_FILE" -c INVALID )" && exit 1 -echo "$output" | grep "Failed to parse query 'INVALID'" -echo "$output" | grep "parse error: syntax error" - -# Simple, successful commands. -output="$( run_sysdb -H "$SOCKET_FILE" -c 'LIST hosts' )" -echo "$output" \ - | grep -F '"host1.example.com"' \ - | grep -F '"host2.example.com"' \ - | grep -F '"localhost"' \ - | grep -F '"other.host.name"' \ - | grep -F '"some.host.name"' - -output="$( echo 'LIST hosts;' | run_sysdb -H "$SOCKET_FILE" )" || echo $? -echo "$output" \ - | grep -F '"host1.example.com"' \ - | grep -F '"host2.example.com"' \ - | grep -F '"localhost"' \ - | grep -F '"other.host.name"' \ - | grep -F '"some.host.name"' - -output="$( run_sysdb -H "$SOCKET_FILE" -c 'LIST services' )" -echo "$output" \ - | grep -F '"host1.example.com"' \ - | grep -F '"host2.example.com"' \ - | grep -F '"localhost"' \ - | grep -F '"some.host.name"' \ - | grep -F '"mock service"' \ - | grep -F '"other service"' \ - | grep -F '"database"' \ - | grep -F '"example service one"' \ - | grep -F '"example service two"' \ - | grep -F '"example service three"' - -output="$( run_sysdb -H "$SOCKET_FILE" -c "FETCH host 'host1.example.com'" )" -echo "$output" \ - | grep -F '"host1.example.com"' \ - | grep -F '"mock service"' \ - | grep -E '"other attribute".*"special value"' -echo "$output" | grep -F 'host2.example.com' && exit 1 -echo "$output" | grep -F 'localhost' && exit 1 -echo "$output" | grep -F 'other.host.name' && exit 1 -echo "$output" | grep -F 'some.host.name' && exit 1 - -(echo 'LIST hosts;'; sleep 1; echo "FETCH host 'host1.example.com'") \ - | run_sysdb -H "$SOCKET_FILE" - -# When requesting information for unknown hosts, expect a non-zero exit code. -output="$( run_sysdb -H "$SOCKET_FILE" -c "FETCH host 'does.not.exist'" )" \ - && exit 1 -echo "$output" | grep -F 'not found' - -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts MATCHING metric = 'foo/bar/qux'" )" -echo "$output" \ - | grep -F '"some.host.name"' \ - | grep -F '"other.host.name"' -echo "$output" | grep -F 'localhost' && exit 1 -echo "$output" | grep -F 'host1.example.com' && exit 1 -echo "$output" | grep -F 'host2.example.com' && exit 1 - -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts MATCHING service = 'mock service'" )" -echo "$output" \ - | grep -F '"some.host.name"' \ - | grep -F '"host1.example.com"' \ - | grep -F '"host2.example.com"' -echo "$output" | grep -F 'localhost' && exit 1 -echo "$output" | grep -F 'other.host.name' && exit 1 - -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts MATCHING attribute[architecture] = 'x42'" )" -echo "$output" \ - | grep -F '"host1.example.com"' \ - | grep -F '"host2.example.com"' -echo "$output" | grep -F 'localhost' && exit 1 -echo "$output" | grep -F 'other.host.name' && exit 1 -echo "$output" | grep -F 'some.host.name' && exit 1 - -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts MATCHING attribute != 'architecture'" )" -echo "$output" \ - | grep -F '"some.host.name"' \ - | grep -F '"localhost"' -echo "$output" | grep -F 'other.host.name' && exit 1 -echo "$output" | grep -F 'host1.example.com' && exit 1 -echo "$output" | grep -F 'host2.example.com' && exit 1 - -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts MATCHING attribute != 'architecture' - FILTER .age >= 0s" )" -echo "$output" \ - | grep -F '"some.host.name"' \ - | grep -F '"localhost"' -echo "$output" | grep -F 'other.host.name' && exit 1 -echo "$output" | grep -F 'host1.example.com' && exit 1 -echo "$output" | grep -F 'host2.example.com' && exit 1 - -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts MATCHING attribute != 'architecture' - FILTER .last_update < 2Y" )" -echo $output | grep -E '^\[\]$' - -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts FILTER .backend = 'backend::mock_plugin'" )" -echo "$output" \ - | grep -F '"host1.example.com"' \ - | grep -F '"host2.example.com"' \ - | grep -F '"localhost"' \ - | grep -F '"other.host.name"' \ - | grep -F '"some.host.name"' -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts FILTER .backend = 'invalid'" )" -echo $output | grep -E '^\[\]$' - -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts MATCHING service = 'sysdbd'" )" -echo "$output" | grep -F '"localhost"' -echo "$output" | grep -F 'some.host.name' && exit 1 -echo "$output" | grep -F 'other.host.name' && exit 1 -echo "$output" | grep -F 'host1.example.com' && exit 1 -echo "$output" | grep -F 'host2.example.com' && exit 1 - -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts MATCHING host =~ 'example.com'" )" -echo "$output" \ - | grep -F '"host1.example.com"' \ - | grep -F '"host2.example.com"' -echo "$output" | grep -F 'some.host.name' && exit 1 -echo "$output" | grep -F 'other.host.name' && exit 1 -echo "$output" | grep -F 'localhost' && exit 1 - -# When querying hosts that don't exist, expect a zero exit code. -output="$( run_sysdb -H "$SOCKET_FILE" \ - -c "LOOKUP hosts MATCHING attribute[invalid] = 'none'" )" -echo $output | grep -E '^\[\]$' - -run_sysdb -H "$SOCKET_FILE" \ - -c "TIMESERIES 'invalid.host'.'invalid-metric'" && exit 1 - -# Does not work yet since there is no fetcher plugin. -run_sysdb -H "$SOCKET_FILE" \ - -c "TIMESERIES 'some.host.name'.'foo/bar/qux'" && exit 1 - -stop_sysdbd -