[Mono-dev] [PATCH] Fix Roles.IsUserInRole and enhance WebTest Framework

Marek Habersack grendel at twistedcode.net
Thu Feb 11 09:18:06 EST 2010


On Thu, 11 Feb 2010 03:16:33 -0600
"Tiaan Geldenhuys" <tagdev at gmail.com> wrote:

Hello,

> The attached patch is a fix for System.Web.Security.Roles.IsUserInRole to
> prevent ASP.NET MVC errors like the one shown at the bottom, which happens
> when a user hasn't logged on and requests public pages with sections that
> are dynamically removed using role-based access-restrictions.  It now
> behaves more like .NET that does not throw an exception.
Thanks, that part of the patch looks ok.
 
> Writing a test for this fix was a bit of a challenge -- it's no wonder there
> is not any working test for the Roles class yet.  :)  To address this, the
> MonoTests.SystemWeb.Framework.WebTest class was updated slightly to make it
> possible to write self-contained tests for cases where you might want more
> control over the resources that are copied to your hosted web application,
> such as when creating Web.config files dynamically.  The test for the
> current fix also serves as an example of how this can be done.  If these
> changes are approved, one can expand on this for all the other Roles
> methods.
Unfortunately, the test can't be implemented this way. I committed your code, but laid out in a
slightly different manner. The RoleProvider definition went to Web.config and Web.mono.config
resources since overwriting Web.config in the middle of running of the test suite is not acceptable
- the configs contain settings other tests rely upon. However, I have decided to commit your
changes to WebTest as they may come useful in other scenarios.

> 
> Please review and commit.
Committed in r151519 (trunk), r151520 (2.6 branch) and r151521 (2.4 branch - backported without the
WebTest changes)

> 
> Thank you,
Thanks!

marek
> Tiaan.
> 
> NOTE: The patch files can be used without changes on both trunk and the 2.6
> branch.
> 
> ---------------
> 
> [System.Web.HttpUnhandledException]: Exception of type
> 'System.Web.HttpUnhandledException' was thrown.
>   at System.Web.UI.Page.ProcessException (System.Exception e) [0x00000] in
> <filename unknown>:0 
>   at System.Web.UI.Page.ProcessRequest (System.Web.HttpContext context)
> [0x00000] in <filename unknown>:0 
>   at System.Web.HttpApplication+<Pipeline>c__Iterator5.MoveNext () [0x00000]
> in <filename unknown>:0 
>   at System.Web.HttpApplication.Tick () [0x00000] in <filename unknown>:0 
> [System.Web.HttpUnhandledException]: Exception of type
> 'System.Web.HttpUnhandledException' was thrown.
>   at System.Web.UI.Page.ProcessException (System.Exception e) [0x00000] in
> <filename unknown>:0 
>   at System.Web.UI.Page.ProcessRequest (System.Web.HttpContext context)
> [0x00000] in <filename unknown>:0 
>   at System.Web.Mvc.ViewPage.RenderView (System.Web.Mvc.ViewContext
> viewContext) [0x00000] in <filename unknown>:0 
>   at System.Web.Mvc.WebFormView.RenderViewPage (System.Web.Mvc.ViewContext
> context, System.Web.Mvc.ViewPage page) [0x00000] in <filename unknown>:0 
>   at System.Web.Mvc.WebFormView.Render (System.Web.Mvc.ViewContext
> viewContext, System.IO.TextWriter writer) [0x00000] in <filename unknown>:0 
>   at System.Web.Mvc.ViewResultBase.ExecuteResult
> (System.Web.Mvc.ControllerContext context) [0x00000] in <filename unknown>:0
> 
>   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult
> (System.Web.Mvc.ControllerContext controllerContext,
> System.Web.Mvc.ActionResult actionResult) [0x00000] in <filename unknown>:0 
>   at
> System.Web.Mvc.ControllerActionInvoker+<InvokeActionResultWithFilters>c__Ano
> nStoreyE.<>m__11 () [0x00000] in <filename unknown>:0 
>   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter
> (IResultFilter filter, System.Web.Mvc.ResultExecutingContext preContext,
> System.Func`1 continuation) [0x00000] in <filename unknown>:0 
> [System.ArgumentException]: Username cannot be empty.
>   at SomeRoleProvider.IsUserInRole (System.String username, System.String
> roleName) [0x00000] in <filename unknown>:0 
>   at System.Web.Security.Roles.IsUserInRole (System.String rolename)
> [0x00000] in <filename unknown>:0 
>   at ASP.views_shared_site_master.__RenderTree (System.Web.UI.HtmlTextWriter
> __output, System.Web.UI.Control parameterContainer) [0x00000] in <filename
> unknown>:0 
>   at System.Web.UI.Control.RenderChildren (System.Web.UI.HtmlTextWriter
> writer) [0x00000] in <filename unknown>:0 
>   at System.Web.UI.Control.Render (System.Web.UI.HtmlTextWriter writer)
> [0x00000] in <filename unknown>:0 
>   at System.Web.UI.Control.RenderControl (System.Web.UI.HtmlTextWriter
> writer) [0x00000] in <filename unknown>:0 
>   at System.Web.UI.Control.RenderChildren (System.Web.UI.HtmlTextWriter
> writer) [0x00000] in <filename unknown>:0 
>   at System.Web.UI.Control.Render (System.Web.UI.HtmlTextWriter writer)
> [0x00000] in <filename unknown>:0 
>   at System.Web.UI.Page.Render (System.Web.UI.HtmlTextWriter writer)
> [0x00000] in <filename unknown>:0 
>   at System.Web.Mvc.ViewPage.Render (System.Web.UI.HtmlTextWriter writer)
> [0x00000] in <filename unknown>:0 
>   at System.Web.UI.Control.RenderControl (System.Web.UI.HtmlTextWriter
> writer) [0x00000] in <filename unknown>:0 
>   at System.Web.UI.Page.RenderPage () [0x00000] in <filename unknown>:0 
>   at System.Web.UI.Page.InternalProcessRequest () [0x00000] in <filename
> unknown>:0 
>   at System.Web.UI.Page.ProcessRequest (System.Web.HttpContext context)
> [0x00000] in <filename unknown>:0
> 
> ===============
> 
> 
> 



More information about the Mono-devel-list mailing list