@Test public void testClearDataOnceEvenIfDisabled() { Event event1 = new Event(0, "test"); Event event2 = new Event(System.currentTimeMillis(), "test"); mDiskCache.cache(Arrays.asList(event1, event2)); assertFalse(mDiskCache.isEmpty()); mDiskCache = new EventDiskCache(mTracker); assertFalse(mDiskCache.isEmpty()); when(mTracker.getOfflineCacheAge()).thenReturn(-1L); mDiskCache = new EventDiskCache(mTracker); assertTrue(mDiskCache.isEmpty()); }
public boolean updateState(boolean online) { if (online) { final List<Event> uncache = mDiskCache.uncache(); ListIterator<Event> it = uncache.listIterator(uncache.size()); while (it.hasPrevious()) { // Anything from disk cache is older then what the queue could currently contain. mQueue.offerFirst(it.previous()); } Timber.tag(TAG).d("Switched state to ONLINE, uncached %d events from disk.", uncache.size()); } else if (!mQueue.isEmpty()) { List<Event> toCache = new ArrayList<>(); mQueue.drainTo(toCache); mDiskCache.cache(toCache); Timber.tag(TAG).d("Switched state to OFFLINE, caching %d events to disk.", toCache.size()); } return online && !mQueue.isEmpty(); }
public synchronized void cache(@NonNull List<Event> toCache) { if (!isCachingEnabled() || toCache.isEmpty()) return; checkCacheLimits(); long startTime = System.currentTimeMillis(); File container = writeEventFile(toCache); if (container != null) { mEventContainer.add(container); mCurrentSize += container.length(); } long stopTime = System.currentTimeMillis(); Timber.tag(TAG).d("Caching of %d events took %dms (%s)", toCache.size(), (stopTime - startTime), container); }
@NonNull public synchronized List<Event> uncache() { List<Event> events = new ArrayList<>(); if (!isCachingEnabled()) return events; checkCacheLimits(); long startTime = System.currentTimeMillis(); while (!mEventContainer.isEmpty()) { File head = mEventContainer.poll(); if (head != null) { events.addAll(readEventFile(head)); if (!head.delete()) Timber.tag(TAG).e("Failed to delete cache container %s", head.getPath()); } } long stopTime = System.currentTimeMillis(); Timber.tag(TAG).d("Uncaching of %d events took %dms", events.size(), (stopTime - startTime)); return events; }
@Test public void testMaxAge_positive_allStale() { when(mTracker.getOfflineCacheAge()).thenReturn(10 * 1000L); mDiskCache = new EventDiskCache(mTracker); Event event1 = new Event(1, "test"); Event event2 = new Event(2, "test"); mDiskCache.cache(Arrays.asList(event1, event2)); assertEquals(0, mHostFolder.listFiles().length); final List<Event> events = mDiskCache.uncache(); assertEquals(0, events.size()); }
public void clear() { mDiskCache.uncache(); mQueue.clear(); }
public Dispatcher build(Tracker tracker) { return new DefaultDispatcher( new EventCache(new EventDiskCache(tracker)), new Connectivity(tracker.getMatomo().getContext()), new PacketFactory(tracker.getAPIUrl()), new DefaultPacketSender() ); } }
@Test public void testCaching_empty() { mDiskCache.cache(Collections.emptyList()); }
public boolean isEmpty() { return mQueue.isEmpty() && mDiskCache.isEmpty(); }
public synchronized boolean isEmpty() { if (!mDelayedClear) { checkCacheLimits(); mDelayedClear = true; } return mEventContainer.isEmpty(); }
@Test public void testMaxAge_positive_allStale() { when(mTracker.getOfflineCacheAge()).thenReturn(10 * 1000L); mDiskCache = new EventDiskCache(mTracker); Event event1 = new Event(1, "test"); Event event2 = new Event(2, "test"); mDiskCache.cache(Arrays.asList(event1, event2)); assertEquals(0, mHostFolder.listFiles().length); final List<Event> events = mDiskCache.uncache(); assertEquals(0, events.size()); }
public void clear() { mDiskCache.uncache(); mQueue.clear(); }
@Before public void setup() { when(mTracker.getMatomo()).thenReturn(mMatomo); when(mMatomo.getContext()).thenReturn(mContext); mBaseCacheDir = new File("baseCacheDir"); when(mContext.getCacheDir()).thenReturn(mBaseCacheDir); when(mTracker.getAPIUrl()).thenReturn("http://testhost/matomo.php"); when(mTracker.getOfflineCacheAge()).thenReturn(0L); mCacheFolder = new File(mBaseCacheDir, "piwik_cache"); mHostFolder = new File(mCacheFolder, "testhost"); mDiskCache = new EventDiskCache(mTracker); }
@Test public void testCaching_empty() { mDiskCache.cache(Collections.emptyList()); }
@NonNull public synchronized List<Event> uncache() { List<Event> events = new ArrayList<>(); if (!isCachingEnabled()) return events; checkCacheLimits(); long startTime = System.currentTimeMillis(); while (!mEventContainer.isEmpty()) { File head = mEventContainer.poll(); if (head != null) { events.addAll(readEventFile(head)); if (!head.delete()) Timber.tag(TAG).e("Failed to delete cache container %s", head.getPath()); } } long stopTime = System.currentTimeMillis(); Timber.tag(TAG).d("Uncaching of %d events took %dms", events.size(), (stopTime - startTime)); return events; }
public boolean isEmpty() { return mQueue.isEmpty() && mDiskCache.isEmpty(); }
public synchronized boolean isEmpty() { if (!mDelayedClear) { checkCacheLimits(); mDelayedClear = true; } return mEventContainer.isEmpty(); }
@Test public void testMaxSize_limited() { when(mTracker.getOfflineCacheSize()).thenReturn(500 * 1024L); mDiskCache = new EventDiskCache(mTracker); for (int j = 0; j < 4; j++) { List<Event> events = new ArrayList<>(); for (int k = 0; k < 4000; k++) { events.add(new Event(System.nanoTime(), UUID.randomUUID().toString())); } // About 206KB mDiskCache.cache(events); } assertEquals(3, mHostFolder.listFiles().length); final List<Event> events = mDiskCache.uncache(); assertEquals(8000, events.size()); }