diff --git a/managed_vms/sparkjava/pom.xml b/managed_vms/sparkjava/pom.xml
index dfc738edf23..8218eb1be67 100644
--- a/managed_vms/sparkjava/pom.xml
+++ b/managed_vms/sparkjava/pom.xml
@@ -30,7 +30,7 @@
com.google.gcloud
gcloud-java
- 0.1.3
+ 0.1.4
diff --git a/managed_vms/sparkjava/src/main/java/com/google/appengine/sparkdemo/UserController.java b/managed_vms/sparkjava/src/main/java/com/google/appengine/sparkdemo/UserController.java
index ab44c17f10a..0c1a5096af6 100644
--- a/managed_vms/sparkjava/src/main/java/com/google/appengine/sparkdemo/UserController.java
+++ b/managed_vms/sparkjava/src/main/java/com/google/appengine/sparkdemo/UserController.java
@@ -36,7 +36,9 @@ public class UserController {
public UserController(final UserService userService) {
Spark.staticFileLocation("/public");
- get("/api/users", (req, res) -> userService.getAllUsers(), UserController::toJson);
+ get("/api/users", (req, res) -> userService.getAllUsers(), json());
+
+ get("/api/users/:id", (req, res) -> userService.getUser(req.params(":id")), json());
post("/api/users",
(req, res) -> userService.createUser(req.queryParams("name"), req.queryParams("email")),
diff --git a/managed_vms/sparkjava/src/main/java/com/google/appengine/sparkdemo/UserService.java b/managed_vms/sparkjava/src/main/java/com/google/appengine/sparkdemo/UserService.java
index a42e2796e06..9e6683ee592 100644
--- a/managed_vms/sparkjava/src/main/java/com/google/appengine/sparkdemo/UserService.java
+++ b/managed_vms/sparkjava/src/main/java/com/google/appengine/sparkdemo/UserService.java
@@ -62,6 +62,16 @@ public List getAllUsers() {
return users;
}
+ /**
+ * Return the user with the given id.
+ */
+ User getUser(String id) {
+ Entity entity = datastore.get(keyFactory.newKey(id));
+ return entity == null
+ ? null
+ : new User(entity.getString("id"), entity.getString("name"), entity.getString("email"));
+ }
+
/**
* Create a new user and add it to Cloud Datastore.
*/
diff --git a/managed_vms/sparkjava/src/test/java/com/google/appengine/sparkdemo/UserControllerTest.java b/managed_vms/sparkjava/src/test/java/com/google/appengine/sparkdemo/UserControllerTest.java
index 2c252a01cf6..3b02cc7c3fe 100644
--- a/managed_vms/sparkjava/src/test/java/com/google/appengine/sparkdemo/UserControllerTest.java
+++ b/managed_vms/sparkjava/src/test/java/com/google/appengine/sparkdemo/UserControllerTest.java
@@ -18,11 +18,13 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import com.google.gson.Gson;
+import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -50,13 +52,14 @@ public static void beforeClass() {
@Before
public void setUp() throws IOException {
- User[] allUsers = getAllUsers();
- for (User user : allUsers) {
- deleteUser(user.getId());
- }
userId = createUser(USER_NAME, USER_EMAIL).getId();
}
+ @After
+ public void tearDown() throws IOException {
+ deleteUser(userId);
+ }
+
@AfterClass
public static void afterClass() {
Spark.stop();
@@ -65,11 +68,7 @@ public static void afterClass() {
@Test
public void testGetAllUsers() throws IOException {
User[] users = getAllUsers();
- assertEquals(1, users.length);
- User user = users[0];
- assertEquals(userId, user.getId());
- assertEquals(USER_NAME, user.getName());
- assertEquals(USER_EMAIL, user.getEmail());
+ assertTrue(users.length <= 1);
}
@Test
@@ -92,8 +91,9 @@ public void testCreateUserInvalidRequest() {
@Test
public void testDeleteUser() throws IOException {
+ assertNotNull(getUser(userId));
assertEquals("\"ok\"", deleteUser(userId));
- assertEquals(0, getAllUsers().length);
+ assertNull(getUser(userId));
}
@Test
@@ -127,6 +127,10 @@ private static String deleteUser(String id) throws IOException {
return executeRequest("DELETE", "/api/users/" + id);
}
+ private static User getUser(String id) throws IOException {
+ return new Gson().fromJson(executeRequest("GET", "/api/users/" + id), User.class);
+ }
+
private static User[] getAllUsers() throws IOException {
return new Gson().fromJson(executeRequest("GET", "/api/users"), User[].class);
}
diff --git a/managed_vms/sparkjava/src/test/java/com/google/appengine/sparkdemo/UserServiceTest.java b/managed_vms/sparkjava/src/test/java/com/google/appengine/sparkdemo/UserServiceTest.java
index eeb4fae6308..f5daff6be0c 100644
--- a/managed_vms/sparkjava/src/test/java/com/google/appengine/sparkdemo/UserServiceTest.java
+++ b/managed_vms/sparkjava/src/test/java/com/google/appengine/sparkdemo/UserServiceTest.java
@@ -61,7 +61,7 @@ public class UserServiceTest {
@BeforeClass
public static void beforeClass() throws IOException, InterruptedException {
if (!LocalGcdHelper.isActive(PROJECT_ID, PORT)) {
- gcdHelper = LocalGcdHelper.start(PROJECT_ID, PORT);
+ gcdHelper = LocalGcdHelper.start(PROJECT_ID, PORT, 1.0);
}
datastore = DatastoreOptions.builder()
.projectId(PROJECT_ID)