Пример #1
0
        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));
        }
Пример #2
0
        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]);
        }