public function testNotifyPropertyNotFound()
 {
     // Setup request generator
     $lockReq = new ezcWebdavLockRequest('/some/path');
     $activeLock = new ezcWebdavLockDiscoveryPropertyActiveLock();
     $reqGen = new ezcWebdavLockLockRequestGenerator($lockReq, $activeLock);
     // Fake PROPFIND response
     $propStatRes = new ezcWebdavPropStatResponse(new ezcWebdavBasicPropertyStorage(), ezcWebdavResponse::STATUS_200);
     $propStatRes->storage->attach(new ezcWebdavGetEtagProperty());
     $propStatRes2 = new ezcWebdavPropStatResponse(new ezcWebdavBasicPropertyStorage(), ezcWebdavResponse::STATUS_404);
     $propStatRes2->storage->attach(new ezcWebdavLockDiscoveryProperty());
     $propFindRes = new ezcWebdavPropFindResponse(new ezcWebdavResource('/some/path'), $propStatRes, $propStatRes2);
     // Fake result
     $result = new ezcWebdavPropPatchRequest('/some/path');
     $result->updates->attach(new ezcWebdavLockDiscoveryProperty(new ArrayObject(array($activeLock))), ezcWebdavPropPatchRequest::SET);
     // Perform notify
     $reqGen->notify($propFindRes);
     $this->assertAttributeEquals(array($result), 'requests', $reqGen);
 }
 /**
  * Aquires a new lock.
  *
  * Performs all necessary checks for the lock to be acquired by $request.
  * If any failures occur, either an instance of {@link
  * ezcWebdavErrorResponse} or {@link ezcWebdavMultistatusResponse} is
  * returned. If the lock was acquired successfully, an instance of {@link
  * ezcWebdavLockResponse} is returned.
  * 
  * @param ezcWebdavLockRequest $request 
  * @return ezcWebdavResponse
  */
 protected function acquireLock(ezcWebdavLockRequest $request)
 {
     $auth = ezcWebdavServer::getInstance()->auth;
     $authHeader = $request->getHeader('Authorization');
     // Active lock part to be used in PROPPATCH requests and LOCK response
     $lockToken = $this->tools->generateLockToken($request);
     $activeLock = $this->tools->generateActiveLock($request, $lockToken);
     // Generates PROPPATCH requests while checking violations
     $requestGenerator = new ezcWebdavLockLockRequestGenerator($request, $activeLock);
     // Check violations and collect PROPPATCH requests
     $res = $this->tools->checkViolations(new ezcWebdavLockCheckInfo($request->requestUri, $request->getHeader('Depth'), $request->getHeader('If'), $authHeader, ezcWebdavAuthorizer::ACCESS_WRITE, $requestGenerator, $request->lockInfo->lockScope === ezcWebdavLockRequest::SCOPE_SHARED));
     if ($res !== null) {
         if ($res->status === ezcWebdavResponse::STATUS_404) {
             return $this->createLockNullResource($request);
         }
         // Other violations -> return multistatus
         return $this->createLockError($res);
     }
     // Assign lock to user
     $auth->assignLock($authHeader->username, $lockToken);
     $affectedLockDiscovery = null;
     // Send all generated PROPPATCH requests to the backend to update lock information
     foreach ($requestGenerator->getRequests() as $propPatch) {
         // Authorization for lock assignement
         ezcWebdavLockTools::cloneRequestHeaders($request, $propPatch);
         $propPatch->validateHeaders();
         $res = ezcWebdavServer::getInstance()->backend->performRequest($propPatch);
         if (!$res instanceof ezcWebdavPropPatchResponse) {
             // An error occured while performing PROPPATCH, very bad thing!
             // @TODO: Should usually cleanup successful patches again!
             return $res;
         }
     }
     return new ezcWebdavLockResponse($requestGenerator->getLockDiscoveryProperty($request->requestUri), ezcWebdavResponse::STATUS_200, $lockToken);
 }