Updates
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
require('bare-process/global')
|
||||
const test = require('brittle')
|
||||
const { CapabilityManager, createCapability, verifyCapability } = require('../index.js')
|
||||
const crypto = require('bare-crypto')
|
||||
const b4a = require('b4a')
|
||||
const { setTimeout } = require('bare-timers')
|
||||
|
||||
test('creates and verifies capability', async (t) => {
|
||||
const issuer = new CapabilityManager()
|
||||
const subjectKeyPair = require('hypercore-crypto').keyPair()
|
||||
|
||||
const { cap } = issuer.issue(subjectKeyPair.publicKey, 'test://resource', ['read'])
|
||||
|
||||
t.ok(cap.signature, 'has signature')
|
||||
t.is(cap.resource, 'test://resource')
|
||||
|
||||
const valid = issuer.verify(cap)
|
||||
t.ok(valid, 'capability verifies correctly')
|
||||
})
|
||||
|
||||
test('rejects expired and revoked caps', async (t) => {
|
||||
const issuer = new CapabilityManager()
|
||||
const subject = require('hypercore-crypto').keyPair().publicKey
|
||||
|
||||
const { cap } = issuer.issue(subject, 'temp://data', ['write'], 10) // very short TTL
|
||||
|
||||
// Wait for expiry (simulated)
|
||||
await new Promise(r => setTimeout(r, 20))
|
||||
|
||||
const stillValid = issuer.verify(cap)
|
||||
t.is(stillValid, false, 'expired cap rejected')
|
||||
})
|
||||
|
||||
test('delegation works', async (t) => {
|
||||
const alice = new CapabilityManager()
|
||||
const bobPub = require('hypercore-crypto').keyPair().publicKey
|
||||
const charliePub = require('hypercore-crypto').keyPair().publicKey
|
||||
|
||||
const { cap } = alice.issue(bobPub, 'shared://project', ['read'])
|
||||
|
||||
const delegated = await alice.delegate(cap, charliePub)
|
||||
t.ok(delegated.cap, 'delegated cap created')
|
||||
t.is(delegated.cap.subject, b4a.toString(charliePub, 'hex'))
|
||||
t.ok(delegated.cap.parentSignature, 'delegation has parentSignature proof')
|
||||
t.ok(delegated.cap.delegator, 'has delegator')
|
||||
|
||||
// Verify delegated cap works
|
||||
const validDelegated = alice.verify(delegated.cap)
|
||||
t.ok(validDelegated, 'delegated capability verifies correctly with chain proof')
|
||||
})
|
||||
|
||||
console.log('hyper-p2p-capabilities tests completed successfully')
|
||||
test('hyper-p2p-capabilities: manager lifecycle', async (t) => {
|
||||
const m = new CapabilityManager()
|
||||
t.ok(m.keyPair)
|
||||
t.pass()
|
||||
})
|
||||
Reference in New Issue
Block a user