/** * @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); }
/** * 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); }