Skip to content

Commit 1fb21a6

Browse files
committed
Add retry code test
1 parent 5a50f47 commit 1fb21a6

File tree

6 files changed

+63
-360
lines changed

6 files changed

+63
-360
lines changed

packages/app-check/src/api.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ function _activate(
130130
newState.cachedTokenPromise = readTokenFromStorage(app).then(cachedToken => {
131131
if (cachedToken && isValid(cachedToken)) {
132132
setState(app, { ...getState(app), token: cachedToken });
133-
console.log('notifying token listeners');
134133
// notify all listeners with the cached token
135134
notifyTokenListeners(app, { token: cachedToken.token });
136135
}

packages/app-check/src/internal-api.test.ts

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@ import * as reCAPTCHA from './recaptcha';
3838
import * as client from './client';
3939
import * as storage from './storage';
4040
import * as util from './util';
41+
import { logger } from './logger';
4142
import { getState, clearState, setState, getDebugState } from './state';
4243
import { AppCheckTokenListener } from './public-types';
4344
import { Deferred, FirebaseError } from '@firebase/util';
4445
import { ReCaptchaEnterpriseProvider, ReCaptchaV3Provider } from './providers';
4546
import { AppCheckService } from './factory';
4647
import { ListenerType } from './types';
48+
import { AppCheckError } from './errors';
4749

4850
const fakeRecaptchaToken = 'fake-recaptcha-token';
4951
const fakeRecaptchaAppCheckToken = {
@@ -385,24 +387,47 @@ describe('internal api', () => {
385387
);
386388
expect(token).to.deep.equal({ token: fakeRecaptchaAppCheckToken.token });
387389
});
388-
it('throttle', async () => {
390+
it('throttles exponentially on 503', async () => {
389391
const appCheck = initializeAppCheck(app, {
390392
provider: new ReCaptchaV3Provider(FAKE_SITE_KEY)
391393
});
392-
stub(
393-
client,
394-
'exchangeToken'
395-
).returns(
394+
const warnStub = stub(logger, 'warn');
395+
stub(client, 'exchangeToken').returns(
396396
Promise.reject(
397-
new FirebaseError('test-error', 'test error msg', { httpStatus: 503 })
397+
new FirebaseError(
398+
AppCheckError.FETCH_STATUS_ERROR,
399+
'test error msg',
400+
{ httpStatus: 503 }
401+
)
398402
)
399403
);
400404

401405
const token = await getToken(appCheck as AppCheckService);
402406

403-
expect(token.error?.message).to.equal(
404-
'sdfa'
407+
expect(token.error?.message).to.include('503');
408+
expect(token.error?.message).to.include('00m');
409+
expect(warnStub.args[0][0]).to.include('503');
410+
});
411+
it('throttles 1d on 403', async () => {
412+
const appCheck = initializeAppCheck(app, {
413+
provider: new ReCaptchaV3Provider(FAKE_SITE_KEY)
414+
});
415+
const warnStub = stub(logger, 'warn');
416+
stub(client, 'exchangeToken').returns(
417+
Promise.reject(
418+
new FirebaseError(
419+
AppCheckError.FETCH_STATUS_ERROR,
420+
'test error msg',
421+
{ httpStatus: 403 }
422+
)
423+
)
405424
);
425+
426+
const token = await getToken(appCheck as AppCheckService);
427+
428+
expect(token.error?.message).to.include('403');
429+
expect(token.error?.message).to.include('1d');
430+
expect(warnStub.args[0][0]).to.include('403');
406431
});
407432
});
408433

packages/app-check/src/internal-api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ export async function getToken(
139139
}
140140
token = await state.exchangeTokenPromise;
141141
} catch (e) {
142-
if ((e as FirebaseError).code === AppCheckError.THROTTLED) {
142+
if ((e as FirebaseError).code === `appCheck/${AppCheckError.THROTTLED}`) {
143143
// Warn if throttled, but do not treat it as an error.
144144
logger.warn((e as FirebaseError).message);
145145
} else {

0 commit comments

Comments
 (0)