@Test public void testTrackScreenWithCampaignView() { track().screen("/test/test").campaign("campaign_name", "campaign_keyword").with(mTracker); verify(mTracker).track(mCaptor.capture()); assertTrue(mCaptor.getValue().get(QueryParams.URL_PATH).endsWith("/test/test")); assertEquals(mCaptor.getValue().get(QueryParams.CAMPAIGN_NAME), "campaign_name"); assertEquals(mCaptor.getValue().get(QueryParams.CAMPAIGN_KEYWORD), "campaign_keyword"); }
@SuppressLint("InlinedApi") @Test public void testLowMemoryDispatch() { MatomoTestApplication app = (MatomoTestApplication) Robolectric.application; final PacketSender packetSender = mock(PacketSender.class); app.getMatomo().setDispatcherFactory(new DefaultDispatcherFactory() { @Override public Dispatcher build(Tracker tracker) { return new DefaultDispatcher( new EventCache(new EventDiskCache(tracker)), new Connectivity(tracker.getMatomo().getContext()), new PacketFactory(tracker.getAPIUrl()), packetSender ); } }); Tracker tracker = app.getTracker(); assertNotNull(tracker); tracker.setDispatchInterval(-1); tracker.track(TrackHelper.track().screen("test").build()); tracker.dispatch(); verify(packetSender, timeout(500).times(1)).send(any(Packet.class)); tracker.track(TrackHelper.track().screen("test").build()); verify(packetSender, timeout(500).times(1)).send(any(Packet.class)); app.onTrimMemory(Application.TRIM_MEMORY_UI_HIDDEN); verify(packetSender, timeout(500).atLeast(2)).send(any(Packet.class)); }
@SuppressLint("InlinedApi") @Test public void testLowMemoryDispatch() { MatomoTestApplication app = (MatomoTestApplication) Robolectric.application; final PacketSender packetSender = mock(PacketSender.class); app.getMatomo().setDispatcherFactory(new DefaultDispatcherFactory() { @Override public Dispatcher build(Tracker tracker) { return new DefaultDispatcher( new EventCache(new EventDiskCache(tracker)), new Connectivity(tracker.getMatomo().getContext()), new PacketFactory(tracker.getAPIUrl()), packetSender ); } }); Tracker tracker = app.getTracker(); assertNotNull(tracker); tracker.setDispatchInterval(-1); tracker.track(TrackHelper.track().screen("test").build()); tracker.dispatch(); verify(packetSender, timeout(500).times(1)).send(any(Packet.class)); tracker.track(TrackHelper.track().screen("test").build()); verify(packetSender, timeout(500).times(1)).send(any(Packet.class)); app.onTrimMemory(Application.TRIM_MEMORY_UI_HIDDEN); verify(packetSender, timeout(500).atLeast(2)).send(any(Packet.class)); }
@Test public void testSetNewSessionRaceCondition() { for (int retry = 0; retry < 5; retry++) { final List<TrackMe> trackMes = Collections.synchronizedList(new ArrayList<TrackMe>()); doAnswer(invocation -> { trackMes.add(invocation.getArgument(0)); return null; }).when(mDispatcher).submit(any(TrackMe.class)); final Tracker tracker = new Tracker(mMatomo, mTrackerBuilder); tracker.setDispatchInterval(0); int count = 20; for (int i = 0; i < count; i++) { new Thread(() -> { TestHelper.sleep(10); TrackHelper.track().screen("Test").with(tracker); }).start(); } TestHelper.sleep(500); assertEquals(count, trackMes.size()); int found = 0; for (TrackMe trackMe : trackMes) { if (trackMe.get(QueryParams.SESSION_START) != null) found++; } assertEquals(1, found); } }
@Test public void testSetNewSessionRaceCondition() { for (int retry = 0; retry < 5; retry++) { final List<TrackMe> trackMes = Collections.synchronizedList(new ArrayList<TrackMe>()); doAnswer(invocation -> { trackMes.add(invocation.getArgument(0)); return null; }).when(mDispatcher).submit(any(TrackMe.class)); final Tracker tracker = new Tracker(mMatomo, mTrackerBuilder); tracker.setDispatchInterval(0); int count = 20; for (int i = 0; i < count; i++) { new Thread(() -> { TestHelper.sleep(10); TrackHelper.track().screen("Test").with(tracker); }).start(); } TestHelper.sleep(500); assertEquals(count, trackMes.size()); int found = 0; for (TrackMe trackMe : trackMes) { if (trackMe.get(QueryParams.SESSION_START) != null) found++; } assertEquals(1, found); } }
@Override public TrackMe build() { if (mPath == null) { throw new IllegalArgumentException("Screen tracking requires a non-empty path"); } final TrackMe trackMe = new TrackMe(getBaseTrackMe()) .set(QueryParams.URL_PATH, mPath) .set(QueryParams.ACTION_NAME, mTitle) .set(QueryParams.CAMPAIGN_NAME, mCampaignName) .set(QueryParams.CAMPAIGN_KEYWORD, mCampaignKeyword); if (mCustomVariables.size() > 0) { //noinspection deprecation trackMe.set(QueryParams.SCREEN_SCOPE_CUSTOM_VARIABLES, mCustomVariables.toString()); } for (Map.Entry<Integer, String> entry : mCustomDimensions.entrySet()) { CustomDimension.setDimension(trackMe, entry.getKey(), entry.getValue()); } return trackMe; } }
@Override public TrackMe build() { if (mPath == null) { throw new IllegalArgumentException("Screen tracking requires a non-empty path"); } final TrackMe trackMe = new TrackMe(getBaseTrackMe()) .set(QueryParams.URL_PATH, mPath) .set(QueryParams.ACTION_NAME, mTitle) .set(QueryParams.CAMPAIGN_NAME, mCampaignName) .set(QueryParams.CAMPAIGN_KEYWORD, mCampaignKeyword); if (mCustomVariables.size() > 0) { //noinspection deprecation trackMe.set(QueryParams.SCREEN_SCOPE_CUSTOM_VARIABLES, mCustomVariables.toString()); } for (Map.Entry<Integer, String> entry : mCustomDimensions.entrySet()) { CustomDimension.setDimension(trackMe, entry.getKey(), entry.getValue()); } return trackMe; } }
@Test public void testSetSessionTimeout() { Tracker tracker = new Tracker(mMatomo, mTrackerBuilder); tracker.setSessionTimeout(10000); TrackHelper.track().screen("test1").with(tracker); assertThat(tracker.getLastEventX().get(QueryParams.SESSION_START), notNullValue()); TrackHelper.track().screen("test2").with(tracker); assertThat(tracker.getLastEventX().get(QueryParams.SESSION_START), nullValue()); tracker.setSessionTimeout(0); TestHelper.sleep(1); TrackHelper.track().screen("test3").with(tracker); assertThat(tracker.getLastEventX().get(QueryParams.SESSION_START), notNullValue()); tracker.setSessionTimeout(10000); assertEquals(tracker.getSessionTimeout(), 10000); TrackHelper.track().screen("test3").with(tracker); assertThat(tracker.getLastEventX().get(QueryParams.SESSION_START), nullValue()); }
@Test public void testSetSessionTimeout() { Tracker tracker = new Tracker(mMatomo, mTrackerBuilder); tracker.setSessionTimeout(10000); TrackHelper.track().screen("test1").with(tracker); assertThat(tracker.getLastEventX().get(QueryParams.SESSION_START), notNullValue()); TrackHelper.track().screen("test2").with(tracker); assertThat(tracker.getLastEventX().get(QueryParams.SESSION_START), nullValue()); tracker.setSessionTimeout(0); TestHelper.sleep(1); TrackHelper.track().screen("test3").with(tracker); assertThat(tracker.getLastEventX().get(QueryParams.SESSION_START), notNullValue()); tracker.setSessionTimeout(10000); assertEquals(tracker.getSessionTimeout(), 10000); TrackHelper.track().screen("test3").with(tracker); assertThat(tracker.getLastEventX().get(QueryParams.SESSION_START), nullValue()); }
@Test public void testSetScreenCustomDimension() throws Exception { track() .screen("") .dimension(1, "dim1") .dimension(2, "dim2") .dimension(3, "dim3") .dimension(3, null) .dimension(4, null) .with(mTracker); verify(mTracker).track(mCaptor.capture()); assertEquals("dim1", CustomDimension.getDimension(mCaptor.getValue(), 1)); assertEquals("dim2", CustomDimension.getDimension(mCaptor.getValue(), 2)); assertNull(CustomDimension.getDimension(mCaptor.getValue(), 3)); assertNull(CustomDimension.getDimension(mCaptor.getValue(), 4)); }
@Test public void testCheckSessionTimeout() { Tracker tracker = new Tracker(mMatomo, mTrackerBuilder); tracker.setSessionTimeout(0); TrackHelper.track().screen("test").with(tracker); verify(mDispatcher).submit(mCaptor.capture()); assertEquals("1", mCaptor.getValue().get(QueryParams.SESSION_START)); TestHelper.sleep(1); TrackHelper.track().screen("test").with(tracker); verify(mDispatcher, times(2)).submit(mCaptor.capture()); assertEquals("1", mCaptor.getValue().get(QueryParams.SESSION_START)); tracker.setSessionTimeout(60000); TrackHelper.track().screen("test").with(tracker); verify(mDispatcher, times(3)).submit(mCaptor.capture()); assertEquals(null, mCaptor.getValue().get(QueryParams.SESSION_START)); }
@Test public void testSetScreenCustomDimension() throws Exception { track() .screen("") .dimension(1, "dim1") .dimension(2, "dim2") .dimension(3, "dim3") .dimension(3, null) .dimension(4, null) .with(mTracker); verify(mTracker).track(mCaptor.capture()); assertEquals("dim1", CustomDimension.getDimension(mCaptor.getValue(), 1)); assertEquals("dim2", CustomDimension.getDimension(mCaptor.getValue(), 2)); assertNull(CustomDimension.getDimension(mCaptor.getValue(), 3)); assertNull(CustomDimension.getDimension(mCaptor.getValue(), 4)); }
@Test public void testCheckSessionTimeout() { Tracker tracker = new Tracker(mMatomo, mTrackerBuilder); tracker.setSessionTimeout(0); TrackHelper.track().screen("test").with(tracker); verify(mDispatcher).submit(mCaptor.capture()); assertEquals("1", mCaptor.getValue().get(QueryParams.SESSION_START)); TestHelper.sleep(1); TrackHelper.track().screen("test").with(tracker); verify(mDispatcher, times(2)).submit(mCaptor.capture()); assertEquals("1", mCaptor.getValue().get(QueryParams.SESSION_START)); tracker.setSessionTimeout(60000); TrackHelper.track().screen("test").with(tracker); verify(mDispatcher, times(3)).submit(mCaptor.capture()); assertEquals(null, mCaptor.getValue().get(QueryParams.SESSION_START)); }
@Test public void testVisitCustomVariables_add() throws Exception { CustomVariables _vars = new CustomVariables(); _vars.put(1, "visit1", "A"); _vars.put(2, "visit2", "B"); TrackHelper.track() .visitVariables(1, "visit1", "A") .visitVariables(2, "visit2", "B") .screen("/path") .with(mTracker); verify(mTracker).track(mCaptor.capture()); assertEquals(_vars.toString(), mCaptor.getValue().get(QueryParams.VISIT_SCOPE_CUSTOM_VARIABLES)); assertEquals("/path", mCaptor.getValue().get(QueryParams.URL_PATH)); }
@Test public void testVisitCustomVariables_add() throws Exception { CustomVariables _vars = new CustomVariables(); _vars.put(1, "visit1", "A"); _vars.put(2, "visit2", "B"); TrackHelper.track() .visitVariables(1, "visit1", "A") .visitVariables(2, "visit2", "B") .screen("/path") .with(mTracker); verify(mTracker).track(mCaptor.capture()); assertEquals(_vars.toString(), mCaptor.getValue().get(QueryParams.VISIT_SCOPE_CUSTOM_VARIABLES)); assertEquals("/path", mCaptor.getValue().get(QueryParams.URL_PATH)); }
@Test public void testVisitCustomVariables() throws Exception { CustomVariables visitVars = new CustomVariables(); visitVars.put(1, "visit", "valueX"); CustomVariables _screen = new CustomVariables(); _screen.put(1, "screen", "valueY"); final TrackMe trackMe = TrackHelper.track(visitVars.toVisitVariables()) .screen("/path") .variable(1, "screen", "valueY") .build(); assertEquals(visitVars.toString(), trackMe.get(QueryParams.VISIT_SCOPE_CUSTOM_VARIABLES)); assertEquals(_screen.toString(), trackMe.get(QueryParams.SCREEN_SCOPE_CUSTOM_VARIABLES)); assertEquals("/path", trackMe.get(QueryParams.URL_PATH)); }
@Test public void testVisitCustomVariables() throws Exception { CustomVariables visitVars = new CustomVariables(); visitVars.put(1, "visit", "valueX"); CustomVariables _screen = new CustomVariables(); _screen.put(1, "screen", "valueY"); final TrackMe trackMe = TrackHelper.track(visitVars.toVisitVariables()) .screen("/path") .variable(1, "screen", "valueY") .build(); assertEquals(visitVars.toString(), trackMe.get(QueryParams.VISIT_SCOPE_CUSTOM_VARIABLES)); assertEquals(_screen.toString(), trackMe.get(QueryParams.SCREEN_SCOPE_CUSTOM_VARIABLES)); assertEquals("/path", trackMe.get(QueryParams.URL_PATH)); }
@Test public void testVisitCustomVariables_merge_singles() throws Exception { CustomVariables varsA = new CustomVariables().put(1, "visit1", "A"); CustomVariables varsB = new CustomVariables().put(2, "visit2", "B"); CustomVariables combined = new CustomVariables().put(1, "visit1", "A").put(2, "visit2", "B"); TrackHelper.track() .visitVariables(varsA) .visitVariables(varsB) .screen("/path") .with(mTracker); verify(mTracker).track(mCaptor.capture()); assertEquals(combined.toString(), mCaptor.getValue().get(QueryParams.VISIT_SCOPE_CUSTOM_VARIABLES)); assertEquals("/path", mCaptor.getValue().get(QueryParams.URL_PATH)); }