public override async Task <InspectSymbolsReply> InspectSymbols(InspectSymbolsRequest request, ServerCallContext context) { await _semaphoreSlim.WaitAsync(); var reply = new InspectSymbolsReply(); try { var symbolInfos = ROpsApi.InspectSymbols(request.PathToCode); using var memoryStream = new MemoryStream(); Serializer.Serialize(memoryStream, symbolInfos); memoryStream.Position = 0; reply.Payload = new InspectSymbolsPayload { SymbolInfos = ByteString.FromStream(memoryStream) }; } catch (Exception ex) { reply.Error = PopulateError(ex); _logger.LogError(ex, nameof(InspectSymbols)); } finally { _semaphoreSlim.Release(); } return(await Task.FromResult(reply)); }
public void TestInspectExecSymbols() { // arrange var memoryStream = new MemoryStream(); var pathToSimLibrary = TestData.SimLibraryDirectory.FullName; var pathToCode = Path.Combine(pathToSimLibrary, "InspectExec", "inspect.R"); const string execSymbol = "run"; const string parametersSymbol = "parameters"; const string p1Symbol = "p1"; //const string p2Symbol = "p2"; const string outputSymbol = "o"; //const string o1Symbol = "o1"; const string o2Symbol = "o2"; const string o3Symbol = "o3"; const string o3LocalSymbol = "Ro3"; // act var symbolInfos = ROpsApi.InspectSymbols(pathToCode); var execSI = symbolInfos.SingleOrDefault(si => si.Symbol == execSymbol && si.Level == 0); var parameterSI = symbolInfos.SingleOrDefault(si => si.Symbol == parametersSymbol && si.Level == 0); var pDefs = parameterSI?.Names?.ToDictionary(n => n, n => symbolInfos.SingleOrDefault(si => si.Symbol == n && si.Level > 0)); var outputSI = symbolInfos.SingleOrDefault(si => si.Symbol == outputSymbol && si.Level == 0); var oDefs = outputSI?.Names?.ToDictionary(n => n, n => symbolInfos.SingleOrDefault(si => si.Symbol == n && si.Level > 0)); // assert Assert.IsNotNull(execSI); Assert.AreEqual("1st param", pDefs?[p1Symbol]?.Comment); Assert.AreEqual("u", pDefs?[p1Symbol]?.Unit); Assert.AreEqual("u.v", oDefs?[o2Symbol]?.Unit); Assert.AreEqual("2nd output", oDefs?[o2Symbol]?.Comment); Assert.IsFalse(oDefs?.ContainsKey(o3LocalSymbol) == true); Assert.IsNull(oDefs?[o3Symbol]); }