def test_integration_standard_nv_pairs(self):
        s = subject.Subject()
        s.set_platform("mob")
        s.set_user_id("user12345")
        s.set_screen_resolution(100, 200)
        s.set_color_depth(24)
        s.set_timezone("Europe London")
        s.set_lang("en")

        t = tracker.Tracker(emitters.Emitter("localhost"),
                            s,
                            "cf",
                            app_id="angry-birds-android")
        with HTTMock(pass_response_content):
            t.track_page_view("localhost", "local host")
        expected_fields = {
            "tna": "cf",
            "res": "100x200",
            "lang": "en",
            "aid": "angry-birds-android",
            "cd": "24",
            "tz": "Europe+London",
            "p": "mob",
            "tv": "py-" + _version.__version__
        }
        for key in expected_fields:
            self.assertEquals(from_querystring(key, querystrings[-1]),
                              expected_fields[key])
Beispiel #2
0
    def test_timestamps(self):
        emitter = emitters.Emitter("localhost",
                                   protocol="http",
                                   port=80,
                                   method='post',
                                   buffer_size=4)
        t = tracker.Tracker([emitter], default_subject)
        with HTTMock(pass_post_response_content):
            with freeze_time("2013-01-14 03:21:34"):
                t.track_page_view("localhost", "stamp0", None, tstamp=None)
                t.track_page_view("localhost",
                                  "stamp1",
                                  None,
                                  tstamp=1358933694000)
            with freeze_time("2013-01-14 03:22:36"):
                t.track_page_view("localhost",
                                  "stamp2",
                                  None,
                                  tstamp=DeviceTimestamp(1458133694000))
                t.track_page_view("localhost",
                                  "stamp3",
                                  None,
                                  tstamp=TrueTimestamp(1458033694000))

        expected_timestamps = [
            {
                "dtm": "1358133694000",
                "ttm": None,
                "stm": "1358133756000"
            },
            {
                "dtm": "1358933694000",
                "ttm": None,
                "stm": "1358133756000"
            },
            {
                "dtm": "1458133694000",
                "ttm": None,
                "stm": "1358133756000"
            },
            {
                "dtm": None,
                "ttm": "1458033694000",
                "stm": "1358133756000"
            },
        ]
        request = querystrings[-1]

        for i, event in enumerate(expected_timestamps):
            self.assertEquals(request["data"][i].get("dtm"),
                              expected_timestamps[i]["dtm"])
            self.assertEquals(request["data"][i].get("ttm"),
                              expected_timestamps[i]["ttm"])
            self.assertEquals(request["data"][i].get("stm"),
                              expected_timestamps[i]["stm"])
            self.assertEquals(request["data"][i].get("page"), "stamp" + str(i))
 def test_integration_failure_callback(self):
     callback_success_queue = []
     callback_failure_queue = []
     callback_emitter = emitters.Emitter(
         "localhost",
         on_success=lambda x: callback_success_queue.append(x),
         on_failure=lambda x, y: callback_failure_queue.append(x))
     t = tracker.Tracker(callback_emitter, default_subject)
     with HTTMock(fail_response_content):
         t.track_page_view("http://www.example.com")
     self.assertEquals(callback_success_queue, [])
     self.assertEquals(callback_failure_queue[0], 0)
 def test_post_batched(self):
     post_emitter = emitters.Emitter("localhost",
                                     protocol="http",
                                     port=80,
                                     method='post',
                                     buffer_size=2)
     t = tracker.Tracker(post_emitter, default_subject)
     with HTTMock(pass_post_response_content):
         t.track_struct_event("Test", "A")
         t.track_struct_event("Test", "B")
     self.assertEquals(querystrings[-1]["data"][0]["se_ac"], "A")
     self.assertEquals(querystrings[-1]["data"][1]["se_ac"], "B")
 def test_integration_failure_callback(self):
     callback_success_queue = []
     callback_failure_queue = []
     callback_emitter = emitters.Emitter(
         "localhost",
         on_success=lambda x: callback_success_queue.append(x),
         on_failure=lambda x, y: callback_failure_queue.append(x))
     t = tracker.Tracker([callback_emitter], default_subject)
     with HTTMock(fail_response_content):
         t.track_struct_event("Test", "A")
     self.assertEquals(callback_success_queue, [])
     self.assertEquals(callback_failure_queue[0], 0)
 def test_bytelimit(self):
     post_emitter = emitters.Emitter("localhost",
                                     protocol="http",
                                     port=80,
                                     method='post',
                                     buffer_size=5,
                                     byte_limit=420)
     t = tracker.Tracker(post_emitter, default_subject)
     with HTTMock(pass_post_response_content):
         t.track_struct_event("Test", "A")  # 140 bytes
         t.track_struct_event("Test", "A")  # 280 bytes
         t.track_struct_event("Test", "A")  # 420 bytes. Send
         t.track_struct_event("Test", "AA")  # 141
     self.assertEquals(len(querystrings[-1]["data"]), 3)
     self.assertEqual(post_emitter.bytes_queued, 141)
