示例#1
0
 /**
  * This function is used to perform following checking (validation)
  * for capability negotiation.
  *  (1) Check client request's 'DataServiceVersion' header value is 
  *      less than or equal to the minimum version required to intercept
  *      the response
  *  (2) Check client request's 'MaxDataServiceVersion' header value is
  *      less than or equal to the version of protocol required to generate
  *      the response
  *  (3) Check the configured maximum protocol version is less than or equal 
  *      to the version of protocol required to generate the response
  *  In addition to these checking, this function is also responsible for
  *  initializing the properties representing 'DataServiceVersion' and
  *  'MaxDataServiceVersion'.
  *  
  *
  * @throws ODataException If any of the above 3 check fails.
  */
 public function validateVersions()
 {
     //If the request version is below the minimum version required by supplied request arguments..throw an exception
     if ($this->requestVersion->compare($this->requiredMinRequestVersion) < 0) {
         throw ODataException::createBadRequestError(Messages::requestVersionTooLow($this->requestVersion->toString(), $this->requiredMinRequestVersion->toString()));
     }
     //If the requested max version is below the version required to fulfill the response...throw an exception
     if ($this->requestMaxVersion->compare($this->requiredMinResponseVersion) < 0) {
         throw ODataException::createBadRequestError(Messages::requestVersionTooLow($this->requestMaxVersion->toString(), $this->requiredMinResponseVersion->toString()));
     }
     //If the max version supported by the service is below the version required to fulfill the response..throw an exception
     if ($this->maxServiceVersion->compare($this->requiredMinResponseVersion) < 0) {
         throw ODataException::createBadRequestError(Messages::requestVersionIsBiggerThanProtocolVersion($this->requiredMinResponseVersion->toString(), $this->maxServiceVersion->toString()));
     }
 }
 public function testGetResponseVersionConfigMaxVersion20RequestVersion30RequestMaxVersion30()
 {
     $requestVersion = "3.0";
     $requestMaxVersion = "3.0";
     $fakeConfigMaxVersion = Version::v2();
     Phockito::when($this->mockServiceConfiguration->getMaxDataServiceVersion())->return($fakeConfigMaxVersion);
     $fakeURL = new Url("http://host/service.svc/Collection");
     $fakeSegments = array(new SegmentDescriptor());
     $request = new RequestDescription($fakeSegments, $fakeURL, $fakeConfigMaxVersion, $requestVersion, $requestMaxVersion);
     $this->assertEquals(Version::v1(), $request->getResponseVersion());
     $request->raiseResponseVersion(2, 0);
     //because max is 3 this is allowed
     $this->assertEquals(Version::v2(), $request->getResponseVersion(), "Response version should be upped from the raise");
     //however moving to 3.0 is not because the service protocol is only 2
     try {
         $request->raiseResponseVersion(3, 0);
         $this->fail("Expected exception not thrown");
     } catch (ODataException $ex) {
         $this->assertEquals(Messages::requestVersionIsBiggerThanProtocolVersion("3.0", $fakeConfigMaxVersion->toString()), $ex->getMessage());
         $this->assertEquals(400, $ex->getStatusCode());
     }
 }