Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions stackify/transport/default/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions test-docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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')

Expand Down
70 changes: 70 additions & 0 deletions tests/transport/default/test_init.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,37 @@
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
from stackify.transport.default.log import LogMsg
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(
Expand Down Expand Up @@ -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'
}).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])

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'
}).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])

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')