Ejemplo n.º 1
0
 private ExpandResponse CreateExpandResponse(ObjectExplorerSession session, ExpandParams expandParams)
 {
     return(new ExpandResponse()
     {
         SessionId = session.Uri, NodePath = expandParams.NodePath
     });
 }
Ejemplo n.º 2
0
        internal async Task HandleExpandRequest(ExpandParams expandParams, RequestContext <bool> context)
        {
            Logger.Write(LogLevel.Verbose, "HandleExpandRequest");

            Func <Task <bool> > expandNode = async() =>
            {
                Validate.IsNotNull(nameof(expandParams), expandParams);
                Validate.IsNotNull(nameof(context), context);

                string uri = expandParams.SessionId;
                ObjectExplorerSession session = null;
                if (!sessionMap.TryGetValue(uri, out session))
                {
                    Logger.Write(LogLevel.Verbose, $"Cannot expand object explorer node. Couldn't find session for uri. {uri} ");
                    await serviceHost.SendEvent(ExpandCompleteNotification.Type, new ExpandResponse
                    {
                        SessionId    = expandParams.SessionId,
                        NodePath     = expandParams.NodePath,
                        ErrorMessage = $"Couldn't find session for session: {uri}"
                    });

                    return(false);
                }
                else
                {
                    RunExpandTask(session, expandParams);
                    return(true);
                }
            };

            await HandleRequestAsync(expandNode, context, "HandleExpandRequest");
        }
Ejemplo n.º 3
0
        private async Task ExpandNodeAsync(ObjectExplorerSession session, ExpandParams expandParams, CancellationToken cancellationToken, bool forceRefresh = false)
        {
            ExpandResponse response = null;

            response = await ExpandNode(session, expandParams.NodePath, forceRefresh);

            if (cancellationToken.IsCancellationRequested)
            {
                Logger.Write(LogLevel.Verbose, "OE expand canceled");
            }
            else
            {
                await serviceHost.SendEvent(ExpandCompleteNotification.Type, response);
            }
        }
        public async Task <ExpandResponse> RequestObjectExplorerExpand(ExpandParams expandParams, int timeoutMilliseconds = 5000)
        {
            var result = await Driver.SendRequest(ExpandRequest.Type, expandParams);

            if (result)
            {
                var eventResult = await Driver.WaitForEvent(ExpandCompleteNotification.Type, timeoutMilliseconds);

                return(eventResult);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 5
0
        private async Task <ExpandResponse> CallServiceExpand(ExpandParams expandParams, RequestContext <bool> requestContext)
        {
            ExpandResponse result = null;

            serviceHostMock.AddEventHandling(ExpandCompleteNotification.Type, (et, p) => result = p);

            await service.HandleExpandRequest(expandParams, requestContext);

            Task task = service.ExpandTask;

            if (task != null)
            {
                await task;
            }
            return(result);
        }
Ejemplo n.º 6
0
        public async Task ExpandNodeGivenInvalidSessionShouldReturnEmptyList()
        {
            ExpandParams expandParams = new ExpandParams()
            {
                SessionId = "invalid session is",
                NodePath  = "Any path"
            };


            // when expanding
            // then expect the nodes are server children
            await RunAndVerify <bool, ExpandResponse>(
                test : (requestContext) => CallServiceExpand(expandParams, requestContext),
                verify : (actual =>
            {
                Assert.Equal(actual.SessionId, expandParams.SessionId);
                Assert.Null(actual.Nodes);
            }));
        }
Ejemplo n.º 7
0
        private void RunExpandTask(ObjectExplorerSession session, ExpandParams expandParams, bool forceRefresh = false)
        {
            CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
            Task task = ExpandNodeAsync(session, expandParams, cancellationTokenSource.Token, forceRefresh);

            ExpandTask = task;
            Task.Run(async() =>
            {
                ObjectExplorerTaskResult result = await RunTaskWithTimeout(task,
                                                                           settings?.ExpandTimeout ?? ObjectExplorerSettings.DefaultExpandTimeout);

                if (result != null && !result.IsCompleted)
                {
                    cancellationTokenSource.Cancel();
                    ExpandResponse response = CreateExpandResponse(session, expandParams);
                    response.ErrorMessage   = result.Exception != null ? result.Exception.Message: $"Failed to expand node: {expandParams.NodePath} in session {session.Uri}";
                    await serviceHost.SendEvent(ExpandCompleteNotification.Type, response);
                }
                return(result);
            }).ContinueWithOnFaulted(null);
        }
Ejemplo n.º 8
0
        private async Task ExpandAndVerifyServerNodes()
        {
            var session = await CreateSession();

            ExpandParams expandParams = new ExpandParams()
            {
                SessionId = session.SessionId,
                NodePath  = session.RootNode.NodePath
            };

            // when expanding
            // then expect the nodes are server children
            await RunAndVerify <bool, ExpandResponse>(
                test : (requestContext) => CallServiceExpand(expandParams, requestContext),
                verify : (actual =>
            {
                Assert.Equal(actual.SessionId, session.SessionId);
                Assert.NotNull(actual.SessionId);
                VerifyServerNodeChildren(actual.Nodes);
            }));
        }