private function getLockName(Lock $lock, $arguments)
 {
     $lockName = $this->lockPrefix . '_' . $lock->getMethod();
     if (array_key_exists($lock->getArgumentIndex(), $arguments)) {
         $argumentHash = $this->getHashFromValue($arguments[$lock->getArgumentIndex()]);
         $lockName .= sprintf('_%s_%s', $lock->getArgumentIndex(), $argumentHash);
     }
     return $lockName;
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $decorator = new Decorator(new TestService(), 'test_service', new TestEventDispatcher());
     $lock = new Lock();
     $lock->setDriver(new File(new \Symfony\Component\Filesystem\Filesystem(), 'lock'))->setMethod('sleep');
     $decorator->addLock($lock);
     $decorator->sleep((int) $input->getOption('seconds'));
     $output->write('done');
 }
 public function testLogger()
 {
     $decorator = new Decorator(new TestService(), 'test_service');
     $lock = new Lock();
     $lock->setDriver(new Debug())->setMethod('doNothing');
     $decorator->addLock($lock);
     $logger = new TestLogger();
     $decorator->setLogger($logger);
     $decorator->doNothing();
     $this->assertEquals($this->expectedLogs, $logger->getLogs());
 }
 /**
  * @expectedException \Exception
  * @expectedExceptionMessage something exception
  */
 public function testLockedMethodThatThrowsException()
 {
     $decorator = new Decorator(new TestService(), 'test_service');
     $lock = new Lock();
     $lock->setDriver(new Debug())->setMethod('doSomething');
     $decorator->addLock($lock);
     $decorator->doSomething(function () {
         throw new \Exception('something exception');
     });
 }