Skip to content

Commit 9611544

Browse files
author
andraz maier
committed
feat: add tests for toOne
1 parent 86eef34 commit 9611544

File tree

9 files changed

+255
-4
lines changed

9 files changed

+255
-4
lines changed

.gitlab-ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ e2e_test:
2727
- YES=1 /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
2828
- apt -y install postgresql-client-17
2929
- curl -o test/e2e_tests/db/db_btc_testnet https://githubstatic.flare.center/db_btc_testnet
30+
- curl -o test/e2e_tests/db/db_btc2_testnet https://githubstatic.flare.center/db_btc2_testnet
3031
- curl -o test/e2e_tests/db/db_doge_testnet https://githubstatic.flare.center/db_doge_testnet
3132
- curl -o test/e2e_tests/db/db_xrp_testnet https://githubstatic.flare.center/db_xrp_testnet
3233
script:

src/verification/response-status.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export enum AttestationResponseStatus {
3636
NOT_STANDARD_SOURCE_ADDRESS_ROOT = 'INVALID: INVALID SOURCE ADDRESS ROOT',
3737
INVALID_SEARCH_RANGE = 'INVALID: INVALID SEARCH RANGE',
3838
REFERENCED_TRANSACTION_EXISTS = 'INVALID: REFERENCED TRANSACTION EXISTS',
39-
MORE_THAN_ONE_OUTPUT = 'INVALID: MORE_THAN_ONE_OUTPUT',
39+
MORE_THAN_ONE_OUTPUT = 'INVALID: MORE THAN ONE OUTPUT',
4040
INVALID_ADDRESS_CHARACTER = 'INVALID: INVALID ADDRESS CHARACTER',
4141
INVALID_ADDRESS_VERSION = 'INVALID: INVALID ADDRESS VERSION',
4242
INVALID_ADDRESS_LENGTH = 'INVALID: INVALID ADDRESS LENGTH',

test/e2e_tests/btc/helper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ before(async () => {
129129
app.useGlobalPipes(new ValidationPipe({ transform: true }));
130130
app.enableCors();
131131

132-
await app.listen(3120, '0.0.0.0');
132+
await app.listen(3121, '0.0.0.0');
133133
});
134134

135135
after(async () => {

test/e2e_tests/btc2/helper.ts

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
import { ChainType } from '@flarenetwork/mcc';
2+
import {
3+
INestApplication,
4+
MiddlewareConsumer,
5+
Module,
6+
NestModule,
7+
ValidationPipe,
8+
} from '@nestjs/common';
9+
import { ConfigModule, ConfigService } from '@nestjs/config';
10+
import { NestFactory } from '@nestjs/core';
11+
import { TypeOrmModule } from '@nestjs/typeorm';
12+
import helmet from 'helmet';
13+
import { ApiKeyStrategy } from '../../../src/auth/apikey.strategy';
14+
import { AuthModule } from '../../../src/auth/auth.module';
15+
import { AuthService } from '../../../src/auth/auth.service';
16+
import {
17+
getDatabaseEntities,
18+
IConfig,
19+
VerifierServerConfig,
20+
} from '../../../src/config/configuration';
21+
import { BTCAddressValidityVerifierController } from '../../../src/controllers/address-validity-verifier.controller';
22+
import { BTCBalanceDecreasingTransactionVerifierController } from '../../../src/controllers/balance-decreasing-transaction-verifier.controller';
23+
import { BTCConfirmedBlockHeightExistsVerifierController } from '../../../src/controllers/confirmed-block-height-exists-verifier.controller';
24+
import { BTCHealthController } from '../../../src/controllers/health.controller';
25+
import { BTCIndexerController } from '../../../src/controllers/indexer.controller';
26+
import { BTCPaymentVerifierController } from '../../../src/controllers/payment-verifier.controller';
27+
import { BTCReferencedPaymentNonexistenceVerifierController } from '../../../src/controllers/referenced-payment-nonexistence-verifier.controller';
28+
import { LoggerMiddleware } from '../../../src/middleware/LoggerMiddleware';
29+
import { BTCAddressValidityVerifierService } from '../../../src/services/address-validity-verifier.service';
30+
import { BTCBalanceDecreasingTransactionVerifierService } from '../../../src/services/balance-decreasing-transaction-verifier.service';
31+
import { BTCConfirmedBlockHeightExistsVerifierService } from '../../../src/services/confirmed-block-height-exists-verifier.service';
32+
import { BtcExternalIndexerEngineService } from '../../../src/services/indexer-services/utxo-indexer.service';
33+
import { BTCPaymentVerifierService } from '../../../src/services/payment-verifier.service';
34+
import { BTCReferencedPaymentNonexistenceVerifierService } from '../../../src/services/referenced-payment-nonexistence-verifier.service';
35+
36+
function getConfig() {
37+
const api_keys = process.env.API_KEYS?.split(',') || [''];
38+
const verifier_type = ChainType.BTC;
39+
const isTestnet = process.env.TESTNET == 'true';
40+
41+
let database = 'db';
42+
const isCoverage = process.env.RUNNING_ALL_TESTS == 'true';
43+
if (isCoverage) {
44+
database = 'dbbtc2';
45+
}
46+
47+
const db = {
48+
database: database,
49+
host: process.env.DB_HOST || '127.0.0.1',
50+
port: parseInt(process.env.DB_PORT) || 8080,
51+
username: process.env.DB_USERNAME || 'username',
52+
password: process.env.DB_PASSWORD || 'password',
53+
};
54+
55+
const entities = getDatabaseEntities(verifier_type);
56+
57+
const verifierConfig: VerifierServerConfig = {
58+
verifierType: verifier_type,
59+
numberOfConfirmations: parseInt(process.env.NUMBER_OF_CONFIRMATIONS || '6'),
60+
indexerServerPageLimit: parseInt(
61+
process.env.INDEXER_SERVER_PAGE_LIMIT || '100',
62+
),
63+
};
64+
65+
const config: IConfig = {
66+
port: parseInt(process.env.PORT || '3120'),
67+
api_keys,
68+
verifierConfig,
69+
db: db,
70+
typeOrmModuleOptions: {
71+
...db,
72+
type: 'postgres',
73+
entities: entities,
74+
synchronize: false,
75+
migrationsRun: false,
76+
logging: false,
77+
},
78+
isTestnet,
79+
};
80+
return config;
81+
}
82+
83+
@Module({
84+
imports: [
85+
ConfigModule.forRoot({
86+
load: [getConfig],
87+
isGlobal: true,
88+
}),
89+
TypeOrmModule.forRootAsync({
90+
imports: [ConfigModule],
91+
useFactory: (config: ConfigService<IConfig>) =>
92+
config.get('typeOrmModuleOptions'),
93+
inject: [ConfigService],
94+
}),
95+
AuthModule,
96+
],
97+
controllers: [
98+
BTCHealthController,
99+
BTCIndexerController,
100+
BTCAddressValidityVerifierController,
101+
BTCBalanceDecreasingTransactionVerifierController,
102+
BTCConfirmedBlockHeightExistsVerifierController,
103+
BTCPaymentVerifierController,
104+
BTCReferencedPaymentNonexistenceVerifierController,
105+
],
106+
providers: [
107+
ApiKeyStrategy,
108+
AuthService,
109+
BtcExternalIndexerEngineService,
110+
BTCAddressValidityVerifierService,
111+
BTCBalanceDecreasingTransactionVerifierService,
112+
BTCConfirmedBlockHeightExistsVerifierService,
113+
BTCPaymentVerifierService,
114+
BTCReferencedPaymentNonexistenceVerifierService,
115+
],
116+
})
117+
export class BtcVerifierServerModule implements NestModule {
118+
configure(consumer: MiddlewareConsumer) {
119+
consumer.apply(LoggerMiddleware).forRoutes('*');
120+
}
121+
}
122+
123+
export let app: INestApplication;
124+
125+
before(async () => {
126+
app = await NestFactory.create(BtcVerifierServerModule);
127+
128+
app.use(helmet());
129+
app.useGlobalPipes(new ValidationPipe({ transform: true }));
130+
app.enableCors();
131+
132+
await app.listen(3124, '0.0.0.0');
133+
});
134+
135+
after(async () => {
136+
await app.close();
137+
});
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { expect } from 'chai';
2+
import * as request from 'supertest';
3+
import { app } from '../helper';
4+
5+
describe('/Payment/mic', () => {
6+
it('should get abiEncodedRequest', async () => {
7+
const payload = {
8+
attestationType:
9+
'0x5061796d656e7400000000000000000000000000000000000000000000000000',
10+
sourceId:
11+
'0x7465737442544300000000000000000000000000000000000000000000000000',
12+
requestBody: {
13+
transactionId:
14+
'5be5e2ab3e3628e8d65d6cf364bc5cef1b844ac7c4acfe8bb3d12f9f1d97a592',
15+
inUtxo: '0',
16+
utxo: '0',
17+
},
18+
};
19+
const response = await request(app.getHttpServer())
20+
.post('/Payment/mic')
21+
.send(payload)
22+
.set('X-API-KEY', '12345')
23+
.expect(200)
24+
.expect('Content-Type', /json/);
25+
26+
expect(response.body.status).to.be.equal('INVALID: MORE THAN ONE OUTPUT');
27+
});
28+
});
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { standardAddressHash } from '@flarenetwork/mcc';
2+
import { expect } from 'chai';
3+
import * as request from 'supertest';
4+
import { app } from '../helper';
5+
6+
describe('/ReferencedPaymentNonexistence/prepareResponse', () => {
7+
it('should get abiEncodedRequest', async () => {
8+
const payload = {
9+
attestationType:
10+
'0x5265666572656e6365645061796d656e744e6f6e6578697374656e6365000000',
11+
sourceId:
12+
'0x7465737442544300000000000000000000000000000000000000000000000000',
13+
requestBody: {
14+
minimalBlockNumber: '75488',
15+
deadlineBlockNumber: '75489',
16+
deadlineTimestamp: '123',
17+
destinationAddressHash: standardAddressHash(
18+
'tb1q8j7jvsdqxm5e27d48p4382xrq0emrncwfr35k4',
19+
),
20+
amount: '0',
21+
standardPaymentReference:
22+
'0xbeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddead',
23+
checkSourceAddresses: false,
24+
sourceAddressesRoot:
25+
'0x0000000000000000000000000000000000000000000000000000000000000000',
26+
},
27+
};
28+
const response = await request(app.getHttpServer())
29+
.post('/ReferencedPaymentNonexistence/prepareResponse')
30+
.send(payload)
31+
.set('X-API-KEY', '12345')
32+
.expect(200)
33+
.expect('Content-Type', /json/);
34+
35+
expect(response.body.response.attestationType).to.be.equal(
36+
'0x5265666572656e6365645061796d656e744e6f6e6578697374656e6365000000',
37+
);
38+
expect(response.body.response.sourceId).to.be.equal(
39+
'0x7465737442544300000000000000000000000000000000000000000000000000',
40+
);
41+
expect(response.body.response.votingRound).to.be.equal('0');
42+
expect(response.body.response.lowestUsedTimestamp).to.be.equal(
43+
'1743506760',
44+
);
45+
expect(response.body.response.requestBody.minimalBlockNumber).to.be.equal(
46+
'75488',
47+
);
48+
expect(response.body.response.requestBody.deadlineBlockNumber).to.be.equal(
49+
'75489',
50+
);
51+
expect(response.body.response.requestBody.deadlineTimestamp).to.be.equal(
52+
'123',
53+
);
54+
expect(
55+
response.body.response.requestBody.destinationAddressHash,
56+
).to.be.equal(
57+
'0x071f381ae61977662fffe7ca910b6d9634b8940517e8a56f885be36ce0ed67b5',
58+
);
59+
expect(response.body.response.requestBody.amount).to.be.equal('0');
60+
expect(
61+
response.body.response.requestBody.standardPaymentReference,
62+
).to.be.equal(
63+
'0xbeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddeaddead',
64+
);
65+
expect(response.body.response.requestBody.checkSourceAddresses).to.be.equal(
66+
false,
67+
);
68+
expect(response.body.response.requestBody.sourceAddressesRoot).to.be.equal(
69+
'0x0000000000000000000000000000000000000000000000000000000000000000',
70+
);
71+
expect(
72+
response.body.response.responseBody.minimalBlockTimestamp,
73+
).to.be.equal('75488');
74+
expect(
75+
response.body.response.responseBody.firstOverflowBlockNumber,
76+
).to.be.equal('75490');
77+
expect(
78+
response.body.response.responseBody.firstOverflowBlockTimestamp,
79+
).to.be.equal('1743507962');
80+
});
81+
});

test/e2e_tests/doge/helper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ before(async () => {
129129
app.useGlobalPipes(new ValidationPipe({ transform: true }));
130130
app.enableCors();
131131

132-
await app.listen(3121, '0.0.0.0');
132+
await app.listen(3122, '0.0.0.0');
133133
});
134134

135135
after(async () => {

test/e2e_tests/run_tests.sh

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,13 @@ make_db(){
4747

4848
if [ "$VERIFIER_TYPE" == "all" ]; then
4949
docker compose -f test/e2e_tests/db/docker-compose.yaml cp test/e2e_tests/db/db_btc_testnet postgres_testing_db:/tmp/dbdumpbtc
50+
docker compose -f test/e2e_tests/db/docker-compose.yaml cp test/e2e_tests/db/db_btc2_testnet postgres_testing_db:/tmp/dbdumpbtc2
5051
docker compose -f test/e2e_tests/db/docker-compose.yaml cp test/e2e_tests/db/db_doge_testnet postgres_testing_db:/tmp/dbdumpdoge
5152
docker compose -f test/e2e_tests/db/docker-compose.yaml cp test/e2e_tests/db/db_xrp_testnet postgres_testing_db:/tmp/dbdumpxrp
5253
_wait_for_pg_ready
5354

5455
_make_db btc
56+
_make_db btc2
5557
_make_db doge
5658
_make_db xrp
5759
else
@@ -71,10 +73,12 @@ _make_db_ci(){
7173
echo Copying dumb to DB
7274

7375
cp test/e2e_tests/db/db_btc_testnet /tmp/dbdumpbtc
76+
cp test/e2e_tests/db/db_btc2_testnet /tmp/dbdumpbtc2
7477
cp test/e2e_tests/db/db_doge_testnet /tmp/dbdumpdoge
7578
cp test/e2e_tests/db/db_xrp_testnet /tmp/dbdumpxrp
7679

7780
_make_db btc
81+
_make_db btc2
7882
_make_db doge
7983
_make_db xrp
8084
}

test/e2e_tests/xrp/helper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ before(async () => {
129129
app.useGlobalPipes(new ValidationPipe({ transform: true }));
130130
app.enableCors();
131131

132-
await app.listen(3122, '0.0.0.0');
132+
await app.listen(3123, '0.0.0.0');
133133
});
134134

135135
after(async () => {

0 commit comments

Comments
 (0)