Skip to content

Commit

Permalink
more tests for #40 Handling of double slashes
Browse files Browse the repository at this point in the history
  • Loading branch information
mcweba committed Jun 26, 2017
1 parent a9eae9b commit 4e40355
Show file tree
Hide file tree
Showing 5 changed files with 136 additions and 0 deletions.
61 changes: 61 additions & 0 deletions src/test/java/org/swisspush/reststorage/CrudIntegrationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import static com.jayway.restassured.RestAssured.*;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.swisspush.reststorage.util.HttpRequestHeader.KEEP_DOUBLE_SLASHES_HEADER;

@RunWith(VertxUnitRunner.class)
public class CrudIntegrationTest extends RedisStorageIntegrationTestCase {
Expand All @@ -40,6 +41,66 @@ public void testDoubleSlashesHandling(TestContext context) {
async.complete();
}

@Test
public void testDoubleSlashesHandlingExtended(TestContext context) {
Async async = context.async();

with().urlEncodingEnabled(false).body("{ \"foo\": \"bar\" }").put("resources/myres");
given().urlEncodingEnabled(false).when().get("resources/myres").then().assertThat().body("foo", equalTo("bar"));
given().delete("resources/myres").then().assertThat().statusCode(200);
jedis.flushAll();

with().header(KEEP_DOUBLE_SLASHES_HEADER.getName(), "true").urlEncodingEnabled(false)
.body("{ \"foo\": \"bar\" }").put("resources/myres");
given().urlEncodingEnabled(false).when().get("resources/myres").then().assertThat().body("foo", equalTo("bar"));
given().delete("resources/myres").then().assertThat().statusCode(200);
jedis.flushAll();


with().urlEncodingEnabled(false)
.body("{ \"foo\": \"bar\" }").put("resources/myres");
given().header(KEEP_DOUBLE_SLASHES_HEADER.getName(), "true").urlEncodingEnabled(false)
.when().get("resources/myres").then().assertThat().body("foo", equalTo("bar"));
given().delete("resources/myres").then().assertThat().statusCode(200);
jedis.flushAll();

with().urlEncodingEnabled(false).header(KEEP_DOUBLE_SLASHES_HEADER.getName(), "true")
.body("{ \"foo\": \"bar\" }").put("resources/myres");
given().header(KEEP_DOUBLE_SLASHES_HEADER.getName(), "true").urlEncodingEnabled(false)
.when().get("resources/myres").then().assertThat().body("foo", equalTo("bar"));
given().delete("resources/myres").then().assertThat().statusCode(200);
jedis.flushAll();

with().urlEncodingEnabled(false).body("{ \"foo\": \"bar\" }").put("resources//myres");
given().urlEncodingEnabled(false).when().get("resources//myres").then().assertThat().body("foo", equalTo("bar"));
given().urlEncodingEnabled(false).delete("resources//myres").then().assertThat().statusCode(200);
jedis.flushAll();


with().urlEncodingEnabled(false).header(KEEP_DOUBLE_SLASHES_HEADER.getName(), "true")
.body("{ \"foo\": \"bar\" }").put("resources//myres");
given().urlEncodingEnabled(false).when().get("resources//myres").then().assertThat().statusCode(404);
given().urlEncodingEnabled(false).delete("resources//myres").then().assertThat().statusCode(404);
jedis.flushAll();

with().urlEncodingEnabled(false)
.body("{ \"foo\": \"bar\" }").put("resources//myres");
given().urlEncodingEnabled(false).header(KEEP_DOUBLE_SLASHES_HEADER.getName(), "true")
.when().get("resources//myres").then().assertThat().statusCode(404);
given().urlEncodingEnabled(false).header(KEEP_DOUBLE_SLASHES_HEADER.getName(), "true")
.delete("resources//myres").then().assertThat().statusCode(404);
jedis.flushAll();

with().urlEncodingEnabled(false).header(KEEP_DOUBLE_SLASHES_HEADER.getName(), "true")
.body("{ \"foo\": \"bar\" }").put("resources//myres");
given().urlEncodingEnabled(false).header(KEEP_DOUBLE_SLASHES_HEADER.getName(), "true")
.when().get("resources//myres").then().assertThat().body("foo", equalTo("bar"));
given().urlEncodingEnabled(false).header(KEEP_DOUBLE_SLASHES_HEADER.getName(), "true")
.delete("resources//myres").then().assertThat().statusCode(200);

async.complete();
}

@Test
public void testPutGetDelete(TestContext context) {
Async async = context.async();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,26 @@ public void deleteResource2BranchesDeleteOnRootNode() {
assertThat(jedis.exists("rest-storage:resources:project:server:test:test11:test22"), equalTo(false));
}

@Test
public void deleteResource2BranchesDeleteOnRootNodeWithDoubleColons() {

// ARRANGE
evalScriptPut(":project:server:test::test1:test2", "{\"content\": \"test/test1/test2\"}");
evalScriptPut(":project:server:test::test11:test22", "{\"content\": \"test/test1/test2\"}");

// ACT
evalScriptDel(":project");

// ASSERT
assertThat(jedis.zrangeByScore("rest-storage:collections:project", getNowAsDouble(), 9999999999999d).size(), equalTo(0));
assertThat(jedis.zrangeByScore("rest-storage:collections:project:server", getNowAsDouble(), 9999999999999d).size(), equalTo(0));
assertThat(jedis.zrangeByScore("rest-storage:collections:project:server:test", getNowAsDouble(), 9999999999999d).size(), equalTo(0));
assertThat(jedis.zrangeByScore("rest-storage:collections:project:server:test::test1", getNowAsDouble(), 9999999999999d).size(), equalTo(0));
assertThat(jedis.exists("rest-storage:resources:project:server:test::test11:test2"), equalTo(false));
assertThat(jedis.zrangeByScore("rest-storage:collections:project:server:test::test11", getNowAsDouble(), 9999999999999d).size(), equalTo(0));
assertThat(jedis.exists("rest-storage:resources:project:server:test::test11:test22"), equalTo(false));
}

@Test
public void deleteResource2BranchesDeleteOnForkNode() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,22 @@ public void getResourceWithEtag() {
assertThat(values3.get(2), not(equalTo(etag)));
}

/**
* Double slashes in paths are replaced with double colons in the lua scripts
*/
@Test
public void getResourceWithDoubleSlashesInPathPath() {

// ARRANGE
evalScriptPut(":project:server::test::test1:test2", "{\"content\": \"test/test1/test2\"}");

// ACT
List<String> value = (List<String>) evalScriptGet(":project:server::test::test1:test2");

// ASSERT
assertThat(TYPE_RESOURCE, equalTo(value.get(0)));
assertThat("{\"content\": \"test/test1/test2\"}", equalTo(value.get(1)));
}

@Test
public void getCollectionPathDepthIs3ChildIsResource() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,23 @@ public void putResourcePathDepthIs3() {
assertThat("{\"content\": \"test/test1/test2\"}", equalTo(jedis.hget("rest-storage:resources:project:server:test:test1:test2", RESOURCE)));
}

@Test
public void putResourcePathDepthIs3WithDoubleColons() {

// ACT
evalScriptPut(":project:server::test::test1:test2", "{\"content\": \"test/test1/test2\"}");

// ASSERT
assertThat("server", equalTo(jedis.zrangeByScore("rest-storage:collections:project", 0d, 9999999999999d).iterator().next()));
assertThat("", equalTo(jedis.zrangeByScore("rest-storage:collections:project:server", 0d, 9999999999999d).iterator().next()));
assertThat("test", equalTo(jedis.zrangeByScore("rest-storage:collections:project:server:", 0d, 9999999999999d).iterator().next()));
assertThat("", equalTo(jedis.zrangeByScore("rest-storage:collections:project:server::test", 0d, 9999999999999d).iterator().next()));
assertThat("test1", equalTo(jedis.zrangeByScore("rest-storage:collections:project:server::test:", 0d, 9999999999999d).iterator().next()));
assertThat("test2", equalTo(jedis.zrangeByScore("rest-storage:collections:project:server::test::test1", 0d, 9999999999999d).iterator().next()));
assertThat("{\"content\": \"test/test1/test2\"}", equalTo(jedis.hget("rest-storage:resources:project:server::test::test1:test2", RESOURCE)));
}


@Test
public void putResourcePathDepthIs3WithSiblings() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,28 @@ public void testStorageExpand() {
assertThat(value.get(2).get(1), equalTo("{\"content\": \"content_3\"}"));
}

@Test
public void testStorageExpandWithDoubleColons() {

// ARRANGE
evalScriptPut(":project:server:test::item1", "{\"content\": \"content_1\"}");
evalScriptPut(":project:server:test::item2", "{\"content\": \"content_2\"}");
evalScriptPut(":project:server:test::item3", "{\"content\": \"content_3\"}");

// ACT
List<String> subResources = Arrays.asList("item2", "item1", "item3");
List<List<String>> value = evalScriptStorageExpandAndExtract(":project:server:test:", subResources);

// ASSERT
assertThat(value.size(), equalTo(3));
assertThat(value.get(0).get(0), equalTo("item2"));
assertThat(value.get(0).get(1), equalTo("{\"content\": \"content_2\"}"));
assertThat(value.get(1).get(0), equalTo("item1"));
assertThat(value.get(1).get(1), equalTo("{\"content\": \"content_1\"}"));
assertThat(value.get(2).get(0), equalTo("item3"));
assertThat(value.get(2).get(1), equalTo("{\"content\": \"content_3\"}"));
}

@Test
public void testStorageExpandEmptySubresources() {

Expand Down

0 comments on commit 4e40355

Please sign in to comment.