Skip to content

Commit

Permalink
fix: add offline check for networkWalidation in all enpdoints. Refact…
Browse files Browse the repository at this point in the history
…or to tests so if any endpoint could work offline, a mock db is used (cardano-foundation#118)
  • Loading branch information
t-dallas committed Aug 21, 2020
1 parent 2585e57 commit 9c091a4
Show file tree
Hide file tree
Showing 13 changed files with 138 additions and 53 deletions.
3 changes: 2 additions & 1 deletion src/server/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ const { PORT, BIND_ADDRESS, DB_CONNECTION_STRING, LOGGER_ENABLED, LOGGER_LEVEL }
// https://github.com/input-output-hk/cardano-rosetta/issues/101
const genesis = JSON.parse(fs.readFileSync(path.resolve(process.env.GENESIS_PATH)).toString());
const networkMagic = genesis.networkMagic;
const networkId = genesis.networkId.toLowerCase();

const configLogger = () =>
pino({
Expand All @@ -30,7 +31,7 @@ const start = async (databaseInstance: Pool) => {
// FIXME: validate the following paraemeters when implementing (2)
// https://github.com/input-output-hk/cardano-rosetta/issues/101
const cardanoCli = CardanoCli.configure(process.env.CARDANOCLI_PATH, networkMagic, logger);
const services = Services.configure(repository, cardanoCli, logger);
const services = Services.configure(repository, cardanoCli, logger, networkId);
server = buildServer(services, LOGGER_ENABLED === 'true');
server.addHook('onClose', (fastify, done) => databaseInstance.end(done));
// eslint-disable-next-line no-magic-numbers
Expand Down
7 changes: 4 additions & 3 deletions src/server/services/account-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ const parseUtxoDetails = (utxoDetails: Utxo[], logger: Logger): Components.Schem
const configure = (
networkRepository: NetworkRepository,
blockService: BlockService,
logger: Logger
logger: Logger,
networkId: string
): AccountService => ({
accountBalance: async accountBalanceRequest =>
withNetworkValidation(
accountBalanceRequest.network_identifier,
networkRepository,
accountBalanceRequest,
async () => {
logger.debug({ accountBalanceRequest }, '[accountBalance] Request received');
Expand Down Expand Up @@ -67,7 +67,8 @@ const configure = (
coins: parseUtxoDetails(utxoDetails, logger)
};
},
logger
logger,
networkId
)
});

Expand Down
7 changes: 4 additions & 3 deletions src/server/services/block-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,8 @@ const configure = (
repository: BlockchainRepository,
PAGE_SIZE: number,
networkRepository: NetworkRepository,
logger: Logger
logger: Logger,
networkId: string
): BlockService => ({
async findBlock(blockIdentifier) {
logger.info({ blockIdentifier }, '[findBlock] Looking for block:');
Expand Down Expand Up @@ -238,7 +239,6 @@ const configure = (
blockTransaction: async blockTransactionRequest =>
withNetworkValidation(
blockTransactionRequest.network_identifier,
networkRepository,
blockTransactionRequest,
async () => {
const transactionHash = blockTransactionRequest.transaction_identifier.hash;
Expand All @@ -259,7 +259,8 @@ const configure = (
transaction: response
};
},
logger
logger,
networkId
)
});

Expand Down
36 changes: 18 additions & 18 deletions src/server/services/construction-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,15 +59,14 @@ const constructPayloadsForTransactionBody = (

const configure = (
cardanoService: CardanoService,
networkRepository: NetworkRepository,
blockService: BlockService,
cardanoCli: CardanoCli,
logger: Logger
logger: Logger,
networkId: string
): ConstructionService => ({
constructionDerive: async request =>
withNetworkValidation(
request.network_identifier,
networkRepository,
request,
async () => {
const publicKey = request.public_key;
Expand All @@ -81,12 +80,12 @@ const configure = (
address
};
},
logger
logger,
networkId
),
constructionHash: async request =>
withNetworkValidation(
request.network_identifier,
networkRepository,
request,
async () => {
const signedTransaction = request.signed_transaction;
Expand All @@ -96,35 +95,35 @@ const configure = (
// eslint-disable-next-line camelcase
return { transaction_identifier: { hash: transactionHash } };
},
logger
logger,
networkId
),
constructionPreprocess: async request =>
withNetworkValidation(
request.network_identifier,
networkRepository,
request,
async () =>
// eslint-disable-next-line camelcase
({ options: { relative_ttl: request.metadata.relative_ttl } }),
logger
logger,
networkId
),
constructionMetadata: async request =>
withNetworkValidation(
request.network_identifier,
networkRepository,
request,
async () => {
const ttlOffset = request.options.relative_ttl;
const latestBlock = await blockService.getLatestBlock();
const ttl = (BigInt(latestBlock.slotNo) + BigInt(ttlOffset)).toString();
return { metadata: { ttl } };
},
logger
logger,
networkId
),
constructionPayloads: async request =>
withNetworkValidation(
request.network_identifier,
networkRepository,
request,
async () => {
const ttl = request.metadata.ttl;
Expand All @@ -134,12 +133,12 @@ const configure = (
// eslint-disable-next-line camelcase
return { unsigned_transaction: unsignedTransaction.bytes, payloads };
},
logger
logger,
networkId
),
constructionCombine: async request =>
withNetworkValidation(
request.network_identifier,
networkRepository,
request,
async () => {
logger.info('[constructionCombine] Request received to sign a transaction');
Expand All @@ -154,12 +153,12 @@ const configure = (
// eslint-disable-next-line camelcase
return { signed_transaction: signedTransaction };
},
logger
logger,
networkId
),
constructionParse: async request =>
withNetworkValidation(
request.network_identifier,
networkRepository,
request,
async () => {
const signed = request.signed;
Expand All @@ -176,12 +175,12 @@ const configure = (
...cardanoService.parseUnsignedTransaction(request.transaction)
};
},
logger
logger,
networkId
),
constructionSubmit: async request =>
withNetworkValidation(
request.network_identifier,
networkRepository,
request,
async () => {
try {
Expand All @@ -197,7 +196,8 @@ const configure = (
return ErrorFactory.sendTransactionError(error.message);
}
},
logger
logger,
networkId
)
});

Expand Down
11 changes: 6 additions & 5 deletions src/server/services/network-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ const configure = (
networkRepository: NetworkRepository,
blockchainService: BlockService,
topologyFile: TopologyConfig,
logger: Logger
logger: Logger,
networkId: string
): NetworkService => ({
async networkList() {
logger.info('[networkList] Looking for all supported networks');
Expand All @@ -73,7 +74,6 @@ const configure = (
networkStatus: async networkStatusRequest =>
withNetworkValidation(
networkStatusRequest.network_identifier,
networkRepository,
networkStatusRequest,
async () => {
logger.debug({ networkStatusRequest }, '[networkStatus] Request received:');
Expand Down Expand Up @@ -101,12 +101,12 @@ const configure = (
logger.debug({ response }, '[networkStatus] Returning response:');
return response;
},
logger
logger,
networkId
),
networkOptions: async networkOptionsRequest =>
withNetworkValidation(
networkOptionsRequest.network_identifier,
networkRepository,
networkOptionsRequest,
async () => {
logger.info('[networkOptions] Looking for networkOptions');
Expand All @@ -132,7 +132,8 @@ const configure = (
logger.debug({ response }, '[networkOptions] Returning response:');
return response;
},
logger
logger,
networkId
)
});

Expand Down
22 changes: 11 additions & 11 deletions src/server/services/services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,25 +42,25 @@ const loadPageSize = (logger: Logger): number => {
*
* @param repositories repositories to be used by the services
*/
export const configure = (repositories: Repositories, cardanoCli: CardanoCli, logger: Logger): Services => {
export const configure = (
repositories: Repositories,
cardanoCli: CardanoCli,
logger: Logger,
networkId: string
): Services => {
const blockServiceInstance = blockService(
repositories.blockchainRepository,
loadPageSize(logger),
repositories.networkRepository,
logger
logger,
networkId
);
const cardanoServiceInstance = cardanoService(logger);
return {
...accountService(repositories.networkRepository, blockServiceInstance, logger),
...accountService(repositories.networkRepository, blockServiceInstance, logger, networkId),
...blockServiceInstance,
...constructionService(
cardanoServiceInstance,
repositories.networkRepository,
blockServiceInstance,
cardanoCli,
logger
),
...networkService(repositories.networkRepository, blockServiceInstance, loadTopologyFile(), logger),
...constructionService(cardanoServiceInstance, blockServiceInstance, cardanoCli, logger, networkId),
...networkService(repositories.networkRepository, blockServiceInstance, loadTopologyFile(), logger, networkId),
...cardanoServiceInstance
};
};
7 changes: 3 additions & 4 deletions src/server/services/utils/services-helper.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import { NetworkRepository } from '../../db/network-repository';
import { CARDANO } from '../../utils/constants';
import { ErrorFactory } from '../../utils/errors';
import { Logger } from 'fastify';

export const withNetworkValidation = async <T, R>(
networkIdentifier: Components.Schemas.NetworkIdentifier,
repository: NetworkRepository,
parameters: T,
nextFn: (param: T) => R,
logger: Logger
logger: Logger,
networkId: string
): Promise<R> => {
logger.debug('[withNetworkValidation] About to validate requests network identifier parameter', networkIdentifier);
const blockchain: string = networkIdentifier.blockchain;
Expand All @@ -19,7 +18,7 @@ export const withNetworkValidation = async <T, R>(
throw ErrorFactory.invalidBlockchainError();
}

const networkExists = await repository.networkExists(network);
const networkExists = networkId === network;
if (!networkExists) {
logger.error('[withNetworkValidation] Network parameter is not supported: ', network);
throw ErrorFactory.networkNotFoundError();
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/account-api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ describe('/account/balance endpoint', () => {
let database: Pool;
let server: FastifyInstance;
beforeAll(async () => {
database = setupDatabase();
database = setupDatabase(false);
server = setupServer(database);
});

Expand Down
2 changes: 1 addition & 1 deletion test/e2e/block-api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ describe('Block API', () => {
let database: Pool;
let server: FastifyInstance;
beforeAll(async () => {
database = setupDatabase();
database = setupDatabase(false);
server = setupServer(database);
});

Expand Down
8 changes: 7 additions & 1 deletion test/e2e/construction-api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ describe('Construction API', () => {
let database: Pool;
let server: FastifyInstance;
beforeAll(async () => {
database = setupDatabase();
database = setupDatabase(true);
server = setupServer(database);
});

Expand Down Expand Up @@ -219,6 +219,11 @@ describe('Construction API', () => {
});

describe(CONSTRUCTION_METADATA_ENDPOINT, () => {
beforeAll(async () => {
database = setupDatabase(false);
server = setupServer(database);
});

test('Should return a valid TTL when the parameters are valid', async () => {
const response = await server.inject({
method: 'post',
Expand All @@ -234,6 +239,7 @@ describe('Construction API', () => {
(blockchain, network) => generateMetadataPayload(blockchain, network, 100),
() => server
);

});

describe(CONSTRUCTION_COMBINE_ENDPOINT, () => {
Expand Down
6 changes: 3 additions & 3 deletions test/e2e/network-api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ describe('/network/list endpoint', () => {
let database: Pool;
let server: FastifyInstance;
beforeAll(async () => {
database = setupDatabase();
database = setupDatabase(false);
server = setupServer(database);
});

Expand All @@ -151,7 +151,7 @@ describe('/network/options endpoint', () => {
let database: Pool;
let server: FastifyInstance;
beforeAll(async () => {
database = setupDatabase();
database = setupDatabase(false);
server = setupServer(database);
});

Expand Down Expand Up @@ -209,7 +209,7 @@ describe('/network/status endpoint', () => {
let database: Pool;
let server: FastifyInstance;
beforeAll(async () => {
database = setupDatabase();
database = setupDatabase(false);
server = setupServer(database);
});

Expand Down
Loading

0 comments on commit 9c091a4

Please sign in to comment.