Пример #1
0
 /**
  * @test
  * @functional
  */
 public function testComplex()
 {
     /* @var $farm Farm */
     $farm = $this->createTestFarm('server', ['base-ubuntu1404']);
     /* @var $farmRole FarmRole */
     $farmRole = $farm->farmRoles->current();
     $server = null;
     static::toDelete(Farm::class, [$farm->id]);
     $uri = self::getUserApiUrl("/farms/{$farm->id}/actions/launch");
     $this->request($uri, Request::METHOD_POST);
     for ($time = time(), $sleep = 50; time() - $time < 400 && (empty($server) || $server->status != Server::STATUS_RUNNING); $sleep += 50) {
         sleep($sleep);
         $testServers = $this->listServers(['farmId' => $farm->id]);
         if (count($testServers) > 0) {
             $server = reset($testServers);
             /* @var $server Server */
             continue;
         }
     }
     $this->assertNotEmpty($server);
     $this->assertEquals($server->status, 'running');
     $testDescribe = [['farmId' => $farm->id], ['farmRoleId' => $farmRole->id], ['serverId' => 'all']];
     // testing describe and fetch action
     foreach ($testDescribe as $value) {
         $servers = $this->listServers($value);
         $serverAdapter = $this->getAdapter('server');
         $filterable = $serverAdapter->getRules()[ApiEntityAdapter::RULE_TYPE_FILTERABLE];
         foreach ($servers as $server) {
             /* @var $server Server */
             foreach ($filterable as $property) {
                 $filterValue = $server->{$property};
                 $listResult = $this->listServers($value, [$property => $filterValue]);
                 if (!static::isRecursivelyEmpty($filterValue)) {
                     foreach ($listResult as $filtered) {
                         $this->assertEquals($filterValue, $filtered->{$property}, "Property '{$property}' mismatch");
                     }
                 }
             }
             $response = $this->getServer($server->id);
             $this->assertEquals(200, $response->status, $this->printResponseError($response));
             $dbServer = Server::findPk($server->id);
             $this->assertObjectEqualsEntity($response->getBody()->data, $dbServer, $serverAdapter);
         }
     }
     $entity = Server::findPk($server->id);
     /* @var $entity Server */
     $DBServerObject = $entity->__getDBServer();
     $oldModel = DBServer::LoadByID($server->id);
     $this->assertEquals($DBServerObject, $oldModel);
     $serverEntity = (new Server())->__getEntityFromDBServer($oldModel);
     $this->assertEquals($entity, $serverEntity);
     // testing reboot action
     $response = $this->rebootServer($server->id, true);
     $this->assertEquals(200, $response->status, $this->printResponseError($response));
     $data = $response->getBody()->data;
     $this->assertEquals($server->id, $data->id);
     $propertyReboot = ServerProperty::findOne([['serverId' => $server->id], ['name' => SERVER_PROPERTIES::REBOOTING]]);
     /* @var $propertyReboot ServerProperty */
     for ($time = time(), $sleep = 50; time() - $time < 300 && (!$propertyReboot || $propertyReboot->value); $sleep += 50) {
         $propertyReboot = ServerProperty::findOne([['serverId' => $server->id], ['name' => SERVER_PROPERTIES::REBOOTING]]);
     }
     $server = $this->waitForChanges($server->id, Server::STATUS_RUNNING);
     // testing suspend action
     $response = $this->suspendServer($server->id);
     $this->assertEquals(200, $response->status, $this->printResponseError($response));
     $data = $response->getBody()->data;
     $this->assertEquals($server->id, $data->id);
     $this->assertEquals($data->status, 'pending_suspend');
     $server = $this->waitForChanges($server->id, Server::STATUS_SUSPENDED, 600);
     // testing resume action
     $sleep = 0;
     do {
         try {
             $response = $this->resumeServer($server->id);
             if ($response->status == 200) {
                 break;
             }
         } catch (Exception $e) {
             if (strpos($e->getMessage(), "is not in a state from which it can be started") !== false) {
                 $sleep += 60;
                 sleep(60);
             } else {
                 throw $e;
             }
         }
     } while ($sleep < 300);
     $this->assertEquals(200, $response->status, $this->printResponseError($response));
     $data = $response->getBody()->data;
     $this->assertEquals($server->id, $data->id);
     $this->assertEquals($data->status, 'resuming');
     $server = $this->waitForChanges($server->id, Server::STATUS_RUNNING);
 }
Пример #2
0
 /**
  * Check if given version is less than scalarizr version
  *
  * @param   string  $v  Version
  * @return  bool
  */
 public function isVersionSupported($v)
 {
     /* @var $property ServerProperty */
     $property = ServerProperty::findOne([['serverId' => $this->serverId], ['name' => Server::SZR_VESION]]);
     return self::versionInfo($property ? $property->value : '') >= self::versionInfo($v);
 }