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 | ||||
| /// @returns true if response doesn't have error field | ||||
| /// @returns true if response is valid, otherwise false  | ||||
| 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 | ||||
| @@ -1051,6 +1055,7 @@ var ProviderManager = function() { | ||||
|                 var result = results[index]; | ||||
|                  | ||||
|                 if (!jsonrpc.isValidResponse(result)) { | ||||
|                     console.log(result); | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
| @@ -1083,7 +1088,7 @@ ProviderManager.prototype.send = function(data) { | ||||
|     var result = this.provider.send(payload); | ||||
|  | ||||
|     if (!jsonrpc.isValidResponse(result)) { | ||||
|         console.log(result.error); | ||||
|         console.log(result); | ||||
|         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 | ||||
| /// @returns true if response doesn't have error field | ||||
| /// @returns true if response is valid, otherwise false  | ||||
| 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 | ||||
|   | ||||
| @@ -54,6 +54,7 @@ var ProviderManager = function() { | ||||
|                 var result = results[index]; | ||||
|                  | ||||
|                 if (!jsonrpc.isValidResponse(result)) { | ||||
|                     console.log(result); | ||||
|                     return; | ||||
|                 } | ||||
|  | ||||
| @@ -86,7 +87,7 @@ ProviderManager.prototype.send = function(data) { | ||||
|     var result = this.provider.send(payload); | ||||
|  | ||||
|     if (!jsonrpc.isValidResponse(result)) { | ||||
|         console.log(result.error); | ||||
|         console.log(result); | ||||
|         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