You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Francesco Chicchiricc�� <il...@apache.org> on 2020/01/10 07:30:56 UTC

Test errors after upgrading to Wicket 8.7.0

Hi there,
it seems we have some issues with Wicket Tester, after upgrading to 8.7.0 from 8.6.1.

In particular, due to the change [1] for WICKET-6708, we have found that MockWebRequest is not behaving as expected; no troubles occur instead during normal operations with HttpServletRequest.

The test failures occur because MockWebRequest's method is (correctly) set to POST but parameters are submitted with URL, when using DropDownChoice with onChange behavior [2].

Of course, such situation was fine with code prior to [1] but not working anymore: I have verified that expected submit parameters are part of URL, hence are available as getQueryParameters() but getPostParameters() is invoked instead.

FYI, one of failing test cases in [3].

Please let me know if this is a bug with MockWebRequest or whether we have to update our test code, thanks.

Regards.

[1] https://github.com/apache/wicket/commit/9c3129517a15c37cc90fb27a697868a825940aa0#diff-51cf2faf6078497df77cc6d995dd1b98R763
[2] https://github.com/apache/syncope/blob/2_1_X/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java#L71
[3] https://github.com/apache/syncope/blob/2_1_X/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LogsITCase.java#L57

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Test errors after upgrading to Wicket 8.7.0

Posted by Francesco Chicchiricc�� <il...@apache.org>.
Worked like a charm, thanks!

https://github.com/apache/syncope/commit/f5f0bf05cd88e8d5ab6e682f7e1bb6f3c3249c82#diff-1b179dcf722c88b5094875ab9d08d6e3R65

Regards.

