You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by wf...@apache.org on 2014/07/29 19:33:48 UTC

git commit: Add test coverage for Mname.

Repository: incubator-aurora
Updated Branches:
  refs/heads/master b8dd4a1d6 -> db2173e04


Add test coverage for Mname.

Reviewed at https://reviews.apache.org/r/24042/


Project: http://git-wip-us.apache.org/repos/asf/incubator-aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-aurora/commit/db2173e0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-aurora/tree/db2173e0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-aurora/diff/db2173e0

Branch: refs/heads/master
Commit: db2173e0477eee533d6899b503dbdd51a70c6762
Parents: b8dd4a1
Author: Bill Farner <wf...@apache.org>
Authored: Tue Jul 29 10:31:11 2014 -0700
Committer: Bill Farner <wf...@apache.org>
Committed: Tue Jul 29 10:31:11 2014 -0700

----------------------------------------------------------------------
 .../org/apache/aurora/scheduler/http/Mname.java |  11 --
 .../apache/aurora/scheduler/http/MnameTest.java | 129 ++++++++++++++++++-
 2 files changed, 125 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/db2173e0/src/main/java/org/apache/aurora/scheduler/http/Mname.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/aurora/scheduler/http/Mname.java b/src/main/java/org/apache/aurora/scheduler/http/Mname.java
index dc8967f..883f954 100644
--- a/src/main/java/org/apache/aurora/scheduler/http/Mname.java
+++ b/src/main/java/org/apache/aurora/scheduler/http/Mname.java
@@ -25,9 +25,7 @@ import javax.ws.rs.POST;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
 import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriBuilder;
@@ -71,7 +69,6 @@ public class Mname {
   }
 
   @GET
