Skip to content

Commit

Permalink
Adding an integration test for the GELFRabbitHandler
Browse files Browse the repository at this point in the history
  • Loading branch information
bakkerd committed Mar 13, 2020
1 parent b7f61ff commit 256f8be
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 2 deletions.
9 changes: 9 additions & 0 deletions tests/config/docker-compose-rmq.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
version: '2'
services:
rabbitmq:
image: "rabbitmq:3.8-management-alpine"
volumes:
- ./setup_rabbitmq.sh:/usr/local/bin/setup_rabbitmq.sh
ports:
- "5672:5672"
- "15672:15672"
2 changes: 1 addition & 1 deletion tests/config/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ services:
- "12201:12201/tcp"
- "12202:12202/udp"
- "12203:12203"
- "12204:12204/tcp"
- "12204:12204/tcp"
26 changes: 26 additions & 0 deletions tests/config/inputs.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,32 @@
},
"type": "org.graylog2.inputs.gelf.tcp.GELFTCPInput",
"global": true
},
{
"title":"rmq",
"configuration": {
"heartbeat":60,
"prefetch":100,
"exchange_bind":true,
"broker_vhost":"/",
"broker_username":"graylog",
"decompress_size_limit":8388608,
"broker_port":5672,
"parallel_queues":1,
"broker_password":"graylog",
"throttling_allowed":false,
"exchange":"log-messages",
"tls":false,
"override_source":null,
"routing_key":"#",
"requeue_invalid_messages":true,
"broker_hostname":"rabbitmq",
"queue":"log-messages"
},
"static_fields":{},
"type":"org.graylog2.inputs.gelf.amqp.GELFAMQPInput",
"global":true,
"extractors":[]
}
],
"streams": [],
Expand Down
5 changes: 5 additions & 0 deletions tests/config/setup_rabbitmq.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
rabbitmqctl add_user graylog graylog
rabbitmqctl set_user_tags graylog administrator
rabbitmqctl set_permissions -p / graylog ".*" ".*" ".*"

rabbitmqadmin declare exchange name=log-messages type=direct -u graylog -p graylog
15 changes: 14 additions & 1 deletion tests/config/start_local_graylog_server.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,25 @@
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd ${DIR}

# remove a potential previous setup
docker-compose -f docker-compose-rmq.yml down
docker-compose -f docker-compose.yml down

# first setup RabbitMQ, as it requires extra setup before Graylog can connect to it.
docker-compose -f docker-compose-rmq.yml up -d

# wait for RabbitMQ to start
sleep 30

# Configure a user and exchange for graylog to use
RMQ_CONTAINER_ID="$(docker ps -qf "name=rabbit")"
docker exec -ti ${RMQ_CONTAINER_ID} sh /usr/local/bin/setup_rabbitmq.sh

# create ssl certs for enabling the graylog server to use a
# TLS connection for GELF input
bash create_ssl_certs.sh -h localhost -i 127.0.0.1

# start the graylog server docker container
docker-compose -f docker-compose.yml down
docker-compose -f docker-compose.yml up -d

# wait for the graylog server docker container to start
Expand Down
1 change: 1 addition & 0 deletions tests/config/stop_local_graylog_server.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
cd ${DIR}

docker-compose -f docker-compose-rmq.yml down
docker-compose -f docker-compose.yml down
33 changes: 33 additions & 0 deletions tests/integration/test_rmq_logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""pytests sending logs to Graylog through RabbitMQ"""

import logging

import pytest

from graypy.rabbitmq import GELFRabbitHandler
from graypy.handler import SYSLOG_LEVELS

from tests.integration import LOCAL_GRAYLOG_UP
from tests.integration.helper import get_unique_message, get_graylog_response


@pytest.mark.skipif(not LOCAL_GRAYLOG_UP,
reason="local Graylog instance not up")
def test_rmq_logging():
"""Test that verifies the log message was received by Graylog"""
logger = logging.getLogger("test_rmq_logging")
handler = GELFRabbitHandler(url="amqp://graylog:[email protected]",
exchange="log-messages",
exchange_type="direct",
routing_key="#")
logger.addHandler(handler)
message = get_unique_message()
logger.error(message)
graylog_response = get_graylog_response(message)
assert message == graylog_response["message"]
assert "long_message" not in graylog_response
assert "timestamp" in graylog_response
assert SYSLOG_LEVELS[logging.ERROR] == graylog_response["level"]

0 comments on commit 256f8be

Please sign in to comment.