On 2020/01/10 13:02:20, Martin Grigorov <mg...@apache.org> wrote: 
> On Fri, Jan 10, 2020 at 2:55 PM Francesco Chicchiriccò <il...@apache.org>
> wrote:
> 
> > On 2020/01/10 12:24:49, Martin Grigorov <mg...@apache.org> wrote:
> > > Hi Francesco,
> > >
> > > This was a bug in Wicket, a security related one.
> > > You will need to fix your code.
> > >
> > > The change should look something like this:
> > >
> > >
> > > -               tester.getRequest().setParameter("select",
> > > page.option1.getValue());
> > > -               tester.getRequest().setParameter("text", "text is
> > required");
> > > -               tester.submitForm(page.form);
> > > +               final FormTester formTester2 =
> > tester.newFormTester("form");
> > > +               formTester2.setValue("select", "option1");
> > > +               formTester2.setValue("text", "text is required");
> > > +               formTester2.submit();
> > >
> > > from
> > >
> > https://gitbox.apache.org/repos/asf?p=wicket.git;a=commitdiff;h=0c19cf8;hp=3d8f8b306a92cee71020a633be1d347177d7b7fc
> >
> > Thanks Martin.
> >
> > As I can see from above, you have a Form instance, which we don't have in
> > [2].
> >
> > Moreover, the problem only occurs with MockWebRequest, not with regular
> > operations (e.g. HttpServletRequest), hence I'd need to introduce a Form
> > only to let tests pass...
> >
> > Is there any way to let WicketTester use a different implementation then
> > MockWebRequest?
> >
> 
> This is how we resolve the method:
> 
> +       protected List<StringValue> getParameterValues(String inputName)
> +       {
> +               String method = Form.METHOD_POST;
> +               final Form form = findParent(Form.class);
> +               final Request request = getRequest();
> +               if (getRequest().getContainerRequest() instanceof
> HttpServletRequest)
> +               {
> +                       method = ((HttpServletRequest)
> getRequest().getContainerRequest()).getMethod();
> +               }
> +               else if (form != null)
> +               {
> +                       method = form.getMethod();
> +               }
> 
> Try with:
> tester.getRequest().setMethod("get");
> tester.getRequest().setParameter("select", page.option1.getValue());
> ...
> 
> 
> > Regards.
> >
> > > On Fri, Jan 10, 2020 at 9:31 AM Francesco Chicchiriccò <
> > ilgrosso@apache.org>
> > > wrote:
> > >
> > > > Hi there,
> > > > it seems we have some issues with Wicket Tester, after upgrading to
> > 8.7.0
> > > > from 8.6.1.
> > > >
> > > > In particular, due to the change [1] for WICKET-6708, we have found
> > that
> > > > MockWebRequest is not behaving as expected; no troubles occur instead
> > > > during normal operations with HttpServletRequest.
> > > >
> > > > The test failures occur because MockWebRequest's method is (correctly)
> > set
> > > > to POST but parameters are submitted with URL, when using
> > DropDownChoice
> > > > with onChange behavior [2].
> > > >
> > > > Of course, such situation was fine with code prior to [1] but not
> > working
> > > > anymore: I have verified that expected submit parameters are part of
> > URL,
> > > > hence are available as getQueryParameters() but getPostParameters() is
> > > > invoked instead.
> > > >
> > > > FYI, one of failing test cases in [3].
> > > >
> > > > Please let me know if this is a bug with MockWebRequest or whether we
> > have
> > > > to update our test code, thanks.
> > > >
> > > > Regards.
> > > >
> > > > [1]
> > https://github.com/apache/wicket/commit/9c3129517a15c37cc90fb27a697868a825940aa0#diff-51cf2faf6078497df77cc6d995dd1b98R763
> > > > [2]
> > https://github.com/apache/syncope/blob/2_1_X/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java#L71
> > > > [3]
> > https://github.com/apache/syncope/blob/2_1_X/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LogsITCase.java#L57
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> > For additional commands, e-mail: users-help@wicket.apache.org
> >
> >
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Test errors after upgrading to Wicket 8.7.0

Posted by Martin Grigorov <mg...@apache.org>.
On Fri, Jan 10, 2020 at 2:55 PM Francesco Chicchiriccò <il...@apache.org>
wrote:

> On 2020/01/10 12:24:49, Martin Grigorov <mg...@apache.org> wrote:
> > Hi Francesco,
> >
> > This was a bug in Wicket, a security related one.
> > You will need to fix your code.
> >
> > The change should look something like this:
> >
> >
> > -               tester.getRequest().setParameter("select",
> > page.option1.getValue());
> > -               tester.getRequest().setParameter("text", "text is
> required");
> > -               tester.submitForm(page.form);
> > +               final FormTester formTester2 =
> tester.newFormTester("form");
> > +               formTester2.setValue("select", "option1");
> > +               formTester2.setValue("text", "text is required");
> > +               formTester2.submit();
> >
> > from
> >
> https://gitbox.apache.org/repos/asf?p=wicket.git;a=commitdiff;h=0c19cf8;hp=3d8f8b306a92cee71020a633be1d347177d7b7fc
>
> Thanks Martin.
>
> As I can see from above, you have a Form instance, which we don't have in
> [2].
>
> Moreover, the problem only occurs with MockWebRequest, not with regular
> operations (e.g. HttpServletRequest), hence I'd need to introduce a Form
> only to let tests pass...
>
> Is there any way to let WicketTester use a different implementation then
> MockWebRequest?
>

This is how we resolve the method:

+       protected List<StringValue> getParameterValues(String inputName)
+       {
+               String method = Form.METHOD_POST;
+               final Form form = findParent(Form.class);
+               final Request request = getRequest();
+               if (getRequest().getContainerRequest() instanceof
HttpServletRequest)
+               {
+                       method = ((HttpServletRequest)
getRequest().getContainerRequest()).getMethod();
+               }
+               else if (form != null)
+               {
+                       method = form.getMethod();
+               }

Try with:
tester.getRequest().setMethod("get");
tester.getRequest().setParameter("select", page.option1.getValue());
...


> Regards.
>
> > On Fri, Jan 10, 2020 at 9:31 AM Francesco Chicchiriccò <
> ilgrosso@apache.org>
> > wrote:
> >
> > > Hi there,
> > > it seems we have some issues with Wicket Tester, after upgrading to
> 8.7.0
> > > from 8.6.1.
> > >
> > > In particular, due to the change [1] for WICKET-6708, we have found
> that
> > > MockWebRequest is not behaving as expected; no troubles occur instead
> > > during normal operations with HttpServletRequest.
> > >
> > > The test failures occur because MockWebRequest's method is (correctly)
> set
> > > to POST but parameters are submitted with URL, when using
> DropDownChoice
> > > with onChange behavior [2].
> > >
> > > Of course, such situation was fine with code prior to [1] but not
> working
> > > anymore: I have verified that expected submit parameters are part of
> URL,
> > > hence are available as getQueryParameters() but getPostParameters() is
> > > invoked instead.
> > >
> > > FYI, one of failing test cases in [3].
> > >
> > > Please let me know if this is a bug with MockWebRequest or whether we
> have
> > > to update our test code, thanks.
> > >
> > > Regards.
> > >
> > > [1]
> https://github.com/apache/wicket/commit/9c3129517a15c37cc90fb27a697868a825940aa0#diff-51cf2faf6078497df77cc6d995dd1b98R763
> > > [2]
> https://github.com/apache/syncope/blob/2_1_X/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java#L71
> > > [3]
> https://github.com/apache/syncope/blob/2_1_X/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LogsITCase.java#L57
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>

Re: Test errors after upgrading to Wicket 8.7.0

Posted by Francesco Chicchiricc�� <il...@apache.org>.
On 2020/01/10 12:24:49, Martin Grigorov <mg...@apache.org> wrote: 
> Hi Francesco,
> 
> This was a bug in Wicket, a security related one.
> You will need to fix your code.
> 
> The change should look something like this:
> 
> 
> -               tester.getRequest().setParameter("select",
> page.option1.getValue());
> -               tester.getRequest().setParameter("text", "text is required");
> -               tester.submitForm(page.form);
> +               final FormTester formTester2 = tester.newFormTester("form");
> +               formTester2.setValue("select", "option1");
> +               formTester2.setValue("text", "text is required");
> +               formTester2.submit();
> 
> from
> https://gitbox.apache.org/repos/asf?p=wicket.git;a=commitdiff;h=0c19cf8;hp=3d8f8b306a92cee71020a633be1d347177d7b7fc

Thanks Martin.

As I can see from above, you have a Form instance, which we don't have in [2].

Moreover, the problem only occurs with MockWebRequest, not with regular operations (e.g. HttpServletRequest), hence I'd need to introduce a Form only to let tests pass...

Is there any way to let WicketTester use a different implementation then MockWebRequest?

Regards.

> On Fri, Jan 10, 2020 at 9:31 AM Francesco Chicchiriccò <il...@apache.org>
> wrote:
> 
> > Hi there,
> > it seems we have some issues with Wicket Tester, after upgrading to 8.7.0
> > from 8.6.1.
> >
> > In particular, due to the change [1] for WICKET-6708, we have found that
> > MockWebRequest is not behaving as expected; no troubles occur instead
> > during normal operations with HttpServletRequest.
> >
> > The test failures occur because MockWebRequest's method is (correctly) set
> > to POST but parameters are submitted with URL, when using DropDownChoice
> > with onChange behavior [2].
> >
> > Of course, such situation was fine with code prior to [1] but not working
> > anymore: I have verified that expected submit parameters are part of URL,
> > hence are available as getQueryParameters() but getPostParameters() is
> > invoked instead.
> >
> > FYI, one of failing test cases in [3].
> >
> > Please let me know if this is a bug with MockWebRequest or whether we have
> > to update our test code, thanks.
> >
> > Regards.
> >
> > [1] https://github.com/apache/wicket/commit/9c3129517a15c37cc90fb27a697868a825940aa0#diff-51cf2faf6078497df77cc6d995dd1b98R763
> > [2] https://github.com/apache/syncope/blob/2_1_X/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java#L71
> > [3] https://github.com/apache/syncope/blob/2_1_X/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LogsITCase.java#L57

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: Test errors after upgrading to Wicket 8.7.0

Posted by Martin Grigorov <mg...@apache.org>.
Hi Francesco,

This was a bug in Wicket, a security related one.
You will need to fix your code.

The change should look something like this:


-               tester.getRequest().setParameter("select",
page.option1.getValue());
-               tester.getRequest().setParameter("text", "text is required");
-               tester.submitForm(page.form);
+               final FormTester formTester2 = tester.newFormTester("form");
+               formTester2.setValue("select", "option1");
+               formTester2.setValue("text", "text is required");
+               formTester2.submit();

from
https://gitbox.apache.org/repos/asf?p=wicket.git;a=commitdiff;h=0c19cf8;hp=3d8f8b306a92cee71020a633be1d347177d7b7fc


On Fri, Jan 10, 2020 at 9:31 AM Francesco Chicchiriccò <il...@apache.org>
wrote:

> Hi there,
> it seems we have some issues with Wicket Tester, after upgrading to 8.7.0
> from 8.6.1.
>
> In particular, due to the change [1] for WICKET-6708, we have found that
> MockWebRequest is not behaving as expected; no troubles occur instead
> during normal operations with HttpServletRequest.
>
> The test failures occur because MockWebRequest's method is (correctly) set
> to POST but parameters are submitted with URL, when using DropDownChoice
> with onChange behavior [2].
>
> Of course, such situation was fine with code prior to [1] but not working
> anymore: I have verified that expected submit parameters are part of URL,
> hence are available as getQueryParameters() but getPostParameters() is
> invoked instead.
>
> FYI, one of failing test cases in [3].
>
> Please let me know if this is a bug with MockWebRequest or whether we have
> to update our test code, thanks.
>
> Regards.
>
> [1]
> https://github.com/apache/wicket/commit/9c3129517a15c37cc90fb27a697868a825940aa0#diff-51cf2faf6078497df77cc6d995dd1b98R763
> [2]
> https://github.com/apache/syncope/blob/2_1_X/client/console/src/main/java/org/apache/syncope/client/console/panels/AbstractLogsPanel.java#L71
> [3]
> https://github.com/apache/syncope/blob/2_1_X/fit/core-reference/src/test/java/org/apache/syncope/fit/console/LogsITCase.java#L57
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>