-
Notifications
You must be signed in to change notification settings - Fork 186
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: added additional check for status list transformation
Signed-off-by: Berend Sliedrecht <sliedrecht@berend.io>
- Loading branch information
1 parent
becd233
commit f0969be
Showing
3 changed files
with
203 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
164 changes: 164 additions & 0 deletions
164
packages/indy-vdr/src/anoncreds/utils/__tests__/transform.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
import type { RevocationRegistryDelta } from '../transform' | ||
import type { AnonCredsRevocationRegistryDefinition } from '@aries-framework/anoncreds' | ||
|
||
import { indyVdrCreateLatestRevocationDelta, anonCredsRevocationStatusListFromIndyVdr } from '../transform' | ||
|
||
const createRevocationRegistryDefinition = (maxCreds: number): AnonCredsRevocationRegistryDefinition => ({ | ||
value: { | ||
tailsHash: 'hash', | ||
maxCredNum: maxCreds, | ||
publicKeys: { | ||
accumKey: { | ||
z: 'key', | ||
}, | ||
}, | ||
tailsLocation: 'nowhere', | ||
}, | ||
revocDefType: 'CL_ACCUM', | ||
tag: 'REV_TAG', | ||
issuerId: 'does:not:matter', | ||
credDefId: 'does:not:matter', | ||
}) | ||
|
||
describe('transform', () => { | ||
const accum = 'does not matter' | ||
const revocationRegistryDefinitionId = 'does:not:matter' | ||
|
||
describe('indy vdr delta to anoncreds revocation status list', () => { | ||
test('issued and revoked are filled', () => { | ||
const delta: RevocationRegistryDelta = { | ||
accum, | ||
issued: [0, 1, 2, 3, 4], | ||
revoked: [5, 6, 7, 8, 9], | ||
txnTime: 1, | ||
} | ||
|
||
const revocationRegistryDefinition = createRevocationRegistryDefinition(10) | ||
|
||
const statusList = anonCredsRevocationStatusListFromIndyVdr( | ||
revocationRegistryDefinitionId, | ||
revocationRegistryDefinition, | ||
delta, | ||
true | ||
) | ||
|
||
expect(statusList.revocationList).toStrictEqual([0, 0, 0, 0, 0, 1, 1, 1, 1, 1]) | ||
}) | ||
|
||
test('issued and revoked are empty (issuance by default)', () => { | ||
const delta: RevocationRegistryDelta = { | ||
accum, | ||
issued: [], | ||
revoked: [], | ||
txnTime: 1, | ||
} | ||
|
||
const revocationRegistryDefinition = createRevocationRegistryDefinition(10) | ||
|
||
const statusList = anonCredsRevocationStatusListFromIndyVdr( | ||
revocationRegistryDefinitionId, | ||
revocationRegistryDefinition, | ||
delta, | ||
true | ||
) | ||
|
||
expect(statusList.revocationList).toStrictEqual([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) | ||
}) | ||
|
||
test('issued and revoked are empty (issuance on demand)', () => { | ||
const delta: RevocationRegistryDelta = { | ||
accum, | ||
issued: [], | ||
revoked: [], | ||
txnTime: 1, | ||
} | ||
|
||
const revocationRegistryDefinition = createRevocationRegistryDefinition(10) | ||
|
||
const statusList = anonCredsRevocationStatusListFromIndyVdr( | ||
revocationRegistryDefinitionId, | ||
revocationRegistryDefinition, | ||
delta, | ||
false | ||
) | ||
|
||
expect(statusList.revocationList).toStrictEqual([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) | ||
}) | ||
|
||
test('issued index is too high', () => { | ||
const delta: RevocationRegistryDelta = { | ||
accum, | ||
issued: [200], | ||
revoked: [5, 6, 7, 8, 9], | ||
txnTime: 1, | ||
} | ||
|
||
const revocationRegistryDefinition = createRevocationRegistryDefinition(10) | ||
|
||
expect(() => | ||
anonCredsRevocationStatusListFromIndyVdr( | ||
revocationRegistryDefinitionId, | ||
revocationRegistryDefinition, | ||
delta, | ||
true | ||
) | ||
).toThrowError() | ||
}) | ||
}) | ||
|
||
describe('create latest indy vdr delta from status list and previous delta', () => { | ||
test('delta and status list are equal', () => { | ||
const delta: RevocationRegistryDelta = { | ||
accum, | ||
issued: [0, 1, 2, 3, 4], | ||
revoked: [5, 6, 7, 8, 9], | ||
txnTime: 1, | ||
} | ||
|
||
const revocationStatusList = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] | ||
|
||
const { revoked, issued } = indyVdrCreateLatestRevocationDelta(accum, revocationStatusList, delta) | ||
|
||
expect(revoked).toStrictEqual([]) | ||
expect(issued).toStrictEqual([]) | ||
}) | ||
|
||
test('no previous delta', () => { | ||
const revocationStatusList = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] | ||
|
||
const { revoked, issued } = indyVdrCreateLatestRevocationDelta(accum, revocationStatusList) | ||
|
||
expect(issued).toStrictEqual([0, 1, 2, 3, 4]) | ||
expect(revoked).toStrictEqual([5, 6, 7, 8, 9]) | ||
}) | ||
|
||
test('status list and previous delta are out of sync', () => { | ||
const delta: RevocationRegistryDelta = { | ||
accum, | ||
issued: [0], | ||
revoked: [5], | ||
txnTime: 1, | ||
} | ||
|
||
const revocationStatusList = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] | ||
|
||
const { revoked, issued } = indyVdrCreateLatestRevocationDelta(accum, revocationStatusList, delta) | ||
|
||
expect(issued).toStrictEqual([1, 2, 3, 4]) | ||
expect(revoked).toStrictEqual([6, 7, 8, 9]) | ||
}) | ||
|
||
test('previous delta index exceeds length of revocation status list', () => { | ||
const delta: RevocationRegistryDelta = { | ||
accum, | ||
issued: [200], | ||
revoked: [5], | ||
txnTime: 1, | ||
} | ||
|
||
const revocationStatusList = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] | ||
|
||
expect(() => indyVdrCreateLatestRevocationDelta(accum, revocationStatusList, delta)).toThrowError() | ||
}) | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters