From 2fce9c4e00068823f52674f0eb644d9cc1f364fc Mon Sep 17 00:00:00 2001 From: flavien peyre Date: Thu, 2 Jul 2015 08:55:09 -0400 Subject: [PATCH] Integration tests : passive, custom plugins Change-Id: I48a856526ac7dfd9f56d5abc2bad3392cf858e57 --- requirements.txt | 2 +- surveil/tests/integration/integration.yml | 8 +- surveil/tests/integration/test_surveil.py | 116 ++++++++++++++++++++-- 3 files changed, 117 insertions(+), 9 deletions(-) diff --git a/requirements.txt b/requirements.txt index c5dab69..305cef1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,5 +10,5 @@ keystonemiddleware PasteDeploy influxdb==2.4.0 pika -python-surveilclient==0.6.0 +python-surveilclient==0.8.0 six diff --git a/surveil/tests/integration/integration.yml b/surveil/tests/integration/integration.yml index d81a588..f0d75ae 100644 --- a/surveil/tests/integration/integration.yml +++ b/surveil/tests/integration/integration.yml @@ -6,13 +6,14 @@ surveil: - alignak ports: - "8999:8080" - command: bash -c "cd /opt/surveil && ./setup.sh && python setup.py develop && ((sleep 40 && surveil-init --demo) &) && sleep 20 && surveil-api --reload" + command: bash -c "cd /opt/surveil && ./setup.sh && /opt/surveil/env/bin/python setup.py develop && ((sleep 40 && surveil-init --influxdb --packs --mongodb --demo) &) && sleep 20 && surveil-api --reload" alignak: build: tools/docker/alignak_container/ links: - mongo - influxdb + - redis environment: SURVEIL_OS_AUTH_URL: "http://keystone:5000/v2.0" SURVEIL_OS_USERNAME: "admin" @@ -25,6 +26,9 @@ mongo: "mongod --nojournal --smallfiles" influxdb: - image: savoirfairelinux/influxdb + image: savoirfairelinux/influxdb:0.9.0 environment: PRE_CREATE_DB: "db" + +redis: + image: redis \ No newline at end of file diff --git a/surveil/tests/integration/test_surveil.py b/surveil/tests/integration/test_surveil.py index 240cf38..32738cc 100644 --- a/surveil/tests/integration/test_surveil.py +++ b/surveil/tests/integration/test_surveil.py @@ -4,7 +4,7 @@ # not use this file except in compliance with the License. You may obtain # a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT @@ -20,7 +20,6 @@ from surveil.tests.integration import integration_test class TestMergedIngegrationSurveil( integration_test.MergedIntegrationTest ): - def test_hello(self): self.assertEqual( requests.get("http://localhost:8999/v2/hello").text, @@ -31,7 +30,6 @@ class TestMergedIngegrationSurveil( class TestSeparatedIntegrationSurveil( integration_test.SeparatedIntegrationTests ): - def test_create_host(self): """Creates a host and asserts that is is monitored by Alignak.""" config_hosts = (TestSeparatedIntegrationSurveil. @@ -45,6 +43,7 @@ class TestSeparatedIntegrationSurveil( TestSeparatedIntegrationSurveil.client.config.hosts.create( host_name='integrationhosttest', address='127.0.0.1', + use='generic-host', ) TestSeparatedIntegrationSurveil.client.config.reload_config() @@ -55,7 +54,6 @@ class TestSeparatedIntegrationSurveil( self.assertTrue( any(host['host_name'].decode() == 'integrationhosttest' for host in status_hosts) - ) self.assertTrue( @@ -72,8 +70,7 @@ class TestSeparatedIntegrationSurveil( self.test_create_host() TestSeparatedIntegrationSurveil.client.config.hosts.delete( - 'integrationhosttest' - ) + 'integrationhosttest') TestSeparatedIntegrationSurveil.client.config.reload_config() @@ -94,3 +91,110 @@ class TestSeparatedIntegrationSurveil( message="Host was not deleted" ) ) + + def test_passive_check(self): + TestSeparatedIntegrationSurveil.client.config.hosts.create( + host_name='integrationhosttest', + address='127.0.0.1', + use='generic-host', + ) + TestSeparatedIntegrationSurveil.client.config.commands.create( + command_name='check_integrationhosttest', + command_line='/usr/lib/monitoring/plugins/sfl/check_example' + ) + TestSeparatedIntegrationSurveil.client.config.services.create( + check_command="check_integrationhosttest", + check_interval="5", + check_period="24x7", + contact_groups="admins", + contacts="admin", + host_name="integrationhosttest", + max_check_attempts="5", + notification_interval="30", + notification_period="24x7", + retry_interval="3", + service_description="check_integrationhosttest", + passive_checks_enabled="1" + ) + + TestSeparatedIntegrationSurveil.client.config.reload_config() + (TestSeparatedIntegrationSurveil.client.status.services. + submit_check_result( + host_name='integrationhosttest', + service_description='check_integrationhosttest', + output="Hello", + return_code=0 + ) + ) + + def function(): + status_services = (TestSeparatedIntegrationSurveil. + client.status.services.list()) + self.assertFalse( + any(service['host_name'].decode() == 'integrationhosttest' and + service['service_description'].decode() == + 'check_integrationhosttest' and + service['plugin_output'].decode() == 'Hello' and + service['state'].decode() == 'OK' + for service in status_services) + ) + + self.assertTrue( + self.try_for_x_seconds( + function, + time_to_wait=180, + cooldown=10, + exception=AssertionError, + message="submit check result fail" + ) + ) + + def test_custom_plugins(self): + TestSeparatedIntegrationSurveil.client.config.hosts.create( + host_name='integrationhosttest', + address='127.0.0.1', + use='generic-host', + ) + TestSeparatedIntegrationSurveil.client.config.commands.create( + command_name='check_integrationhosttest', + command_line='/usr/lib/monitoring/plugins/sfl/check_example' + ) + TestSeparatedIntegrationSurveil.client.config.services.create( + check_command="check_integrationhosttest", + check_interval="5", + check_period="24x7", + contact_groups="admins", + contacts="admin", + host_name="integrationhosttest", + max_check_attempts="5", + notification_interval="30", + notification_period="24x7", + retry_interval="3", + service_description="check_integrationhosttest", + passive_checks_enabled="1" + ) + + TestSeparatedIntegrationSurveil.client.config.reload_config() + + def function(): + status_services = (TestSeparatedIntegrationSurveil. + client.status.services.list()) + self.assertFalse( + any(service['host_name'].decode() == 'integrationhosttest' and + service['service_description'].decode() == + 'check_integrationhosttest' and + service['plugin_output'].decode() == + "DISK OK - free space: / 3326 MB (56%);" + " | /=2643MB;5948;5958;0;5968" + for service in status_services) + ) + + self.assertTrue( + self.try_for_x_seconds( + function, + time_to_wait=180, + cooldown=10, + exception=AssertionError, + message="Custom Plugins is not used" + ) + ) \ No newline at end of file