Skip to content
This repository was archived by the owner on Feb 8, 2023. It is now read-only.

Commit c323bff

Browse files
Integration test for multiple calls to set the same cookie
1 parent 8930b4e commit c323bff

File tree

6 files changed

+116
-18
lines changed

6 files changed

+116
-18
lines changed

pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,18 @@
189189
<version>2.0.2-beta</version>
190190
<scope>test</scope>
191191
</dependency>
192+
<dependency>
193+
<groupId>org.apache.httpcomponents</groupId>
194+
<artifactId>httpclient</artifactId>
195+
<version>4.3.3</version>
196+
<scope>test</scope>
197+
</dependency>
198+
<dependency>
199+
<groupId>org.apache.httpcomponents</groupId>
200+
<artifactId>fluent-hc</artifactId>
201+
<version>4.3.3</version>
202+
<scope>test</scope>
203+
</dependency>
192204
</dependencies>
193205
<profiles>
194206
<profile>

src/main/java/org/jscookie/Cookies.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ public synchronized void set( String name, String value, AttributesDefinition at
145145
return;
146146
}
147147

148-
response.addHeader( "Set-Cookie", header.toString() );
148+
setCookie( header.toString(), response );
149149
}
150150

151151
@Override
@@ -247,6 +247,13 @@ private Attributes extend( AttributesDefinition... mergeables ) {
247247
return result;
248248
}
249249

250+
private void setCookie( String cookieValue, HttpServletResponse response ) {
251+
if ( response.getHeaders( "Set-Cookie" ).contains( cookieValue ) ) {
252+
return;
253+
}
254+
response.addHeader( "Set-Cookie", cookieValue );
255+
}
256+
250257
private String encode( String decoded ) {
251258
return encode( decoded, new HashSet<Integer>() );
252259
}

src/test/java/org/jscookie/test/integration/encoding/CookiesEncodingIT.java

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.jscookie.test.integration.encoding;
22

3-
import java.io.File;
43
import java.net.URL;
54
import java.util.concurrent.TimeUnit;
65

