Skip to content

Commit

Permalink
[WIP] rework pool reg testing
Browse files Browse the repository at this point in the history
  • Loading branch information
mkv-vcm committed Nov 30, 2021
1 parent ed62fb9 commit c832cbe
Show file tree
Hide file tree
Showing 6 changed files with 394 additions and 479 deletions.
281 changes: 48 additions & 233 deletions test/integration/__fixtures__/signTxPoolRegistration.ts

Large diffs are not rendered by default.

287 changes: 287 additions & 0 deletions test/integration/__fixtures__/signTxPoolRegistrationRejects.ts
@@ -0,0 +1,287 @@
import type { MultiHostRelayParams, PoolMetadataParams, SingleHostHostnameRelayParams, Transaction } from "../../../src/Ada"
import { str_to_path } from "../../../src/utils/address"
import { DeviceStatusError, DeviceStatusCodes, DeviceStatusMessages, CertificateType, InvalidDataReason, Networks, RelayType } from "../../../src/Ada"
import { TransactionSigningMode } from '../../../src/types/public'
import type { TestcaseRejectShelley } from "./signTxRejects"
import { inputs, outputs, certificates, defaultPoolRegistration, poolOwnerVariationSet, relayVariationSet } from './signTxPoolRegistration'
import { DontRunOnLedger } from '../../test_utils'

const txBase: Transaction = {
network: Networks.Mainnet,
inputs: [inputs.utxoNoPath],
outputs: [outputs.external],
fee: 42,
ttl: 10,
}

export const poolRegistrationOwnerRejectTestcases: TestcaseRejectShelley[] = [
{
testname: "Different index",
tx: {
...txBase,
certificates: [certificates.poolRegistrationMixedOwnersAllRelays],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
additionalWitnessPaths: [str_to_path("1852'/1815'/0'/2/0"), str_to_path("1852'/1815'/0'/2/1")],
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.LEDGER_POLICY,
},
{
testname: "Different prefix",
tx: {
...txBase,
certificates: [certificates.poolRegistrationMixedOwnersAllRelays],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
additionalWitnessPaths: [str_to_path("1852'/1815'/0'/2/0"), str_to_path("1854'/1815'/0'/2/0")],
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.LEDGER_POLICY,
},
{
testname: "No path given",
tx: {
...txBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: {
...defaultPoolRegistration,
poolOwners: poolOwnerVariationSet.singleHashOwner,
relays: relayVariationSet.allRelays,
},
},
],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
additionalWitnessPaths: [str_to_path("1852'/1815'/0'/2/0"), str_to_path("1854'/1815'/0'/2/0")],
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__SINGLE_DEVICE_OWNER_REQUIRED,
},
{
testname: "Invalid numerator-denominator relationship",
tx: {
...txBase,
certificates: [certificates.poolRegistrationWrongMargin],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
additionalWitnessPaths: [str_to_path("1852'/1815'/0'/2/0"), str_to_path("1854'/1815'/0'/2/0")],
errCls: DeviceStatusError,
errMsg: DontRunOnLedger, // it would be finnicky bypassing this check in the js code
rejectReason: InvalidDataReason.POOL_REGISTRATION_INVALID_MARGIN,
},
]

export const invalidCertificates: TestcaseRejectShelley[] = [
{
testname: "pool registration with multiple path owners",
tx: {
...txBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: {
...defaultPoolRegistration,
poolOwners: poolOwnerVariationSet.twoPathOwners,
},
},
],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
additionalWitnessPaths: [],
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_INVALID_DATA],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__SINGLE_DEVICE_OWNER_REQUIRED,
},
{
testname: "pool registration with no owners",
tx: {
...txBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: {
...defaultPoolRegistration,
poolOwners: poolOwnerVariationSet.noOwners,
},
},
],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
additionalWitnessPaths: [],
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__SINGLE_DEVICE_OWNER_REQUIRED,
},
]

