public void InternalServiceRequestHandler_ProcessRequestGivenUnAuthorizedPermission() { //------------Setup for test-------------------------- var args = new Dictionary <string, StringBuilder> { { "DebugPayload", new StringBuilder("<DataList>Value:SomeStringAsValue,IsDebug:true</DataList>") }, { "IsDebug", new StringBuilder("<DataList>true</DataList>") }, }; var eer = new EsbExecuteRequest { ServiceName = "Ping", Args = args, TestName = "Test1", ExecuteResult = new StringBuilder("Results") }; var executingUser = new Mock <IPrincipal>(); var resourceCatalog = new Mock <IResourceCatalog>(); var authorizationService = new Mock <IAuthorizationService>(); authorizationService.Setup(service => service.IsAuthorized(AuthorizationContext.Contribute, Guid.Empty)).Returns(false); var internalServiceRequestHandler = new InternalServiceRequestHandler(resourceCatalog.Object, authorizationService.Object) { ExecutingUser = executingUser.Object }; //------------Execute Test--------------------------- var processRequest = internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, Guid.NewGuid().ToString()); authorizationService.Verify(service => service.IsAuthorized(AuthorizationContext.Contribute, Guid.Empty), Times.Once); Assert.IsNotNull(processRequest); }
public void InternalServiceRequestHandler_ProcessRequest_WhenExecutingUserInFirstOverload_ExpectThreadHasCorrectUserContext() { //------------Setup for test-------------------------- Mock <IPrincipal> principle = new Mock <IPrincipal>(); principle.Setup(p => p.Identity.Name).Returns("FakeUser"); principle.Setup(p => p.Identity.Name).Verifiable(); Mock <ICommunicationContext> ctx = new Mock <ICommunicationContext>(); NameValueCollection boundVariables = new NameValueCollection { { "servicename", "ping" }, { "instanceid", "" }, { "bookmark", "" } }; NameValueCollection queryString = new NameValueCollection { { GlobalConstants.DLID, Guid.Empty.ToString() }, { "wid", Guid.Empty.ToString() } }; ctx.Setup(c => c.Request.BoundVariables).Returns(boundVariables); ctx.Setup(c => c.Request.QueryString).Returns(queryString); ctx.Setup(c => c.Request.Uri).Returns(new Uri("http://localhost")); var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = principle.Object }; //------------Execute Test--------------------------- internalServiceRequestHandler.ProcessRequest(ctx.Object); //------------Assert Results------------------------- principle.Verify(p => p.Identity.Name, Times.AtLeast(1)); }
public void InternalServiceRequestHandler_ProcessRequest_WhenExecutingUser() { //------------Setup for test-------------------------- var ctx = new Mock <ICommunicationContext>(); var boundVariables = new NameValueCollection { { "servicename", "ping" }, { "instanceid", "" }, { "bookmark", "" } }; var queryString = new NameValueCollection { { GlobalConstants.DLID, Guid.Empty.ToString() }, { "wid", Guid.Empty.ToString() } }; ctx.Setup(c => c.Request.BoundVariables).Returns(boundVariables); ctx.Setup(c => c.Request.QueryString).Returns(queryString); ctx.Setup(c => c.Request.Uri).Returns(new Uri("http://localhost:3142/secure/Testing123.json?<DataList></DataList>&wid=7481a128-cf36-427c-90d7-daa32368af8d")); var executingUser = new Mock <IPrincipal>(); var id = new Mock <IIdentity>(); id.Setup(identity => identity.Name).Returns("User"); id.Setup(identity => identity.IsAuthenticated).Returns(true); executingUser.Setup(principal => principal.Identity).Returns(id.Object); var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = executingUser.Object }; //------------Execute Test--------------------------- internalServiceRequestHandler.ProcessRequest(ctx.Object); }
public void BuildStudioUrl_GivenPayLoad_BuildCorrect_WebURL_StripDebugInfo() { //------------Setup for test-------------------------- var executingUser = new Mock <IPrincipal>(); var resourceCatalog = new Mock <IResourceCatalog>(); var authorizationService = new Mock <IAuthorizationService>(); authorizationService.Setup(service => service.IsAuthorized(AuthorizationContext.Contribute, Guid.Empty.ToString())).Returns(true); var internalServiceRequestHandler = new InternalServiceRequestHandler(resourceCatalog.Object, authorizationService.Object) { ExecutingUser = executingUser.Object }; var privateObject = new PrivateObject(internalServiceRequestHandler); var xElement = XML.XmlResource.Fetch("DebugPayload"); var s = xElement.ToString(); //------------Test Preconditions--------------------------- var invoke = privateObject.Invoke("BuildStudioUrl", s).ToString(); Assert.IsNotNull(invoke); Assert.IsFalse(invoke.Contains(" ")); Assert.IsFalse(invoke.Contains(Environment.NewLine)); //------------Execute Test--------------------------- Assert.IsFalse(invoke.Contains("BDSDebugMode")); Assert.IsFalse(invoke.Contains("DebugSessionID")); Assert.IsFalse(invoke.Contains("EnvironmentID")); const string expected = "<DataList><input>a</input><rec%20json:Array=\"true\"%20xmlns:json=\"http://james.newtonking.com/projects/json\"><field>w</field></rec><obj><Name>nathi</Name></obj></DataList>"; Assert.AreEqual(expected, invoke); }
public void InternalServiceRequestHandler_ProcessRequest_WhenNullExecutingUser_ExpectException() { //------------Setup for test-------------------------- EsbExecuteRequest eer = new EsbExecuteRequest { ServiceName = "Ping" }; var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = null }; //------------Execute Test--------------------------- internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, Guid.NewGuid().ToString()); }
public void InternalServiceRequestHandler_ProcessRequest_WhenMalformedConnectionId_ExpectException() { //------------Setup for test-------------------------- Mock <IPrincipal> principle = new Mock <IPrincipal>(); principle.Setup(p => p.Identity.Name).Returns("FakeUser"); EsbExecuteRequest eer = new EsbExecuteRequest { ServiceName = "Ping" }; var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = principle.Object }; //------------Execute Test--------------------------- internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, "1"); }
public void InternalServiceRequestHandler_ProcessRequest_WhenNullExecutingUser_ExpectException() { //------------Setup for test-------------------------- var args = new Dictionary <string, StringBuilder> { { "DebugPayload", new StringBuilder("<DataList>Value:SomeStringAsValue,IsDebug:true</DataList>") } }; var eer = new EsbExecuteRequest { ServiceName = "Ping", Args = args, ResourceID = Guid.NewGuid() }; var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = null }; //------------Execute Test--------------------------- internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, Guid.NewGuid().ToString()); }
public void InternalServiceRequestHandler_ProcessRequest_WhenNullExecutingUserInFirstOverload_ExpectException() { //------------Setup for test-------------------------- Mock <ICommunicationContext> ctx = new Mock <ICommunicationContext>(); NameValueCollection boundVariables = new NameValueCollection { { "servicename", "ping" }, { "instanceid", "" }, { "bookmark", "" } }; NameValueCollection queryString = new NameValueCollection { { GlobalConstants.DLID, Guid.Empty.ToString() }, { "wid", Guid.Empty.ToString() } }; ctx.Setup(c => c.Request.BoundVariables).Returns(boundVariables); ctx.Setup(c => c.Request.QueryString).Returns(queryString); ctx.Setup(c => c.Request.Uri).Returns(new Uri("http://localhost")); var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = null }; //------------Execute Test--------------------------- internalServiceRequestHandler.ProcessRequest(ctx.Object); }
public void InternalServiceRequestHandler_ProcessRequest() { //------------Setup for test-------------------------- var args = new Dictionary <string, StringBuilder> { { "DebugPayload", new StringBuilder("<DataList>Value:SomeStringAsValue,IsDebug:true</DataList>") }, { "IsDebug", new StringBuilder("<DataList>true</DataList>") } }; var eer = new EsbExecuteRequest { ServiceName = "Ping", Args = args, }; var executingUser = new Mock <IPrincipal>(); var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = executingUser.Object }; //------------Execute Test--------------------------- internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, Guid.NewGuid().ToString()); }
public void InternalServiceRequestHandler_ProcessRequest_WhenPassingInUserContext_ExpectThreadHasCorrectUserContext() { //------------Setup for test-------------------------- Mock <IPrincipal> principle = new Mock <IPrincipal>(); principle.Setup(p => p.Identity.Name).Returns("FakeUser"); principle.Setup(p => p.Identity.Name).Verifiable(); EsbExecuteRequest eer = new EsbExecuteRequest { ServiceName = "Ping" }; var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = principle.Object }; //------------Execute Test--------------------------- var result = internalServiceRequestHandler.ProcessRequest(eer, Guid.Empty, Guid.Empty, Guid.Empty.ToString()); //------------Assert Results------------------------- Assert.IsNotNull(result); StringAssert.Contains(result.ToString(), "Pong"); principle.Verify(p => p.Identity.Name, Times.Once()); }
public void BuildStudioUrl_GivenPayLoad_BuildCorrect_WebURL() { //------------Setup for test-------------------------- var executingUser = new Mock <IPrincipal>(); var resourceCatalog = new Mock <IResourceCatalog>(); var authorizationService = new Mock <IAuthorizationService>(); authorizationService.Setup(service => service.IsAuthorized(AuthorizationContext.Contribute, Guid.Empty.ToString())).Returns(true); var internalServiceRequestHandler = new InternalServiceRequestHandler(resourceCatalog.Object, authorizationService.Object) { ExecutingUser = executingUser.Object }; var privateObject = new PrivateObject(internalServiceRequestHandler); var xElement = XML.XmlResource.Fetch("DebugPayload"); var s = xElement.ToString(); var invoke = privateObject.Invoke("BuildStudioUrl", s).ToString(); //------------Execute Test--------------------------- Assert.IsNotNull(invoke); Assert.IsFalse(invoke.Contains(" ")); Assert.IsFalse(invoke.Contains(Environment.NewLine)); }
/// <summary> /// Executes the command. /// </summary> /// <param name="envelope">The envelope.</param> /// <param name="endOfStream">if set to <c>true</c> [end of stream].</param> /// <param name="workspaceId">The workspace unique identifier.</param> /// <param name="dataListId">The data list unique identifier.</param> /// <param name="messageId">The message unique identifier.</param> /// <returns></returns> public async Task <Receipt> ExecuteCommand(Envelope envelope, bool endOfStream, Guid workspaceId, Guid dataListId, Guid messageId) { var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = Context.User }; try { var task = new Task <Receipt>(() => { try { StringBuilder sb; if (!MessageCache.TryGetValue(messageId, out sb)) { sb = new StringBuilder(); MessageCache.TryAdd(messageId, sb); } sb.Append(envelope.Content); MessageCache.TryRemove(messageId, out sb); var request = _serializer.Deserialize <EsbExecuteRequest>(sb); var user = string.Empty; // ReSharper disable ConditionIsAlwaysTrueOrFalse var userPrinciple = Context.User; if (Context.User.Identity != null) // ReSharper restore ConditionIsAlwaysTrueOrFalse { user = Context.User.Identity.Name; // set correct principle ;) userPrinciple = Context.User; Thread.CurrentPrincipal = userPrinciple; Dev2Logger.Log.Debug("Execute Command Invoked For [ " + user + " ] For Service [ " + request.ServiceName + " ]"); } StringBuilder processRequest = null; Common.Utilities.PerformActionInsideImpersonatedContext(userPrinciple, () => { processRequest = internalServiceRequestHandler.ProcessRequest(request, workspaceId, dataListId, Context.ConnectionId); }); // always place requesting user in here ;) var future = new FutureReceipt { PartID = 0, RequestID = messageId, User = user }; var value = processRequest.ToString(); if (!string.IsNullOrEmpty(value)) { if (!ResultsCache.Instance.AddResult(future, value)) { Dev2Logger.Log.Error(new Exception("Failed to build future receipt for [ " + Context.ConnectionId + " ] Value [ " + value + " ]")); } } return(new Receipt { PartID = envelope.PartID, ResultParts = 1 }); } catch (Exception e) { Dev2Logger.Log.Error(e); } return(null); }); task.Start(); return(await task); } catch (Exception e) { Dev2Logger.Log.Error(e); Dev2Logger.Log.Info("Is End of Stream:" + endOfStream); } return(null); }
/// <summary> /// Executes the command. /// </summary> /// <param name="envelope">The envelope.</param> /// <param name="endOfStream">if set to <c>true</c> [end of stream].</param> /// <param name="workspaceId">The workspace unique identifier.</param> /// <param name="dataListId">The data list unique identifier.</param> /// <param name="messageId">The message unique identifier.</param> /// <returns></returns> public async Task <Receipt> ExecuteCommand(Envelope envelope, bool endOfStream, Guid workspaceId, Guid dataListId, Guid messageId) { var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = Context.User }; try { var task = new Task <Receipt>(() => { try { StringBuilder sb; if (!MessageCache.TryGetValue(messageId, out sb)) { sb = new StringBuilder(); MessageCache.TryAdd(messageId, sb); } sb.Append(envelope.Content); if (endOfStream) { MessageCache.TryRemove(messageId, out sb); var request = _serializer.Deserialize <EsbExecuteRequest>(sb); var user = string.Empty; // ReSharper disable ConditionIsAlwaysTrueOrFalse if (Context.User.Identity != null) // ReSharper restore ConditionIsAlwaysTrueOrFalse { user = Context.User.Identity.Name; // set correct principle ;) Thread.CurrentPrincipal = Context.User; Dev2Logger.Log.Debug("Execute Command Invoked For [ " + user + " ] For Service [ " + request.ServiceName + " ]"); } var processRequest = internalServiceRequestHandler.ProcessRequest(request, workspaceId, dataListId, Context.ConnectionId); // Convert to chunked msg store for fetch ;) var length = processRequest.Length; var startIdx = 0; var rounds = (int)Math.Ceiling(length / GlobalConstants.MAX_SIZE_FOR_STRING); for (var q = 0; q < rounds; q++) { var len = (int)GlobalConstants.MAX_SIZE_FOR_STRING; if (len > (length - startIdx)) { len = (length - startIdx); } // always place requesting user in here ;) var future = new FutureReceipt { PartID = q, RequestID = messageId, User = user }; var value = processRequest.Substring(startIdx, len); if (!ResultsCache.Instance.AddResult(future, value)) { Dev2Logger.Log.Error(new Exception("Failed to build future receipt for [ " + Context.ConnectionId + " ] Value [ " + value + " ]")); } startIdx += len; } return(new Receipt { PartID = envelope.PartID, ResultParts = rounds }); } return(new Receipt { PartID = envelope.PartID, ResultParts = -1 }); } catch (Exception e) { Dev2Logger.Log.Error(e); } return(null); }); task.Start(); return(await task); } catch (Exception e) { Dev2Logger.Log.Error(e); } return(null); }
public async Task <Receipt> ExecuteCommand(Envelope envelope, bool endOfStream, Guid workspaceId, Guid dataListId, Guid messageId) { var internalServiceRequestHandler = new InternalServiceRequestHandler { ExecutingUser = Context.User }; try { var task = new Task <Receipt>(() => { try { if (!MessageCache.TryGetValue(messageId, out StringBuilder sb)) { sb = new StringBuilder(); MessageCache.TryAdd(messageId, sb); } sb.Append(envelope.Content); MessageCache.TryRemove(messageId, out sb); var request = _serializer.Deserialize <EsbExecuteRequest>(sb); var user = string.Empty; var userPrinciple = Context.User; if (Context.User.Identity != null) { user = Context.User.Identity.Name; userPrinciple = Context.User; Thread.CurrentPrincipal = userPrinciple; Dev2Logger.Debug("Execute Command Invoked For [ " + user + " : " + userPrinciple?.Identity?.AuthenticationType + " : " + userPrinciple?.Identity?.IsAuthenticated + " ] For Service [ " + request.ServiceName + " ]", GlobalConstants.WarewolfDebug); } StringBuilder processRequest = null; Common.Utilities.PerformActionInsideImpersonatedContext(userPrinciple, () => { processRequest = internalServiceRequestHandler.ProcessRequest(request, workspaceId, dataListId, Context.ConnectionId); }); var future = new FutureReceipt { PartID = 0, RequestID = messageId, User = user }; var value = processRequest?.ToString(); if (!string.IsNullOrEmpty(value) && !ResultsCache.Instance.AddResult(future, value)) { Dev2Logger.Error(new Exception(string.Format(ErrorResource.FailedToBuildFutureReceipt, Context.ConnectionId, value)), GlobalConstants.WarewolfError); } return(new Receipt { PartID = envelope.PartID, ResultParts = 1 }); } catch (Exception e) { Dev2Logger.Error(e, GlobalConstants.WarewolfError); } return(null); }); task.Start(); return(await task.ConfigureAwait(true)); } catch (Exception e) { Dev2Logger.Error(e, GlobalConstants.WarewolfError); Dev2Logger.Info("Is End of Stream:" + endOfStream, GlobalConstants.WarewolfInfo); } return(null); }