Skip to content

Commit

Permalink
test: retry listing shares
Browse files Browse the repository at this point in the history
  • Loading branch information
saw-jan committed Apr 25, 2024
1 parent baaf630 commit d1d95b8
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 4 deletions.
28 changes: 28 additions & 0 deletions tests/acceptance/features/bootstrap/FeatureContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,34 @@ class FeatureContext extends BehatVariablesContext {
private array $lastHttpStatusCodesArray = [];
private array $lastOCSStatusCodesArray = [];

/**
* Store for auto-sync settings for users
*/
private array $autoSyncSettings = [];

/**
* @param string $user
*
* @return bool
*/
public function getUserAutoSyncSetting(string $user): bool {
if (\array_key_exists($user, $this->autoSyncSettings)) {
return $this->autoSyncSettings[$user];
}
// auto-sync is enabled by default
return true;
}

/**
* @param string $user
* @param bool $value
*
* @return void
*/
public function rememberUserAutoSyncSetting(string $user, bool $value): void {
$this->autoSyncSettings[$user] = $value;
}

/**
* this is set true for db conversion tests
*/
Expand Down
32 changes: 28 additions & 4 deletions tests/acceptance/features/bootstrap/GraphContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -2505,14 +2505,38 @@ public function userListsTheResourcesSharedWithThemUsingGraphApi(string $user, s
}

$credentials = $this->getAdminOrUserCredentials($user);
$this->featureContext->setResponse(
GraphHelper::getSharesSharedWithMe(

// Sometimes listing shares might not return the updated shares list
// so try again until @client.synchronize is true for the max. number of retries (i.e. 10)
// and do not retry when the share is expected to be not synced
$tryAgain = false;
$retried = 0;
do {
$response = GraphHelper::getSharesSharedWithMe(
$this->featureContext->getBaseUrl(),
$this->featureContext->getStepLineRef(),
$credentials['username'],
$credentials['password']
)
);
);

$jsonObj = $this->featureContext->getJsonDecodedResponseBodyContent($response);

foreach ($jsonObj->value as $share) {
$autoSync = $this->featureContext->getUserAutoSyncSetting($credentials['username']);
$tryAgain = !$share->{'@client.synchronize'} && $autoSync && $retried < HttpRequestHelper::numRetriesOnHttpTooEarly();

if ($tryAgain) {
$retried += 1;
echo "auto-sync share for user '$user' is enabled\n";
echo "but share '$share->name' was not auto-synced, retrying ($retried)...\n";
// wait 500ms and try again
\usleep(500 * 1000);
break;
}
}
} while ($tryAgain);

$this->featureContext->setResponse($response);
$this->featureContext->pushToLastStatusCodesArrays();
}

Expand Down
1 change: 1 addition & 0 deletions tests/acceptance/features/bootstrap/SettingsContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -539,5 +539,6 @@ public function theUserHasDisabledAutoAccepting(string $user): void {
"Expected response status code should be 201",
$response
);
$this->featureContext->rememberUserAutoSyncSetting($user, false);
}
}

0 comments on commit d1d95b8

Please sign in to comment.