public void MatchesRpcRoute_DifferentRoutes_Valid(string requestUrl, string availableRouteName, bool shouldMatch) { IRpcRouteProvider routeProvider = new FakeRouteProvider(); RouteCriteria routeCriteria = new RouteCriteria(typeof(ParserTests)); routeProvider.RegisterRoute(routeCriteria, availableRouteName); DefaultRpcParser parser = new DefaultRpcParser(null); RpcRoute matchedRoute; bool isMatch = parser.MatchesRpcRoute(routeProvider, requestUrl, out matchedRoute); Assert.Equal(isMatch, shouldMatch); Assert.Equal(matchedRoute != null, shouldMatch); }
/// <summary> /// Parses all the requests from the json in the request /// </summary> /// <param name="jsonString">Json from the http request</param> /// <param name="jsonSerializerSettings">Json serialization settings that will be used in serialization and deserialization for rpc requests</param> /// <returns>List of Rpc requests that were parsed from the json</returns> public List <RpcRequest> ParseRequests(string jsonString, JsonSerializerSettings jsonSerializerSettings = null) { this.Logger?.LogDebug($"Attempting to parse Rpc request from the json string '{jsonString}'"); List <RpcRequest> rpcRequests; if (string.IsNullOrWhiteSpace(jsonString)) { throw new RpcInvalidRequestException("Json request was empty"); } try { if (!DefaultRpcParser.IsSingleRequest(jsonString)) { rpcRequests = JsonConvert.DeserializeObject <List <RpcRequest> >(jsonString, jsonSerializerSettings); } else { rpcRequests = new List <RpcRequest>(); RpcRequest rpcRequest = JsonConvert.DeserializeObject <RpcRequest>(jsonString, jsonSerializerSettings); if (rpcRequest != null) { rpcRequests.Add(rpcRequest); } } } catch (Exception ex) when(!(ex is RpcException)) { string errorMessage = "Unable to parse json request into an rpc format."; this.Logger?.LogException(ex, errorMessage); throw new RpcInvalidRequestException(errorMessage); } if (rpcRequests == null || !rpcRequests.Any()) { throw new RpcInvalidRequestException("No rpc json requests found"); } this.Logger?.LogDebug($"Successfully parsed {rpcRequests.Count} Rpc request(s)"); HashSet <object> uniqueIds = new HashSet <object>(); foreach (RpcRequest rpcRequest in rpcRequests) { bool unique = uniqueIds.Add(rpcRequest.Id); if (!unique && rpcRequest.Id != null) { throw new RpcInvalidRequestException("Duplicate ids in batch requests are not allowed"); } } return(rpcRequests); }
public void ParseRequests_BatchRequest_Valid() { const string json = "[{\"jsonrpc\": \"2.0\", \"method\": \"one\", \"params\": [\"1\"], \"id\": \"1\"}, {\"jsonrpc\": \"2.0\", \"method\": \"two\", \"params\": [\"2\"], \"id\": \"2\"}]"; DefaultRpcParser parser = new DefaultRpcParser(null); bool isBulkRequest; List<RpcRequest> rpcRequests = parser.ParseRequests(json, out isBulkRequest); Assert.NotNull(rpcRequests); Assert.Equal(rpcRequests.Count, 2); Assert.Equal(rpcRequests[0].Id, "1"); Assert.Equal(rpcRequests[0].Method, "one"); Assert.Equal(rpcRequests[0].JsonRpcVersion, JsonRpcContants.JsonRpcVersion); Assert.Equal(rpcRequests[0].ParameterList, new object[] { "1" }); Assert.Equal(rpcRequests[1].Id, "2"); Assert.Equal(rpcRequests[1].Method, "two"); Assert.Equal(rpcRequests[1].JsonRpcVersion, JsonRpcContants.JsonRpcVersion); Assert.Equal(rpcRequests[1].ParameterList, new object[] { "2" }); Assert.True(isBulkRequest); }
public void ParseRequests_Valid(string json, object id, string method, object[] parameters) { DefaultRpcParser parser = new DefaultRpcParser(null); bool isBulkRequest; RpcRequest rpcRequest = parser.ParseRequests(json, out isBulkRequest).FirstOrDefault(); Assert.NotNull(rpcRequest); Assert.Equal(rpcRequest.Id, id); Assert.Equal(rpcRequest.Method, method); Assert.Equal(rpcRequest.JsonRpcVersion, JsonRpcContants.JsonRpcVersion); Assert.Equal(rpcRequest.ParameterList, parameters); Assert.Equal(false, isBulkRequest); }
public void ParseRequests_NullRequest_InvalidRequestException() { const string json = null; DefaultRpcParser parser = new DefaultRpcParser(null); bool isBulkRequest; Assert.Throws<RpcInvalidRequestException>(() => parser.ParseRequests(json, out isBulkRequest)); }
public void ParseRequests_MissingVersion_InvalidRequestException() { const string json = "{\"method\": \"datetime\", \"params\": [\"2000-12-15T22:11:03\"], \"id\": \"1\"}"; DefaultRpcParser parser = new DefaultRpcParser(null); bool isBulkRequest; Assert.Throws<RpcInvalidRequestException>(() => parser.ParseRequests(json, out isBulkRequest)); }
public void ParseRequests_MissingParams_NoException() { const string json = "{\"method\": \"datetime\",\"jsonrpc\": \"2.0\", \"id\": \"1\"}"; DefaultRpcParser parser = new DefaultRpcParser(null); bool isBulkRequest; parser.ParseRequests(json, out isBulkRequest); Assert.Equal(false, isBulkRequest); }
public void ParseRequests_MissingId_NoException() { const string json = "{\"method\": \"datetime\", \"jsonrpc\": \"2.0\", \"params\": [\"2000-12-15T22:11:03\"]}"; DefaultRpcParser parser = new DefaultRpcParser(null); bool isBulkRequest; parser.ParseRequests(json, out isBulkRequest); Assert.Equal(false, isBulkRequest); }
public void ParseRequests_DateTime_Valid() { const string json = "{\"jsonrpc\": \"2.0\", \"method\": \"datetime\", \"params\": [\"2000-12-15T22:11:03\"], \"id\": 1}"; DateTime dateTime = DateTime.Parse("2000-12-15T22:11:03"); DefaultRpcParser parser = new DefaultRpcParser(null); bool isBulkRequest; RpcRequest rpcRequest = parser.ParseRequests(json, out isBulkRequest).FirstOrDefault(); Assert.NotNull(rpcRequest); Assert.Equal(rpcRequest.Id, (long)1); Assert.Equal(rpcRequest.Method, "datetime"); Assert.Equal(rpcRequest.JsonRpcVersion, JsonRpcContants.JsonRpcVersion); Assert.Equal(rpcRequest.ParameterList, new object[] { dateTime }); Assert.False(isBulkRequest); }