Beispiel #7
0
 def test_integration_success_callback(self):
     callback_success_queue = []
     callback_failure_queue = []
     callback_emitter = emitters.Emitter(
         "localhost",
         on_success=lambda x: callback_success_queue.append(x),
         on_failure=lambda x, y: callback_failure_queue.append(x))
     t = tracker.Tracker([callback_emitter], default_subject)
     with HTTMock(pass_response_content):
         t.track_page_view("http://www.example.com")
     expected = {
         "e": "pv",
         "url": "http://www.example.com",
     }
     self.assertEqual(len(callback_success_queue), 1)
     for k in expected.keys():
         self.assertEqual(callback_success_queue[0][0][k], expected[k])
     self.assertEqual(callback_failure_queue, [])
Beispiel #8
0
    def test_integration_event_subject(self):
        s = subject.Subject()
        s.set_domain_user_id("4616bfb38f872d16")
        s.set_ip_address("255.255.255.255")

        t = tracker.Tracker([emitters.Emitter("localhost")],
                            s,
                            "cf",
                            app_id="angry-birds-android")
        evSubject = subject.Subject().set_domain_user_id(
            "1111aaa11a111a11").set_lang("EN")
        with HTTMock(pass_response_content):
            t.track_page_view("localhost",
                              "local host",
                              event_subject=evSubject)
        expected_fields = {"duid": "1111aaa11a111a11", "lang": "EN"}
        for key in expected_fields:
            self.assertEqual(from_querystring(key, querystrings[-1]),
                             expected_fields[key])
Beispiel #9
0
    def test_timestamps(self):
        emitter = emitters.Emitter("localhost",
                                   protocol="http",
                                   port=80,
                                   method='post',
                                   buffer_size=3)
        t = tracker.Tracker([emitter], default_subject)
        with HTTMock(pass_post_response_content):
            t.track_page_view("localhost", "stamp0", None, tstamp=None)
            t.track_page_view("localhost",
                              "stamp1",
                              None,
                              tstamp=1358933694000)
            t.track_page_view("localhost",
                              "stamp2",
                              None,
                              tstamp=1358933694000.00)

        expected_timestamps = [{
            "dtm": "1618790401000",
            "ttm": None,
            "stm": "1618790401000"
        }, {
            "dtm": "1618790401000",
            "ttm": "1358933694000",
            "stm": "1618790401000"
        }, {
            "dtm": "1618790401000",
            "ttm": "1358933694000",
            "stm": "1618790401000"
        }]
        request = querystrings[-1]

        for i, event in enumerate(expected_timestamps):
            self.assertEqual(request["data"][i].get("dtm"),
                             expected_timestamps[i]["dtm"])
            self.assertEqual(request["data"][i].get("ttm"),
                             expected_timestamps[i]["ttm"])
            self.assertEqual(request["data"][i].get("stm"),
                             expected_timestamps[i]["stm"])
Beispiel #10
0
    def test_integration_identification_methods(self):
        s = subject.Subject()
        s.set_domain_user_id("4616bfb38f872d16")
        s.set_ip_address("255.255.255.255")
        s.set_useragent(
            "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)")
        s.set_network_user_id("fbc6c76c-bce5-43ce-8d5a-31c5")

        t = tracker.Tracker([emitters.Emitter("localhost")],
                            s,
                            "cf",
                            app_id="angry-birds-android")
        with HTTMock(pass_response_content):
            t.track_page_view("localhost", "local host")
        expected_fields = {
            "duid": "4616bfb38f872d16",
            "ip": "255.255.255.255",
            "ua":
            "Mozilla%2F5.0+%28compatible%3B+MSIE+9.0%3B+Windows+NT+6.0%3B+Trident%2F5.0%29",
            "tnuid": "fbc6c76c-bce5-43ce-8d5a-31c5"
        }
        for key in expected_fields:
            self.assertEquals(from_querystring(key, querystrings[-1]),
                              expected_fields[key])
import re
import redis
import json
import base64
from snowplow_tracker import tracker, _version, emitters, subject
from httmock import all_requests, HTTMock

try:
    from urllib.parse import unquote_plus  # Python 3

except ImportError:
    from urllib import unquote_plus  # Python 2

querystrings = [""]

default_emitter = emitters.Emitter("localhost", protocol="http", port=80)

default_subject = subject.Subject()


def from_querystring(field, url):
    pattern = re.compile("^[^#]*[?&]" + field + "=([^&#]*)")
    match = pattern.match(url)
    if match:
        return match.groups()[0]


@all_requests
def pass_response_content(url, request):
    querystrings.append(request.url)
    return {"url": request.url, "status_code": 200}
import base64
try:
    from urllib.parse import unquote_plus  # Python 3
except ImportError:
    from urllib import unquote_plus  # Python 2

from httmock import all_requests, HTTMock
from freezegun import freeze_time

from snowplow_tracker import tracker, _version, emitters, subject
from snowplow_tracker.timestamp import DeviceTimestamp, TrueTimestamp
from snowplow_tracker.self_describing_json import SelfDescribingJson

querystrings = [""]

default_emitter = emitters.Emitter("localhost", protocol="http", port=80)

post_emitter = emitters.Emitter("localhost",
                                protocol="http",
                                port=80,
                                method='post',
                                buffer_size=1)

default_subject = subject.Subject()


def from_querystring(field, url):
    pattern = re.compile("^[^#]*[?&]" + field + "=([^&#]*)")
    match = pattern.match(url)
    if match:
        return match.groups()[0]