jsonrpc.js tests && jsonrpc response validation is more strict
This commit is contained in:
		
							
								
								
									
										11
									
								
								dist/ethereum.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								dist/ethereum.js
									
									
									
									
										vendored
									
									
								
							| @@ -973,9 +973,13 @@ var toPayload = function (method, params) { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| /// Should be called to check if jsonrpc response is valid | /// Should be called to check if jsonrpc response is valid | ||||||
| /// @returns true if response doesn't have error field | /// @returns true if response is valid, otherwise false  | ||||||
| var isValidResponse = function (response) { | var isValidResponse = function (response) { | ||||||
|     return response && !response.error; |     return !!response && | ||||||
|  |         !response.error && | ||||||
|  |         response.jsonrpc === '2.0' && | ||||||
|  |         typeof response.id === 'number' && | ||||||
|  |         (!!response.result || typeof response.result === 'boolean'); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| /// Should be called to create batch payload object | /// Should be called to create batch payload object | ||||||
| @@ -1051,6 +1055,7 @@ var ProviderManager = function() { | |||||||
|                 var result = results[index]; |                 var result = results[index]; | ||||||
|                  |                  | ||||||
|                 if (!jsonrpc.isValidResponse(result)) { |                 if (!jsonrpc.isValidResponse(result)) { | ||||||
|  |                     console.log(result); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
| @@ -1083,7 +1088,7 @@ ProviderManager.prototype.send = function(data) { | |||||||
|     var result = this.provider.send(payload); |     var result = this.provider.send(payload); | ||||||
|  |  | ||||||
|     if (!jsonrpc.isValidResponse(result)) { |     if (!jsonrpc.isValidResponse(result)) { | ||||||
|         console.log(result.error); |         console.log(result); | ||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								dist/ethereum.js.map
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								dist/ethereum.js.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								dist/ethereum.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/ethereum.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -39,9 +39,13 @@ var toPayload = function (method, params) { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| /// Should be called to check if jsonrpc response is valid | /// Should be called to check if jsonrpc response is valid | ||||||
| /// @returns true if response doesn't have error field | /// @returns true if response is valid, otherwise false  | ||||||
| var isValidResponse = function (response) { | var isValidResponse = function (response) { | ||||||
|     return response && !response.error; |     return !!response && | ||||||
|  |         !response.error && | ||||||
|  |         response.jsonrpc === '2.0' && | ||||||
|  |         typeof response.id === 'number' && | ||||||
|  |         (!!response.result || typeof response.result === 'boolean'); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| /// Should be called to create batch payload object | /// Should be called to create batch payload object | ||||||
|   | |||||||
| @@ -54,6 +54,7 @@ var ProviderManager = function() { | |||||||
|                 var result = results[index]; |                 var result = results[index]; | ||||||
|                  |                  | ||||||
|                 if (!jsonrpc.isValidResponse(result)) { |                 if (!jsonrpc.isValidResponse(result)) { | ||||||
|  |                     console.log(result); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
| @@ -86,7 +87,7 @@ ProviderManager.prototype.send = function(data) { | |||||||
|     var result = this.provider.send(payload); |     var result = this.provider.send(payload); | ||||||
|  |  | ||||||
|     if (!jsonrpc.isValidResponse(result)) { |     if (!jsonrpc.isValidResponse(result)) { | ||||||
|         console.log(result.error); |         console.log(result); | ||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										128
									
								
								test/jsonrpc.isValidResponse.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								test/jsonrpc.isValidResponse.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,128 @@ | |||||||
|  | var assert = require('assert'); | ||||||
|  | var jsonrpc = require('../lib/jsonrpc'); | ||||||
|  |  | ||||||
|  | describe('jsonrpc', function () { | ||||||
|  |     describe('isValidResponse', function () { | ||||||
|  |         it('should validate basic jsonrpc response', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var response = { | ||||||
|  |                 jsonrpc: '2.0', | ||||||
|  |                 id: 1, | ||||||
|  |                 result: [] | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var valid = jsonrpc.isValidResponse(response); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(valid, true); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         it('should validate basic undefined response', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var response = undefined; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var valid = jsonrpc.isValidResponse(response); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(valid, false); | ||||||
|  |         }); | ||||||
|  |          | ||||||
|  |         it('should validate jsonrpc response without jsonrpc field', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var response = { | ||||||
|  |                 id: 1, | ||||||
|  |                 result: [] | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var valid = jsonrpc.isValidResponse(response); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(valid, false); | ||||||
|  |         }); | ||||||
|  |          | ||||||
|  |         it('should validate jsonrpc response with wrong jsonrpc version', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var response = { | ||||||
|  |                 jsonrpc: '1.0', | ||||||
|  |                 id: 1, | ||||||
|  |                 result: [] | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var valid = jsonrpc.isValidResponse(response); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(valid, false); | ||||||
|  |         }); | ||||||
|  |          | ||||||
|  |         it('should validate jsonrpc response without id number', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var response = { | ||||||
|  |                 jsonrpc: '2.0', | ||||||
|  |                 result: [] | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var valid = jsonrpc.isValidResponse(response); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(valid, false); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         it('should validate jsonrpc response with wrong id field', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var response = { | ||||||
|  |                 jsonrpc: '2.0', | ||||||
|  |                 id: 'x', | ||||||
|  |                 result: [] | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var valid = jsonrpc.isValidResponse(response); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(valid, false); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         it('should validate jsonrpc response without result field', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var response = { | ||||||
|  |                 jsonrpc: '2.0', | ||||||
|  |                 id: 1 | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var valid = jsonrpc.isValidResponse(response); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(valid, false); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         it('should validate jsonrpc response with result field === false', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var response = { | ||||||
|  |                 jsonrpc: '2.0', | ||||||
|  |                 id: 1, | ||||||
|  |                 result: false  | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var valid = jsonrpc.isValidResponse(response); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(valid, true); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |     }); | ||||||
|  | }); | ||||||
							
								
								
									
										47
									
								
								test/jsonrpc.toBatchPayload.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								test/jsonrpc.toBatchPayload.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | var assert = require('assert'); | ||||||
|  | var jsonrpc = require('../lib/jsonrpc'); | ||||||
|  |  | ||||||
|  | describe('jsonrpc', function () { | ||||||
|  |     describe('toBatchPayload', function () { | ||||||
|  |         it('should create basic batch payload', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var messages = [{ | ||||||
|  |                 method: 'helloworld' | ||||||
|  |             }, { | ||||||
|  |                 method: 'test2', | ||||||
|  |                 params: [1] | ||||||
|  |             }]; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var payload = jsonrpc.toBatchPayload(messages); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(payload instanceof Array, true); | ||||||
|  |             assert.equal(payload.length, 2); | ||||||
|  |             assert.equal(payload[0].jsonrpc, '2.0'); | ||||||
|  |             assert.equal(payload[1].jsonrpc, '2.0'); | ||||||
|  |             assert.equal(payload[0].method, 'helloworld'); | ||||||
|  |             assert.equal(payload[1].method, 'test2'); | ||||||
|  |             assert.equal(payload[0].params instanceof Array, true); | ||||||
|  |             assert.equal(payload[1].params.length, 1); | ||||||
|  |             assert.equal(payload[1].params[0], 1); | ||||||
|  |             assert.equal(typeof payload[0].id, 'number'); | ||||||
|  |             assert.equal(typeof payload[1].id, 'number'); | ||||||
|  |             assert.equal(payload[0].id + 1, payload[1].id); | ||||||
|  |         }); | ||||||
|  |          | ||||||
|  |         it('should create batch payload for empty input array', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var messages = []; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var payload = jsonrpc.toBatchPayload(messages); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(payload instanceof Array, true); | ||||||
|  |             assert.equal(payload.length, 0); | ||||||
|  |         }); | ||||||
|  |     }); | ||||||
|  | }); | ||||||
							
								
								
									
										40
									
								
								test/jsonrpc.toPayload.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								test/jsonrpc.toPayload.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | |||||||
|  | var assert = require('assert'); | ||||||
|  | var jsonrpc = require('../lib/jsonrpc'); | ||||||
|  |  | ||||||
|  | describe('jsonrpc', function () { | ||||||
|  |     describe('toPayload', function () { | ||||||
|  |         it('should create basic payload', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var method = 'helloworld'; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var payload = jsonrpc.toPayload(method); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(payload.jsonrpc, '2.0'); | ||||||
|  |             assert.equal(payload.method, method); | ||||||
|  |             assert.equal(payload.params instanceof Array, true); | ||||||
|  |             assert.equal(payload.params.length, 0); | ||||||
|  |             assert.equal(typeof payload.id, 'number'); | ||||||
|  |         }); | ||||||
|  |          | ||||||
|  |         it('should create payload with params', function () { | ||||||
|  |              | ||||||
|  |             // given  | ||||||
|  |             var method = 'helloworld1'; | ||||||
|  |             var params = [123, 'test']; | ||||||
|  |  | ||||||
|  |             // when | ||||||
|  |             var payload = jsonrpc.toPayload(method, params); | ||||||
|  |  | ||||||
|  |             // then | ||||||
|  |             assert.equal(payload.jsonrpc, '2.0'); | ||||||
|  |             assert.equal(payload.method, method); | ||||||
|  |             assert.equal(payload.params.length, 2); | ||||||
|  |             assert.equal(payload.params[0], params[0]); | ||||||
|  |             assert.equal(payload.params[1], params[1]); | ||||||
|  |             assert.equal(typeof payload.id, 'number'); | ||||||
|  |         }); | ||||||
|  |     }); | ||||||
|  | }); | ||||||
		Reference in New Issue
	
	Block a user