/******************************************************************************* * Copyright (c) 2014 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.usage.test.event; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.jboss.tools.usage.event.UsageEvent; import org.jboss.tools.usage.event.UsageEventType; import org.jboss.tools.usage.googleanalytics.RequestType; import org.jboss.tools.usage.internal.JBossToolsUsageActivator; import org.jboss.tools.usage.test.fakes.TestEventRegister; import org.jboss.tools.usage.test.fakes.TestUsageReporter; import org.junit.Test; /** * @author Alexey Kazakov */ public class UsageReporterTest { public static final long DAY = 1000*60*60*24; public static final long TODAY = System.currentTimeMillis(); public static final long YESTERDAY = TODAY - DAY; @Test public void testTrackEvent() { TestUsageReporter reporter = TestUsageReporter.getInstance(); TestEventRegister register = reporter.getEventRegister(); register.setCurrentTime(YESTERDAY); UsageEventType type = new UsageEventType("usage", "1.2.100", "central", "showOnStartup", "true/false"); boolean ok = reporter.trackEventSynchronously("/tools/usage/action/wsstartup/1.2.100", "Usage Test", type.event("true"), RequestType.PAGE, true); assertFalse(ok); assertTrackEvent(reporter, register); register.setCurrentTime(TODAY); ok = reporter.trackEventSynchronously("/tools/usage/action/wsstartup/1.2.100", "Usage Test", type.event("true"), RequestType.PAGE, true); assertTrue(ok); assertTrackEvent(reporter, register); } @Test public void testCountEvent() { assertCountEvent(false); } @Test public void testCountEventResetPreferences() { assertCountEvent(true); } @Test public void testRegisterCountEvent() { assertRegisterCountEvent(false); } @Test public void testRegisterCountEventResetPreferences() { assertRegisterCountEvent(true); } @Test public void testCheckCountEventPreferences() { assertCheckCountEvent(false); } @Test public void testCheckCountEventResetPreferences() { assertCheckCountEvent(true); } @Test public void testTrackCountEvents() { TestUsageReporter reporter = TestUsageReporter.getInstance(); TestEventRegister register = reporter.getEventRegister(); register.reset(true); register.setCurrentTime(YESTERDAY); UsageEventType type = new UsageEventType("test", "1.0.0", null, "test-count-events", "Label", "how many a day"); int number = reporter.registerEventSynchronously(type); assertEquals(0, number); int result = reporter.trackCountEventsSynchronously(); assertEquals(0, result); boolean ok = reporter.countEventSynchronously(type.event("test-label", 1)); assertFalse(ok); result = reporter.trackCountEventsSynchronously(); assertEquals(0, result); register.setCurrentTime(TODAY); result = reporter.trackCountEventsSynchronously(); assertEquals(1, result); result = reporter.trackCountEventsSynchronously(); assertEquals(0, result); } private void assertTrackEvent(TestUsageReporter reporter, TestEventRegister register) { UsageEventType type = new UsageEventType("usage", "1.2.100", "central", "showOnStartup", "true/false"); int number = reporter.registerEventSynchronously(type); assertEquals(0, number); boolean ok = reporter.trackEventSynchronously("/tools/usage/action/wsstartup/1.2.100", "Usage Test", type.event("true"), RequestType.PAGE, true); assertTrue(ok); type = new UsageEventType("test", "1.0.0", null, "test", "Label", "1 - success, 0 - failure"); number = reporter.registerEventSynchronously(type); assertEquals(0, number); ok = reporter.trackEventSynchronously(type.event("test-label", 1)); assertTrue(ok); type = new UsageEventType(JBossToolsUsageActivator.getDefault(), "test-action"); number = reporter.registerEventSynchronously(type); assertEquals(0, number); ok = reporter.trackEventSynchronously(type.event()); assertTrue(ok); } private void assertCheckCountEvent(boolean reset) { TestUsageReporter reporter = TestUsageReporter.getInstance(); TestEventRegister register = reporter.getEventRegister(); boolean oldReset = register.setReset(reset); String action = reset?"count-test5":"count-test6"; try { register.setCurrentTime(YESTERDAY); UsageEventType type = new UsageEventType("test", "1.0.0", null, action, "label", "1 - success, 0 - failure"); int number = reporter.registerEventSynchronously(type); assertEquals(0, number); for (int i = 0; i < 3; i++) { UsageEvent event = type.event("test-label-" + i, 1); boolean ok = reporter.countEventSynchronously(event); assertFalse(ok); ok = reporter.countEventSynchronously(event); assertFalse(ok); } UsageEventType type2 = new UsageEventType("test", "1.0.0", null, "count-test7", "label", "1 - success, 0 - failure"); number = reporter.registerEventSynchronously(type2); assertEquals(0, number); register.setCurrentTime(TODAY); number = reporter.checkCountEventSynchronously(type); assertEquals(3, number); number = reporter.checkCountEventSynchronously(type2); assertEquals(0, number); } finally { register.setReset(oldReset); } } private void assertCountEvent(boolean reset) { TestUsageReporter reporter = TestUsageReporter.getInstance(); TestEventRegister register = reporter.getEventRegister(); boolean oldReset = register.setReset(reset); String action = reset?"count-test":"count-test2"; try { register.setCurrentTime(YESTERDAY); UsageEventType type = new UsageEventType("test", "1.0.0", null, action, "label", "1 - success, 0 - failure"); int number = reporter.registerEventSynchronously(type); assertEquals(0, number); for (int i = 0; i < 3; i++) { boolean ok = reporter.countEventSynchronously(type.event("test-label", 1)); assertFalse(ok); } register.setCurrentTime(TODAY); boolean ok = reporter.countEventSynchronously(type.event("test-label", 1)); assertTrue(ok); ok = reporter.countEventSynchronously(type.event("test-label", 1)); assertFalse(ok); } finally { register.setReset(oldReset); } } private void assertRegisterCountEvent(boolean reset) { TestUsageReporter reporter = TestUsageReporter.getInstance(); TestEventRegister register = reporter.getEventRegister(); boolean oldReset = register.setReset(reset); String action = reset?"count-test3":"count-test4"; try { register.setCurrentTime(YESTERDAY); UsageEventType type = new UsageEventType("test", "1.0.0", null, action, "label", "1 - success, 0 - failure"); int number = reporter.registerEventSynchronously(type); assertEquals(0, number); for (int i = 0; i < 3; i++) { boolean ok = reporter.countEventSynchronously(type.event("test-label", 1)); assertFalse(ok); } register.setCurrentTime(TODAY); number = reporter.registerEventSynchronously(type); assertEquals(1, number); boolean ok = reporter.countEventSynchronously(type.event("test-label", 1)); assertFalse(ok); ok = reporter.countEventSynchronously(type.event("test-label", 1)); assertFalse(ok); } finally { register.setReset(oldReset); } } }