util/RestSpecRunner.php (61 lines of code) (raw):

<?php /** * Elasticsearch PHP Client * * @link https://github.com/elastic/elasticsearch-php * @copyright Copyright (c) Elasticsearch B.V (https://www.elastic.co) * @license https://opensource.org/licenses/MIT MIT License * * Licensed to Elasticsearch B.V under one or more agreements. * Elasticsearch B.V licenses this file to you under the MIT License. * See the LICENSE file in the project root for more information. */ declare(strict_types = 1); use Elastic\Transport\Exception\NoNodeAvailableException; use Elastic\Elasticsearch\Tests\Utility; // Set the default timezone. While this doesn't cause any tests to fail, // PHP can complains if it is not set in 'date.timezone' of php.ini. date_default_timezone_set('UTC'); require dirname(__DIR__) . '/vendor/autoload.php'; printf("********************************************************\n"); printf("** Download the YAML test from Elasticsearch artifacts\n"); printf("********************************************************\n"); printf("Executing %s...\n", basename(__FILE__)); $client = Utility::getClient(); printf ("Getting the Elasticsearch build_hash:\n"); try { $serverInfo = $client->info(); print_r($serverInfo->asArray()); } catch (NoNodeAvailableException $e) { printf ("ERROR: Host %s is offline\n", Utility::getHost()); exit(1); } $version = $serverInfo['version']['number']; $artifactFile = sprintf("rest-resources-zip-%s.zip", $version); $buildHash = $serverInfo['version']['build_hash']; $tempFilePath = sprintf("%s/%s.zip", sys_get_temp_dir(), $buildHash); if (!file_exists($tempFilePath)) { // Download of Elasticsearch rest-api artifacts $json = file_get_contents("https://artifacts-api.elastic.co/v1/versions/$version"); if (empty($json)) { printf ("ERROR: I cannot download the artifcats from https://artifacts-api.elastic.co/v1/versions/%s\n", $version); exit(1); } $content = json_decode($json, true); $found = false; foreach ($content['version']['builds'] as $builds) { if ($builds['projects']['elasticsearch']['commit_hash'] === $buildHash) { // Download the artifact ZIP file (rest-resources-zip-$version.zip) printf("Download %s\n", $builds['projects']['elasticsearch']['packages'][$artifactFile]['url']); if (!copy($builds['projects']['elasticsearch']['packages'][$artifactFile]['url'], $tempFilePath)) { printf ("ERROR: failed to download %s\n", $artifactFile); } $found = true; break; } } if (!$found) { $build = $content['version']['builds'][0]; // pick the most recent $resource = $build["projects"]["elasticsearch"]["packages"][sprintf("rest-resources-zip-%s.zip", $version)]['url']; if (!copy($resource, $tempFilePath)) { printf ("ERROR: failed to download %s\n", $resource); } } } else { printf("The file %s already exists\n", $tempFilePath); } if (!file_exists($tempFilePath)) { printf("ERROR: I cannot download file %s\n", $tempFilePath); exit(1); } $zip = new ZipArchive(); $zip->open($tempFilePath); printf("Extracting %s\ninto %s/rest-spec/%s\n", $tempFilePath, __DIR__, $buildHash); $zip->extractTo(sprintf("%s/rest-spec/%s", __DIR__, $buildHash)); $zip->close(); printf ("Rest-spec API installed successfully!\n\n");