From e3e1306609e73ae4f7d2129edc504cbf9a5262d2 Mon Sep 17 00:00:00 2001 From: Elpedio Adoptante Jr Date: Thu, 19 Mar 2020 21:51:20 +0800 Subject: [PATCH 1/2] Fix for App Name issue --- stackify/transport/default/http.py | 1 + test-docker.sh | 3 ++ tests/transport/default/test_init.py | 70 ++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) diff --git a/stackify/transport/default/http.py b/stackify/transport/default/http.py index c619ad6..666deff 100644 --- a/stackify/transport/default/http.py +++ b/stackify/transport/default/http.py @@ -84,6 +84,7 @@ def identify_application(self): @retrying.retry(wait_exponential_multiplier=1000, stop_max_delay=32000) def send_log_group(self, url, group): internal_logger.debug('Sending logs by group') + group.AppName = self.environment_detail.configuredAppName group.Env = self.environment_detail.configuredEnvironmentName group.CDID = self.device_id group.CDAppID = self.device_app_id diff --git a/test-docker.sh b/test-docker.sh index fca8a40..5e0bbce 100755 --- a/test-docker.sh +++ b/test-docker.sh @@ -2,6 +2,9 @@ set -e +# remove caches +find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf + VERSIONS=('2.7' '3.4' '3.5' '3.6' '3.7' '3.8') # VERSIONS=('2.7') diff --git a/tests/transport/default/test_init.py b/tests/transport/default/test_init.py index f3e410f..047733e 100644 --- a/tests/transport/default/test_init.py +++ b/tests/transport/default/test_init.py @@ -1,6 +1,17 @@ +import gzip +import json import logging from unittest import TestCase from mock import patch +from requests.models import Response + +try: + from cStringIO import StringIO +except Exception: + try: + from StringIO import StringIO + except Exception: + pass # python 3, we use a new function in gzip from stackify.transport import application from stackify.transport.default import DefaultTransport @@ -8,6 +19,19 @@ from stackify.transport.default.log import LogMsgGroup +def parse_gzip_data(data): + if hasattr(gzip, 'decompress'): + return gzip.decompress(data).decode("utf-8") + else: + sio = StringIO() + sio.write(data) + sio.seek(0) + g = gzip.GzipFile(fileobj=sio, mode='rb') + transaction = g.read() + g.close() + return transaction.decode("utf-8") + + class AgentSocketTransportTest(TestCase): def setUp(self): self.config = application.ApiConfiguration( @@ -37,11 +61,57 @@ def test_create_group_message(self): @patch('requests.post') def test_send(self, mock_post): + res = Response() + res._content = json.dumps({ + 'DeviceID': None, + 'DeviceAppID': None, + 'AppNameID': 'test', + 'EnvID': 0, + 'Env': 'test_environment', + 'AppName': 'test_appname', + 'AppEnvID': 'test', + 'DeviceAlias': 'test' + }) + mock_post.side_effect = [res, Response()] message = self.default_transport.create_message(logging.makeLogRecord({'mgs': 'message', 'funcName': 'foo'})) group_message = self.default_transport.create_group_message([message]) self.default_transport.send(group_message) assert mock_post.called + assert mock_post.call_count == 2 assert mock_post.call_args_list[0][0][0] == 'test_apiurl/Metrics/IdentifyApp' assert mock_post.call_args_list[0][1]['headers']['Content-Type'] == 'application/json' + assert mock_post.call_args_list[1][0][0] == 'test_apiurl/Log/Save' + assert mock_post.call_args_list[1][1]['headers']['Content-Type'] == 'application/json' + + @patch('requests.post') + def test_json_data(self, mock_post): + res = Response() + res._content = json.dumps({ + 'DeviceID': None, + 'DeviceAppID': None, + 'AppNameID': 'test', + 'EnvID': 0, + 'Env': 'test_environment', + 'AppName': 'test_appname', + 'AppEnvID': 'test', + 'DeviceAlias': 'test' + }) + mock_post.side_effect = [res, Response()] + message = self.default_transport.create_message(logging.makeLogRecord({'mgs': 'message', 'funcName': 'foo'})) + group_message = self.default_transport.create_group_message([message]) + + self.default_transport.send(group_message) + + assert mock_post.called + assert mock_post.call_count == 2 + assert mock_post.call_args_list[1][0][0] == 'test_apiurl/Log/Save' + + payload = json.loads(parse_gzip_data(mock_post.call_args_list[1][1]['data'])) + assert payload.get('AppName') == 'test_appname' + assert payload.get('Env') == 'test_environment' + assert payload.get('ServerName') + assert payload.get('AppNameID') == 'test' + assert payload.get('Logger') + assert payload.get('Msgs') From 6ac576c578d1572cf15555d56a9d81ee757d2a1f Mon Sep 17 00:00:00 2001 From: Elpedio Adoptante Jr Date: Thu, 19 Mar 2020 22:16:03 +0800 Subject: [PATCH 2/2] fix issue with python3 --- tests/transport/default/test_init.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/transport/default/test_init.py b/tests/transport/default/test_init.py index 047733e..e6cdddd 100644 --- a/tests/transport/default/test_init.py +++ b/tests/transport/default/test_init.py @@ -71,7 +71,7 @@ def test_send(self, mock_post): 'AppName': 'test_appname', 'AppEnvID': 'test', 'DeviceAlias': 'test' - }) + }).encode('UTF-8') mock_post.side_effect = [res, Response()] message = self.default_transport.create_message(logging.makeLogRecord({'mgs': 'message', 'funcName': 'foo'})) group_message = self.default_transport.create_group_message([message]) @@ -97,7 +97,7 @@ def test_json_data(self, mock_post): 'AppName': 'test_appname', 'AppEnvID': 'test', 'DeviceAlias': 'test' - }) + }).encode('UTF-8') mock_post.side_effect = [res, Response()] message = self.default_transport.create_message(logging.makeLogRecord({'mgs': 'message', 'funcName': 'foo'})) group_message = self.default_transport.create_group_message([message])