Unit tests looks fine. Andrey Pokhilko
On 12/19/2015 01:44 AM, Philippe Mouawad wrote: > 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 <a...@ya.ru> 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 <a...@ya.ru> 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 <a...@ya.ru> 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 <a...@ya.ru> 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 <a...@ya.ru> >> 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 < >>>>>>>>>>> philippe.moua...@gmail.com> 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 < >>>>>>>>>>>> philippe.moua...@gmail.com> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> On Tue, Dec 15, 2015 at 9:36 AM, Oleg Kalnichevski < >>>>>> ol...@apache.org >>>>>>>>>>>>> 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 < >>>>>>>> ol...@apache.org >>>>>>>>>>>>>> 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 < >>>>>>>>>>>>>>>>> philippe.moua...@gmail.com> 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 < >>>>>>>>>>>>>>>>>> philippe.moua...@gmail.com> 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 < >>>>>>>>>>>>>>>>>>> philippe.moua...@gmail.com> 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 < >>>>>>>>>>>>>> ol...@apache.org> >>>>>>>>>>>>>>>>>>>> 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 < >>>>>>>>>>>>>>>> ol...@apache.org> >>>>>>>>>>>>>>>>>>>>> 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 < >>>>>>>>>>>>>>>>>>>>> ol...@apache.org> >>>>>>>>>>>>>>>>>>>>>>> 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 >> < >>>>>>>>>>>>>>>>>>>>>>>>>> philippe.moua...@gmail.com> 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: >>>>>>>>>>>>>>>> httpclient-users-unsubscr...@hc.apache.org >>>>>>>>>>>>>>>>>>>>>>> For additional commands, e-mail: >>>>>>>>>>>>>>>>>>>>> httpclient-users-h...@hc.apache.org >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>> --------------------------------------------------------------------- >>>>>>>>>>>>>>>>>>>>> To unsubscribe, e-mail: >>>>>>>>>>>>>> httpclient-users-unsubscr...@hc.apache.org >>>>>>>>>>>>>>>>>>>>> For additional commands, e-mail: >>>>>>>>>>>>>>>> httpclient-users-h...@hc.apache.org >>>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>>> Cordialement. >>>>>>>>>>>>>>>>>>>> Philippe Mouawad. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>> Cordialement. >>>>>>>>>>>>>>>>>>> Philippe Mouawad. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>> Cordialement. >>>>>>>>>>>>>>>>>> Philippe Mouawad. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> Cordialement. >>>>>>>>>>>>> Philippe Mouawad. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> Cordialement. >>>>>>>>>>>> Philippe Mouawad. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >> >