solana.js: added loadHistory test
This commit is contained in:
parent
62a4878682
commit
5c6be89d3e
|
@ -56,7 +56,7 @@ export class AggregatorHistoryBuffer extends Account<
|
|||
}
|
||||
|
||||
/**
|
||||
* Decode an aggregators history buffer and return an array of historical samples
|
||||
* Decode an aggregators history buffer and return an array of historical samples in ascending order by timestamp.
|
||||
* @params historyBuffer the historyBuffer AccountInfo stored on-chain
|
||||
* @return the array of {@linkcode types.AggregatorHistoryRow} samples
|
||||
*/
|
||||
|
@ -74,13 +74,15 @@ export class AggregatorHistoryBuffer extends Account<
|
|||
const front: Array<types.AggregatorHistoryRow> = [];
|
||||
const tail: Array<types.AggregatorHistoryRow> = [];
|
||||
|
||||
for (let i = 12; i < historyBuffer.length; i += ROW_SIZE) {
|
||||
if (i + ROW_SIZE > historyBuffer.length) {
|
||||
const buffer = historyBuffer.slice(12);
|
||||
|
||||
for (let i = 0; i < buffer.length; i += ROW_SIZE) {
|
||||
if (i + ROW_SIZE > buffer.length) {
|
||||
break;
|
||||
}
|
||||
|
||||
const row = types.AggregatorHistoryRow.fromDecoded(
|
||||
types.AggregatorHistoryRow.layout().decode(historyBuffer, i)
|
||||
types.AggregatorHistoryRow.layout().decode(buffer, i)
|
||||
);
|
||||
|
||||
if (row.timestamp.eq(new anchor.BN(0))) {
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
import 'mocha';
|
||||
import assert from 'assert';
|
||||
|
||||
import { AggregatorAccount, SwitchboardProgram } from '../src';
|
||||
import { clusterApiUrl, Connection } from '@solana/web3.js';
|
||||
|
||||
describe('History Tests', () => {
|
||||
let program: SwitchboardProgram;
|
||||
|
||||
before(async () => {
|
||||
program = await SwitchboardProgram.load(
|
||||
'devnet',
|
||||
new Connection(process.env.SOLANA_DEVNET_RPC ?? clusterApiUrl('devnet'))
|
||||
);
|
||||
});
|
||||
|
||||
/** History buffer should be returned with the oldest elements (lowest timestamps) first */
|
||||
it('Verifies a history buffer is decoded in order', async () => {
|
||||
const [aggregatorAccount, aggregator] = await AggregatorAccount.load(
|
||||
program,
|
||||
'GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR'
|
||||
);
|
||||
|
||||
const history = await aggregatorAccount.loadHistory();
|
||||
|
||||
let lastTimestamp: number | undefined = undefined;
|
||||
for (const [n, row] of history.entries()) {
|
||||
if (lastTimestamp === undefined) {
|
||||
lastTimestamp = row.timestamp.toNumber();
|
||||
continue;
|
||||
}
|
||||
|
||||
const currentTimestamp = row.timestamp.toNumber();
|
||||
|
||||
assert(
|
||||
lastTimestamp < currentTimestamp,
|
||||
`Aggregator History is out of order at element ${n}, prev ${lastTimestamp}, curr ${currentTimestamp}`
|
||||
);
|
||||
|
||||
lastTimestamp = currentTimestamp;
|
||||
}
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue