Add provider auction CLI test
This commit is contained in:
parent
d27f9ae43d
commit
4b273f4d16
@ -2,9 +2,7 @@ import { Arguments } from 'yargs';
|
|||||||
import assert from 'assert';
|
import assert from 'assert';
|
||||||
import Long from 'long';
|
import Long from 'long';
|
||||||
|
|
||||||
import { AUCTION_KIND_PROVIDER, AUCTION_KIND_VICKREY, Registry } from '@cerc-io/registry-sdk';
|
import { AUCTION_KIND_PROVIDER, AUCTION_KIND_VICKREY, Duration, Registry } from '@cerc-io/registry-sdk';
|
||||||
import { MsgCreateAuctionResponse } from '@cerc-io/registry-sdk/dist/proto/cerc/auction/v1/tx';
|
|
||||||
import { Duration } from '@cerc-io/registry-sdk/dist/proto/google/protobuf/duration';
|
|
||||||
import { coin } from '@cosmjs/amino';
|
import { coin } from '@cosmjs/amino';
|
||||||
|
|
||||||
import { getConfig, getConnectionInfo, getGasAndFees, getGasPrice, txOutput } from '../../../util';
|
import { getConfig, getConnectionInfo, getGasAndFees, getGasPrice, txOutput } from '../../../util';
|
||||||
@ -98,13 +96,13 @@ export const handler = async (argv: Arguments) => {
|
|||||||
|
|
||||||
const fee = getGasAndFees(argv, registryConfig);
|
const fee = getGasAndFees(argv, registryConfig);
|
||||||
|
|
||||||
let result: MsgCreateAuctionResponse;
|
let result: any;
|
||||||
if (kind === AUCTION_KIND_VICKREY) {
|
if (kind === AUCTION_KIND_VICKREY) {
|
||||||
result = await registry.createAuction({ commitsDuration, revealsDuration, commitFee, revealFee, minimumBid }, privateKey, fee);
|
result = await registry.createAuction({ commitsDuration, revealsDuration, commitFee, revealFee, minimumBid }, privateKey, fee);
|
||||||
} else {
|
} else {
|
||||||
result = await registry.createProviderAuction({ commitsDuration, revealsDuration, commitFee, revealFee, maxPrice, numProviders }, privateKey, fee);
|
result = await registry.createProviderAuction({ commitsDuration, revealsDuration, commitFee, revealFee, maxPrice, numProviders }, privateKey, fee);
|
||||||
}
|
}
|
||||||
const jsonString = `{"auctionId":"${result.auction?.id}"}`;
|
|
||||||
|
|
||||||
|
const jsonString = `{"auctionId":"${result.auction?.id}"}`;
|
||||||
txOutput(result, jsonString, argv.output, argv.verbose);
|
txOutput(result, jsonString, argv.output, argv.verbose);
|
||||||
};
|
};
|
||||||
|
130
test/cli.test.ts
130
test/cli.test.ts
@ -2,7 +2,7 @@ import fs from 'fs';
|
|||||||
import assert from 'assert';
|
import assert from 'assert';
|
||||||
import { spawnSync } from 'child_process';
|
import { spawnSync } from 'child_process';
|
||||||
|
|
||||||
import { AUCTION_KIND_VICKREY } from '@cerc-io/registry-sdk';
|
import { AUCTION_KIND_PROVIDER, AUCTION_KIND_VICKREY } from '@cerc-io/registry-sdk';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
CHAIN_ID,
|
CHAIN_ID,
|
||||||
@ -228,6 +228,7 @@ describe('Test laconic CLI commands', () => {
|
|||||||
expect(outputObj.accounts.length).toEqual(2);
|
expect(outputObj.accounts.length).toEqual(2);
|
||||||
expect(outputObj.accounts).toMatchObject(expectedAccounts);
|
expect(outputObj.accounts).toMatchObject(expectedAccounts);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('laconic registry tokens gettx --hash <hash>', async () => {
|
test('laconic registry tokens gettx --hash <hash>', async () => {
|
||||||
const sendAmount = 1000000000;
|
const sendAmount = 1000000000;
|
||||||
|
|
||||||
@ -680,6 +681,133 @@ describe('Test laconic CLI commands', () => {
|
|||||||
bidAmount: `${bidAmount}${TOKEN_TYPE}`
|
bidAmount: `${bidAmount}${TOKEN_TYPE}`
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Get auction with revealed bid
|
||||||
|
auctionResult = spawnSync('laconic', ['registry', 'auction', 'get', testAuctionId]);
|
||||||
|
auctionOutputObj = checkResultAndRetrieveOutput(auctionResult);
|
||||||
|
|
||||||
|
const expectedAuctionObjPartialOnBidReveal = {
|
||||||
|
status: AUCTION_STATUS.REVEAL,
|
||||||
|
winnerAddresses: [],
|
||||||
|
bids: [{
|
||||||
|
bidderAddress: testAccount,
|
||||||
|
status: AUCTION_STATUS.REVEAL,
|
||||||
|
bidAmount: { quantity: bidAmount }
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
expect(auctionOutputObj[0]).toMatchObject(expectedAuctionObjPartialOnBidReveal);
|
||||||
|
}, (AUCTION_COMMIT_DURATION + 5) * 1000);
|
||||||
|
|
||||||
|
test('laconic registry auction get <auction_id>', async () => {
|
||||||
|
// Wait for auction reveals duration (60s)
|
||||||
|
await delay(AUCTION_REVEAL_DURATION * 1000);
|
||||||
|
|
||||||
|
const auctionResult = spawnSync('laconic', ['registry', 'auction', 'get', testAuctionId]);
|
||||||
|
const auctionOutputObj = checkResultAndRetrieveOutput(auctionResult);
|
||||||
|
|
||||||
|
const expectedAuctionObjPartial = {
|
||||||
|
status: AUCTION_STATUS.COMPLETED,
|
||||||
|
ownerAddress: testAccount,
|
||||||
|
winnerAddresses: [testAccount],
|
||||||
|
winnerBids: [{ quantity: bidAmount }],
|
||||||
|
winnerPrice: { quantity: bidAmount }
|
||||||
|
};
|
||||||
|
expect(auctionOutputObj[0]).toMatchObject(expectedAuctionObjPartial);
|
||||||
|
}, (AUCTION_COMMIT_DURATION + 5) * 1000);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Provider Auction operations', () => {
|
||||||
|
const commitFee = 1000;
|
||||||
|
const revealFee = 1000;
|
||||||
|
const maxPrice = 1000000;
|
||||||
|
const numProviders = 5;
|
||||||
|
const bidAmount = 25000;
|
||||||
|
let bidRevealFilePath: string;
|
||||||
|
|
||||||
|
test('laconic registry auction create --kind <kind> --commits-duration <commits_duration> --reveals-duration <reveals_duration> --commit-fee <commit_fee> --reveal-fee <reveal_fee> --max-price <max_price> --num-providers <num_providers>', async () => {
|
||||||
|
const createAuctionResult = spawnSync('laconic', [
|
||||||
|
'registry',
|
||||||
|
'auction',
|
||||||
|
'create',
|
||||||
|
'--kind', AUCTION_KIND_PROVIDER,
|
||||||
|
'--commits-duration', AUCTION_COMMIT_DURATION.toString(),
|
||||||
|
'--reveals-duration', AUCTION_REVEAL_DURATION.toString(),
|
||||||
|
'--denom', TOKEN_TYPE,
|
||||||
|
'--commit-fee', commitFee.toString(),
|
||||||
|
'--reveal-fee', revealFee.toString(),
|
||||||
|
'--max-price', maxPrice.toString(),
|
||||||
|
'--num-providers', numProviders.toString()
|
||||||
|
]);
|
||||||
|
|
||||||
|
const outputObj = checkResultAndRetrieveOutput(createAuctionResult);
|
||||||
|
|
||||||
|
expect(outputObj).toHaveProperty('auctionId');
|
||||||
|
|
||||||
|
testAuctionId = outputObj.auctionId;
|
||||||
|
const getAuctionResult = spawnSync('laconic', ['registry', 'auction', 'get', '--id', testAuctionId]);
|
||||||
|
const auctionOutputObj = checkResultAndRetrieveOutput(getAuctionResult);
|
||||||
|
|
||||||
|
const expectedAuctionObjPartial = {
|
||||||
|
kind: AUCTION_KIND_PROVIDER,
|
||||||
|
status: AUCTION_STATUS.COMMIT,
|
||||||
|
ownerAddress: testAccount,
|
||||||
|
commitFee: { quantity: commitFee },
|
||||||
|
revealFee: { quantity: revealFee },
|
||||||
|
minimumBid: { quantity: 0 },
|
||||||
|
winnerAddresses: [],
|
||||||
|
winnerBids: [],
|
||||||
|
maxPrice: { quantity: maxPrice },
|
||||||
|
numProviders: numProviders,
|
||||||
|
bids: []
|
||||||
|
};
|
||||||
|
expect(auctionOutputObj[0]).toMatchObject(expectedAuctionObjPartial);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('laconic registry auction bid commit <auction_id> <quantity> <type>', async () => {
|
||||||
|
const result = spawnSync('laconic', ['registry', 'auction', 'bid', 'commit', testAuctionId, bidAmount.toString(), TOKEN_TYPE]);
|
||||||
|
const outputObj = checkResultAndRetrieveOutput(result);
|
||||||
|
|
||||||
|
// Expected output
|
||||||
|
expect(outputObj.reveal_file).toBeDefined();
|
||||||
|
|
||||||
|
bidRevealFilePath = outputObj.reveal_file;
|
||||||
|
});
|
||||||
|
|
||||||
|
test('laconic registry auction bid reveal <auction_id> <file_path>', async () => {
|
||||||
|
// Wait for auction commits duration (60s)
|
||||||
|
await delay(AUCTION_COMMIT_DURATION * 1000);
|
||||||
|
|
||||||
|
let auctionResult = spawnSync('laconic', ['registry', 'auction', 'get', testAuctionId]);
|
||||||
|
let auctionOutputObj = checkResultAndRetrieveOutput(auctionResult);
|
||||||
|
|
||||||
|
const expectedAuctionObjPartial = {
|
||||||
|
status: AUCTION_STATUS.REVEAL,
|
||||||
|
ownerAddress: testAccount,
|
||||||
|
winnerAddresses: [],
|
||||||
|
winnerBids: [],
|
||||||
|
bids: [{
|
||||||
|
bidderAddress: testAccount,
|
||||||
|
status: AUCTION_STATUS.COMMIT,
|
||||||
|
bidAmount: { quantity: 0 }
|
||||||
|
}]
|
||||||
|
};
|
||||||
|
expect(auctionOutputObj[0]).toMatchObject(expectedAuctionObjPartial);
|
||||||
|
|
||||||
|
// Reveal bid
|
||||||
|
const result = spawnSync('laconic', ['registry', 'auction', 'bid', 'reveal', testAuctionId, bidRevealFilePath]);
|
||||||
|
const outputObj = checkResultAndRetrieveOutput(result);
|
||||||
|
|
||||||
|
// Expected output
|
||||||
|
expect(outputObj).toEqual({ success: true });
|
||||||
|
|
||||||
|
const revealObject = JSON.parse(fs.readFileSync(bidRevealFilePath, 'utf8'));
|
||||||
|
expect(revealObject).toMatchObject({
|
||||||
|
chainId: CHAIN_ID,
|
||||||
|
auctionId: testAuctionId,
|
||||||
|
bidderAddress: testAccount,
|
||||||
|
bidAmount: `${bidAmount}${TOKEN_TYPE}`
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get auction with revealed bid
|
||||||
auctionResult = spawnSync('laconic', ['registry', 'auction', 'get', testAuctionId]);
|
auctionResult = spawnSync('laconic', ['registry', 'auction', 'get', testAuctionId]);
|
||||||
auctionOutputObj = checkResultAndRetrieveOutput(auctionResult);
|
auctionOutputObj = checkResultAndRetrieveOutput(auctionResult);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user