Hi, I finalized with the great help of Oleg K. the work on CookieManager and the validation of TestCookieManager: - https://github.com/apache/jmeter/pull/64
@Andrei, I added 2 tests for the ".bt.com" case: - testAddCookieFromHeaderWithWildcard - testAddCookieFromHeaderWithWildcard2 Can you have a look and see if it answers your issue ? @Oleg, if you read this mailing list, and can have a look at the code it would be great. Thanks On Wed, Dec 16, 2015 at 9:01 AM, Andrey Pokhilko <[email protected]> wrote: > I reviewed the code for test case in the PR, looks fine. > > Andrey Pokhilko > > On 12/16/2015 01:06 AM, Philippe Mouawad wrote: > > Hi , > > I think that's what I wrote no ? > > It's failing because at step 2 , as the domain is "bt.com" not ".bt.com > ", > > we don't send the cookie , so I suppose we break the test. > > > > I think in HC4.5 (as per answer of Oleg on ) , domain matching occurs > based > > on (((ClientCookie) cookie).containsAttribute(ClientCookie.DOMAIN_ATTR)) > as > > per BasicDomainHandler#match method used by NetscapeDraftSpec policy. > > So I think we need to modify the Cookie JMeter class to preserve this > > information which is used to match cookies to URL. > > > > Regards > > > > > > On Tue, Dec 15, 2015 at 10:48 PM, Andrey Pokhilko <[email protected]> wrote: > > > >> No. > >> > >> Right test case is: > >> 1. we get cookie for domain .bt.com > >> 2. We do request to sub.bt.com and expect to send the cookie > >> > >> That's the case that was broken with upgrading to 0.4.5 in our field > tries. > >> > >> Andrey Pokhilko > >> > >> On 12/16/2015 12:44 AM, Philippe Mouawad wrote: > >>> Hi Andrei, > >>> I am not sure to understand. > >>> > >>> If you look at my test case sent to HTTPCLIENT, the cookie is > transmitted > >>> for subdomain.bt.com except that domain has value bt.com not ".bt.com > ". > >>> > >>> Do you mean that as on jmeter side , we get "bt.com" as domain, we > don't > >>> transmit in next request the cookie for subdomain.bt.com ? > >>> > >>> Thanks > >>> > >>> On Tue, Dec 15, 2015 at 10:40 PM, Andrey Pokhilko <[email protected]> wrote: > >>> > >>>> The impact of it is broken test plans. When cookie is set for .bt.com > , > >>>> it means that subdomain.bt.com must receive that cookie. That's by > RFC > >>>> AFAIK. > >>>> > >>>> Andrey Pokhilko > >>>> > >>>> On 12/15/2015 11:41 PM, Philippe Mouawad wrote: > >>>>> Hi Andrey, > >>>>> Test case is failing, but it seems to be a regular HC4.5 behaviour. > >>>>> > >>>>> What was the impact of this failing test case on JMeter side ? > >>>>> It's not clear for me from your mail, if you can give a full example > >> with > >>>>> each step it wil help me understand. > >>>>> > >>>>> Thanks > >>>>> > >>>>> On Tue, Dec 15, 2015 at 5:56 PM, Andrey Pokhilko <[email protected]> wrote: > >>>>> > >>>>>> It's one from 10/27/2015 06:32 PM: > >>>>>> > >>>>>> Hi, > >>>>>> > >>>>>> Today we've found an issue in using HTTPClient 4.5 in JMeter. If we > >> just > >>>>>> replace the libraries with no change to JMeter code, it stops > >> processing > >>>>>> wildcard domains for cookies. I've failed to understand if it is > >>>>>> regression in HTTPClient or something else. > >>>>>> > >>>>>> I've managed to write a unit test for it, I can commit it into trunk > >> if > >>>>>> needed. Unit test works fine on old libraries, but fails with 4.5: > >>>>>> > >>>>>> package org.apache.jmeter.protocol.http.control; > >>>>>> > >>>>>> import org.apache.http.cookie.Cookie; > >>>>>> import org.apache.jmeter.testelement.property.CollectionProperty; > >>>>>> import org.junit.Assert; > >>>>>> import org.junit.Test; > >>>>>> > >>>>>> import java.net.URL; > >>>>>> import java.util.List; > >>>>>> > >>>>>> public class HC4CookieHandlerTest { > >>>>>> > >>>>>> @Test public void testAddCookieFromHeader_wildcard() throws > >>>> Exception { > >>>>>> HC4CookieHandler obj = new > HC4CookieHandler("compatibility"); > >>>>>> URL url = new URL("https://subdomain.bt.com/page"); > >>>>>> CookieManager mgr = new CookieManager(); > >>>>>> String headerLine = "SMTRYNO=1; path=/; domain=.bt.com"; > >>>>>> obj.addCookieFromHeader(mgr, true, headerLine, url); > >>>>>> CollectionProperty cp = mgr.getCookies(); > >>>>>> List<Cookie> res = obj.getCookiesForUrl(cp, url, false); > >>>>>> Assert.assertEquals(1, res.size()); > >>>>>> for (Cookie cookie : res) { > >>>>>> Assert.assertEquals(".bt.com", cookie.getDomain()); > >>>>>> } > >>>>>> } > >>>>>> } > >>>>>> > >>>>>> > >>>>>> > >>>>>> Andrey Pokhilko > >>>>>> > >>>>>> On 12/15/2015 07:44 PM, Philippe Mouawad wrote: > >>>>>>> I was searching in my mails for it :-) Andrei > >>>>>>> > >>>>>>> On Tue, Dec 15, 2015 at 5:40 PM, Andrey Pokhilko <[email protected]> > wrote: > >>>>>>> > >>>>>>>> Hi, > >>>>>>>> > >>>>>>>> First of all - you've made awesome job on coordinating all this > >>>> tedious > >>>>>>>> communications with Oleg. Thanks, your contribution is invaluable > in > >>>> my > >>>>>>>> eyes. > >>>>>>>> > >>>>>>>> Just a note - don't you want to include the test case I provided > >> some > >>>>>>>> time ago into this PR? To make sure the initial case that > revealed > >>>>>>>> issues finally works... > >>>>>>>> > >>>>>>>> Andrey Pokhilko > >>>>>>>> > >>>>>>>> On 12/15/2015 07:31 PM, Philippe Mouawad wrote: > >>>>>>>>> Hi, > >>>>>>>>> I submitted a PR https://github.com/apache/jmeter/pull/62 after > >>>>>> fixing > >>>>>>>> the > >>>>>>>>> remaining issues I think. > >>>>>>>>> I still have one failing test , related to > >>>>>>>>> https://issues.apache.org/jira/browse/HTTPCLIENT-1705 that I > >>>> reopened. > >>>>>>>>> I commented the IgnorePolicy (testCookiePolicyIgnore) test as we > >>>> need > >>>>>>>> 4.5.2 > >>>>>>>>> I changed testCookies2 as per Oleg note and added testCookies3. > >>>>>>>>> > >>>>>>>>> Please review as this is very sensitive and I would really like a > >>>>>> second > >>>>>>>>> eye on it. > >>>>>>>>> > >>>>>>>>> Thanks > >>>>>>>>> Regards > >>>>>>>>> > >>>>>>>>> On Tue, Dec 15, 2015 at 2:16 PM, Philippe Mouawad < > >>>>>>>>> [email protected]> wrote: > >>>>>>>>> > >>>>>>>>>> Hi , > >>>>>>>>>> One last question, when is release of 4.5.2 expected as it > fixes 2 > >>>>>> bugs > >>>>>>>> we > >>>>>>>>>> are facing in JMeter. > >>>>>>>>>> > >>>>>>>>>> Thanks > >>>>>>>>>> Regards > >>>>>>>>>> > >>>>>>>>>> On Tue, Dec 15, 2015 at 2:05 PM, Philippe Mouawad < > >>>>>>>>>> [email protected]> wrote: > >>>>>>>>>> > >>>>>>>>>>> On Tue, Dec 15, 2015 at 9:36 AM, Oleg Kalnichevski < > >>>> [email protected] > >>>>>>>>>>> wrote: > >>>>>>>>>>> > >>>>>>>>>>>> On Mon, 2015-12-14 at 21:41 +0100, Philippe Mouawad wrote: > >>>>>>>>>>>>> Hello Oleg, > >>>>>>>>>>>>> Thanks . > >>>>>>>>>>>>> > >>>>>>>>>>>> Test case #testParseCookies > >>>>>>>>>>>> > >>>>>>>>>>>> The rest case does not look right to me. I am not sure I > >>>> understand > >>>>>>>> what > >>>>>>>>>>>> you are trying to test here. > >>>>>>>>>>>> > >>>>>>>>>>> Indeed, bad copy paste. > >>>>>>>>>>> > >>>>>>>>>>> The test fixed below works fine with HTTPCLIENT 4.5.1 so issue > is > >>>> on > >>>>>>>>>>> JMeter side. > >>>>>>>>>>> > >>>>>>>>>>>> Test case #testParseCookies > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>> The cookie in question does not have a version attribute > >> mandatory > >>>>>> for > >>>>>>>>>>>> standard (RFC 2109 and RFC 2965) cookies. Therefore it is > parsed > >>>> as > >>>>>>>>>>>> Netscape style cookie in which case comma is not considered a > >>>> valid > >>>>>>>>>>>> header element delimiter and is treated as normal character. > >>>>>>>>>>>> > >>>>>>>>>>> Thanks for explanation. > >>>>>>>>>>> Note that test case worked fine in HC3. Was it a bug in HC3 ? > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>>> Oleg > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>>>> Here it is: > >>>>>>>>>>>>> > >>>>>>>>>>>>> /* > >>>>>>>>>>>>> * > >>>>>>>> > ==================================================================== > >>>>>>>>>>>>> * Licensed to the Apache Software Foundation (ASF) under one > >>>>>>>>>>>>> * or more contributor license agreements. See the NOTICE > file > >>>>>>>>>>>>> * distributed with this work for additional information > >>>>>>>>>>>>> * regarding copyright ownership. The ASF licenses this file > >>>>>>>>>>>>> * to you under the Apache License, Version 2.0 (the > >>>>>>>>>>>>> * "License"); you may not use this file except in compliance > >>>>>>>>>>>>> * with the License. You may obtain a copy of the License at > >>>>>>>>>>>>> * > >>>>>>>>>>>>> * http://www.apache.org/licenses/LICENSE-2.0 > >>>>>>>>>>>>> * > >>>>>>>>>>>>> * Unless required by applicable law or agreed to in writing, > >>>>>>>>>>>>> * software distributed under the License is distributed on > an > >>>>>>>>>>>>> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > >>>>>>>>>>>>> * KIND, either express or implied. See the License for the > >>>>>>>>>>>>> * specific language governing permissions and limitations > >>>>>>>>>>>>> * under the License. > >>>>>>>>>>>>> * > >>>>>>>> > ==================================================================== > >>>>>>>>>>>>> * > >>>>>>>>>>>>> * This software consists of voluntary contributions made by > >> many > >>>>>>>>>>>>> * individuals on behalf of the Apache Software Foundation. > >> For > >>>>>> more > >>>>>>>>>>>>> * information on the Apache Software Foundation, please see > >>>>>>>>>>>>> * <http://www.apache.org/>. > >>>>>>>>>>>>> * > >>>>>>>>>>>>> */ > >>>>>>>>>>>>> package org.apache.http.client.protocol; > >>>>>>>>>>>>> > >>>>>>>>>>>>> import java.util.List; > >>>>>>>>>>>>> > >>>>>>>>>>>>> import org.apache.http.Header; > >>>>>>>>>>>>> import org.apache.http.HttpResponse; > >>>>>>>>>>>>> import org.apache.http.HttpResponseInterceptor; > >>>>>>>>>>>>> import org.apache.http.HttpVersion; > >>>>>>>>>>>>> import org.apache.http.client.CookieStore; > >>>>>>>>>>>>> import org.apache.http.cookie.Cookie; > >>>>>>>>>>>>> import org.apache.http.cookie.CookieOrigin; > >>>>>>>>>>>>> import org.apache.http.cookie.CookieSpec; > >>>>>>>>>>>>> import org.apache.http.cookie.SM; > >>>>>>>>>>>>> import org.apache.http.impl.client.BasicCookieStore; > >>>>>>>>>>>>> import org.apache.http.impl.cookie.DefaultCookieSpec; > >>>>>>>>>>>>> import org.apache.http.message.BasicHttpResponse; > >>>>>>>>>>>>> import org.apache.http.util.Asserts; > >>>>>>>>>>>>> import org.junit.Assert; > >>>>>>>>>>>>> import org.junit.Before; > >>>>>>>>>>>>> import org.junit.Test; > >>>>>>>>>>>>> > >>>>>>>>>>>>> public class TestResponseProcessCookies { > >>>>>>>>>>>>> > >>>>>>>>>>>>> private CookieOrigin cookieOrigin; > >>>>>>>>>>>>> private CookieSpec cookieSpec; > >>>>>>>>>>>>> private CookieStore cookieStore; > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Before > >>>>>>>>>>>>> public void setUp() throws Exception { > >>>>>>>>>>>>> this.cookieOrigin = new CookieOrigin("localhost", 80, > >>>> "/", > >>>>>>>>>>>> false); > >>>>>>>>>>>>> this.cookieSpec = new DefaultCookieSpec(); > >>>>>>>>>>>>> this.cookieStore = new BasicCookieStore(); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Test(expected=IllegalArgumentException.class) > >>>>>>>>>>>>> public void testResponseParameterCheck() throws > Exception { > >>>>>>>>>>>>> final HttpClientContext context = > >>>>>> HttpClientContext.create(); > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(null, context); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Test(expected=IllegalArgumentException.class) > >>>>>>>>>>>>> public void testContextParameterCheck() throws Exception > { > >>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(response, null); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Test > >>>>>>>>>>>>> public void testParseMultipleCookies() throws Exception { > >>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE, "test1=1; > >>>>>>>>>>>> comment=\"how,now\", > >>>>>>>>>>>>> test2=2; version=1"); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpClientContext context = > >>>>>> HttpClientContext.create(); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>>>>>>>>> this.cookieOrigin); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>>>>>>>>>>> this.cookieSpec); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>>>>>>>>>>> this.cookieStore); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final List<Cookie> cookies = > >>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>> Assert.assertNotNull(cookies); > >>>>>>>>>>>>> Assert.assertEquals(1, cookies.size()); > >>>>>>>>>>>>> final Cookie cookie = cookies.get(0); > >>>>>>>>>>>>> Assert.assertEquals(0, cookie.getVersion()); > >>>>>>>>>>>>> Assert.assertEquals("name1", cookie.getName()); > >>>>>>>>>>>>> Assert.assertEquals("value1", cookie.getValue()); > >>>>>>>>>>>>> Assert.assertEquals("localhost", cookie.getDomain()); > >>>>>>>>>>>>> Assert.assertEquals("/", cookie.getPath()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Test > >>>>>>>>>>>>> public void testParseCookies() throws Exception { > >>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE, "name1=value1"); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpClientContext context = > >>>>>> HttpClientContext.create(); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>>>>>>>>> this.cookieOrigin); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>>>>>>>>>>> this.cookieSpec); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>>>>>>>>>>> this.cookieStore); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final List<Cookie> cookies = > >>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>> List<Header> lstHdr = > >> cookieSpec.formatCookies(cookies); > >>>>>>>>>>>>> StringBuilder sbHdr = new StringBuilder(); > >>>>>>>>>>>>> for (Header header : lstHdr) { > >>>>>>>>>>>>> sbHdr.append(header.getValue()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> org.junit.Assert.assertEquals("test1=1; test2=2", > >>>>>>>>>>>> sbHdr.toString()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> @Test > >>>>>>>>>>>>> public void testParseCookies2() throws Exception { > >>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE, "test1=1;secure, > >>>>>>>>>>>> test2=2;secure"); > >>>>>>>>>>>>> final HttpClientContext context = > >>>>>> HttpClientContext.create(); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>>>>>>>>> this.cookieOrigin); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>>>>>>>>>>> this.cookieSpec); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>>>>>>>>>>> this.cookieStore); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final List<Cookie> cookies = > >>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>> List<Header> lstHdr = > >> cookieSpec.formatCookies(cookies); > >>>>>>>>>>>>> StringBuilder sbHdr = new StringBuilder(); > >>>>>>>>>>>>> for (Header header : lstHdr) { > >>>>>>>>>>>>> sbHdr.append(header.getValue()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> org.junit.Assert.assertEquals("test1=1; test2=2", > >>>>>>>>>>>> sbHdr.toString()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Test > >>>>>>>>>>>>> public void testNoCookieOrigin() throws Exception { > >>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE, "name1=value1"); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpClientContext context = > >>>>>> HttpClientContext.create(); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>> null); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>>>>>>>>>>> this.cookieSpec); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>>>>>>>>>>> this.cookieStore); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final List<Cookie> cookies = > >>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>> Assert.assertNotNull(cookies); > >>>>>>>>>>>>> Assert.assertEquals(0, cookies.size()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Test > >>>>>>>>>>>>> public void testNoCookieSpec() throws Exception { > >>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE, "name1=value1"); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpClientContext context = > >>>>>> HttpClientContext.create(); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>>>>>>>>> this.cookieOrigin); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>> null); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>>>>>>>>>>> this.cookieStore); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final List<Cookie> cookies = > >>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>> Assert.assertNotNull(cookies); > >>>>>>>>>>>>> Assert.assertEquals(0, cookies.size()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Test > >>>>>>>>>>>>> public void testNoCookieStore() throws Exception { > >>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE, "name1=value1"); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpClientContext context = > >>>>>> HttpClientContext.create(); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>>>>>>>>> this.cookieOrigin); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>>>>>>>>>>> this.cookieSpec); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>> null); > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final List<Cookie> cookies = > >>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>> Assert.assertNotNull(cookies); > >>>>>>>>>>>>> Assert.assertEquals(0, cookies.size()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Test > >>>>>>>>>>>>> public void testSetCookie2OverrideSetCookie() throws > >>>> Exception > >>>>>> { > >>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE, "name1=value1"); > >>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE2, "name1=value2; > >>>>>>>> Version=1"); > >>>>>>>>>>>>> final HttpClientContext context = > >>>>>> HttpClientContext.create(); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>>>>>>>>> this.cookieOrigin); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>>>>>>>>>>> this.cookieSpec); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>>>>>>>>>>> this.cookieStore); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final List<Cookie> cookies = > >>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>> Assert.assertNotNull(cookies); > >>>>>>>>>>>>> Assert.assertEquals(1, cookies.size()); > >>>>>>>>>>>>> final Cookie cookie = cookies.get(0); > >>>>>>>>>>>>> Assert.assertEquals(1, cookie.getVersion()); > >>>>>>>>>>>>> Assert.assertEquals("name1", cookie.getName()); > >>>>>>>>>>>>> Assert.assertEquals("value2", cookie.getValue()); > >>>>>>>>>>>>> Assert.assertEquals("localhost.local", > >>>> cookie.getDomain()); > >>>>>>>>>>>>> Assert.assertEquals("/", cookie.getPath()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Test > >>>>>>>>>>>>> public void testInvalidHeader() throws Exception { > >>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE2, "name=value; > >>>>>>>> Version=crap"); > >>>>>>>>>>>>> final HttpClientContext context = > >>>>>> HttpClientContext.create(); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>>>>>>>>> this.cookieOrigin); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>>>>>>>>>>> this.cookieSpec); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>>>>>>>>>>> this.cookieStore); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final List<Cookie> cookies = > >>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>> Assert.assertNotNull(cookies); > >>>>>>>>>>>>> Assert.assertTrue(cookies.isEmpty()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> @Test > >>>>>>>>>>>>> public void testCookieRejected() throws Exception { > >>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE2, "name=value; > Domain= > >>>>>>>>>>>>> www.somedomain.com; Version=1"); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpClientContext context = > >>>>>> HttpClientContext.create(); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>>>>>>>>> this.cookieOrigin); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>>>>>>>>>>> this.cookieSpec); > >>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>>>>>>>>>>> this.cookieStore); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>> > >>>>>>>>>>>>> final List<Cookie> cookies = > >>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>> Assert.assertNotNull(cookies); > >>>>>>>>>>>>> Assert.assertTrue(cookies.isEmpty()); > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> } > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>>> On Mon, Dec 14, 2015 at 9:34 PM, Oleg Kalnichevski < > >>>>>> [email protected] > >>>>>>>>>>>> wrote: > >>>>>>>>>>>>>> On Sun, 2015-12-13 at 22:28 +0100, Philippe Mouawad wrote: > >>>>>>>>>>>>>>> Finally, for those 2 I am not sure as per RFC6265, to use > >>>> them > >>>>>> , > >>>>>>>>>>>> put > >>>>>>>>>>>>>> code > >>>>>>>>>>>>>>> in > >> org.apache.http.client.protocol.TestResponseProcessCookies. > >>>>>>>>>>>>>>> They worked with HC3 but it does not mean they should work > >> with > >>>>>>>>>>>> HC4, but > >>>>>>>>>>>>>> I > >>>>>>>>>>>>>>> would like a confirmation: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> I cannot get the tests to compile due to missing instance > >>>>>> variables > >>>>>>>>>>>>>> cookieOrigin, cookieSpec and cookieStore. I'll take another > >> look > >>>>>> if > >>>>>>>>>>>> you > >>>>>>>>>>>>>> post the complete class. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Oleg > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>>>> @Test > >>>>>>>>>>>>>>> public void testParseCookies() throws Exception { > >>>>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE, "name1=value1"); > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> final HttpClientContext context = > >>>>>>>>>>>> HttpClientContext.create(); > >>>>>>>>>>>>>>> > context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>>>>>>>>>>> this.cookieOrigin); > >>>>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>>>>>>>>>>>>> this.cookieSpec); > >>>>>>>>>>>>>>> > context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>>>>>>>>>>>>> this.cookieStore); > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> final List<Cookie> cookies = > >>>>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>>>> List<Header> lstHdr = > >>>> cookieSpec.formatCookies(cookies); > >>>>>>>>>>>>>>> StringBuilder sbHdr = new StringBuilder(); > >>>>>>>>>>>>>>> for (Header header : lstHdr) { > >>>>>>>>>>>>>>> sbHdr.append(header.getValue()); > >>>>>>>>>>>>>>> } > >>>>>>>>>>>>>>> org.junit.Assert.assertEquals("test1=1; test2=2", > >>>>>>>>>>>>>> sbHdr.toString()); > >>>>>>>>>>>>>>> } > >>>>>>>>>>>>>>> @Test > >>>>>>>>>>>>>>> public void testParseCookies2() throws Exception { > >>>>>>>>>>>>>>> final HttpResponse response = new > >>>>>>>>>>>>>>> BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); > >>>>>>>>>>>>>>> response.addHeader(SM.SET_COOKIE, "test1=1;secure, > >>>>>>>>>>>>>> test2=2;secure"); > >>>>>>>>>>>>>>> final HttpClientContext context = > >>>>>>>>>>>> HttpClientContext.create(); > >>>>>>>>>>>>>>> > context.setAttribute(HttpClientContext.COOKIE_ORIGIN, > >>>>>>>>>>>>>>> this.cookieOrigin); > >>>>>>>>>>>>>>> context.setAttribute(HttpClientContext.COOKIE_SPEC, > >>>>>>>>>>>>>>> this.cookieSpec); > >>>>>>>>>>>>>>> > context.setAttribute(HttpClientContext.COOKIE_STORE, > >>>>>>>>>>>>>>> this.cookieStore); > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> final HttpResponseInterceptor interceptor = new > >>>>>>>>>>>>>>> ResponseProcessCookies(); > >>>>>>>>>>>>>>> interceptor.process(response, context); > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> final List<Cookie> cookies = > >>>>>> this.cookieStore.getCookies(); > >>>>>>>>>>>>>>> List<Header> lstHdr = > >>>> cookieSpec.formatCookies(cookies); > >>>>>>>>>>>>>>> StringBuilder sbHdr = new StringBuilder(); > >>>>>>>>>>>>>>> for (Header header : lstHdr) { > >>>>>>>>>>>>>>> sbHdr.append(header.getValue()); > >>>>>>>>>>>>>>> } > >>>>>>>>>>>>>>> org.junit.Assert.assertEquals("test1=1; test2=2", > >>>>>>>>>>>>>> sbHdr.toString()); > >>>>>>>>>>>>>>> } > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Thanks > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> On Sun, Dec 13, 2015 at 10:09 PM, Philippe Mouawad < > >>>>>>>>>>>>>>> [email protected]> wrote: > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Hi, > >>>>>>>>>>>>>>>> Created > >> https://issues.apache.org/jira/browse/HTTPCLIENT-1705 > >>>>>>>>>>>> with a > >>>>>>>>>>>>>> Test > >>>>>>>>>>>>>>>> case in it to show issue with Domain starting with ".". > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Regards > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> On Sun, Dec 13, 2015 at 9:50 PM, Philippe Mouawad < > >>>>>>>>>>>>>>>> [email protected]> wrote: > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Hi Oleg, > >>>>>>>>>>>>>>>>> Created > >>>> https://issues.apache.org/jira/browse/HTTPCLIENT-1705 > >>>>>>>>>>>> to show > >>>>>>>>>>>>>>>>> issue with Cookie Header ordering. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> Regards > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> On Sun, Dec 13, 2015 at 9:30 PM, Philippe Mouawad < > >>>>>>>>>>>>>>>>> [email protected]> wrote: > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Hi, > >>>>>>>>>>>>>>>>>> I created > >>>>>>>>>>>> https://issues.apache.org/jira/browse/HTTPCLIENT-1704 > >>>>>>>>>>>>>> with > >>>>>>>>>>>>>>>>>> JUnit test case so that you understand the difference we > >>>> have. > >>>>>>>>>>>>>>>>>> Regards > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> On Sat, Dec 5, 2015 at 1:26 PM, Oleg Kalnichevski < > >>>>>>>>>>>> [email protected]> > >>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> On Fri, 2015-12-04 at 21:43 +0100, Philippe Mouawad > >> wrote: > >>>>>>>>>>>>>>>>>>>> Thanks Oleg. > >>>>>>>>>>>>>>>>>>>> But look at > >>>>>>>>>>>>>>>>>>>> > >> > https://github.com/ubikloadpack/jmeter/blob/HC4_5/test/src/org/apache/jmeter/protocol/http/control/TestCookieManager.java#L368 > >>>>>>>>>>>>>>>>>>> , > >>>>>>>>>>>>>>>>>>>> it concerns IGNORE_POLICY > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> I really think there is at least one bug. > >>>>>>>>>>>>>>>>>>>> Regards > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Sure thing. All these issues may well be due to bugs in > >> HC. > >>>>>>>>>>>> Could > >>>>>>>>>>>>>> you > >>>>>>>>>>>>>>>>>>> please though reproduce them with unit tests that do > not > >>>>>>>>>>>> involve > >>>>>>>>>>>>>> JMeter > >>>>>>>>>>>>>>>>>>> specific code? > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Oleg > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> On Wed, Dec 2, 2015 at 4:00 PM, Oleg Kalnichevski < > >>>>>>>>>>>>>> [email protected]> > >>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>> On Wed, 2015-12-02 at 15:51 +0100, Philippe Mouawad > >>>> wrote: > >>>>>>>>>>>>>>>>>>>>>> Hi Oleg, > >>>>>>>>>>>>>>>>>>>>>> Thanks for answer. > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> Find my answers inline. > >>>>>>>>>>>>>>>>>>>>>> Regards > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> On Wed, Dec 2, 2015 at 3:36 PM, Oleg Kalnichevski < > >>>>>>>>>>>>>>>>>>> [email protected]> > >>>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>> On Tue, 2015-12-01 at 22:09 +0100, Philippe Mouawad > >>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>>>>>> Hello, > >>>>>>>>>>>>>>>>>>>>>>>> Any answer on this question ? > >>>>>>>>>>>>>>>>>>>>>>>> Thanks > >>>>>>>>>>>>>>>>>>>>>>>> Regards > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>> On Sun, Nov 15, 2015 at 8:39 PM, Philippe Mouawad > < > >>>>>>>>>>>>>>>>>>>>>>>> [email protected]> wrote: > >>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> Hello, > >>>>>>>>>>>>>>>>>>>>>>>>> We're in the process of migrating JMeter to last > >>>>>>>>>>>>>> HttpClient > >>>>>>>>>>>>>>>>>>> 4.5.1. > >>>>>>>>>>>>>>>>>>>>>>>>> We are now migrating the CookieManager to remove > >>>>>>>>>>>> all > >>>>>>>>>>>>>>>>>>> deprecated > >>>>>>>>>>>>>>>>>>>>> code. > >>>>>>>>>>>>>>>>>>>>>>>>> To test this class, we had a JUNIT class : > >>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>> > >> > https://github.com/ubikloadpack/jmeter/blob/HC4_5/test/src/org/apache/jmeter/protocol/http/control/TestCookieManager.java > >>>>>>>>>>>>>>>>>>>>>>>>> Before migration, it was still testing HC3 > >>>>>>>>>>>> version. > >>>>>>>>>>>>>>>>>>>>>>>>> So we first switched to HC4.23 and noticed some > >>>>>>>>>>>>>> failures: > >>>>>>>>>>>>>>>>>>>>>>> I am confused. Are you using HC 4.2.3 or HC 4.5.1? > >>>>>>>>>>>>>>>>>>>>>> As I wrote, first we switched our JUnit tests to use > >> HC4 > >>>>>>>>>>>>>>>>>>> Implementation > >>>>>>>>>>>>>>>>>>>>> of > >>>>>>>>>>>>>>>>>>>>>> CookieHandler and used 4.2.3, we got some failures > >>>>>>>>>>>> compared to > >>>>>>>>>>>>>>>>>>> HC3. > >>>>>>>>>>>>>>>>>>>>>> Then we switched from HC 4.2.3 to HC 4.5.1 and got > >> other > >>>>>>>>>>>>>> failures > >>>>>>>>>>>>>>>>>>> all > >>>>>>>>>>>>>>>>>>>>>> detailed in initial mail. > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> What policy does > >>>>>>>>>>>>>>>>>>>>>>> CookeManager use internally? > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> It depends on tests, you can see in the code that > >>>>>>>>>>>> depending on > >>>>>>>>>>>>>>>>>>> test > >>>>>>>>>>>>>>>>>>>>> method > >>>>>>>>>>>>>>>>>>>>>> we set different Policy to test them. > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> You ought to be using RFC6265 policy either in strict > >> or > >>>>>>>>>>>> relaxed > >>>>>>>>>>>>>>>>>>> mode > >>>>>>>>>>>>>>>>>>>>> and nothing else. All other policies have been marked > >> as > >>>>>>>>>>>>>> obsolete > >>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>>> have already been removed in 5.0 (trunk). > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Oleg > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >> --------------------------------------------------------------------- > >>>>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail: > >>>>>>>>>>>>>> [email protected] > >>>>>>>>>>>>>>>>>>>>> For additional commands, e-mail: > >>>>>>>>>>>>>>>>>>> [email protected] > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >> --------------------------------------------------------------------- > >>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail: > >>>>>>>>>>>> [email protected] > >>>>>>>>>>>>>>>>>>> For additional commands, e-mail: > >>>>>>>>>>>>>> [email protected] > >>>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>>> Cordialement. > >>>>>>>>>>>>>>>>>> Philippe Mouawad. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>>> Cordialement. > >>>>>>>>>>>>>>>>> Philippe Mouawad. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> -- > >>>>>>>>>>>>>>>> Cordialement. > >>>>>>>>>>>>>>>> Philippe Mouawad. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>> -- > >>>>>>>>>>> Cordialement. > >>>>>>>>>>> Philippe Mouawad. > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> -- > >>>>>>>>>> Cordialement. > >>>>>>>>>> Philippe Mouawad. > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >> > > > > -- Cordialement. Philippe Mouawad.