export const invalidPoolMetadataTestcases: TestcaseRejectShelley[] = [
// Invalid url
{
testname: "pool metadata url too long",
tx: {
...txBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: {
...defaultPoolRegistration,
metadata: {
metadataUrl: "https://www.vacuumlabs.com/aaaaaaaaaaaaaaaaaaaaaaaasampleUrl.json",
metadataHashHex: "cdb714fd722c24aeb10c93dbb0ff03bd4783441cd5ba2a8b6f373390520535bb",
},
},
},
],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DontRunOnLedger,
rejectReason: InvalidDataReason.POOL_REGISTRATION_METADATA_INVALID_URL,
},
{
testname: "pool metadata invalid url",
tx: {
...txBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: {
...defaultPoolRegistration,
metadata: {
metadataUrl: "\n",
metadataHashHex: "6bf124f217d0e5a0a8adb1dbd8540e1334280d49ab861127868339f43b3948",
},
},
}
],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DontRunOnLedger,
rejectReason: InvalidDataReason.POOL_REGISTRATION_METADATA_INVALID_URL,
},
{
testname: "pool metadata missing url",
tx: {
...txBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: {
...defaultPoolRegistration,
metadata: {
metadataHashHex: "cdb714fd722c24aeb10c93dbb0ff03bd4783441cd5ba2a8b6f373390520535bb",
} as PoolMetadataParams,
},
}
],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DontRunOnLedger,
rejectReason: InvalidDataReason.POOL_REGISTRATION_METADATA_INVALID_URL,
},
// Invalid hash
{
testname: "pool metadata invalid hash length",
tx: {
...txBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: {
...defaultPoolRegistration,
metadata: {
metadataUrl: "https://www.vacuumlabs.com/sampleUrl.json",
metadataHashHex: "6bf124f217d0e5a0a8adb1dbd8540e1334280d49ab861127868339f43b3948",
},
},
}
],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DontRunOnLedger,
rejectReason: InvalidDataReason.POOL_REGISTRATION_METADATA_INVALID_HASH,
},
{
testname: "pool metadata missing hash",
tx: {
...txBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: {
...defaultPoolRegistration,
metadata: {
metadataUrl: "https://www.vacuumlabs.com/sampleUrl.json",
} as PoolMetadataParams,
},
}
],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DontRunOnLedger,
rejectReason: InvalidDataReason.POOL_REGISTRATION_METADATA_INVALID_HASH,
},
]

export const invalidRelayTestcases: TestcaseRejectShelley[] = [
{
testname: "SingleHostHostname missing dns",
tx: {
...txBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: {
...defaultPoolRegistration,
relays: [
{
type: RelayType.SINGLE_HOST_HOSTNAME,
params: {
portNumber: 3000,
dnsName: null,
} as any as SingleHostHostnameRelayParams,
},
],
},
}
],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DontRunOnLedger,
rejectReason: InvalidDataReason.RELAY_INVALID_DNS,
},
{
testname: "MultiHost missing dns",
tx: {
...txBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: {
...defaultPoolRegistration,
relays: [
{
type: RelayType.MULTI_HOST,
params: {
dnsName: null,
} as any as MultiHostRelayParams,
},
],
},
}
],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DontRunOnLedger,
rejectReason: InvalidDataReason.RELAY_INVALID_DNS,
},
]
2 changes: 1 addition & 1 deletion test/integration/__fixtures__/signTxRejects.ts
Expand Up @@ -118,7 +118,7 @@ export const transactionInitRejectTestcases: TestcaseRejectShelley[] = [
},
signingMode: TransactionSigningMode.ORDINARY_TRANSACTION,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],//DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.LEDGER_POLICY,
},
{
Expand Down
43 changes: 1 addition & 42 deletions test/integration/signTx.test.ts
@@ -1,8 +1,4 @@
import { expect } from "chai"

import type Ada from "../../src/Ada"
import type { NetworkIdlessTestResult } from "../test_utils"
import { describeRejects, getAda, hashTxBody } from "../test_utils"
import { describeRejects, describePositiveTest, } from "../test_utils"
import {
testsAllegra,
testsByron,
Expand All @@ -26,43 +22,6 @@ import {
witnessRejectTestcases,
} from "./__fixtures__/signTxRejects"

function describePositiveTest(name: string, tests: any[]) {
describe(name, async () => {
let ada: Ada = {} as Ada

beforeEach(async () => {
ada = await getAda()
})

afterEach(async () => {
await (ada as any).t.close()
})

for (const { testname, tx, signingMode, additionalWitnessPaths, txBody, result: expected } of tests) {
const additionalWitnessPathsIfPresent = additionalWitnessPaths || []
it(testname, async () => {
if (!txBody) {
console.log("No tx body given!")
} else if (hashTxBody(txBody) !== expected.txHashHex) {
console.log("Tx body hash mismatch")
console.log(hashTxBody(txBody))
}
const response = await ada.signTransaction({
tx,
signingMode,
additionalWitnessPaths: additionalWitnessPathsIfPresent,
})
const networklessResponse: NetworkIdlessTestResult = {
txHashHex: response.txHashHex,
witnesses: response.witnesses,
auxiliaryDataSupplement: response.auxiliaryDataSupplement,
}
expect(networklessResponse).to.deep.equal(expected)
})
}
})
}

describePositiveTest("signTxOrdinaryByron", testsByron)
describePositiveTest("signTxOrdinaryShelleyNoCertificates", testsShelleyNoCertificates)
describePositiveTest("signTxOrdinaryShelleyWithCertificates", testsShelleyWithCertificates)
Expand Down

0 comments on commit c832cbe

Please sign in to comment.