You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ra...@apache.org on 2015/04/20 16:28:40 UTC

[20/22] olingo-odata4 git commit: OLINGO-573: making tests work with tomcat and making it 1.6 compatible

OLINGO-573: making tests work with tomcat and making it 1.6 compatible


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/547725d7
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/547725d7
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/547725d7

Branch: refs/heads/OLINGO-573
Commit: 547725d754a16093c1881002a5f4e7bef4f25df8
Parents: b6da769
Author: Ramesh Reddy <ra...@jboss.org>
Authored: Sun Apr 5 17:54:44 2015 -0500
Committer: Ramesh Reddy <ra...@jboss.org>
Committed: Thu Apr 16 09:13:14 2015 -0500

----------------------------------------------------------------------
 .../server/core/SchemaBasedEdmProvider.java     |    2 +-
 .../server/core/ServiceDispatcherTest.java      |  781 ++++++-----
 .../olingo/server/example/TripPinHandler.java   |    2 +-
 .../server/example/TripPinServiceTest.java      | 1316 ++++++++----------
 4 files changed, 1036 insertions(+), 1065 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/547725d7/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/SchemaBasedEdmProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/SchemaBasedEdmProvider.java b/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/SchemaBasedEdmProvider.java
index 8641a69..cc811c0 100644
--- a/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/SchemaBasedEdmProvider.java
+++ b/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/SchemaBasedEdmProvider.java
@@ -46,7 +46,7 @@ import org.apache.olingo.commons.api.edm.provider.TypeDefinition;
 public class SchemaBasedEdmProvider implements EdmProvider {
   private final List<Schema> edmSchemas = new ArrayList<Schema>();
 
-  protected void addSchema(Schema schema) {
+  public void addSchema(Schema schema) {
     this.edmSchemas.add(schema);
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/547725d7/lib/server-core-ext/src/test/java/org/apache/olingo/server/core/ServiceDispatcherTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/test/java/org/apache/olingo/server/core/ServiceDispatcherTest.java b/lib/server-core-ext/src/test/java/org/apache/olingo/server/core/ServiceDispatcherTest.java
index c918134..faabafc 100644
--- a/lib/server-core-ext/src/test/java/org/apache/olingo/server/core/ServiceDispatcherTest.java
+++ b/lib/server-core-ext/src/test/java/org/apache/olingo/server/core/ServiceDispatcherTest.java
@@ -18,359 +18,432 @@
  */
 package org.apache.olingo.server.core;
 
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.URI;
+import java.util.Collections;
+import java.util.List;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.http.HttpHost;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.olingo.commons.api.edm.provider.EdmProvider;
+import org.apache.olingo.commons.api.http.HttpMethod;
+import org.apache.olingo.server.api.OData;
+import org.apache.olingo.server.api.ODataHttpHandler;
+import org.apache.olingo.server.api.ServiceMetadata;
+import org.apache.olingo.server.api.edmx.EdmxReference;
+import org.apache.olingo.server.core.requests.ActionRequest;
+import org.apache.olingo.server.core.requests.DataRequest;
+import org.apache.olingo.server.core.requests.FunctionRequest;
+import org.apache.olingo.server.core.requests.MediaRequest;
+import org.apache.olingo.server.core.requests.MetadataRequest;
+import org.apache.olingo.server.core.responses.CountResponse;
+import org.apache.olingo.server.core.responses.EntityResponse;
+import org.apache.olingo.server.core.responses.EntitySetResponse;
+import org.apache.olingo.server.core.responses.MetadataResponse;
+import org.apache.olingo.server.core.responses.NoContentResponse;
+import org.apache.olingo.server.core.responses.PrimitiveValueResponse;
+import org.apache.olingo.server.core.responses.PropertyResponse;
+import org.apache.olingo.server.core.responses.StreamResponse;
+import org.apache.olingo.server.example.TripPinServiceTest;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
+
 public class ServiceDispatcherTest {
-//  private Server server;
-//
-//  public class SampleODataServlet extends HttpServlet {
-//    private final ServiceHandler handler; // must be stateless
-//    private final EdmProvider provider; // must be stateless
-//
-//    public SampleODataServlet(ServiceHandler handler, EdmProvider provider) {
-//      this.handler = handler;
-//      this.provider = provider;
-//    }
-//
-//    @Override
-//    public void service(HttpServletRequest request, HttpServletResponse response)
-//        throws IOException {
-//      OData odata = OData4Impl.newInstance();
-//      ServiceMetadata metadata = odata.createServiceMetadata(this.provider, Collections.EMPTY_LIST);
-//
-//      ODataHttpHandler handler = odata.createHandler(metadata);
-//
-//      handler.register(this.handler);
-//      handler.process(request, response);
-//    }
-//  }
-//
-//  public int beforeTest(ServiceHandler serviceHandler) throws Exception {
-//    MetadataParser parser = new MetadataParser();
-//    EdmProvider edmProvider = parser.buildEdmProvider(new FileReader(
-//        "src/test/resources/trippin.xml"));
-//
-//    this.server = new Server();
-//
-//    ServerConnector connector = new ServerConnector(this.server);
-//    this.server.setConnectors(new Connector[] { connector });
-//
-//    ServletContextHandler context = new ServletContextHandler();
-//    context.setContextPath("/trippin");
-//    context
-//        .addServlet(new ServletHolder(new SampleODataServlet(serviceHandler, edmProvider)), "/*");
-//    this.server.setHandler(context);
-//    this.server.start();
-//
-//    return connector.getLocalPort();
-//  }
-//
-//  public void afterTest() throws Exception {
-//    this.server.stop();
-//  }
-//
-//  interface TestResult {
-//    void validate() throws Exception;
-//  }
-//
-//  private void helpGETTest(ServiceHandler handler, String path, TestResult validator)
-//      throws Exception {
-//    int port = beforeTest(handler);
-//    HttpClient http = new HttpClient();
-//    http.start();
-//    http.GET("http://localhost:" + port + "/" + path);
-//    validator.validate();
-//    afterTest();
-//  }
-//
-//  private void helpTest(ServiceHandler handler, String path, String method, String payload,
-//      TestResult validator) throws Exception {
-//    int port = beforeTest(handler);
-//    HttpClient http = new HttpClient();
-//    http.start();
-//    String editUrl = "http://localhost:" + port + "/" + path;
-//    http.newRequest(editUrl).method(method)
-//        .header("Content-Type", "application/json;odata.metadata=minimal")
-//        .content(TripPinServiceTest.content(payload)).send();
-//    validator.validate();
-//    afterTest();
-//  }
-//
-//  @Test
-//  public void testMetadata() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/$metadata", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<MetadataRequest> arg1 = ArgumentCaptor.forClass(MetadataRequest.class);
-//        ArgumentCaptor<MetadataResponse> arg2 = ArgumentCaptor.forClass(MetadataResponse.class);
-//        Mockito.verify(handler).readMetadata(arg1.capture(), arg2.capture());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testEntitySet() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/Airports", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//        ArgumentCaptor<EntityResponse> arg2 = ArgumentCaptor.forClass(EntityResponse.class);
-//        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
-//
-//        DataRequest request = arg1.getValue();
-//        // Need toString on ContextURL class
-//        // assertEquals("",
-//        // request.getContextURL(request.getOdata()).toString());
-//        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
-//            .toContentTypeString());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testEntitySetCount() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/Airports/$count", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//        ArgumentCaptor<CountResponse> arg2 = ArgumentCaptor.forClass(CountResponse.class);
-//        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
-//
-//        DataRequest request = arg1.getValue();
-//        // Need toString on ContextURL class
-//        // assertEquals("",
-//        // request.getContextURL(request.getOdata()).toString());
-//        assertEquals("text/plain", request.getResponseContentType().toContentTypeString());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testEntity() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/Airports('0')", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//        ArgumentCaptor<EntityResponse> arg2 = ArgumentCaptor.forClass(EntityResponse.class);
-//        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
-//
-//        DataRequest request = arg1.getValue();
-//        assertEquals(1, request.getUriResourceEntitySet().getKeyPredicates().size());
-//        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
-//            .toContentTypeString());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testReadProperty() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/Airports('0')/IataCode", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//        ArgumentCaptor<PropertyResponse> arg2 = ArgumentCaptor.forClass(PropertyResponse.class);
-//        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
-//
-//        DataRequest request = arg1.getValue();
-//        assertEquals(true, request.isPropertyRequest());
-//        assertEquals(false, request.isPropertyComplex());
-//        assertEquals(1, request.getUriResourceEntitySet().getKeyPredicates().size());
-//        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
-//            .toContentTypeString());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testReadComplexProperty() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/Airports('0')/Location", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//        ArgumentCaptor<PropertyResponse> arg2 = ArgumentCaptor.forClass(PropertyResponse.class);
-//        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
-//
-//        DataRequest request = arg1.getValue();
-//        assertEquals(true, request.isPropertyRequest());
-//        assertEquals(true, request.isPropertyComplex());
-//        assertEquals(1, request.getUriResourceEntitySet().getKeyPredicates().size());
-//        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
-//            .toContentTypeString());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testReadProperty$Value() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/Airports('0')/IataCode/$value", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//        ArgumentCaptor<PrimitiveValueResponse> arg2 = ArgumentCaptor
-//            .forClass(PrimitiveValueResponse.class);
-//        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
-//
-//        DataRequest request = arg1.getValue();
-//        assertEquals(true, request.isPropertyRequest());
-//        assertEquals(false, request.isPropertyComplex());
-//        assertEquals(1, request.getUriResourceEntitySet().getKeyPredicates().size());
-//        assertEquals("text/plain", request.getResponseContentType().toContentTypeString());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testReadPropertyRef() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/Airports('0')/IataCode/$value", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//        ArgumentCaptor<PrimitiveValueResponse> arg2 = ArgumentCaptor
-//            .forClass(PrimitiveValueResponse.class);
-//        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
-//
-//        DataRequest request = arg1.getValue();
-//        assertEquals(true, request.isPropertyRequest());
-//        assertEquals(false, request.isPropertyComplex());
-//        assertEquals(1, request.getUriResourceEntitySet().getKeyPredicates().size());
-//        assertEquals("text/plain", request.getResponseContentType().toContentTypeString());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testFunctionImport() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/GetNearestAirport(lat=12.11,lon=34.23)", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<FunctionRequest> arg1 = ArgumentCaptor.forClass(FunctionRequest.class);
-//        ArgumentCaptor<PropertyResponse> arg3 = ArgumentCaptor.forClass(PropertyResponse.class);
-//        ArgumentCaptor<HttpMethod> arg2 = ArgumentCaptor.forClass(HttpMethod.class);
-//        Mockito.verify(handler).invoke(arg1.capture(), arg2.capture(), arg3.capture());
-//
-//        FunctionRequest request = arg1.getValue();
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testActionImport() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpTest(handler, "trippin/ResetDataSource", "POST", "", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<ActionRequest> arg1 = ArgumentCaptor.forClass(ActionRequest.class);
-//        ArgumentCaptor<NoContentResponse> arg2 = ArgumentCaptor.forClass(NoContentResponse.class);
-//        Mockito.verify(handler).invoke(arg1.capture(), Mockito.anyString(), arg2.capture());
-//
-//        ActionRequest request = arg1.getValue();
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testReadMedia() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/Photos(1)/$value", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<MediaRequest> arg1 = ArgumentCaptor.forClass(MediaRequest.class);
-//        ArgumentCaptor<StreamResponse> arg2 = ArgumentCaptor.forClass(StreamResponse.class);
-//        Mockito.verify(handler).readMediaStream(arg1.capture(), arg2.capture());
-//
-//        MediaRequest request = arg1.getValue();
-//        assertEquals("application/octet-stream", request.getResponseContentType()
-//            .toContentTypeString());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testReadNavigation() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/People('russelwhyte')/Friends", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//        ArgumentCaptor<EntitySetResponse> arg2 = ArgumentCaptor.forClass(EntitySetResponse.class);
-//        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
-//
-//        DataRequest request = arg1.getValue();
-//        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
-//            .toContentTypeString());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testReadReference() throws Exception {
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpGETTest(handler, "trippin/People('russelwhyte')/Friends/$ref", new TestResult() {
-//      @Override
-//      public void validate() throws Exception {
-//        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//        ArgumentCaptor<EntitySetResponse> arg2 = ArgumentCaptor.forClass(EntitySetResponse.class);
-//        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
-//
-//        DataRequest request = arg1.getValue();
-//        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
-//            .toContentTypeString());
-//      }
-//    });
-//  }
-//
-//  @Test
-//  public void testWriteReferenceCollection() throws Exception {
-//    String payload = "{\n" + "\"@odata.id\": \"/Photos(11)\"\n" + "}";
-//
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpTest(handler, "trippin/People('russelwhyte')/Friends/$ref", "POST", payload,
-//        new TestResult() {
-//          @Override
-//          public void validate() throws Exception {
-//            ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//            ArgumentCaptor<String> arg2 = ArgumentCaptor.forClass(String.class);
-//            ArgumentCaptor<List> arg3 = ArgumentCaptor.forClass(List.class);
-//            ArgumentCaptor<NoContentResponse> arg4 = ArgumentCaptor
-//                .forClass(NoContentResponse.class);
-//            Mockito.verify(handler).addReference(arg1.capture(), arg2.capture(), arg3.capture(),
-//                arg4.capture());
-//
-//            DataRequest request = arg1.getValue();
-//            assertEquals("application/json;odata.metadata=minimal", request
-//                .getResponseContentType().toContentTypeString());
-//          }
-//        });
-//  }
-//
-//  @Test
-//  public void testWriteReference() throws Exception {
-//    String payload = "{\n" + "\"@odata.id\": \"/Photos(11)\"\n" + "}";
-//
-//    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
-//    helpTest(handler, "trippin/People('russelwhyte')/Friends('someone')/Photo/$ref", "PUT", payload,
-//        new TestResult() {
-//          @Override
-//          public void validate() throws Exception {
-//            ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
-//            ArgumentCaptor<String> arg2 = ArgumentCaptor.forClass(String.class);
-//            ArgumentCaptor<URI> arg3 = ArgumentCaptor.forClass(URI.class);
-//            ArgumentCaptor<NoContentResponse> arg4 = ArgumentCaptor
-//                .forClass(NoContentResponse.class);
-//            Mockito.verify(handler).updateReference(arg1.capture(), arg2.capture(), arg3.capture(),
-//                arg4.capture());
-//
-//            DataRequest request = arg1.getValue();
-//            assertEquals("application/json;odata.metadata=minimal", request
-//                .getResponseContentType().toContentTypeString());
-//          }
-//        });
-//  }
+  private static final int TOMCAT_PORT = 9900;
+  private Tomcat tomcat = new Tomcat();
+  private String baseURL;
+  
+  public class SampleODataServlet extends HttpServlet {
+    private final ServiceHandler handler; // must be stateless
+    private final EdmProvider provider; // must be stateless
+
+    public SampleODataServlet(ServiceHandler handler, EdmProvider provider) {
+      this.handler = handler;
+      this.provider = provider;
+    }
+
+    @Override
+    public void service(HttpServletRequest request, HttpServletResponse response)
+        throws IOException {
+      OData odata = OData4Impl.newInstance();
+      ServiceMetadata metadata = odata.createServiceMetadata(this.provider, Collections.<EdmxReference> emptyList());
+
+      ODataHttpHandler handler = odata.createHandler(metadata);
+
+      handler.register(this.handler);
+      handler.process(request, response);
+    }
+  }
+  
+  public void beforeTest(ServiceHandler serviceHandler) throws Exception {
+    MetadataParser parser = new MetadataParser();
+    EdmProvider edmProvider = parser.buildEdmProvider(new FileReader(
+        "src/test/resources/trippin.xml"));
+
+    File baseDir = new File(System.getProperty("java.io.tmpdir"));
+    Context cxt = tomcat.addContext("/trippin", baseDir.getAbsolutePath());
+    Tomcat.addServlet(cxt, "trippin", new SampleODataServlet(serviceHandler, edmProvider));
+    cxt.addServletMapping("/*", "trippin");
+    baseURL = "http://" + tomcat.getHost().getName() + ":"+ TOMCAT_PORT;
+    tomcat.setPort(TOMCAT_PORT);
+    tomcat.start();
+  }
+
+  public void afterTest() throws Exception {
+    tomcat.stop();
+    tomcat.destroy();
+  }
+
+  interface TestResult {
+    void validate() throws Exception;
+  }
+
+  private HttpHost getLocalhost() {
+    return new HttpHost(tomcat.getHost().getName(), 9900);
+  }
+  
+  private HttpResponse httpGET(String url) throws Exception{
+    HttpRequest request = new HttpGet(url);
+    return httpSend(request);
+  }
+
+  private HttpResponse httpSend(HttpRequest request) throws Exception{
+    DefaultHttpClient http = new DefaultHttpClient();
+    HttpResponse response = http.execute(getLocalhost(), request);
+    return response;
+  }
+  
+  private void helpGETTest(ServiceHandler handler, String path, TestResult validator)
+      throws Exception {
+    beforeTest(handler);
+    httpGET("http://localhost:" + TOMCAT_PORT + "/" + path);
+    validator.validate();
+    afterTest();
+  }
+
+  private void helpTest(ServiceHandler handler, String path, String method, String payload,
+      TestResult validator) throws Exception {
+    beforeTest(handler);
+
+    DefaultHttpClient http = new DefaultHttpClient();
+    
+    String editUrl = "http://localhost:" + TOMCAT_PORT + "/" + path;
+    HttpRequest request = new HttpGet(editUrl);
+    if (method.equals("POST")) {
+      HttpPost post = new HttpPost(editUrl);
+      post.setEntity(new StringEntity(payload));
+      request = post;
+    } else if (method.equals("PUT")) {
+      HttpPut put = new HttpPut(editUrl);
+      put.setEntity(new StringEntity(payload));
+      request = put;
+    } else if (method.equals("DELETE")) {
+      HttpDelete delete = new HttpDelete(editUrl);
+      request = delete;
+    }
+    request.setHeader("Content-Type", "application/json;odata.metadata=minimal");
+    HttpResponse response = http.execute(getLocalhost(), request);
+
+    validator.validate();
+    afterTest();
+  }
+
+  @Test
+  public void testMetadata() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/$metadata", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<MetadataRequest> arg1 = ArgumentCaptor.forClass(MetadataRequest.class);
+        ArgumentCaptor<MetadataResponse> arg2 = ArgumentCaptor.forClass(MetadataResponse.class);
+        Mockito.verify(handler).readMetadata(arg1.capture(), arg2.capture());
+      }
+    });
+  }
+
+  @Test
+  public void testEntitySet() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/Airports", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+        ArgumentCaptor<EntityResponse> arg2 = ArgumentCaptor.forClass(EntityResponse.class);
+        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
+
+        DataRequest request = arg1.getValue();
+        // Need toString on ContextURL class
+        // assertEquals("",
+        // request.getContextURL(request.getOdata()).toString());
+        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
+            .toContentTypeString());
+      }
+    });
+  }
+
+  @Test
+  public void testEntitySetCount() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/Airports/$count", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+        ArgumentCaptor<CountResponse> arg2 = ArgumentCaptor.forClass(CountResponse.class);
+        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
+
+        DataRequest request = arg1.getValue();
+        // Need toString on ContextURL class
+        // assertEquals("",
+        // request.getContextURL(request.getOdata()).toString());
+        assertEquals("text/plain", request.getResponseContentType().toContentTypeString());
+      }
+    });
+  }
+
+  @Test
+  public void testEntity() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/Airports('0')", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+        ArgumentCaptor<EntityResponse> arg2 = ArgumentCaptor.forClass(EntityResponse.class);
+        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
+
+        DataRequest request = arg1.getValue();
+        assertEquals(1, request.getUriResourceEntitySet().getKeyPredicates().size());
+        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
+            .toContentTypeString());
+      }
+    });
+  }
+
+  @Test
+  public void testReadProperty() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/Airports('0')/IataCode", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+        ArgumentCaptor<PropertyResponse> arg2 = ArgumentCaptor.forClass(PropertyResponse.class);
+        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
+
+        DataRequest request = arg1.getValue();
+        assertEquals(true, request.isPropertyRequest());
+        assertEquals(false, request.isPropertyComplex());
+        assertEquals(1, request.getUriResourceEntitySet().getKeyPredicates().size());
+        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
+            .toContentTypeString());
+      }
+    });
+  }
+
+  @Test
+  public void testReadComplexProperty() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/Airports('0')/Location", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+        ArgumentCaptor<PropertyResponse> arg2 = ArgumentCaptor.forClass(PropertyResponse.class);
+        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
+
+        DataRequest request = arg1.getValue();
+        assertEquals(true, request.isPropertyRequest());
+        assertEquals(true, request.isPropertyComplex());
+        assertEquals(1, request.getUriResourceEntitySet().getKeyPredicates().size());
+        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
+            .toContentTypeString());
+      }
+    });
+  }
+
+  @Test
+  public void testReadProperty$Value() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/Airports('0')/IataCode/$value", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+        ArgumentCaptor<PrimitiveValueResponse> arg2 = ArgumentCaptor
+            .forClass(PrimitiveValueResponse.class);
+        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
+
+        DataRequest request = arg1.getValue();
+        assertEquals(true, request.isPropertyRequest());
+        assertEquals(false, request.isPropertyComplex());
+        assertEquals(1, request.getUriResourceEntitySet().getKeyPredicates().size());
+        assertEquals("text/plain", request.getResponseContentType().toContentTypeString());
+      }
+    });
+  }
+
+  @Test
+  public void testReadPropertyRef() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/Airports('0')/IataCode/$value", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+        ArgumentCaptor<PrimitiveValueResponse> arg2 = ArgumentCaptor
+            .forClass(PrimitiveValueResponse.class);
+        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
+
+        DataRequest request = arg1.getValue();
+        assertEquals(true, request.isPropertyRequest());
+        assertEquals(false, request.isPropertyComplex());
+        assertEquals(1, request.getUriResourceEntitySet().getKeyPredicates().size());
+        assertEquals("text/plain", request.getResponseContentType().toContentTypeString());
+      }
+    });
+  }
+
+  @Test
+  public void testFunctionImport() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/GetNearestAirport(lat=12.11,lon=34.23)", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<FunctionRequest> arg1 = ArgumentCaptor.forClass(FunctionRequest.class);
+        ArgumentCaptor<PropertyResponse> arg3 = ArgumentCaptor.forClass(PropertyResponse.class);
+        ArgumentCaptor<HttpMethod> arg2 = ArgumentCaptor.forClass(HttpMethod.class);
+        Mockito.verify(handler).invoke(arg1.capture(), arg2.capture(), arg3.capture());
+
+        FunctionRequest request = arg1.getValue();
+      }
+    });
+  }
+
+  @Test
+  public void testActionImport() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpTest(handler, "trippin/ResetDataSource", "POST", "", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<ActionRequest> arg1 = ArgumentCaptor.forClass(ActionRequest.class);
+        ArgumentCaptor<NoContentResponse> arg2 = ArgumentCaptor.forClass(NoContentResponse.class);
+        Mockito.verify(handler).invoke(arg1.capture(), Mockito.anyString(), arg2.capture());
+
+        ActionRequest request = arg1.getValue();
+      }
+    });
+  }
+
+  @Test
+  public void testReadMedia() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/Photos(1)/$value", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<MediaRequest> arg1 = ArgumentCaptor.forClass(MediaRequest.class);
+        ArgumentCaptor<StreamResponse> arg2 = ArgumentCaptor.forClass(StreamResponse.class);
+        Mockito.verify(handler).readMediaStream(arg1.capture(), arg2.capture());
+
+        MediaRequest request = arg1.getValue();
+        assertEquals("application/octet-stream", request.getResponseContentType()
+            .toContentTypeString());
+      }
+    });
+  }
+
+  @Test
+  public void testReadNavigation() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/People('russelwhyte')/Friends", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+        ArgumentCaptor<EntitySetResponse> arg2 = ArgumentCaptor.forClass(EntitySetResponse.class);
+        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
+
+        DataRequest request = arg1.getValue();
+        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
+            .toContentTypeString());
+      }
+    });
+  }
+
+  @Test
+  public void testReadReference() throws Exception {
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpGETTest(handler, "trippin/People('russelwhyte')/Friends/$ref", new TestResult() {
+      @Override
+      public void validate() throws Exception {
+        ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+        ArgumentCaptor<EntitySetResponse> arg2 = ArgumentCaptor.forClass(EntitySetResponse.class);
+        Mockito.verify(handler).read(arg1.capture(), arg2.capture());
+
+        DataRequest request = arg1.getValue();
+        assertEquals("application/json;odata.metadata=minimal", request.getResponseContentType()
+            .toContentTypeString());
+      }
+    });
+  }
+
+  @Test
+  public void testWriteReferenceCollection() throws Exception {
+    String payload = "{\n" + "\"@odata.id\": \"/Photos(11)\"\n" + "}";
+
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpTest(handler, "trippin/People('russelwhyte')/Friends/$ref", "POST", payload,
+        new TestResult() {
+          @Override
+          public void validate() throws Exception {
+            ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+            ArgumentCaptor<String> arg2 = ArgumentCaptor.forClass(String.class);
+            ArgumentCaptor<List> arg3 = ArgumentCaptor.forClass(List.class);
+            ArgumentCaptor<NoContentResponse> arg4 = ArgumentCaptor
+                .forClass(NoContentResponse.class);
+            Mockito.verify(handler).addReference(arg1.capture(), arg2.capture(), arg3.capture(),
+                arg4.capture());
+
+            DataRequest request = arg1.getValue();
+            assertEquals("application/json;odata.metadata=minimal", request
+                .getResponseContentType().toContentTypeString());
+          }
+        });
+  }
+
+  @Test
+  public void testWriteReference() throws Exception {
+    String payload = "{\n" + "\"@odata.id\": \"/Photos(11)\"\n" + "}";
+
+    final ServiceHandler handler = Mockito.mock(ServiceHandler.class);
+    helpTest(handler, "trippin/People('russelwhyte')/Friends('someone')/Photo/$ref", "PUT", payload,
+        new TestResult() {
+          @Override
+          public void validate() throws Exception {
+            ArgumentCaptor<DataRequest> arg1 = ArgumentCaptor.forClass(DataRequest.class);
+            ArgumentCaptor<String> arg2 = ArgumentCaptor.forClass(String.class);
+            ArgumentCaptor<URI> arg3 = ArgumentCaptor.forClass(URI.class);
+            ArgumentCaptor<NoContentResponse> arg4 = ArgumentCaptor
+                .forClass(NoContentResponse.class);
+            Mockito.verify(handler).updateReference(arg1.capture(), arg2.capture(), arg3.capture(),
+                arg4.capture());
+
+            DataRequest request = arg1.getValue();
+            assertEquals("application/json;odata.metadata=minimal", request
+                .getResponseContentType().toContentTypeString());
+          }
+        });
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/547725d7/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinHandler.java b/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinHandler.java
index 19a0387..040a7da 100644
--- a/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinHandler.java
+++ b/lib/server-core-ext/src/test/java/org/apache/olingo/server/example/TripPinHandler.java
@@ -203,7 +203,7 @@ public class TripPinHandler implements ServiceHandler {
       public void visit(EntitySetResponse response) throws ODataTranslatedException,
           ODataApplicationException {
         if (request.getPreference("odata.maxpagesize") != null) {
-          response.writeHeader("Preference-Applied", request.getPreference("odata.maxpagesize"));
+          response.writeHeader("Preference-Applied", "odata.maxpagesize="+request.getPreference("odata.maxpagesize"));
         }
         if (details.entity == null && !request.getNavigations().isEmpty()) {
           response.writeReadEntitySet(details.entityType, new EntitySetImpl());