Skip to content
This repository has been archived by the owner on Dec 16, 2021. It is now read-only.

feat!: handle new drive error codes #405

Merged
merged 15 commits into from
Sep 15, 2021
Prev Previous commit
Next Next commit
fix: PR comments
  • Loading branch information
Konstantin Shuplenkov committed Sep 7, 2021
commit 08ee6e24e8468018717bc09f689a7c57f3afe018
4 changes: 2 additions & 2 deletions lib/grpcServer/handlers/createGrpcErrorFromDriveResponse.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,15 @@ function createGrpcErrorFromDriveResponse(code, info) {
return new GrpcError(code, decodedInfo.message, decodedInfo.metadata);
}

if (code >= 17 && code < 100) {
if (code >= 17 && code < 1000) {
return new GrpcError(code, decodedInfo.message, decodedInfo.metadata);
}

if (code >= 1000 && code < 5000) {
return createConsensusError(code, decodedInfo);
}

return new GrpcError(code, `Unknown error code: ${code}`, decodedInfo);
return new GrpcError(GrpcErrorCodes.INTERNAL, `Unknown error code: ${code}`, decodedInfo);
shumkov marked this conversation as resolved.
Show resolved Hide resolved
}

module.exports = createGrpcErrorFromDriveResponse;
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const {
BroadcastStateTransitionResponse,
},
} = require('@dashevo/dapi-grpc');
const InternalGrpcError = require('@dashevo/grpc-common/lib/server/error/InternalGrpcError');

/**
* @param {jaysonClient} rpcClient
Expand Down Expand Up @@ -50,7 +51,14 @@ function broadcastStateTransitionHandlerFactory(rpcClient, createGrpcErrorFromDr
throw error;
}

if (result.code !== undefined && result.code !== 0) {
shumkov marked this conversation as resolved.
Show resolved Hide resolved
if (result.code === undefined) {
shumkov marked this conversation as resolved.
Show resolved Hide resolved
const error = new Error();
Object.assign(error, result);

throw new InternalGrpcError(error);
}

if (result.code !== 0) {
throw createGrpcErrorFromDriveResponse(result.code, result.info);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ const createGrpcErrorFromDriveResponse = require(
'../../../../lib/grpcServer/handlers/createGrpcErrorFromDriveResponse',
);

describe('handleAbciResponseError', () => {
describe('createGrpcErrorFromDriveResponse', () => {
let message;
let metadata;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const getDataContractFixture = require('@dashevo/dpp/lib/test/fixtures/getDataCo
const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes');
const NotFoundGrpcError = require('@dashevo/grpc-common/lib/server/error/NotFoundGrpcError');
const cbor = require('cbor');
const InternalGrpcError = require('@dashevo/grpc-common/lib/server/error/InternalGrpcError');
const GrpcCallMock = require('../../../../../lib/test/mock/GrpcCallMock');

const broadcastStateTransitionHandlerFactory = require(
Expand Down Expand Up @@ -67,6 +68,7 @@ describe('broadcastStateTransitionHandlerFactory', () => {
hash:
'B762539A7C17C33A65C46727BFCF2C701390E6AD7DE5190B6CC1CF843CA7E262',
height: '24',
code,
},
};

Expand Down Expand Up @@ -164,6 +166,35 @@ describe('broadcastStateTransitionHandlerFactory', () => {
expect(e.getMessage()).to.equal(message);
expect(e.getRawMetadata()).to.deep.equal(metadata);
expect(e.getCode()).to.equal(response.result.code);
expect(createGrpcErrorFromDriveResponseMock).to.be.calledWithExactly(
response.result.code,
response.result.info,
);
}
});

it('should throw InternalGrpcError result codes is undefined', async () => {
const message = 'not found';
const metadata = {
data: 'some data',
};

createGrpcErrorFromDriveResponseMock.returns(
new NotFoundGrpcError(message, metadata),
);

response.result.code = undefined;
response.result.info = cbor.encode({ message, metadata }).toString('base64');

try {
await broadcastStateTransitionHandler(call);

expect.fail('should throw InternalGrpcError');
} catch (e) {
expect(e).to.be.an.instanceOf(InternalGrpcError);
expect(e.getMessage()).to.equal('Internal error');
expect(e.getError().info).to.deep.equal(response.result.info);
expect(createGrpcErrorFromDriveResponseMock).to.not.be.called();
}
});
});