@Nullable
    public synchronized Beacon track(@NonNull Beacon beacon) {
        Beacon trackedBeacon = null;
        if (beacon.isMultiFrameBeacon() || beacon.getServiceUuid() != -1) {
            trackedBeacon = trackGattBeacon(beacon);
        }
        else {
            trackedBeacon = beacon;
        }
        return trackedBeacon;
    }
@Test
    public void gattBeaconFieldsAreNotUpdated() {
        Beacon beacon = getGattBeacon();
        final int originalRssi = beacon.getRssi();
        final List<Long> originalData = beacon.getDataFields();
        final List<Long> originalExtra = beacon.getExtraDataFields();
        Beacon beaconUpdate = getGattBeaconUpdate();
        ExtraDataBeaconTracker tracker = new ExtraDataBeaconTracker();
        tracker.track(beacon);
        tracker.track(beaconUpdate);
        Beacon trackedBeacon = tracker.track(beacon);
        assertEquals("rssi should NOT be updated", originalRssi, trackedBeacon.getRssi());
        assertEquals("data should NOT be updated", originalData, trackedBeacon.getDataFields());
        assertEquals("extra data should NOT be updated", originalExtra, trackedBeacon.getExtraDataFields());
    }