Skip to content

Commit

Permalink
Merge pull request #4 from prudrabhat/reconnection_issue
Browse files Browse the repository at this point in the history
Make state fetching consistent with iOS
  • Loading branch information
prudrabhat committed Dec 13, 2022
2 parents e5ec883 + 82045dc commit d56081f
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -279,10 +279,10 @@ private void processSharedStateEvent(final Event event, Map<String, Object> payl
// Event Name for XDM shared = "Shared state content"
// Event Name for Regular shared = "Shared state content (XDM)"
if (XDM_SHARED_STATE_CHANGE.equals(event.getName())) {
sharedStateResult = getApi().getXDMSharedState(stateOwner, event, true, SharedStateResolution.ANY);
sharedStateResult = getApi().getXDMSharedState(stateOwner, event, false, SharedStateResolution.ANY);
stateDataKey = XDM_STATE_DATA;
} else {
sharedStateResult = getApi().getSharedState(stateOwner, event, true, SharedStateResolution.ANY);
sharedStateResult = getApi().getSharedState(stateOwner, event, false, SharedStateResolution.ANY);
stateDataKey = STATE_DATA;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,23 @@ void connect(final String pin) {
assuranceSessionPresentationManager.onSessionConnecting();

final String envString = AssuranceUtil.getURLFormatForEnvironment(assuranceEnvironment);
String orgId = assuranceStateManager.getOrgId(true);

if (StringUtils.isNullOrEmpty(orgId)) {
// if configuration does not have org-id, try extracting it from stored connection url
final String reconnectionURL = connectionDataStore.getStoredConnectionURL();
if (reconnectionURL == null) {
Log.debug(Assurance.LOG_TAG, LOG_TAG, "Cannot connect. No orgId from Configuration state or stored url.");
return;
}

final Uri uri = Uri.parse(reconnectionURL);
orgId = uri.getQueryParameter(AssuranceConstants.SocketURLKeys.ORG_ID);
Log.debug(Assurance.LOG_TAG, LOG_TAG, "Using orgId from stored reconnection url.");
}

final String connectionString = String.format(CONNECTION_URL_FORMAT, envString,
sessionId, pin, assuranceStateManager.getOrgId(true), assuranceStateManager.getClientId());
sessionId, pin, orgId, assuranceStateManager.getClientId());
Log.debug(Assurance.LOG_TAG, LOG_TAG, "Connecting to session with URL: " + connectionString);
socket.connect(connectionString);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ String getClientId() {
*/
String getOrgId(final boolean urlEncoded) {
final SharedStateResult latestConfigSharedStateResult = extensionApi.getSharedState(
AssuranceConstants.SDKSharedStateName.CONFIGURATION, lastSDKEvent, true, SharedStateResolution.ANY);
AssuranceConstants.SDKSharedStateName.CONFIGURATION, lastSDKEvent, false, SharedStateResolution.ANY);

if (!isSharedStateSet(latestConfigSharedStateResult)) {
Log.error(Assurance.LOG_TAG, LOG_TAG, "SDK configuration is not available to read OrgId");
Expand Down Expand Up @@ -156,7 +156,7 @@ String getOrgId(final boolean urlEncoded) {
List<AssuranceEvent> getAllExtensionStateData() {
final List<AssuranceEvent> states = new ArrayList<>();
final SharedStateResult eventHubSharedStateResult = extensionApi.getSharedState(
AssuranceConstants.SDKSharedStateName.EVENTHUB, lastSDKEvent, true, SharedStateResolution.ANY);
AssuranceConstants.SDKSharedStateName.EVENTHUB, lastSDKEvent, false, SharedStateResolution.ANY);

if (!isSharedStateSet(eventHubSharedStateResult)) {
return states;
Expand Down Expand Up @@ -203,15 +203,15 @@ private List<AssuranceEvent> getStateForExtension(final String stateOwner, final
final List<AssuranceEvent> stateEvents = new ArrayList<>();

// create an event if the extension has a regular shared state
final SharedStateResult regularSharedState = extensionApi.getSharedState(stateOwner, lastSDKEvent, true,
final SharedStateResult regularSharedState = extensionApi.getSharedState(stateOwner, lastSDKEvent, false,
SharedStateResolution.ANY);

if (isSharedStateSet(regularSharedState) && !AssuranceUtil.isNullOrEmpty(regularSharedState.getValue())) {
stateEvents.add(prepareSharedStateEvent(stateOwner, eventName, regularSharedState.getValue(), STATE_DATA));
}

// create an event if the extension has a xdm shared state
final SharedStateResult xdmSharedState = extensionApi.getXDMSharedState(stateOwner, lastSDKEvent, true,
final SharedStateResult xdmSharedState = extensionApi.getXDMSharedState(stateOwner, lastSDKEvent, false,
SharedStateResolution.ANY);

if (isSharedStateSet(xdmSharedState) && !AssuranceUtil.isNullOrEmpty(xdmSharedState.getValue())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,32 @@ public void test_connect() {
verify(mockAssuranceWebViewSocket).connect(expectedURL);
}

@Test
public void test_connect_orgIdFromConfigStateUnavailable() throws Exception {
when(mockAssuranceStateManager.getOrgId(true)).thenReturn("");
when(mockAssuranceConnectionDataStore.getStoredConnectionURL())
.thenReturn("wss://connect.griffon.adobe.com/client/v1?" +
"sessionId=SampleSessionId&token=1234&orgId=StoredOrg@AdobeOrg&clientId=sampleClientID");
PowerMockito.mockStatic(Uri.class);
final Uri mockUri = mock(Uri.class);
PowerMockito.when(Uri.class, "parse", ArgumentMatchers.anyString()).thenReturn(mockUri);
when(mockUri.getQueryParameter("orgId")).thenReturn("StoredOrg@AdobeOrg");

assuranceSession.connect("1234");

String expectedURL = String.format(
"wss://connect.griffon.adobe.com/client/v1?sessionId=%s&token=%s&orgId=%s&clientId=%s",
"SampleSessionID",
"1234",
"StoredOrg@AdobeOrg",
"sampleClientID"

);

verify(mockAssuranceSessionPresentationManager).onSessionConnecting();
verify(mockAssuranceWebViewSocket).connect(expectedURL);
}

@Test
public void test_disconnect() {
assuranceSession.disconnect();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,6 @@ private void setConfigurationSharedStateWithOrgId(final Object orgID) {

SharedStateResult res = new SharedStateResult(SharedStateStatus.SET, configSharedState);
doReturn(res).when(mockApi).getSharedState(AssuranceTestConstants.SDKSharedStateName.CONFIGURATION,
null, true, SharedStateResolution.ANY);
null, false, SharedStateResolution.ANY);
}
}

0 comments on commit d56081f

Please sign in to comment.