Skip to content

Commit f5528d5

Browse files
[FSSDK-9493] fix: Added check in AsyncGetQualifiedSegments to check if userID is fsuserid or vuid (#527)
* Added check in AsyncGetQualifiedSegments to check if userID is fsuserid or vuid * Update unit test and added additional test to verify that proper userKey is getting passed given vuid and userid --------- Co-authored-by: NomanShoaib <m.nomanshoaib09@gmail.com>
1 parent c507649 commit f5528d5

File tree

2 files changed

+105
-4
lines changed

2 files changed

+105
-4
lines changed

core-api/src/main/java/com/optimizely/ab/odp/ODPSegmentManager.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,16 @@ public void getQualifiedSegments(ODPUserKey userKey, String userValue, ODPSegmen
110110
getQualifiedSegments(userKey, userValue, callback, Collections.emptyList());
111111
}
112112

113-
public void getQualifiedSegments(String fsUserId, ODPSegmentFetchCallback callback, List<ODPSegmentOption> segmentOptions) {
114-
getQualifiedSegments(ODPUserKey.FS_USER_ID, fsUserId, callback, segmentOptions);
113+
public void getQualifiedSegments(String userId, ODPSegmentFetchCallback callback, List<ODPSegmentOption> options) {
114+
if (ODPManager.isVuid(userId)) {
115+
getQualifiedSegments(ODPUserKey.VUID, userId, callback, options);
116+
} else {
117+
getQualifiedSegments(ODPUserKey.FS_USER_ID, userId, callback, options);
118+
}
115119
}
116120

117-
public void getQualifiedSegments(String fsUserId, ODPSegmentFetchCallback callback) {
118-
getQualifiedSegments(ODPUserKey.FS_USER_ID, fsUserId, callback, Collections.emptyList());
121+
public void getQualifiedSegments(String userId, ODPSegmentFetchCallback callback) {
122+
getQualifiedSegments(userId, callback, Collections.emptyList());
119123
}
120124

121125
private String getCacheKey(String userKey, String userValue) {

core-api/src/test/java/com/optimizely/ab/OptimizelyUserContextTest.java

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1723,6 +1723,103 @@ public void fetchQualifiedSegmentsAsync() throws InterruptedException {
17231723
assertEquals(Arrays.asList("segment1", "segment2"), userContext.getQualifiedSegments());
17241724
}
17251725

1726+
@Test
1727+
public void fetchQualifiedSegmentsAsyncWithVUID() throws InterruptedException {
1728+
ODPEventManager mockODPEventManager = mock(ODPEventManager.class);
1729+
ODPApiManager mockAPIManager = mock(ODPApiManager.class);
1730+
ODPSegmentManager mockODPSegmentManager = spy(new ODPSegmentManager(mockAPIManager));
1731+
ODPManager mockODPManager = mock(ODPManager.class);
1732+
1733+
doAnswer(
1734+
invocation -> {
1735+
ODPSegmentManager.ODPSegmentFetchCallback callback = invocation.getArgumentAt(2, ODPSegmentManager.ODPSegmentFetchCallback.class);
1736+
callback.onCompleted(Arrays.asList("segment1", "segment2"));
1737+
return null;
1738+
}
1739+
).when(mockODPSegmentManager).getQualifiedSegments(any(), eq("vuid_f6db3d60ba3a493d8e41bc995bb"), (ODPSegmentManager.ODPSegmentFetchCallback) any(), any());
1740+
Mockito.when(mockODPManager.getEventManager()).thenReturn(mockODPEventManager);
1741+
Mockito.when(mockODPManager.getSegmentManager()).thenReturn(mockODPSegmentManager);
1742+
1743+
Optimizely optimizely = Optimizely.builder()
1744+
.withDatafile(datafile)
1745+
.withEventProcessor(new ForwardingEventProcessor(eventHandler, null))
1746+
.withODPManager(mockODPManager)
1747+
.build();
1748+
1749+
OptimizelyUserContext userContext = optimizely.createUserContext("vuid_f6db3d60ba3a493d8e41bc995bb");
1750+
1751+
CountDownLatch countDownLatch = new CountDownLatch(1);
1752+
userContext.fetchQualifiedSegments((Boolean isFetchSuccessful) -> {
1753+
assertTrue(isFetchSuccessful);
1754+
countDownLatch.countDown();
1755+
});
1756+
1757+
countDownLatch.await();
1758+
verify(mockODPSegmentManager).getQualifiedSegments(eq(ODPUserKey.VUID), eq("vuid_f6db3d60ba3a493d8e41bc995bb"), any(ODPSegmentManager.ODPSegmentFetchCallback.class), eq(Collections.emptyList()));
1759+
assertEquals(Arrays.asList("segment1", "segment2"), userContext.getQualifiedSegments());
1760+
1761+
// reset qualified segments
1762+
userContext.setQualifiedSegments(Collections.emptyList());
1763+
CountDownLatch countDownLatch2 = new CountDownLatch(1);
1764+
userContext.fetchQualifiedSegments((Boolean isFetchSuccessful) -> {
1765+
assertTrue(isFetchSuccessful);
1766+
countDownLatch2.countDown();
1767+
}, Collections.singletonList(ODPSegmentOption.RESET_CACHE));
1768+
1769+
countDownLatch2.await();
1770+
verify(mockODPSegmentManager).getQualifiedSegments(eq(ODPUserKey.VUID) ,eq("vuid_f6db3d60ba3a493d8e41bc995bb"), any(ODPSegmentManager.ODPSegmentFetchCallback.class), eq(Collections.singletonList(ODPSegmentOption.RESET_CACHE)));
1771+
assertEquals(Arrays.asList("segment1", "segment2"), userContext.getQualifiedSegments());
1772+
}
1773+
1774+
1775+
@Test
1776+
public void fetchQualifiedSegmentsAsyncWithUserID() throws InterruptedException {
1777+
ODPEventManager mockODPEventManager = mock(ODPEventManager.class);
1778+
ODPApiManager mockAPIManager = mock(ODPApiManager.class);
1779+
ODPSegmentManager mockODPSegmentManager = spy(new ODPSegmentManager(mockAPIManager));
1780+
ODPManager mockODPManager = mock(ODPManager.class);
1781+
1782+
doAnswer(
1783+
invocation -> {
1784+
ODPSegmentManager.ODPSegmentFetchCallback callback = invocation.getArgumentAt(2, ODPSegmentManager.ODPSegmentFetchCallback.class);
1785+
callback.onCompleted(Arrays.asList("segment1", "segment2"));
1786+
return null;
1787+
}
1788+
).when(mockODPSegmentManager).getQualifiedSegments(any(), eq("f6db3d60ba3a493d8e41bc995bb"), (ODPSegmentManager.ODPSegmentFetchCallback) any(), any());
1789+
Mockito.when(mockODPManager.getEventManager()).thenReturn(mockODPEventManager);
1790+
Mockito.when(mockODPManager.getSegmentManager()).thenReturn(mockODPSegmentManager);
1791+
1792+
Optimizely optimizely = Optimizely.builder()
1793+
.withDatafile(datafile)
1794+
.withEventProcessor(new ForwardingEventProcessor(eventHandler, null))
1795+
.withODPManager(mockODPManager)
1796+
.build();
1797+
1798+
OptimizelyUserContext userContext = optimizely.createUserContext("f6db3d60ba3a493d8e41bc995bb");
1799+
1800+
CountDownLatch countDownLatch = new CountDownLatch(1);
1801+
userContext.fetchQualifiedSegments((Boolean isFetchSuccessful) -> {
1802+
assertTrue(isFetchSuccessful);
1803+
countDownLatch.countDown();
1804+
});
1805+
1806+
countDownLatch.await();
1807+
verify(mockODPSegmentManager).getQualifiedSegments(eq(ODPUserKey.FS_USER_ID), eq("f6db3d60ba3a493d8e41bc995bb"), any(ODPSegmentManager.ODPSegmentFetchCallback.class), eq(Collections.emptyList()));
1808+
assertEquals(Arrays.asList("segment1", "segment2"), userContext.getQualifiedSegments());
1809+
1810+
// reset qualified segments
1811+
userContext.setQualifiedSegments(Collections.emptyList());
1812+
CountDownLatch countDownLatch2 = new CountDownLatch(1);
1813+
userContext.fetchQualifiedSegments((Boolean isFetchSuccessful) -> {
1814+
assertTrue(isFetchSuccessful);
1815+
countDownLatch2.countDown();
1816+
}, Collections.singletonList(ODPSegmentOption.RESET_CACHE));
1817+
1818+
countDownLatch2.await();
1819+
verify(mockODPSegmentManager).getQualifiedSegments(eq(ODPUserKey.FS_USER_ID) ,eq("f6db3d60ba3a493d8e41bc995bb"), any(ODPSegmentManager.ODPSegmentFetchCallback.class), eq(Collections.singletonList(ODPSegmentOption.RESET_CACHE)));
1820+
assertEquals(Arrays.asList("segment1", "segment2"), userContext.getQualifiedSegments());
1821+
}
1822+
17261823
@Test
17271824
public void fetchQualifiedSegmentsAsyncError() throws InterruptedException {
17281825
Optimizely optimizely = Optimizely.builder()

0 commit comments

Comments
 (0)