-  @Produces(MediaType.TEXT_HTML)
   public Response getUsage() {
     return Response
         .status(Status.BAD_REQUEST)
@@ -81,7 +78,6 @@ public class Mname {
 
   @GET
   @Path("/{role}/{env}/{job}/{instance}/{forward:.+}")
-  @Produces(MediaType.TEXT_HTML)
   public Response getWithForwardRequest(
       @PathParam("role") String role,
       @PathParam("env") String env,
@@ -95,7 +91,6 @@ public class Mname {
 
   @PUT
   @Path("/{role}/{env}/{job}/{instance}/{forward:.+}")
-  @Produces(MediaType.TEXT_HTML)
   public Response putWithForwardRequest(
       @PathParam("role") String role,
       @PathParam("env") String env,
@@ -109,7 +104,6 @@ public class Mname {
 
   @POST
   @Path("/{role}/{env}/{job}/{instance}/{forward:.+}")
-  @Produces(MediaType.TEXT_HTML)
   public Response postWithForwardRequest(
       @PathParam("role") String role,
       @PathParam("env") String env,
@@ -123,7 +117,6 @@ public class Mname {
 
   @DELETE
   @Path("/{role}/{env}/{job}/{instance}/{forward:.+}")
-  @Produces(MediaType.TEXT_HTML)
   public Response deleteWithForwardRequest(
       @PathParam("role") String role,
       @PathParam("env") String env,
@@ -137,7 +130,6 @@ public class Mname {
 
   @GET
   @Path("/{role}/{env}/{job}/{instance}")
-  @Produces(MediaType.TEXT_HTML)
   public Response get(
       @PathParam("role") String role,
       @PathParam("env") String env,
@@ -150,7 +142,6 @@ public class Mname {
 
   @PUT
   @Path("/{role}/{env}/{job}/{instance}")
-  @Produces(MediaType.TEXT_HTML)
   public Response put(
       @PathParam("role") String role,
       @PathParam("env") String env,
@@ -163,7 +154,6 @@ public class Mname {
 
   @POST
   @Path("/{role}/{env}/{job}/{instance}")
-  @Produces(MediaType.TEXT_HTML)
   public Response post(
       @PathParam("role") String role,
       @PathParam("env") String env,
@@ -176,7 +166,6 @@ public class Mname {
 
   @DELETE
   @Path("/{role}/{env}/{job}/{instance}")
-  @Produces(MediaType.TEXT_HTML)
   public Response delete(
       @PathParam("role") String role,
       @PathParam("env") String env,

http://git-wip-us.apache.org/repos/asf/incubator-aurora/blob/db2173e0/src/test/java/org/apache/aurora/scheduler/http/MnameTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/aurora/scheduler/http/MnameTest.java b/src/test/java/org/apache/aurora/scheduler/http/MnameTest.java
index 6971454..b7b6a3e 100644
--- a/src/test/java/org/apache/aurora/scheduler/http/MnameTest.java
+++ b/src/test/java/org/apache/aurora/scheduler/http/MnameTest.java
@@ -14,23 +14,144 @@
 package org.apache.aurora.scheduler.http;
 
 import java.util.Map;
+import java.util.Set;
+
+import javax.ws.rs.HttpMethod;
+import javax.ws.rs.core.HttpHeaders;
 
 import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.ClientResponse.Status;
 
 import org.apache.aurora.gen.AssignedTask;
+import org.apache.aurora.gen.ScheduleStatus;
+import org.apache.aurora.gen.ScheduledTask;
+import org.apache.aurora.scheduler.base.JobKeys;
+import org.apache.aurora.scheduler.base.Query;
 import org.apache.aurora.scheduler.storage.entities.IAssignedTask;
+import org.apache.aurora.scheduler.storage.entities.IScheduledTask;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
-public class MnameTest {
+public class MnameTest extends ServletModuleTest {
+
+  private static final String SLAVE_HOST = "fakehost";
+  private static final int PORT = 50000;
+  private static final String APP_URI = "http://" + SLAVE_HOST + ":" + PORT + "/";
+
+  private static final IScheduledTask TASK = IScheduledTask.build(
+      new ScheduledTask()
+          .setStatus(ScheduleStatus.RUNNING)
+          .setAssignedTask(
+              new AssignedTask()
+                  .setSlaveHost("fakehost")
+                  .setAssignedPorts(ImmutableMap.of("http", 50000))));
+  private static final Query.Builder TASK_QUERY =
+      Query.instanceScoped(JobKeys.from("myrole", "test", "myjob"), 1).active();
+
+  @Test
+  public void testGetUsage() {
+    replayAndStart();
+
+    ClientResponse response = getRequestBuilder("/mname")
+        .get(ClientResponse.class);
+    assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
+  }
+
+  @Test
+  public void testHttpMethods() {
+    storage.expectOperations();
+
+    Set<String> methods =
+        ImmutableSet.of(HttpMethod.GET, HttpMethod.PUT, HttpMethod.POST, HttpMethod.DELETE);
+    storage.expectTaskFetch(TASK_QUERY, TASK).times(methods.size());
+
+    replayAndStart();
+
+    for (String method : methods) {
+      ClientResponse response = getRequestBuilder("/mname/myrole/test/myjob/1")
+          .method(method, ClientResponse.class);
+      assertEquals(Status.TEMPORARY_REDIRECT.getStatusCode(), response.getStatus());
+      assertEquals(APP_URI, response.getHeaders().getFirst(HttpHeaders.LOCATION));
+    }
+  }
+
+  @Test
+  public void testForwardPathAndQuery() {
+    storage.expectOperations();
+
+    Set<String> methods =
+        ImmutableSet.of(HttpMethod.GET, HttpMethod.PUT, HttpMethod.POST, HttpMethod.DELETE);
+    storage.expectTaskFetch(TASK_QUERY, TASK).times(methods.size());
+
+    replayAndStart();
+
+    String pathAndQuery = "path?query=2";
+
+    for (String method : methods) {
+      ClientResponse response = getRequestBuilder("/mname/myrole/test/myjob/1/" + pathAndQuery)
+          .method(method, ClientResponse.class);
+      assertEquals(Status.TEMPORARY_REDIRECT.getStatusCode(), response.getStatus());
+      assertEquals(APP_URI + pathAndQuery, response.getHeaders().getFirst(HttpHeaders.LOCATION));
+    }
+  }
+
+  @Test
+  public void testInstanceAbsent() {
+    storage.expectOperations();
+
+    storage.expectTaskFetch(TASK_QUERY);
+
+    replayAndStart();
+
+    ClientResponse response = getRequestBuilder("/mname/myrole/test/myjob/1")
+        .get(ClientResponse.class);
+    assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+  }
+
+  @Test
+  public void testInstanceNotRunning() {
+    storage.expectOperations();
+
+    IScheduledTask pending =
+        IScheduledTask.build(TASK.newBuilder().setStatus(ScheduleStatus.PENDING));
+
+    storage.expectTaskFetch(TASK_QUERY, pending);
+
+    replayAndStart();
+
+    ClientResponse response = getRequestBuilder("/mname/myrole/test/myjob/1")
+        .get(ClientResponse.class);
+    assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+  }
+
+  @Test
+  public void testInstanceNoHttp() {
+    storage.expectOperations();
+
+    ScheduledTask builder = TASK.newBuilder();
+    builder.getAssignedTask().setAssignedPorts(ImmutableMap.of("telnet", 80));
+    IScheduledTask noHttp = IScheduledTask.build(builder);
+
+    storage.expectTaskFetch(TASK_QUERY, noHttp);
+
+    replayAndStart();
+
+    ClientResponse response = getRequestBuilder("/mname/myrole/test/myjob/1")
+        .get(ClientResponse.class);
+    assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus());
+  }
 
   @Test
   public void testRedirectPort() {
-    assertEquals(Optional.absent(), getRedirectPort(null));
-    assertEquals(Optional.absent(), getRedirectPort(ImmutableMap.<String, Integer>of()));
-    assertEquals(Optional.absent(), getRedirectPort(ImmutableMap.of("thrift", 5)));
+    replayAndStart();
+
+    assertEquals(Optional.<Integer>absent(), getRedirectPort(null));
+    assertEquals(Optional.<Integer>absent(), getRedirectPort(ImmutableMap.<String, Integer>of()));
+    assertEquals(Optional.<Integer>absent(), getRedirectPort(ImmutableMap.of("thrift", 5)));
     assertEquals(Optional.of(5), getRedirectPort(ImmutableMap.of("health", 5, "http", 6)));
     assertEquals(Optional.of(6), getRedirectPort(ImmutableMap.of("http", 6)));
     assertEquals(Optional.of(7), getRedirectPort(ImmutableMap.of("HTTP", 7)));