Migration des tests d'authentification RPC
Aperçu
Ce document décrit la migration des tests du paquet @steemit/rpc-auth vers steem-js v1.0.11.
Détails de la migration
Source
- Paquet d'origine :
@steemit/rpc-authv1.1.1 - Emplacement source : la copie locale du dépôt
rpc-auth - Fichier de tests d'origine :
test/index.ts - Framework de tests : Mocha
Destination
- Paquet cible :
@steemit/steem-jsv1.0.11 - Emplacement cible : la copie locale du dépôt
steem-js - Nouveau fichier de tests :
test/rpc-auth.test.ts - Framework de tests : Vitest
Modifications apportées
1. Migration du framework de tests
Depuis Mocha :
import 'mocha'
import * as assert from 'assert'
describe('rpc auth', function() {
it('signs and validates', async function() {
assert.equal(...)
})
})Vers Vitest :
import { describe, it, expect } from 'vitest'
describe('RPC Auth', () => {
it('should sign and validate a request', async () => {
expect(...).toBe(...)
})
})2. Mise à jour des dépendances
Supprimées :
dsteem(ancienne bibliothèque steem-js)node-fetch(pour la création de comptes sur le testnet)- les utilitaires spécifiques à Mocha
Remplacées par :
- l'API propre à
steem-js(steem.auth,steem.api) crypto.randomBytesnatif- les assertions Vitest
3. Gestion des comptes de test
À l'origine :
- Création dynamique de comptes sur le testnet
- Utilisation de
dsteem.Client.testnet() - Accès réseau requis
Maintenant :
- Utilisation de variables d'environnement ou de clés de test
- Aucune création dynamique de comptes
- Exécution possible sans réseau (pour la plupart des tests)
4. Fonction de vérification
À l'origine :
const dsteemVerify: VerifyMessage = async (message, signatures, account) => {
const opts = { hash: message, signatures, required_posting: [account] }
const rv = await client.database.call('verify_signatures', [opts])
if (rv.valid !== true) throw new Error('Signature invalid')
}Maintenant :
const createVerifyFunction = () => {
return async (message: Buffer, signatures: string[], account: string) => {
const accounts = await api.getAccountsAsync([account])
const postingKeys = accounts[0].posting?.key_auths?.map(k => k[0]) || []
// Verify using steem-js Signature and PublicKey classes
}
}Couverture des tests
Tests migrés
✅ sign and validate - flux de base de signature et de validation ✅ invalid requests - tests complets de gestion des erreurs :
- Requête JSON RPC invalide
- Charge signée manquante
- Paramètres de requête invalides
- Compte manquant
- Paramètres encodés invalides
- Nonce invalide (plusieurs cas)
- Horodatage invalide
- Signature expirée
- Échec de vérification
✅ signing errors - gestion des erreurs lors de la signature :
- Params manquants
- Tableau de clés vide
✅ signature format - validation de la structure de la signature :
- Format de signature valide
- Nonces uniques
- Horodatages valides
✅ multiple signatures - prise en charge de plusieurs clés
Tests ignorés
⏭️ invalid signatures (test d'intégration) - nécessite :
- Un vrai compte sur le testnet
- Un accès réseau
- Activation via les variables d'environnement
STEEM_USERNAMEetSTEEM_PASSWORD
Résultats des tests
✓ test/rpc-auth.test.ts (19 tests | 1 skipped)
✓ RPC Auth > sign and validate > should sign and validate a request
✓ RPC Auth > invalid requests > should handle invalid JSON RPC request
✓ RPC Auth > invalid requests > should handle missing signed payload
✓ RPC Auth > invalid requests > should handle invalid request params
✓ RPC Auth > invalid requests > should handle missing account
✓ RPC Auth > invalid requests > should handle invalid encoded params
✓ RPC Auth > invalid requests > should handle invalid nonce (not a string)
✓ RPC Auth > invalid requests > should handle invalid nonce (wrong length)
✓ RPC Auth > invalid requests > should handle invalid nonce (wrong format)
✓ RPC Auth > invalid requests > should handle invalid timestamp
✓ RPC Auth > invalid requests > should handle expired signature
✓ RPC Auth > invalid requests > should handle verification failure
✓ RPC Auth > signing errors > should handle invalid requests when signing
✓ RPC Auth > signing errors > should handle empty keys array
✓ RPC Auth > signature format > should generate valid signature format
✓ RPC Auth > signature format > should generate unique nonces for each request
✓ RPC Auth > signature format > should generate valid timestamps
✓ RPC Auth > multiple signatures > should support multiple keys
↓ RPC Auth > invalid signatures > should handle invalid signatures (integration test)Différences clés
Format des messages d'erreur
rpc-auth d'origine :
ValidationError: Verification failed (Nope)steem-js v1.0.11 :
Error: Verification failed: NopeLe format d'erreur est passé de (message) à : message, ce qui se reflète dans les tests.
Changements d'API
Gestion de PrivateKey :
- Avant :
PrivateKey.from(key)ouPrivateKey.fromString(key) - Après :
PrivateKey.fromWif(key)
- Avant :
Création de signature :
- Avant :
key.sign(message.buffer)puishexify() - Après :
Signature.signBufferSha256(message, privateKey)puis.toHex()
- Avant :
Plus de classe ValidationError :
- Avant : classe
ValidationErrorpersonnalisée - Après :
Errorstandard avec messages formatés
- Avant : classe
Exécution des tests
# Run all rpc-auth tests
pnpm test -- rpc-auth.test.ts
# Run with coverage
pnpm test:coverage -- rpc-auth.test.ts
# Run specific test
pnpm test -- rpc-auth.test.ts -t "should sign and validate"Préparation du test d'intégration
Pour exécuter le test d'intégration ignoré, définissez les variables d'environnement :
export STEEM_USERNAME="your-testnet-account"
export STEEM_PASSWORD="your-password"
pnpm test -- rpc-auth.test.tsRemarques
- Tous les tests des fonctionnalités principales ont été migrés avec succès
- La suite de tests conserve la même couverture que l'originale
- Les tests d'intégration sont ignorés par défaut mais peuvent être activés
- Les tests sont compatibles avec vitest et TypeScript moderne
- Aucune dépendance externe n'est requise pour la plupart des tests
Migré depuis la documentation du dépôt steem-js ; les utilitaires de vérification qu'il met en œuvre sont démontrés dans Appels signés et vérification de signature.