Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 44 additions & 12 deletions src/tests/specs/observatory/observatory.openid.upgrade.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ import { fromNullable } from '@dfinity/utils';
import { Ed25519KeyIdentity } from '@icp-sdk/core/identity';
import type { Principal } from '@icp-sdk/core/principal';
import { inject } from 'vitest';
import { GOOGLE_OPEN_ID_PROVIDER } from '../../constants/auth-tests.constants';
import {
GITHUB_OPEN_ID_PROVIDER,
GOOGLE_OPEN_ID_PROVIDER
} from '../../constants/auth-tests.constants';
import { mockCertificateDate, mockGoogleClientId } from '../../mocks/jwt.mocks';
import { FETCH_CERTIFICATE_INTERVAL } from '../../mocks/observatory.mocks';
import { makeMockGoogleOpenIdJwt } from '../../utils/jwt-tests.utils';
Expand Down Expand Up @@ -67,7 +70,16 @@ describe('Observatory > OpenId > Upgrade', async () => {
expect(fromNullable(cert)).toBeUndefined();
};

describe('Google certificate', () => {
describe.each([
{
method: 'google',
provider: GOOGLE_OPEN_ID_PROVIDER
},
{
method: 'github',
provider: GITHUB_OPEN_ID_PROVIDER
}
])('$method', ({ method, provider }) => {
it('should not start monitoring after upgrade if never stopped', async () => {
await upgradeCurrent();

Expand All @@ -79,20 +91,28 @@ describe('Observatory > OpenId > Upgrade', async () => {
it('should not start monitoring after upgrade if stopped', async () => {
const { start_openid_monitoring, stop_openid_monitoring } = actor;

await start_openid_monitoring(GOOGLE_OPEN_ID_PROVIDER);
await start_openid_monitoring(provider);

// HTTPs outcalls after stat
await assertOpenIdHttpsOutcalls({ pic, jwks: mockJwks });
await assertOpenIdHttpsOutcalls({
pic,
jwks: mockJwks,
method: method as 'google' | 'github'
});

await pic.advanceTime(1000);
await tick(pic);

await stop_openid_monitoring(GOOGLE_OPEN_ID_PROVIDER);
await stop_openid_monitoring(provider);

await pic.advanceTime(FETCH_CERTIFICATE_INTERVAL + 1000);

// Delayed HTTPs outcalls which happens after stop
await assertOpenIdHttpsOutcalls({ pic, jwks: mockJwks });
await assertOpenIdHttpsOutcalls({
pic,
jwks: mockJwks,
method: method as 'google' | 'github'
});

await expect(pic.getPendingHttpsOutcalls()).resolves.toHaveLength(0);

Expand All @@ -106,17 +126,21 @@ describe('Observatory > OpenId > Upgrade', async () => {
it('should still hold certificate after upgrade', async () => {
const { start_openid_monitoring } = actor;

await start_openid_monitoring(GOOGLE_OPEN_ID_PROVIDER);
await start_openid_monitoring(provider);

// HTTPs outcalls after stat
await assertOpenIdHttpsOutcalls({ pic, jwks: mockJwks });
await assertOpenIdHttpsOutcalls({
pic,
jwks: mockJwks,
method: method as 'google' | 'github'
});

await upgradeCurrent();

const { get_openid_certificate } = actor;

const cert = await get_openid_certificate({
provider: { Google: null }
provider
});

expect(fromNullable(cert)).not.toBeUndefined();
Expand All @@ -125,10 +149,14 @@ describe('Observatory > OpenId > Upgrade', async () => {
it('should restart monitoring after upgrade if running', async () => {
const { start_openid_monitoring } = actor;

await start_openid_monitoring(GOOGLE_OPEN_ID_PROVIDER);
await start_openid_monitoring(provider);

// HTTPs outcalls after stat
await assertOpenIdHttpsOutcalls({ pic, jwks: mockJwks });
await assertOpenIdHttpsOutcalls({
pic,
jwks: mockJwks,
method: method as 'google' | 'github'
});

await upgradeCurrent();

Expand All @@ -138,7 +166,11 @@ describe('Observatory > OpenId > Upgrade', async () => {
await expect(pic.getPendingHttpsOutcalls()).resolves.toHaveLength(1);

// HTTPs outcalls after restat
await assertOpenIdHttpsOutcalls({ pic, jwks: mockJwks });
await assertOpenIdHttpsOutcalls({
pic,
jwks: mockJwks,
method: method as 'google' | 'github'
});
});
});
});