@@ -14,10 +13,10 @@
1413
import org.jboss.shrinkwrap.api.ShrinkWrap;
1514
import org.jboss.shrinkwrap.api.importer.ExplodedImporter;
1615
import org.jboss.shrinkwrap.api.spec.WebArchive;
17-
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
1816
import org.jscookie.test.integration.qunit.QUnitPageObject;
1917
import org.jscookie.test.integration.qunit.QUnitResults;
2018
import org.jscookie.test.integration.test.utils.Debug;
19+
import org.jscookie.test.unit.utils.IntegrationUtils;
2120
import org.junit.Assert;
2221
import org.junit.Test;
2322
import org.junit.runner.RunWith;
@@ -31,26 +30,12 @@ public class CookiesEncodingIT {
3130

3231
@Deployment
3332
public static Archive<?> createDeployment() {
34-
boolean RECURSIVE_TRUE = true;
35-
3633
GenericArchive qunitFiles = ShrinkWrap.create( GenericArchive.class )
3734
.as( ExplodedImporter.class )
3835
.importDirectory( "bower_components/js-cookie/" )
3936
.as( GenericArchive.class );
4037

41-
WebArchive war = ShrinkWrap.create( WebArchive.class )
42-
.addPackage( "org.jscookie" )
43-
.addPackages( RECURSIVE_TRUE, "org.jscookie.test.integration" )
44-
.addAsLibraries(
45-
Maven.resolver()
46-
.loadPomFromFile( "pom.xml" )
47-
.resolve(
48-
"joda-time:joda-time",
49-
"com.fasterxml.jackson.core:jackson-databind"
50-
)
51-
.withTransitivity()
52-
.as( File.class )
53-
)
38+
WebArchive war = IntegrationUtils.createCommonDeployment()
5439
.merge( qunitFiles, "/", Filters.includeAll() );
5540

5641
System.out.println( " ----- LOGGING THE FILES ADDED TO JBOSS" );
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.jscookie.test.integration.write;
2+
3+
import javax.servlet.annotation.WebServlet;
4+
import javax.servlet.http.HttpServlet;
5+
import javax.servlet.http.HttpServletRequest;
6+
import javax.servlet.http.HttpServletResponse;
7+
8+
import org.jscookie.Cookies;
9+
10+
@WebServlet( "/multiple-set-cookie" )
11+
public class MultipleSetCookieServlet extends HttpServlet {
12+
private static final long serialVersionUID = 1;
13+
@Override
14+
public void doGet( HttpServletRequest request, HttpServletResponse response ) {
15+
Cookies cookies = Cookies.initFromServlet( request, response );
16+
cookies.set( "c", "v" );
17+
cookies.set( "c", "v" );
18+
}
19+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.jscookie.test.integration.write;
2+
3+
import java.io.IOException;
4+
import java.net.URL;
5+
6+
import org.apache.http.Header;
7+
import org.apache.http.HttpResponse;
8+
import org.apache.http.client.fluent.Request;
9+
import org.apache.http.client.fluent.Response;
10+
import org.jboss.arquillian.container.test.api.Deployment;
11+
import org.jboss.arquillian.container.test.api.RunAsClient;
12+
import org.jboss.arquillian.junit.Arquillian;
13+
import org.jboss.arquillian.test.api.ArquillianResource;
14+
import org.jboss.shrinkwrap.api.Archive;
15+
import org.jboss.shrinkwrap.api.spec.WebArchive;
16+
import org.jscookie.test.unit.utils.IntegrationUtils;
17+
import org.junit.Assert;
18+
import org.junit.Test;
19+
import org.junit.runner.RunWith;
20+
21+
@RunWith( Arquillian.class )
22+
public class SetCookieIT {
23+
@Deployment
24+
public static Archive<?> createDeployment() {
25+
WebArchive war = IntegrationUtils.createCommonDeployment();
26+
27+
System.out.println( " ----- LOGGING THE FILES ADDED TO JBOSS" );
28+
System.out.println( war.toString( true ) );
29+
System.out.println( " ----- END OF LOGGING THE FILES ADDED TO JBOSS" );
30+
31+
return war;
32+
}
33+
34+
@RunAsClient
35+
@Test
36+
public void read_qunit_test( @ArquillianResource URL baseURL ) throws IOException {
37+
HttpResponse content = request( baseURL + "multiple-set-cookie" );
38+
Header[] headers = content.getHeaders( "Set-Cookie" );
39+
Assert.assertEquals( "Should set a single header", 1, headers.length );
40+
Assert.assertEquals( "Should not repeat the value", "c=v; Path=/", headers[ 0 ].getValue() );
41+
}
42+
43+
private HttpResponse request( String url ) throws IOException {
44+
Request request = Request.Get( url );
45+
Response response = request.execute();
46+
HttpResponse httpResponse = response.returnResponse();
47+
return httpResponse;
48+
}
49+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.jscookie.test.unit.utils;
2+
3+
import java.io.File;
4+
5+
import org.jboss.shrinkwrap.api.ShrinkWrap;
6+
import org.jboss.shrinkwrap.api.spec.WebArchive;
7+
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
8+
9+
public class IntegrationUtils {
10+
public static WebArchive createCommonDeployment() {
11+
boolean RECURSIVE_TRUE = true;
12+
return ShrinkWrap.create( WebArchive.class )
13+
.addPackage( "org.jscookie" )
14+
.addPackages( RECURSIVE_TRUE, "org.jscookie.test.integration" )
15+
.addAsLibraries(
16+
Maven.resolver()
17+
.loadPomFromFile( "pom.xml" )
18+
.resolve(
19+
"joda-time:joda-time",
20+
"com.fasterxml.jackson.core:jackson-databind"
21+
)
22+
.withTransitivity()
23+
.as( File.class )
24+
);
25+
}
26+
}

0 commit comments

Comments
 (0)