You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by sk...@apache.org on 2013/10/31 15:27:35 UTC

git commit: [OLINGO-54] check precondition when modifying a concurrency-controlled entity

Updated Branches:
  refs/heads/master 4ec25794f -> 77b0ac0f4


[OLINGO-54] check precondition when modifying a concurrency-controlled entity

Change-Id: Ibaaf847e03edcfbe56b32a259bd33535313afac4

Signed-off-by: Stephan Klevenz <sk...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/commit/77b0ac0f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/tree/77b0ac0f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/diff/77b0ac0f

Branch: refs/heads/master
Commit: 77b0ac0f44d8a88f05aa2c1f79371294a3971bd2
Parents: 4ec2579
Author: Klaus Straubinger <kl...@sap.com>
Authored: Thu Oct 31 10:14:58 2013 +0100
Committer: Stephan Klevenz <sk...@apache.org>
Committed: Thu Oct 31 15:27:03 2013 +0100

----------------------------------------------------------------------
 .../olingo/odata2/core/ODataRequestHandler.java |  42 +-
 .../core/ODataRequestHandlerValidationTest.java | 434 ++++++++-----------
 .../fit/basic/RequestContentTypeTest.java       |   4 +-
 .../olingo/odata2/fit/ref/MiscChangeTest.java   |  28 +-
 .../odata2/fit/ref/PropertyXmlChangeTest.java   |   9 +-
 5 files changed, 242 insertions(+), 275 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/77b0ac0f/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ODataRequestHandler.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ODataRequestHandler.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ODataRequestHandler.java
index 2c5c32d..6732d93 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ODataRequestHandler.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ODataRequestHandler.java
@@ -29,12 +29,16 @@ import org.apache.olingo.odata2.api.commons.HttpHeaders;
 import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
 import org.apache.olingo.odata2.api.commons.ODataHttpHeaders;
 import org.apache.olingo.odata2.api.commons.ODataHttpMethod;
+import org.apache.olingo.odata2.api.edm.EdmConcurrencyMode;
+import org.apache.olingo.odata2.api.edm.EdmEntityType;
 import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmFacets;
 import org.apache.olingo.odata2.api.edm.EdmProperty;
 import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
 import org.apache.olingo.odata2.api.exception.ODataBadRequestException;
 import org.apache.olingo.odata2.api.exception.ODataException;
 import org.apache.olingo.odata2.api.exception.ODataMethodNotAllowedException;
+import org.apache.olingo.odata2.api.exception.ODataPreconditionRequiredException;
 import org.apache.olingo.odata2.api.exception.ODataUnsupportedMediaTypeException;
 import org.apache.olingo.odata2.api.processor.ODataContext;
 import org.apache.olingo.odata2.api.processor.ODataProcessor;
