Skip to content

Commit

Permalink
chore: reduce calls to request-node from request-client.js (#617)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexandre-abrioux committed Oct 13, 2021
1 parent 1805446 commit bc58242
Show file tree
Hide file tree
Showing 7 changed files with 316 additions and 188 deletions.
77 changes: 50 additions & 27 deletions packages/integration-test/test/node-client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { EthereumPrivateKeyDecryptionProvider } from '@requestnetwork/epk-decryp
import { EthereumPrivateKeySignatureProvider } from '@requestnetwork/epk-signature';
import MultiFormat from '@requestnetwork/multi-format';
import { Request, RequestNetwork, Types } from '@requestnetwork/request-client.js';
import { IdentityTypes, PaymentTypes, RequestLogicTypes } from '@requestnetwork/types';
import { ClientTypes, IdentityTypes, PaymentTypes, RequestLogicTypes } from '@requestnetwork/types';
import Utils from '@requestnetwork/utils';
import {
payRequest,
Expand Down Expand Up @@ -68,6 +68,11 @@ const wrongDecryptionProvider = new EthereumPrivateKeyDecryptionProvider({
method: Types.Encryption.METHOD.ECIES,
});

const httpConfig: Partial<ClientTypes.IHttpDataAccessConfig> = {
getConfirmationDeferDelay: 1000,
getConfirmationRetryDelay: 500,
};

const signatureProvider = new EthereumPrivateKeySignatureProvider({
method: Types.Signature.METHOD.ECDSA,
privateKey: '0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3',
Expand All @@ -79,7 +84,7 @@ signatureProvider.addSignatureParameters({

describe('Request client using a request node', () => {
it('can create a request, change the amount and get data', async () => {
const requestNetwork = new RequestNetwork({ signatureProvider });
const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider });

// Create a request
const request = await requestNetwork.createRequest({
Expand Down Expand Up @@ -115,7 +120,7 @@ describe('Request client using a request node', () => {
});

it('can create a request with declarative payment network and content data', async () => {
const requestNetwork = new RequestNetwork({ signatureProvider });
const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider });

const paymentNetwork: PaymentTypes.IPaymentNetworkCreateParameters = {
id: PaymentTypes.PAYMENT_NETWORK_ID.DECLARATIVE,
Expand Down Expand Up @@ -179,7 +184,7 @@ describe('Request client using a request node', () => {
});

it('can create requests and get them fromIdentity and with time boundaries', async () => {
const requestNetwork = new RequestNetwork({ signatureProvider });
const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider });

// create request 1
const requestCreationHash1: Types.IRequestInfo = {
Expand All @@ -189,6 +194,7 @@ describe('Request client using a request node', () => {
payer: payerIdentity,
timestamp: Utils.getCurrentTimestampInSecond(),
};

const topicsRequest1and2: string[] = [
MultiFormat.serialize(Utils.crypto.normalizeKeccak256Hash(requestCreationHash1)),
];
Expand All @@ -198,6 +204,12 @@ describe('Request client using a request node', () => {
signer: payeeIdentity,
topics: topicsRequest1and2,
});
await request1.waitForConfirmation();
const timestampBeforeReduce = Utils.getCurrentTimestampInSecond();

// make sure that request 2 timestamp is greater than request 1 timestamp
const waitNextSecond = (timestampBeforeReduce + 1) * 1000 - Date.now();
await new Promise((r) => setTimeout(r, waitNextSecond));

// create request 2
const requestCreationHash2: Types.IRequestInfo = {
Expand All @@ -213,18 +225,15 @@ describe('Request client using a request node', () => {
signer: payeeIdentity,
topics: topicsRequest1and2,
});

// wait 1,5 sec and store the timestamp
/* eslint-disable no-magic-numbers */
// eslint-disable-next-line
await new Promise((r) => setTimeout(r, 1500));
const timestampBeforeReduce = Utils.getCurrentTimestampInSecond();
await request2.waitForConfirmation();

// reduce request 1
await request1.reduceExpectedAmountRequest('10000000', payeeIdentity);
const requestDataReduce = await request1.reduceExpectedAmountRequest('10000000', payeeIdentity);
await new Promise((r) => requestDataReduce.on('confirmed', r));

// cancel request 1
await request1.cancel(payeeIdentity);
const requestDataCancel = await request1.cancel(payeeIdentity);
await new Promise((r) => requestDataCancel.on('confirmed', r));

// get requests without boundaries
let requests = await requestNetwork.fromTopic(topicsRequest1and2[0]);
Expand All @@ -241,7 +250,7 @@ describe('Request client using a request node', () => {

// get requests with boundaries
requests = await requestNetwork.fromTopic(topicsRequest1and2[0], {
from: timestampBeforeReduce,
to: timestampBeforeReduce,
});
expect(requests.length).toBe(1);
expect(requests[0].requestId).toBe(request1.requestId);
Expand All @@ -252,7 +261,7 @@ describe('Request client using a request node', () => {
});

it('can create requests and get them fromIdentity with smart contract identity', async () => {
const requestNetwork = new RequestNetwork({ signatureProvider });
const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider });

const payerSmartContract = {
network: 'private',
Expand Down Expand Up @@ -305,7 +314,11 @@ describe('Request client using a request node', () => {
});

it('can create an encrypted request and get it back unencrypted', async () => {
const requestNetwork = new RequestNetwork({ signatureProvider, decryptionProvider });
const requestNetwork = new RequestNetwork({
httpConfig,
signatureProvider,
decryptionProvider,
});
const timestamp = Date.now();

// Create an encrypted request
Expand Down Expand Up @@ -348,7 +361,11 @@ describe('Request client using a request node', () => {
});

it('can create an encrypted request, modify it and get it back unencrypted', async () => {
const requestNetwork = new RequestNetwork({ signatureProvider, decryptionProvider });
const requestNetwork = new RequestNetwork({
httpConfig,
signatureProvider,
decryptionProvider,
});
const timestamp = Date.now();

// Create an encrypted request
Expand Down Expand Up @@ -421,7 +438,11 @@ describe('Request client using a request node', () => {
});

it('create an encrypted and unencrypted request with the same content', async () => {
const requestNetwork = new RequestNetwork({ signatureProvider, decryptionProvider });
const requestNetwork = new RequestNetwork({
httpConfig,
signatureProvider,
decryptionProvider,
});

const timestamp = Date.now();

Expand Down Expand Up @@ -465,11 +486,13 @@ describe('Request client using a request node', () => {
const timestamp = Date.now();
const myRandomTopic = `topic ${Utils.getCurrentTimestampInSecond()}`;
const requestNetwork = new RequestNetwork({
httpConfig,
decryptionProvider,
signatureProvider,
});

const badRequestNetwork = new RequestNetwork({
httpConfig,
decryptionProvider: wrongDecryptionProvider,
signatureProvider,
});
Expand Down Expand Up @@ -516,7 +539,7 @@ describe('ERC20 localhost request creation and detection test', () => {
};

it('can create an ERC20 request on localhost and detect the payment using address based detection', async () => {
const requestNetwork = new RequestNetwork({ signatureProvider });
const requestNetwork = new RequestNetwork({ httpConfig, signatureProvider });

// Create a request
const request = await requestNetwork.createRequest({
Expand Down Expand Up @@ -638,9 +661,7 @@ describe('ETH localhost request creation and detection test', () => {
};

it('can create ETH requests and pay with ETH Fee proxy', async () => {
const currencies = [
...CurrencyManager.getDefaultList()
];
const currencies = [...CurrencyManager.getDefaultList()];
const requestNetwork = new RequestNetwork({
signatureProvider,
useMockStorage: true,
Expand Down Expand Up @@ -686,12 +707,14 @@ describe('ETH localhost request creation and detection test', () => {
it('can create & pay a request with any to eth proxy', async () => {
const currencies = [
...CurrencyManager.getDefaultList(),
...[{
network: 'private',
symbol: 'ETH',
decimals: 18,
type: RequestLogicTypes.CURRENCY.ETH as any,
}],
...[
{
network: 'private',
symbol: 'ETH',
decimals: 18,
type: RequestLogicTypes.CURRENCY.ETH as any,
},
],
];

const requestNetwork = new RequestNetwork({
Expand Down
12 changes: 12 additions & 0 deletions packages/request-client.js/src/http-config-defaults.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { ClientTypes } from '@requestnetwork/types';

const config: ClientTypes.IHttpDataAccessConfig = {
requestClientVersionHeader: 'X-Request-Network-Client-Version',
httpRequestMaxRetry: 3,
httpRequestRetryDelay: 100,
getConfirmationMaxRetry: 500,
getConfirmationRetryDelay: 3000,
getConfirmationDeferDelay: 3000,
};

export default config;
Loading

0 comments on commit bc58242

Please sign in to comment.