diff options
author | Sergio Bertolin <sbertolin@solidgear.es> | 2015-11-24 12:48:06 +0000 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2015-11-26 17:03:17 +0100 |
commit | 9d44576819911b7cf0761191135dbc4de7b617ec (patch) | |
tree | 1332338d1fdddd078bf54c2a877a4ae13e72f0ec /build/integration/features/bootstrap/Provisioning.php | |
parent | 8fe878afe9af165b98470a75203df2f1b32cb68f (diff) | |
download | nextcloud-server-9d44576819911b7cf0761191135dbc4de7b617ec.tar.gz nextcloud-server-9d44576819911b7cf0761191135dbc4de7b617ec.zip |
Restructured FeatureContext to reuse some parts and run two servers in parallel
Diffstat (limited to 'build/integration/features/bootstrap/Provisioning.php')
-rw-r--r-- | build/integration/features/bootstrap/Provisioning.php | 548 |
1 files changed, 548 insertions, 0 deletions
diff --git a/build/integration/features/bootstrap/Provisioning.php b/build/integration/features/bootstrap/Provisioning.php new file mode 100644 index 00000000000..05a8885d96d --- /dev/null +++ b/build/integration/features/bootstrap/Provisioning.php @@ -0,0 +1,548 @@ +<?php + +use Behat\Behat\Context\Context; +use Behat\Behat\Context\SnippetAcceptingContext; +use GuzzleHttp\Client; +use GuzzleHttp\Message\ResponseInterface; + +require __DIR__ . '/../../vendor/autoload.php'; + +trait Provisioning { + + /** @var int */ + private $apiVersion = 1; + + /** @var array */ + private $createdUsers = []; + + /** @var array */ + private $createdRemoteUsers = []; + + /** @var array */ + private $createdRemoteGroups = []; + + /** @var array */ + private $createdGroups = []; + + /** + * @Given /^using api version "([^"]*)"$/ + */ + public function usingApiVersion($version) { + $this->apiVersion = $version; + } + + /** + * @Given /^user "([^"]*)" exists$/ + */ + public function assureUserExists($user) { + try { + $this->userExists($user); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->creatingTheUser($user); + $this->currentUser = $previous_user; + } + $this->userExists($user); + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + + } + + /** + * @Given /^user "([^"]*)" does not exist$/ + */ + public function userDoesNotExist($user) { + try { + $this->userExists($user); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $this->response = $ex->getResponse(); + PHPUnit_Framework_Assert::assertEquals(404, $ex->getResponse()->getStatusCode()); + return; + } + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->deletingTheUser($user); + $this->currentUser = $previous_user; + try { + $this->userExists($user); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $this->response = $ex->getResponse(); + PHPUnit_Framework_Assert::assertEquals(404, $ex->getResponse()->getStatusCode()); + } + } + + public function creatingTheUser($user) { + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $options['body'] = [ + 'userid' => $user, + 'password' => '123456' + ]; + + $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); + if ($this->currentServer === 'LOCAL'){ + $this->createdUsers[$user] = $user; + } elseif ($this->currentServer === 'REMOTE') { + $this->createdRemoteUsers[$user] = $user; + } + + } + + public function createUser($user) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->creatingTheUser($user); + $this->userExists($user); + $this->currentUser = $previous_user; + } + + public function deleteUser($user) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->deletingTheUser($user); + $this->userDoesNotExist($user); + $this->currentUser = $previous_user; + } + + public function createGroup($group) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->creatingTheGroup($group); + $this->groupExists($group); + $this->currentUser = $previous_user; + } + + public function deleteGroup($group) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->deletingTheGroup($group); + $this->groupDoesNotExist($group); + $this->currentUser = $previous_user; + } + + public function userExists($user){ + $fullUrl = $this->baseUrl . "v2.php/cloud/users/$user"; + $client = new Client(); + $options = []; + $options['auth'] = $this->adminUser; + + $this->response = $client->get($fullUrl, $options); + } + + /** + * @Then /^check that user "([^"]*)" belongs to group "([^"]*)"$/ + */ + public function checkThatUserBelongsToGroup($user, $group) { + $fullUrl = $this->baseUrl . "v2.php/cloud/users/$user/groups"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $this->response = $client->get($fullUrl, $options); + $respondedArray = $this->getArrayOfGroupsResponded($this->response); + sort($respondedArray); + PHPUnit_Framework_Assert::assertContains($group, $respondedArray); + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + } + + public function userBelongsToGroup($user, $group) { + $fullUrl = $this->baseUrl . "v2.php/cloud/users/$user/groups"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $this->response = $client->get($fullUrl, $options); + $groups = array($group); + $respondedArray = $this->getArrayOfGroupsResponded($this->response); + + if (array_key_exists($group, $respondedArray)) { + return True; + } else{ + return False; + } + } + + /** + * @Given /^user "([^"]*)" belongs to group "([^"]*)"$/ + */ + public function assureUserBelongsToGroup($user, $group){ + if (!$this->userBelongsToGroup($user, $group)){ + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->addingUserToGroup($user, $group); + $this->currentUser = $previous_user; + } + $this->checkThatUserBelongsToGroup($user, $group); + + } + + /** + * @Given /^user "([^"]*)" does not belong to group "([^"]*)"$/ + */ + public function userDoesNotBelongToGroup($user, $group) { + $fullUrl = $this->baseUrl . "v2.php/cloud/users/$user/groups"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $this->response = $client->get($fullUrl, $options); + $groups = array($group); + $respondedArray = $this->getArrayOfGroupsResponded($this->response); + PHPUnit_Framework_Assert::assertNotEquals($groups, $respondedArray, "", 0.0, 10, true); + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + } + + /** + * @When /^creating the group "([^"]*)"$/ + */ + public function creatingTheGroup($group) { + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/groups"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $options['body'] = [ + 'groupid' => $group, + ]; + + $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); + if ($this->currentServer === 'LOCAL'){ + $this->createdGroups[$group] = $group; + } elseif ($this->currentServer === 'REMOTE') { + $this->createdRemoteGroups[$group] = $group; + } + } + + /** + * @When /^Deleting the user "([^"]*)"$/ + */ + public function deletingTheUser($user) { + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users/$user"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $this->response = $client->send($client->createRequest("DELETE", $fullUrl, $options)); + } + + /** + * @When /^Deleting the group "([^"]*)"$/ + */ + public function deletingTheGroup($group) { + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/groups/$group"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $this->response = $client->send($client->createRequest("DELETE", $fullUrl, $options)); + } + + /** + * @Given /^Add user "([^"]*)" to the group "([^"]*)"$/ + */ + public function addUserToGroup($user, $group) { + $this->userExists($user); + $this->groupExists($group); + $this->addingUserToGroup($user, $group); + + } + + /** + * @When /^User "([^"]*)" is added to the group "([^"]*)"$/ + */ + public function addingUserToGroup($user, $group) { + $fullUrl = $this->baseUrl . "v{$this->apiVersion}.php/cloud/users/$user/groups"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $options['body'] = [ + 'groupid' => $group, + ]; + + $this->response = $client->send($client->createRequest("POST", $fullUrl, $options)); + } + + + public function groupExists($group) { + $fullUrl = $this->baseUrl . "v2.php/cloud/groups/$group"; + $client = new Client(); + $options = []; + $options['auth'] = $this->adminUser; + + $this->response = $client->get($fullUrl, $options); + } + + /** + * @Given /^group "([^"]*)" exists$/ + */ + public function assureGroupExists($group) { + try { + $this->groupExists($group); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->creatingTheGroup($group); + $this->currentUser = $previous_user; + } + $this->groupExists($group); + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + } + + /** + * @Given /^group "([^"]*)" does not exist$/ + */ + public function groupDoesNotExist($group) { + try { + $this->groupExists($group); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $this->response = $ex->getResponse(); + PHPUnit_Framework_Assert::assertEquals(404, $ex->getResponse()->getStatusCode()); + return; + } + $previous_user = $this->currentUser; + $this->currentUser = "admin"; + $this->deletingTheGroup($group); + $this->currentUser = $previous_user; + try { + $this->groupExists($group); + } catch (\GuzzleHttp\Exception\ClientException $ex) { + $this->response = $ex->getResponse(); + PHPUnit_Framework_Assert::assertEquals(404, $ex->getResponse()->getStatusCode()); + } + } + + /** + * @Given /^user "([^"]*)" is subadmin of group "([^"]*)"$/ + */ + public function userIsSubadminOfGroup($user, $group) { + $fullUrl = $this->baseUrl . "v2.php/cloud/groups/$group/subadmins"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $this->response = $client->get($fullUrl, $options); + $respondedArray = $this->getArrayOfSubadminsResponded($this->response); + sort($respondedArray); + PHPUnit_Framework_Assert::assertContains($user, $respondedArray); + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + } + + /** + * @Given /^user "([^"]*)" is not a subadmin of group "([^"]*)"$/ + */ + public function userIsNotSubadminOfGroup($user, $group) { + $fullUrl = $this->baseUrl . "v2.php/cloud/groups/$group/subadmins"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $this->response = $client->get($fullUrl, $options); + $respondedArray = $this->getArrayOfSubadminsResponded($this->response); + sort($respondedArray); + PHPUnit_Framework_Assert::assertNotContains($user, $respondedArray); + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + } + + /** + * @Then /^users returned are$/ + * @param \Behat\Gherkin\Node\TableNode|null $usersList + */ + public function theUsersShouldBe($usersList) { + if ($usersList instanceof \Behat\Gherkin\Node\TableNode) { + $users = $usersList->getRows(); + $usersSimplified = $this->simplifyArray($users); + $respondedArray = $this->getArrayOfUsersResponded($this->response); + PHPUnit_Framework_Assert::assertEquals($usersSimplified, $respondedArray, "", 0.0, 10, true); + } + + } + + /** + * @Then /^groups returned are$/ + * @param \Behat\Gherkin\Node\TableNode|null $groupsList + */ + public function theGroupsShouldBe($groupsList) { + if ($groupsList instanceof \Behat\Gherkin\Node\TableNode) { + $groups = $groupsList->getRows(); + $groupsSimplified = $this->simplifyArray($groups); + $respondedArray = $this->getArrayOfGroupsResponded($this->response); + PHPUnit_Framework_Assert::assertEquals($groupsSimplified, $respondedArray, "", 0.0, 10, true); + } + + } + + /** + * @Then /^subadmin groups returned are$/ + * @param \Behat\Gherkin\Node\TableNode|null $groupsList + */ + public function theSubadminGroupsShouldBe($groupsList) { + if ($groupsList instanceof \Behat\Gherkin\Node\TableNode) { + $groups = $groupsList->getRows(); + $groupsSimplified = $this->simplifyArray($groups); + $respondedArray = $this->getArrayOfSubadminsResponded($this->response); + PHPUnit_Framework_Assert::assertEquals($groupsSimplified, $respondedArray, "", 0.0, 10, true); + } + + } + + /** + * @Then /^apps returned are$/ + * @param \Behat\Gherkin\Node\TableNode|null $appList + */ + public function theAppsShouldBe($appList) { + if ($appList instanceof \Behat\Gherkin\Node\TableNode) { + $apps = $appList->getRows(); + $appsSimplified = $this->simplifyArray($apps); + $respondedArray = $this->getArrayOfAppsResponded($this->response); + PHPUnit_Framework_Assert::assertEquals($appsSimplified, $respondedArray, "", 0.0, 10, true); + } + + } + + /** + * @Then /^subadmin users returned are$/ + * @param \Behat\Gherkin\Node\TableNode|null $groupsList + */ + public function theSubadminUsersShouldBe($groupsList) { + $this->theSubadminGroupsShouldBe($groupsList); + } + + /** + * Parses the xml answer to get the array of users returned. + * @param ResponseInterface $resp + * @return array + */ + public function getArrayOfUsersResponded($resp) { + $listCheckedElements = $resp->xml()->data[0]->users[0]->element; + $extractedElementsArray = json_decode(json_encode($listCheckedElements), 1); + return $extractedElementsArray; + } + + /** + * Parses the xml answer to get the array of groups returned. + * @param ResponseInterface $resp + * @return array + */ + public function getArrayOfGroupsResponded($resp) { + $listCheckedElements = $resp->xml()->data[0]->groups[0]->element; + $extractedElementsArray = json_decode(json_encode($listCheckedElements), 1); + return $extractedElementsArray; + } + + /** + * Parses the xml answer to get the array of apps returned. + * @param ResponseInterface $resp + * @return array + */ + public function getArrayOfAppsResponded($resp) { + $listCheckedElements = $resp->xml()->data[0]->apps[0]->element; + $extractedElementsArray = json_decode(json_encode($listCheckedElements), 1); + return $extractedElementsArray; + } + + /** + * Parses the xml answer to get the array of subadmins returned. + * @param ResponseInterface $resp + * @return array + */ + public function getArrayOfSubadminsResponded($resp) { + $listCheckedElements = $resp->xml()->data[0]->element; + $extractedElementsArray = json_decode(json_encode($listCheckedElements), 1); + return $extractedElementsArray; + } + + + /** + * @Given /^app "([^"]*)" is disabled$/ + */ + public function appIsDisabled($app) { + $fullUrl = $this->baseUrl . "v2.php/cloud/apps?filter=disabled"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $this->response = $client->get($fullUrl, $options); + $respondedArray = $this->getArrayOfAppsResponded($this->response); + PHPUnit_Framework_Assert::assertContains($app, $respondedArray); + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + } + + /** + * @Given /^app "([^"]*)" is enabled$/ + */ + public function appIsEnabled($app) { + $fullUrl = $this->baseUrl . "v2.php/cloud/apps?filter=enabled"; + $client = new Client(); + $options = []; + if ($this->currentUser === 'admin') { + $options['auth'] = $this->adminUser; + } + + $this->response = $client->get($fullUrl, $options); + $respondedArray = $this->getArrayOfAppsResponded($this->response); + PHPUnit_Framework_Assert::assertContains($app, $respondedArray); + PHPUnit_Framework_Assert::assertEquals(200, $this->response->getStatusCode()); + } + + /** + * @BeforeScenario + * @AfterScenario + */ + public function cleanupUsers() + { + $previousServer = $this->currentServer; + $this->usingServer('LOCAL'); + foreach($this->createdUsers as $user) { + $this->deleteUser($user); + } + $this->usingServer('REMOTE'); + foreach($this->createdRemoteUsers as $remoteUser) { + $this->deleteUser($remoteUser); + } + $this->usingServer($previousServer); + } + + /** + * @BeforeScenario + * @AfterScenario + */ + public function cleanupGroups() + { + $previousServer = $this->currentServer; + $this->usingServer('LOCAL'); + foreach($this->createdGroups as $group) { + $this->deleteGroup($group); + } + $this->usingServer('REMOTE'); + foreach($this->createdRemoteGroups as $remoteGroup) { + $this->deleteUser($remoteGroup); + } + $this->usingServer($previousServer); + } +} |