@@ -113,6 +117,12 @@ public class ODataRequestHandler {
       ContentType acceptContentType =
           new ContentNegotiator().doContentNegotiation(request, uriInfo, supportedContentTypes);
 
+      checkConditions(method, uriInfo,
+          context.getRequestHeader(HttpHeaders.IF_MATCH),
+          context.getRequestHeader(HttpHeaders.IF_NONE_MATCH),
+          context.getRequestHeader(HttpHeaders.IF_MODIFIED_SINCE),
+          context.getRequestHeader(HttpHeaders.IF_UNMODIFIED_SINCE));
+
       timingHandle2 = context.startRuntimeMeasurement("Dispatcher", "dispatch");
       odataResponse =
           dispatcher.dispatch(method, uriInfo, request.getBody(), request.getContentType(), acceptContentType
@@ -265,7 +275,7 @@ public class ODataRequestHandler {
         throw new ODataMethodNotAllowedException(ODataMethodNotAllowedException.DISPATCH);
       } else {
         if (uriInfo.getFormat() != null) {
-//          throw new ODataMethodNotAllowedException(ODataMethodNotAllowedException.DISPATCH);
+          //          throw new ODataMethodNotAllowedException(ODataMethodNotAllowedException.DISPATCH);
           throw new ODataBadRequestException(ODataBadRequestException.INVALID_SYNTAX);
         }
       }
@@ -475,6 +485,36 @@ public class ODataRequestHandler {
     return ContentType.createAsCustom(service.getSupportedContentTypes(processorFeature));
   }
 
+  /**
+   * A modifying request that targets an entity with enabled concurrency control
+   * must contain at least one concurrency-control HTTP request header field.
+   */
+  private static void checkConditions(final ODataHttpMethod method, final UriInfoImpl uriInfo,
+      final String ifMatch, final String ifNoneMatch, final String ifModifiedSince, final String ifUnmodifiedSince)
+      throws ODataException {
+    if ((method == ODataHttpMethod.PUT || method == ODataHttpMethod.PATCH || method == ODataHttpMethod.MERGE
+        || method == ODataHttpMethod.DELETE)
+        && ifMatch == null && ifNoneMatch == null && ifModifiedSince == null && ifUnmodifiedSince == null
+        && Arrays.asList(UriType.URI2, UriType.URI6A, UriType.URI3, UriType.URI4, UriType.URI5, UriType.URI17)
+            .contains(uriInfo.getUriType())
+        && hasConcurrencyControl(uriInfo.getTargetEntitySet().getEntityType())) {
+      throw new ODataPreconditionRequiredException(ODataPreconditionRequiredException.COMMON);
+    }
+  }
+
+  private static boolean hasConcurrencyControl(final EdmEntityType entityType) throws EdmException {
+    boolean concurrency = false;
+    for (final String propertyName : entityType.getPropertyNames()) {
+      final EdmFacets facets = ((EdmProperty) entityType.getProperty(propertyName)).getFacets();
+      if (facets != null && facets.getConcurrencyMode() != null
+          && facets.getConcurrencyMode() == EdmConcurrencyMode.Fixed) {
+        concurrency = true;
+        break;
+      }
+    }
+    return concurrency;
+  }
+
   private static String getDebugValue(final ODataContext context, final Map<String, String> queryParameters) {
     return context.isInDebugMode() ? getQueryDebugValue(queryParameters) : null;
   }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/77b0ac0f/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataRequestHandlerValidationTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataRequestHandlerValidationTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataRequestHandlerValidationTest.java
index 72780c8..0994d51 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataRequestHandlerValidationTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ODataRequestHandlerValidationTest.java
@@ -35,10 +35,12 @@ import java.util.Map;
 import org.apache.olingo.odata2.api.ODataService;
 import org.apache.olingo.odata2.api.ODataServiceFactory;
 import org.apache.olingo.odata2.api.commons.HttpContentType;
+import org.apache.olingo.odata2.api.commons.HttpHeaders;
 import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
 import org.apache.olingo.odata2.api.commons.ODataHttpHeaders;
 import org.apache.olingo.odata2.api.commons.ODataHttpMethod;
 import org.apache.olingo.odata2.api.edm.Edm;
+import org.apache.olingo.odata2.api.edm.EdmConcurrencyMode;
 import org.apache.olingo.odata2.api.edm.EdmEntityType;
 import org.apache.olingo.odata2.api.edm.EdmFacets;
 import org.apache.olingo.odata2.api.edm.EdmFunctionImport;
@@ -76,8 +78,7 @@ import org.junit.Test;
 
 /**
  * Tests for the validation of HTTP method, URI path, query options,
- * and request-body content type.
- * 
+ * content types, and conditional-handling HTTP headers.
  */
 public class ODataRequestHandlerValidationTest extends BaseTest {
 
@@ -214,11 +215,9 @@ public class ODataRequestHandlerValidationTest extends BaseTest {
     return map;
   }
 
-  private ODataRequest mockODataRequest(
-      final ODataHttpMethod method,
-      final List<String> pathSegments,
-      final Map<String, String> queryParameters,
-      final List<String> acceptHeaders,
+  private ODataRequest mockODataRequest(final ODataHttpMethod method,
+      final List<String> pathSegments, final Map<String, String> queryParameters,
+      final String httpHeaderName, final String httpHeaderValue,
       final String requestContentType) throws ODataException {
     ODataRequest request = mock(ODataRequest.class);
     when(request.getMethod()).thenReturn(method);
@@ -231,32 +230,17 @@ public class ODataRequestHandlerValidationTest extends BaseTest {
     }
     when(pathInfo.getODataSegments()).thenReturn(segments);
     when(request.getPathInfo()).thenReturn(pathInfo);
-    when(request.getQueryParameters())
-        .thenReturn(queryParameters == null ? new HashMap<String, String>() : queryParameters);
-    when(request.getContentType()).thenReturn(requestContentType);
-    when(request.getAcceptHeaders()).thenReturn(acceptHeaders);
-    String acceptHeadersAsString = null;
-    for (String string : acceptHeaders) {
-      if (acceptHeadersAsString == null) {
-        acceptHeadersAsString = string;
-      } else {
-        acceptHeadersAsString += ", " + string;
-      }
+    when(request.getQueryParameters()).thenReturn(
+        queryParameters == null ? Collections.<String, String> emptyMap() : queryParameters);
+    when(request.getContentType()).thenReturn(
+        requestContentType == null ? HttpContentType.APPLICATION_JSON : requestContentType);
+    when(request.getRequestHeaderValue(httpHeaderName)).thenReturn(httpHeaderValue);
+    if (httpHeaderName == HttpHeaders.ACCEPT) {
+      when(request.getAcceptHeaders()).thenReturn(Arrays.asList(httpHeaderValue));
     }
-    when(request.getRequestHeaderValue("Accept")).thenReturn(acceptHeadersAsString);
     return request;
   }
 
-  private ODataRequest mockODataRequest(
-      final ODataHttpMethod method,
-      final List<String> pathSegments,
-      final Map<String, String> queryParameters,
-      final String requestContentType) throws ODataException {
-
-    List<String> acceptHeaders = new ArrayList<String>(0);
-    return mockODataRequest(method, pathSegments, queryParameters, acceptHeaders, requestContentType);
-  }
-
   private ODataService mockODataService(final ODataServiceFactory serviceFactory) throws ODataException {
     ODataService service = DispatcherTest.getMockService();
     when(service.getEntityDataModel()).thenReturn(edm);
@@ -266,21 +250,18 @@ public class ODataRequestHandlerValidationTest extends BaseTest {
     when(service.getSupportedContentTypes(BatchProcessor.class)).thenReturn(
         Arrays.asList(HttpContentType.MULTIPART_MIXED));
 
-    when(service.getSupportedContentTypes(EntityProcessor.class)).thenReturn(Arrays.asList(
-        HttpContentType.APPLICATION_ATOM_XML_ENTRY_UTF8,
-        HttpContentType.APPLICATION_ATOM_XML_UTF8,
-        HttpContentType.APPLICATION_JSON,
-        HttpContentType.APPLICATION_JSON_VERBOSE,
-        HttpContentType.APPLICATION_JSON_UTF8,
-        HttpContentType.APPLICATION_JSON_UTF8_VERBOSE,
-        HttpContentType.APPLICATION_XML_UTF8));
-
     final List<String> jsonAndXml = Arrays.asList(
         HttpContentType.APPLICATION_JSON,
         HttpContentType.APPLICATION_JSON_VERBOSE,
         HttpContentType.APPLICATION_JSON_UTF8,
         HttpContentType.APPLICATION_JSON_UTF8_VERBOSE,
         HttpContentType.APPLICATION_XML_UTF8);
+    List<String> atomEntryAndJsonAndXml = new ArrayList<String>();
+    atomEntryAndJsonAndXml.add(HttpContentType.APPLICATION_ATOM_XML_ENTRY_UTF8);
+    atomEntryAndJsonAndXml.add(HttpContentType.APPLICATION_ATOM_XML_UTF8);
+    atomEntryAndJsonAndXml.addAll(jsonAndXml);
+    when(service.getSupportedContentTypes(EntityProcessor.class)).thenReturn(atomEntryAndJsonAndXml);
+
     when(service.getSupportedContentTypes(FunctionImportProcessor.class)).thenReturn(jsonAndXml);
     when(service.getSupportedContentTypes(EntityLinkProcessor.class)).thenReturn(jsonAndXml);
     when(service.getSupportedContentTypes(EntityLinksProcessor.class)).thenReturn(jsonAndXml);
@@ -292,94 +273,74 @@ public class ODataRequestHandlerValidationTest extends BaseTest {
     when(service.getSupportedContentTypes(EntitySimplePropertyValueProcessor.class)).thenReturn(wildcard);
     when(service.getSupportedContentTypes(FunctionImportValueProcessor.class)).thenReturn(wildcard);
 
-    when(service.getSupportedContentTypes(EntitySetProcessor.class)).thenReturn(Arrays.asList(
-        HttpContentType.APPLICATION_ATOM_XML_FEED_UTF8,
-        HttpContentType.APPLICATION_ATOM_XML_UTF8,
-        HttpContentType.APPLICATION_JSON,
-        HttpContentType.APPLICATION_JSON_VERBOSE,
-        HttpContentType.APPLICATION_JSON_UTF8,
-        HttpContentType.APPLICATION_JSON_UTF8_VERBOSE,
-        HttpContentType.APPLICATION_XML_UTF8));
+    List<String> atomFeedAndJsonAndXml = new ArrayList<String>();
+    atomFeedAndJsonAndXml.add(HttpContentType.APPLICATION_ATOM_XML_FEED_UTF8);
+    atomFeedAndJsonAndXml.add(HttpContentType.APPLICATION_ATOM_XML_UTF8);
+    atomFeedAndJsonAndXml.addAll(jsonAndXml);
+    when(service.getSupportedContentTypes(EntitySetProcessor.class)).thenReturn(atomFeedAndJsonAndXml);
 
     when(service.getSupportedContentTypes(MetadataProcessor.class)).thenReturn(Arrays.asList(
         HttpContentType.APPLICATION_XML_UTF8));
 
-    when(service.getSupportedContentTypes(ServiceDocumentProcessor.class)).thenReturn(Arrays.asList(
-        HttpContentType.APPLICATION_ATOM_SVC_UTF8,
-        HttpContentType.APPLICATION_JSON,
-        HttpContentType.APPLICATION_JSON_VERBOSE,
-        HttpContentType.APPLICATION_JSON_UTF8,
-        HttpContentType.APPLICATION_JSON_UTF8_VERBOSE,
-        HttpContentType.APPLICATION_XML_UTF8));
+    List<String> atomSvcAndJsonAndXml = new ArrayList<String>();
+    atomSvcAndJsonAndXml.add(HttpContentType.APPLICATION_ATOM_SVC_UTF8);
+    atomSvcAndJsonAndXml.addAll(jsonAndXml);
+    when(service.getSupportedContentTypes(ServiceDocumentProcessor.class)).thenReturn(atomSvcAndJsonAndXml);
 
     return service;
   }
 
-  private ODataResponse executeRequest(final ODataHttpMethod method,
+  private void executeAndValidateRequest(final ODataHttpMethod method,
       final List<String> pathSegments,
       final Map<String, String> queryParameters,
-      final String requestContentType) throws ODataException {
+      final String httpHeaderName, final String httpHeaderValue,
+      final String requestContentType,
+      final HttpStatusCodes expectedStatusCode) throws ODataException {
+
     ODataServiceFactory serviceFactory = mock(ODataServiceFactory.class);
     final ODataService service = mockODataService(serviceFactory);
     when(serviceFactory.createService(any(ODataContext.class))).thenReturn(service);
 
-    final ODataRequest request = mockODataRequest(method, pathSegments, queryParameters, requestContentType);
+    final ODataRequest request = mockODataRequest(method, pathSegments, queryParameters,
+        httpHeaderName, httpHeaderValue, requestContentType);
     final ODataContextImpl context = new ODataContextImpl(request, serviceFactory);
 
-    return new ODataRequestHandler(serviceFactory, service, context).handle(request);
-  }
-
-  private void executeAndValidateRequest(final ODataHttpMethod method,
-      final List<String> pathSegments,
-      final Map<String, String> queryParameters,
-      final String requestContentType,
-      final HttpStatusCodes expectedStatusCode) throws ODataException {
-
-    final ODataResponse response = executeRequest(method, pathSegments, queryParameters, requestContentType);
+    final ODataResponse response = new ODataRequestHandler(serviceFactory, service, context).handle(request);
     assertNotNull(response);
     assertEquals(expectedStatusCode == null ? HttpStatusCodes.PAYMENT_REQUIRED : expectedStatusCode,
         response.getStatus());
   }
 
-  private void executeAndValidateGetRequest(
-      final List<String> pathSegments,
-      final Map<String, String> queryParameters,
-      final List<String> acceptHeaders,
+  private void executeAndValidateRequest(final ODataHttpMethod method, final UriType uriType,
+      final String requestContentType,
       final HttpStatusCodes expectedStatusCode) throws ODataException {
-
-    executeAndValidateRequest(ODataHttpMethod.GET, pathSegments, queryParameters, acceptHeaders, null,
+    executeAndValidateRequest(method, createPathSegments(uriType, false, false), null, null, null, requestContentType,
         expectedStatusCode);
   }
 
-  private void executeAndValidateRequest(final ODataHttpMethod method,
-      final List<String> pathSegments,
-      final Map<String, String> queryParameters,
-      final List<String> acceptHeaders,
-      final String requestContentType,
+  private void executeAndValidateHeaderRequest(final ODataHttpMethod method, final UriType uriType,
+      final String httpHeaderName, final String httpHeaderValue,
       final HttpStatusCodes expectedStatusCode) throws ODataException {
+    executeAndValidateRequest(method, createPathSegments(uriType, false, false), null, httpHeaderName, httpHeaderValue,
+        null, expectedStatusCode);
+  }
 
-    ODataServiceFactory serviceFactory = mock(ODataServiceFactory.class);
-    final ODataService service = mockODataService(serviceFactory);
-    when(serviceFactory.createService(any(ODataContext.class))).thenReturn(service);
-
-    final ODataRequest request =
-        mockODataRequest(method, pathSegments, queryParameters, acceptHeaders, requestContentType);
-    final ODataContextImpl context = new ODataContextImpl(request, serviceFactory);
-
-    final ODataResponse response = new ODataRequestHandler(serviceFactory, service, context).handle(request);
-    assertNotNull(response);
-    assertEquals(expectedStatusCode == null ? HttpStatusCodes.PAYMENT_REQUIRED : expectedStatusCode,
-        response.getStatus());
+  private void checkAcceptHeader(final UriType uriType, final String acceptHeader,
+      final HttpStatusCodes expectedStatusCode) throws ODataException {
+    executeAndValidateHeaderRequest(ODataHttpMethod.GET, uriType, HttpHeaders.ACCEPT, acceptHeader,
+        expectedStatusCode);
   }
 
   private void checkValueContentType(final ODataHttpMethod method, final UriType uriType,
       final String requestContentType) throws Exception {
-    executeAndValidateRequest(method, createPathSegments(uriType, false, true), null, requestContentType, null);
+    executeAndValidateRequest(method, createPathSegments(uriType, false, true), null, null, null, requestContentType,
+        null);
   }
 
   private void wrongRequest(final ODataHttpMethod method, final List<String> pathSegments,
       final Map<String, String> queryParameters) throws ODataException {
-    executeAndValidateRequest(method, pathSegments, queryParameters, null, HttpStatusCodes.METHOD_NOT_ALLOWED);
+    executeAndValidateRequest(method, pathSegments, queryParameters, null, null, null,
+        HttpStatusCodes.METHOD_NOT_ALLOWED);
   }
 
   private void wrongOptions(final ODataHttpMethod method, final UriType uriType,
@@ -421,79 +382,51 @@ public class ODataRequestHandlerValidationTest extends BaseTest {
 
   private void wrongNavigationPath(final ODataHttpMethod method, final UriType uriType,
       final HttpStatusCodes expectedStatusCode) throws ODataException {
-    executeAndValidateRequest(method, createPathSegments(uriType, true, false), null, null, expectedStatusCode);
-  }
-
-  private void wrongRequestContentType(final ODataHttpMethod method, final UriType uriType,
-      final ContentType requestContentType) throws ODataException {
-    wrongRequestContentType(method, uriType, false, requestContentType);
+    executeAndValidateRequest(method, createPathSegments(uriType, true, false), null, null, null, null,
+        expectedStatusCode);
   }
 
   private void wrongRequestContentType(final ODataHttpMethod method, final UriType uriType, final boolean isValue,
       final ContentType requestContentType) throws ODataException {
-    wrongRequestContentType(method, uriType, isValue, requestContentType.toContentTypeString());
+    executeAndValidateRequest(method, createPathSegments(uriType, false, isValue), null, null, null,
+        requestContentType.toContentTypeString(), HttpStatusCodes.UNSUPPORTED_MEDIA_TYPE);
   }
 
-  private void wrongRequestContentType(final ODataHttpMethod method, final UriType uriType, final boolean isValue,
-      final String requestContentType) throws ODataException {
-    executeAndValidateRequest(method, createPathSegments(uriType, false, isValue), null, requestContentType,
-        HttpStatusCodes.UNSUPPORTED_MEDIA_TYPE);
+  private void wrongRequestContentType(final ODataHttpMethod method, final UriType uriType,
+      final ContentType requestContentType) throws ODataException {
+    wrongRequestContentType(method, uriType, false, requestContentType);
   }
 
   @Test
   public void dataServiceVersion() throws Exception {
-    ODataServiceFactory serviceFactory = mock(ODataServiceFactory.class);
-    final ODataService service = mockODataService(serviceFactory);
-    when(serviceFactory.createService(any(ODataContext.class))).thenReturn(service);
+    executeAndValidateHeaderRequest(ODataHttpMethod.GET, UriType.URI0,
+        ODataHttpHeaders.DATASERVICEVERSION, "1.0", null);
+    executeAndValidateHeaderRequest(ODataHttpMethod.GET, UriType.URI0,
+        ODataHttpHeaders.DATASERVICEVERSION, "2.0", null);
 
-    ODataRequest request =
-        mockODataRequest(ODataHttpMethod.GET, createPathSegments(UriType.URI0, false, false), null, null);
-    ODataContextImpl context = new ODataContextImpl(request, serviceFactory);
-
-    final ODataRequestHandler handler = new ODataRequestHandler(serviceFactory, service, context);
-
-    when(request.getRequestHeaderValue(ODataHttpHeaders.DATASERVICEVERSION)).thenReturn("1.0");
-    ODataResponse response = handler.handle(request);
-    assertEquals(HttpStatusCodes.PAYMENT_REQUIRED, response.getStatus());
-
-    when(request.getRequestHeaderValue(ODataHttpHeaders.DATASERVICEVERSION)).thenReturn("2.0");
-    response = handler.handle(request);
-    assertEquals(HttpStatusCodes.PAYMENT_REQUIRED, response.getStatus());
-
-    when(request.getRequestHeaderValue(ODataHttpHeaders.DATASERVICEVERSION)).thenReturn("3.0");
-    response = handler.handle(request);
-    assertEquals(HttpStatusCodes.BAD_REQUEST, response.getStatus());
-
-    when(request.getRequestHeaderValue(ODataHttpHeaders.DATASERVICEVERSION)).thenReturn("4.2");
-    response = handler.handle(request);
-    assertEquals(HttpStatusCodes.BAD_REQUEST, response.getStatus());
-
-    when(request.getRequestHeaderValue(ODataHttpHeaders.DATASERVICEVERSION)).thenReturn("42");
-    response = handler.handle(request);
-    assertEquals(HttpStatusCodes.BAD_REQUEST, response.getStatus());
-
-    when(request.getRequestHeaderValue(ODataHttpHeaders.DATASERVICEVERSION)).thenReturn("test.2.0");
-    response = handler.handle(request);
-    assertEquals(HttpStatusCodes.BAD_REQUEST, response.getStatus());
+    executeAndValidateHeaderRequest(ODataHttpMethod.GET, UriType.URI0,
+        ODataHttpHeaders.DATASERVICEVERSION, "3.0", HttpStatusCodes.BAD_REQUEST);
+    executeAndValidateHeaderRequest(ODataHttpMethod.GET, UriType.URI0,
+        ODataHttpHeaders.DATASERVICEVERSION, "4.2", HttpStatusCodes.BAD_REQUEST);
+    executeAndValidateHeaderRequest(ODataHttpMethod.GET, UriType.URI0,
+        ODataHttpHeaders.DATASERVICEVERSION, "42", HttpStatusCodes.BAD_REQUEST);
+    executeAndValidateHeaderRequest(ODataHttpMethod.GET, UriType.URI0,
+        ODataHttpHeaders.DATASERVICEVERSION, "test.2.0", HttpStatusCodes.BAD_REQUEST);
   }
 
   @Test
   public void allowedMethods() throws Exception {
-    executeAndValidateRequest(ODataHttpMethod.GET, createPathSegments(UriType.URI0, false, false), null, null, null);
-    executeAndValidateRequest(ODataHttpMethod.GET, createPathSegments(UriType.URI1, false, false), null, null, null);
-    executeAndValidateRequest(ODataHttpMethod.POST, createPathSegments(UriType.URI1, false, false), null,
-        HttpContentType.APPLICATION_JSON, null);
-    executeAndValidateRequest(ODataHttpMethod.GET, createPathSegments(UriType.URI2, false, false), null, null, null);
-    executeAndValidateRequest(ODataHttpMethod.GET, createPathSegments(UriType.URI3, false, false), null, null, null);
-    executeAndValidateRequest(ODataHttpMethod.PATCH, createPathSegments(UriType.URI3, false, false), null,
-        HttpContentType.APPLICATION_JSON, null);
-    executeAndValidateRequest(ODataHttpMethod.MERGE, createPathSegments(UriType.URI3, false, false), null,
-        HttpContentType.APPLICATION_JSON, null);
-    executeAndValidateRequest(ODataHttpMethod.GET, createPathSegments(UriType.URI4, false, false), null, null, null);
-    executeAndValidateRequest(ODataHttpMethod.POST, createPathSegments(UriType.URI9, false, false), null,
-        HttpContentType.MULTIPART_MIXED, null);
-    executeAndValidateRequest(ODataHttpMethod.GET, createPathSegments(UriType.URI15, false, false), null, null, null);
-    executeAndValidateRequest(ODataHttpMethod.GET, createPathSegments(UriType.URI17, false, false), null, null, null);
+    executeAndValidateRequest(ODataHttpMethod.GET, UriType.URI0, null, null);
+    executeAndValidateRequest(ODataHttpMethod.GET, UriType.URI1, null, null);
+    executeAndValidateRequest(ODataHttpMethod.POST, UriType.URI1, HttpContentType.APPLICATION_JSON, null);
+    executeAndValidateRequest(ODataHttpMethod.GET, UriType.URI2, null, null);
+    executeAndValidateRequest(ODataHttpMethod.GET, UriType.URI3, null, null);
+    executeAndValidateRequest(ODataHttpMethod.PATCH, UriType.URI3, HttpContentType.APPLICATION_JSON, null);
+    executeAndValidateRequest(ODataHttpMethod.MERGE, UriType.URI3, HttpContentType.APPLICATION_JSON, null);
+    executeAndValidateRequest(ODataHttpMethod.GET, UriType.URI4, null, null);
+    executeAndValidateRequest(ODataHttpMethod.POST, UriType.URI9, HttpContentType.MULTIPART_MIXED, null);
+    executeAndValidateRequest(ODataHttpMethod.GET, UriType.URI15, null, null);
+    executeAndValidateRequest(ODataHttpMethod.GET, UriType.URI17, null, null);
   }
 
   @Test
@@ -572,14 +505,11 @@ public class ODataRequestHandlerValidationTest extends BaseTest {
 
     wrongOptions(ODataHttpMethod.PUT, UriType.URI17, false, true, false, false, false, false, false, false, false);
     executeAndValidateRequest(ODataHttpMethod.PUT, createPathSegments(UriType.URI17, false, false),
-        createOptions(true, false, false, false, false, false, false, false, false),
-        null, HttpStatusCodes.BAD_REQUEST);
-
+        createOptions(true, false, false, false, false, false, false, false, false), null, null, null,
+        HttpStatusCodes.BAD_REQUEST);
     executeAndValidateRequest(ODataHttpMethod.DELETE, createPathSegments(UriType.URI17, false, false),
-        createOptions(true, false, false, false, false, false, false, false, false),
-        null, HttpStatusCodes.BAD_REQUEST);
-//    wrongOptions(ODataHttpMethod.DELETE, UriType.URI17, true, false, false, false, false, false, false, false, false);
-
+        createOptions(true, false, false, false, false, false, false, false, false), null, null, null,
+        HttpStatusCodes.BAD_REQUEST);
     wrongOptions(ODataHttpMethod.DELETE, UriType.URI17, false, true, false, false, false, false, false, false, false);
   }
 
@@ -630,119 +560,86 @@ public class ODataRequestHandlerValidationTest extends BaseTest {
 
   @Test
   public void requestAcceptHeader() throws Exception {
-    executeAndValidateGetRequest(createPathSegments(UriType.URI1, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_JSON), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI2, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_JSON), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI3, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_JSON), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI4, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_JSON), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI5, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_JSON), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI6A, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_JSON), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI6B, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_JSON), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI7A, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_JSON), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI7B, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_JSON), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI8, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_XML), null);
-    // in discussion, hence currently not implemented (see ODataRequestHandler#doContentNegotiation(...))
-//    executeAndValidateGetRequest(createPathSegments(UriType.URI8, false, false), null, 
-//        Arrays.asList(HttpContentType.TEXT_PLAIN), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI9, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_XML), HttpStatusCodes.METHOD_NOT_ALLOWED);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI15, false, false), null,
-        Arrays.asList(HttpContentType.TEXT_PLAIN), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI16, false, false), null,
-        Arrays.asList(HttpContentType.TEXT_PLAIN), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI17, false, true), null,
-        Arrays.asList(HttpContentType.APPLICATION_OCTET_STREAM), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI50A, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_XML), null);
-    executeAndValidateGetRequest(createPathSegments(UriType.URI50B, false, false), null,
-        Arrays.asList(HttpContentType.APPLICATION_XML), null);
+    checkAcceptHeader(UriType.URI0, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI1, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI2, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI3, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI4, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI5, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI6A, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI6B, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI7A, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI7B, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI8, HttpContentType.APPLICATION_XML, null);
+    checkAcceptHeader(UriType.URI9, HttpContentType.APPLICATION_XML, HttpStatusCodes.METHOD_NOT_ALLOWED);
+    checkAcceptHeader(UriType.URI10, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI11, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI12, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI13, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI14, HttpContentType.APPLICATION_JSON, null);
+    checkAcceptHeader(UriType.URI15, HttpContentType.TEXT_PLAIN, null);
+    checkAcceptHeader(UriType.URI16, HttpContentType.TEXT_PLAIN, null);
+    checkAcceptHeader(UriType.URI17, HttpContentType.APPLICATION_OCTET_STREAM, null);
+    checkAcceptHeader(UriType.URI50A, HttpContentType.TEXT_PLAIN, null);
+    checkAcceptHeader(UriType.URI50B, HttpContentType.TEXT_PLAIN, null);
+
+    checkAcceptHeader(UriType.URI8, HttpContentType.APPLICATION_JSON, HttpStatusCodes.NOT_ACCEPTABLE);
   }
 
   @Test
   public void requestContentType() throws Exception {
-    executeAndValidateRequest(ODataHttpMethod.PUT, createPathSegments(UriType.URI2, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-    executeAndValidateRequest(ODataHttpMethod.PATCH, createPathSegments(UriType.URI2, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-    executeAndValidateRequest(ODataHttpMethod.MERGE, createPathSegments(UriType.URI2, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-
-    executeAndValidateRequest(ODataHttpMethod.PUT, createPathSegments(UriType.URI3, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-    executeAndValidateRequest(ODataHttpMethod.PATCH, createPathSegments(UriType.URI3, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-    executeAndValidateRequest(ODataHttpMethod.MERGE, createPathSegments(UriType.URI3, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-
-    executeAndValidateRequest(ODataHttpMethod.PUT, createPathSegments(UriType.URI4, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-    executeAndValidateRequest(ODataHttpMethod.PATCH, createPathSegments(UriType.URI4, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-    executeAndValidateRequest(ODataHttpMethod.MERGE, createPathSegments(UriType.URI4, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-
-    executeAndValidateRequest(ODataHttpMethod.PUT, createPathSegments(UriType.URI5, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-    executeAndValidateRequest(ODataHttpMethod.PATCH, createPathSegments(UriType.URI5, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-    executeAndValidateRequest(ODataHttpMethod.MERGE, createPathSegments(UriType.URI5, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-
-    executeAndValidateRequest(ODataHttpMethod.PUT, createPathSegments(UriType.URI6A, false, false), null,
-        HttpContentType.APPLICATION_XML, HttpStatusCodes.BAD_REQUEST);
-    executeAndValidateRequest(ODataHttpMethod.PATCH, createPathSegments(UriType.URI6A, false, false), null,
-        HttpContentType.APPLICATION_XML, HttpStatusCodes.BAD_REQUEST);
-    executeAndValidateRequest(ODataHttpMethod.MERGE, createPathSegments(UriType.URI6A, false, false), null,
-        HttpContentType.APPLICATION_XML, HttpStatusCodes.BAD_REQUEST);
-
-    executeAndValidateRequest(ODataHttpMethod.POST, createPathSegments(UriType.URI6B, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-
-    executeAndValidateRequest(ODataHttpMethod.PUT, createPathSegments(UriType.URI7A, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-    executeAndValidateRequest(ODataHttpMethod.PATCH, createPathSegments(UriType.URI7A, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-    executeAndValidateRequest(ODataHttpMethod.MERGE, createPathSegments(UriType.URI7A, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-
-    executeAndValidateRequest(ODataHttpMethod.POST, createPathSegments(UriType.URI7B, false, false), null,
-        HttpContentType.APPLICATION_XML, null);
-
-    executeAndValidateRequest(ODataHttpMethod.POST, createPathSegments(UriType.URI9, false, false), null,
-        HttpContentType.MULTIPART_MIXED, null);
+    executeAndValidateRequest(ODataHttpMethod.PUT, UriType.URI2, HttpContentType.APPLICATION_XML, null);
+    executeAndValidateRequest(ODataHttpMethod.PATCH, UriType.URI2, HttpContentType.APPLICATION_XML, null);
+    executeAndValidateRequest(ODataHttpMethod.MERGE, UriType.URI2, HttpContentType.APPLICATION_XML, null);
+
+    executeAndValidateRequest(ODataHttpMethod.PUT, UriType.URI3, HttpContentType.APPLICATION_XML, null);
+    executeAndValidateRequest(ODataHttpMethod.PATCH, UriType.URI3, HttpContentType.APPLICATION_XML, null);
+    executeAndValidateRequest(ODataHttpMethod.MERGE, UriType.URI3, HttpContentType.APPLICATION_XML, null);
+
+    executeAndValidateRequest(ODataHttpMethod.PUT, UriType.URI4, HttpContentType.APPLICATION_XML, null);
+    executeAndValidateRequest(ODataHttpMethod.PATCH, UriType.URI4, HttpContentType.APPLICATION_XML, null);
+    executeAndValidateRequest(ODataHttpMethod.MERGE, UriType.URI4, HttpContentType.APPLICATION_XML, null);
+
+    executeAndValidateRequest(ODataHttpMethod.PUT, UriType.URI5, HttpContentType.APPLICATION_XML, null);
+    executeAndValidateRequest(ODataHttpMethod.PATCH, UriType.URI5, HttpContentType.APPLICATION_XML, null);
+    executeAndValidateRequest(ODataHttpMethod.MERGE, UriType.URI5, HttpContentType.APPLICATION_XML, null);
+
+    executeAndValidateRequest(ODataHttpMethod.PUT, UriType.URI6A, HttpContentType.APPLICATION_XML,
+        HttpStatusCodes.BAD_REQUEST);
+    executeAndValidateRequest(ODataHttpMethod.PATCH, UriType.URI6A, HttpContentType.APPLICATION_XML,
+        HttpStatusCodes.BAD_REQUEST);
+    executeAndValidateRequest(ODataHttpMethod.MERGE, UriType.URI6A, HttpContentType.APPLICATION_XML,
+        HttpStatusCodes.BAD_REQUEST);
+
+    executeAndValidateRequest(ODataHttpMethod.POST, UriType.URI6B, HttpContentType.APPLICATION_XML, null);
+
+    executeAndValidateRequest(ODataHttpMethod.PUT, UriType.URI7A, HttpContentType.APPLICATION_XML, null);
+    executeAndValidateRequest(ODataHttpMethod.PATCH, UriType.URI7A, HttpContentType.APPLICATION_XML, null);
+    executeAndValidateRequest(ODataHttpMethod.MERGE, UriType.URI7A, HttpContentType.APPLICATION_XML, null);
+
+    executeAndValidateRequest(ODataHttpMethod.POST, UriType.URI7B, HttpContentType.APPLICATION_XML, null);
+
+    executeAndValidateRequest(ODataHttpMethod.POST, UriType.URI9, HttpContentType.MULTIPART_MIXED, null);
   }
 
   @Test
   public void requestContentTypeMediaResource() throws Exception {
-    executeAndValidateRequest(ODataHttpMethod.POST, createPathSegments(UriType.URI1, false, false), null, "image/jpeg",
-        null);
-
-    executeAndValidateRequest(ODataHttpMethod.PUT, createPathSegments(UriType.URI17, false, true), null, "image/jpeg",
-        null);
+    executeAndValidateRequest(ODataHttpMethod.POST, UriType.URI1, "image/jpeg", null);
+    executeAndValidateRequest(ODataHttpMethod.PUT, UriType.URI17, "image/jpeg", null);
   }
 
   @Test
   public void requestContentTypeFunctionImport() throws Exception {
     EdmFunctionImport function = edm.getDefaultEntityContainer().getFunctionImport("MaximalAge");
     when(function.getHttpMethod()).thenReturn(ODataHttpMethod.PUT.name());
-    executeAndValidateRequest(ODataHttpMethod.PUT, createPathSegments(UriType.URI14, false, false), null, null, null);
-    executeAndValidateRequest(ODataHttpMethod.PUT, createPathSegments(UriType.URI14, false, false), null,
-        HttpContentType.WILDCARD, null);
+    executeAndValidateRequest(ODataHttpMethod.PUT, UriType.URI14, null, null);
+    executeAndValidateRequest(ODataHttpMethod.PUT, UriType.URI14, HttpContentType.WILDCARD, null);
     checkValueContentType(ODataHttpMethod.PUT, UriType.URI14, null);
     checkValueContentType(ODataHttpMethod.PUT, UriType.URI14, HttpContentType.WILDCARD);
 
     function = edm.getDefaultEntityContainer().getFunctionImport("OldestEmployee");
     when(function.getHttpMethod()).thenReturn(ODataHttpMethod.POST.name());
-    executeAndValidateRequest(ODataHttpMethod.POST, createPathSegments(UriType.URI10, false, false), null, null, null);
+    executeAndValidateRequest(ODataHttpMethod.POST, UriType.URI10, null, null);
   }
 
   @Test
@@ -790,7 +687,7 @@ public class ODataRequestHandlerValidationTest extends BaseTest {
 
       wrongRequestContentType(oDataHttpMethod, UriType.URI3, ContentType.TEXT_PLAIN);
 
-      wrongRequestContentType(oDataHttpMethod, UriType.URI4, false, ContentType.TEXT_PLAIN);
+      wrongRequestContentType(oDataHttpMethod, UriType.URI4, ContentType.TEXT_PLAIN);
 
       wrongRequestContentType(oDataHttpMethod, UriType.URI5, true, ContentType.APPLICATION_ATOM_SVC);
       wrongRequestContentType(oDataHttpMethod, UriType.URI5, true, ContentType.APPLICATION_ATOM_SVC_CS_UTF_8);
@@ -822,4 +719,39 @@ public class ODataRequestHandlerValidationTest extends BaseTest {
     wrongRequestContentType(ODataHttpMethod.POST, UriType.URI1, ContentType.APPLICATION_OCTET_STREAM);
     wrongRequestContentType(ODataHttpMethod.POST, UriType.URI6B, ContentType.APPLICATION_ATOM_SVC);
   }
+
+  @Test
+  public void conditionalHandling() throws Exception {
+    EdmProperty property = (EdmProperty) (edm.getEntityType("RefScenario", "Employee").getProperty("EmployeeId"));
+    EdmFacets facets = mock(EdmFacets.class);
+    when(facets.getConcurrencyMode()).thenReturn(EdmConcurrencyMode.Fixed);
+    when(property.getFacets()).thenReturn(facets);
+
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI2, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+    executeAndValidateHeaderRequest(ODataHttpMethod.PATCH, UriType.URI2, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+    executeAndValidateHeaderRequest(ODataHttpMethod.MERGE, UriType.URI2, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+    executeAndValidateHeaderRequest(ODataHttpMethod.DELETE, UriType.URI2, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI3, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI4, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI5, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+    // executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI6A, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI17, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+
+    executeAndValidateHeaderRequest(ODataHttpMethod.POST, UriType.URI1, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI7A, HttpHeaders.IF_MATCH, "W/\"1\"", null);
+
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI2, null, null,
+        HttpStatusCodes.PRECONDITION_REQUIRED);
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI3, null, null,
+        HttpStatusCodes.PRECONDITION_REQUIRED);
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI4, null, null,
+        HttpStatusCodes.PRECONDITION_REQUIRED);
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI5, null, null,
+        HttpStatusCodes.PRECONDITION_REQUIRED);
+    // executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI6A, null, null,
+    //     HttpStatusCodes.PRECONDITION_REQUIRED);
+    executeAndValidateHeaderRequest(ODataHttpMethod.PUT, UriType.URI17, null, null,
+        HttpStatusCodes.PRECONDITION_REQUIRED);
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/77b0ac0f/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/RequestContentTypeTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/RequestContentTypeTest.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/RequestContentTypeTest.java
index ba9bbdc..7e43669 100644
--- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/RequestContentTypeTest.java
+++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/basic/RequestContentTypeTest.java
@@ -107,7 +107,7 @@ public class RequestContentTypeTest extends AbstractBasicTest {
 
   @Test
   public void validApplicationXmlContentType() throws Exception {
-    HttpPut put = new HttpPut(URI.create(getEndpoint().toString() + "Rooms('1')"));
+    HttpPut put = new HttpPut(URI.create(getEndpoint().toString() + "Teams('1')"));
     put.setHeader(HttpHeaders.CONTENT_TYPE, HttpContentType.APPLICATION_XML);
     final HttpResponse response = getHttpClient().execute(put);
     // We expect an internal server error due to the incomplete processor implementation.
@@ -124,7 +124,7 @@ public class RequestContentTypeTest extends AbstractBasicTest {
 
   @Test
   public void validTextPlainContentType() throws Exception {
-    HttpPut put = new HttpPut(URI.create(getEndpoint().toString() + "Rooms('1')/Seats/$value"));
+    HttpPut put = new HttpPut(URI.create(getEndpoint().toString() + "Teams('1')/isScrumTeam/$value"));
     put.setHeader(HttpHeaders.CONTENT_TYPE, HttpContentType.TEXT_PLAIN);
     final HttpResponse response = getHttpClient().execute(put);
     // We expect an internal server error due to the incomplete processor implementation.

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/77b0ac0f/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/MiscChangeTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/MiscChangeTest.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/MiscChangeTest.java
index 526d756..a67365b 100644
--- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/MiscChangeTest.java
+++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/MiscChangeTest.java
@@ -29,8 +29,7 @@ import org.junit.Test;
 
 /**
  * Tests employing the reference scenario that use neither XML nor JSON
- * and that change data in some way
- * 
+ * and that change data in some way.
  */
 public class MiscChangeTest extends AbstractRefTest {
 
@@ -44,7 +43,7 @@ public class MiscChangeTest extends AbstractRefTest {
     callUri(ODataHttpMethod.DELETE, "Container2.Photos(Id=1,Type='image%2Fpng')",
         HttpHeaders.IF_MATCH, "W/\"1\"", null, null, HttpStatusCodes.NO_CONTENT);
 
-    // deleteUri("Rooms('1')", HttpStatusCodes.PRECONDITION_REQUIRED);
+    deleteUri("Rooms('1')", HttpStatusCodes.PRECONDITION_REQUIRED);
     deleteUri("Managers()", HttpStatusCodes.METHOD_NOT_ALLOWED);
     deleteUri("Managers('5')", HttpStatusCodes.NOT_FOUND);
     deleteUri("Employees('2')/ne_Manager", HttpStatusCodes.BAD_REQUEST);
@@ -87,18 +86,15 @@ public class MiscChangeTest extends AbstractRefTest {
     checkMediaType(response, HttpContentType.APPLICATION_OCTET_STREAM);
     assertEquals("00", getBody(response));
 
-    response =
-        callUri(ODataHttpMethod.PUT, "Container2.Photos(Id=2,Type='image%2Fbmp')/$value", null, null, "00", IMAGE_GIF,
-            HttpStatusCodes.NO_CONTENT);
+    response = callUri(ODataHttpMethod.PUT, "Container2.Photos(Id=2,Type='image%2Fbmp')/$value",
+        HttpHeaders.IF_MATCH, "W/\"2\"", "00", IMAGE_GIF, HttpStatusCodes.NO_CONTENT);
     checkEtag(response, "W/\"2\"");
 
-    response =
-        callUri(ODataHttpMethod.PATCH, url, null, null, "00", HttpContentType.APPLICATION_OCTET_STREAM,
-            HttpStatusCodes.METHOD_NOT_ALLOWED);
+    response = callUri(ODataHttpMethod.PATCH, url, null, null, "00", HttpContentType.APPLICATION_OCTET_STREAM,
+        HttpStatusCodes.METHOD_NOT_ALLOWED);
     response.getEntity().getContent().close();
-    response =
-        callUri(ODataHttpMethod.MERGE, url, null, null, "00", HttpContentType.APPLICATION_OCTET_STREAM,
-            HttpStatusCodes.METHOD_NOT_ALLOWED);
+    response = callUri(ODataHttpMethod.MERGE, url, null, null, "00", HttpContentType.APPLICATION_OCTET_STREAM,
+        HttpStatusCodes.METHOD_NOT_ALLOWED);
     response.getEntity().getContent().close();
   }
 
@@ -107,15 +103,15 @@ public class MiscChangeTest extends AbstractRefTest {
     putUri("Employees('2')/Age/$value", "42", HttpContentType.TEXT_PLAIN, HttpStatusCodes.NO_CONTENT);
 
     String url = "Container2.Photos(Id=3,Type='image%2Fjpeg')/Image/$value";
-    callUri(ODataHttpMethod.PUT, url, HttpHeaders.ETAG, "W/\"3\"", "4711", HttpContentType.APPLICATION_OCTET_STREAM,
-        HttpStatusCodes.NO_CONTENT);
+    callUri(ODataHttpMethod.PUT, url, HttpHeaders.IF_MATCH, "W/\"3\"", "4711",
+        HttpContentType.APPLICATION_OCTET_STREAM, HttpStatusCodes.NO_CONTENT);
     HttpResponse response = callUri(url);
     assertEquals("4711", getBody(response));
     checkMediaType(response, HttpContentType.APPLICATION_OCTET_STREAM);
 
     url = "Container2.Photos(Id=4,Type='foo')/BinaryData/$value";
-    response =
-        callUri(ODataHttpMethod.PUT, url, HttpHeaders.ETAG, "W/\"4\"", "4711", IMAGE_JPEG, HttpStatusCodes.NO_CONTENT);
+    response = callUri(ODataHttpMethod.PUT, url, HttpHeaders.IF_MATCH, "W/\"4\"", "4711", IMAGE_JPEG,
+        HttpStatusCodes.NO_CONTENT);
     checkEtag(response, "W/\"4\"");
     assertEquals("4711", getBody(callUri(url)));
 

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/77b0ac0f/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/PropertyXmlChangeTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/PropertyXmlChangeTest.java b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/PropertyXmlChangeTest.java
index f14dbdd..9cb009b 100644
--- a/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/PropertyXmlChangeTest.java
+++ b/odata2-lib/odata-fit/src/test/java/org/apache/olingo/odata2/fit/ref/PropertyXmlChangeTest.java
@@ -22,14 +22,14 @@ import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
 
 import org.apache.http.HttpResponse;
 import org.apache.olingo.odata2.api.commons.HttpContentType;
+import org.apache.olingo.odata2.api.commons.HttpHeaders;
 import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
 import org.apache.olingo.odata2.api.commons.ODataHttpMethod;
 import org.apache.olingo.odata2.api.edm.Edm;
 import org.junit.Test;
 
 /**
- * Tests employing the reference scenario changing properties in XML format
- * 
+ * Tests employing the reference scenario changing properties in XML format.
  */
 public class PropertyXmlChangeTest extends AbstractRefXmlTest {
 
@@ -52,9 +52,8 @@ public class PropertyXmlChangeTest extends AbstractRefXmlTest {
 
     final String url4 = "Rooms('42')/Seats";
     requestBody = "<Seats xmlns=\"" + Edm.NAMESPACE_D_2007_08 + "\">42</Seats>";
-    HttpResponse response =
-        callUri(ODataHttpMethod.PUT, url4, null, null, requestBody, HttpContentType.APPLICATION_XML_UTF8,
-            HttpStatusCodes.NO_CONTENT);
+    HttpResponse response = callUri(ODataHttpMethod.PUT, url4, HttpHeaders.IF_MATCH, "W/\"1\"", requestBody,
+        HttpContentType.APPLICATION_XML_UTF8, HttpStatusCodes.NO_CONTENT);
     checkEtag(response, "W/\"1\"");
 
     final String url5 = "Employees('2')/EmployeeId";