From 73c4b118cec84b611b411861ff479387c3a4372e Mon Sep 17 00:00:00 2001 From: "Daniel (dB.) Doubrovkine" Date: Fri, 9 Aug 2024 07:19:29 -0400 Subject: [PATCH] Added samples, updated links. (#218) * Added samples. Signed-off-by: dblock * Added integration-min to skip running tests w/plugins. Signed-off-by: dblock --------- Signed-off-by: dblock --- .github/workflows/test.yml | 8 +-- .github/workflows/test_unreleased.yml | 4 +- CHANGELOG.md | 1 + DEVELOPER_GUIDE.md | 10 +++- README.md | 25 ++++----- composer.json | 3 ++ samples/README.md | 15 ++++++ samples/composer.json | 18 +++++++ samples/index.php | 23 +++++++++ tests/ClientIntegrationTest.php | 1 + .../SniffingConnectionPoolIntegrationTest.php | 1 + .../StaticConnectionPoolIntegrationTest.php | 1 + tests/Endpoints/CreateIntegrationTest.php | 1 + .../CreatePointInTimeIntegrationTest.php | 1 + .../DeletePointInTimeIntegrationTest.php | 1 + .../Endpoints/MlNamespaceIntegrationTest.php | 6 +-- tests/Utility.php | 51 +++---------------- 17 files changed, 105 insertions(+), 65 deletions(-) create mode 100644 samples/README.md create mode 100644 samples/composer.json create mode 100644 samples/index.php diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 831aba37..860cb57a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -132,7 +132,7 @@ jobs: composer run unit integration-test-elasticsearch: - name: Tntegration Test (Elasticsearch) + name: Integration Test (Elasticsearch) runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -175,7 +175,7 @@ jobs: OPENSEARCH_URL: 'http://localhost:9200' integration-test-opensearch: - name: Tntegration Test (OpenSearch) + name: Integration Test (OpenSearch) runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -234,7 +234,7 @@ jobs: OPENSEARCH_URL: 'http://localhost:9200' integration-test-opensearch-strong-password: - name: Tntegration Test (OpenSearch w/Strong Password) + name: Integration Test (OpenSearch w/Strong Password) runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -244,6 +244,8 @@ jobs: search-server-image: - opensearchproject/opensearch:2.12.0 - opensearchproject/opensearch:2.13.0 + - opensearchproject/opensearch:2.14.0 + - opensearchproject/opensearch:2.15.0 services: search-server: image: ${{ matrix.search-server-image }} diff --git a/.github/workflows/test_unreleased.yml b/.github/workflows/test_unreleased.yml index ac03cedb..c502bf0d 100644 --- a/.github/workflows/test_unreleased.yml +++ b/.github/workflows/test_unreleased.yml @@ -14,7 +14,7 @@ jobs: strategy: fail-fast: false matrix: - opensearch_ref: [ '1.x', '2.x', '2.0', 'main' ] + opensearch_ref: [ '1.x', '2.x', 'main' ] steps: - name: Checkout PHP Client uses: actions/checkout@v2 @@ -73,6 +73,6 @@ jobs: - name: Integration tests run: | - composer run integration + composer run integration-min env: OPENSEARCH_URL: 'http://localhost:9200' diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c290244..393be22a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ### Added - Generate endpoints from OpenSearch API Specification ([#194](https://github.com/opensearch-project/opensearch-php/pull/194)) - Added workflow for automated API update using OpenSearch API specification ([#209](https://github.com/opensearch-project/opensearch-php/pull/209)) +- Added samples ([#218](https://github.com/opensearch-project/opensearch-php/pull/218)) ### Changed ### Deprecated ### Removed diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 6f615d3e..5c71551e 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -34,7 +34,15 @@ If you don't have a running server, you can start one with Docker using `docker The integration tests are using by default following address `https://admin:admin@localhost:9200`. This can be changed by setting the environment variable `OPENSEARCH_URL` to a different url. -To run the integration tests, you can use `composer run integration` +To run the integration tests, you can use `composer run integration-min` for just OpenSearch or `composer run integration` for OpenSearch and its plugins. + +```bash +export OPENSEARCH_PASSWORD=myStrongPassword123! +export OPENSEARCH_URL=https://admin:$OPENSEARCH_PASSWORD@localhost:9200 + +composer run integration +``` + ### Static analyse and code style checker diff --git a/README.md b/README.md index 62c2c163..5c151062 100644 --- a/README.md +++ b/README.md @@ -10,30 +10,31 @@ ## Welcome! -**opensearch-php** is [a community-driven, open source fork](https://aws.amazon.com/blogs/opensource/introducing-opensearch/) of elasticsearch-php licensed under the [Apache v2.0 License](https://github.com/opensearch-project/opensearch-php/blob/main/LICENSE). For more information, see [opensearch.org](https://opensearch.org/). +**opensearch-php** is [a community-driven, open source fork](https://aws.amazon.com/blogs/opensource/introducing-opensearch/) of elasticsearch-php licensed under the [Apache v2.0 License](LICENSE). For more information, see [opensearch.org](https://opensearch.org/). ## Project Resources * [Project Website](https://opensearch.org/) -* [User Guide And Sample Code](https://github.com/opensearch-project/opensearch-php/blob/main/USER_GUIDE.md) -* [Developer Guide](https://github.com/opensearch-project/opensearch-php/blob/main/DEVELOPER_GUIDE.md) +* [User Guide](USER_GUIDE.md) +* [Samples](samples) +* [Developer Guide](DEVELOPER_GUIDE.md) * [Downloads](https://opensearch.org/downloads.html). * [Documentation](https://opensearch.org/docs/latest/) * Need help? Try [Forums](https://discuss.opendistrocommunity.dev/) * [Project Principles](https://opensearch.org/#principles) -* [Contributing to OpenSearch](https://github.com/opensearch-project/opensearch-php/blob/main/CONTRIBUTING.md) -* [Maintainer Responsibilities](https://github.com/opensearch-project/opensearch-php/blob/main/MAINTAINERS.md) -* [Release Management](https://github.com/opensearch-project/opensearch-php/blob/main/RELEASING.md) -* [Admin Responsibilities](https://github.com/opensearch-project/opensearch-php/blob/main/ADMINS.md) -* [Security](https://github.com/opensearch-project/opensearch-php/blob/main/SECURITY.md) +* [Contributing to OpenSearch](CONTRIBUTING.md) +* [Maintainer Responsibilities](MAINTAINERS.md) +* [Release Management](RELEASING.md) +* [Admin Responsibilities](ADMINS.md) +* [Security](SECURITY.md) ## Code of Conduct -This project has adopted the [Amazon Open Source Code of Conduct](https://github.com/opensearch-project/opensearch-php/blob/main/CODE_OF_CONDUCT.md). For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq), or contact [opensource-codeofconduct@amazon.com](mailto:opensource-codeofconduct@amazon.com) with any additional questions or comments. +This project has adopted the [Amazon Open Source Code of Conduct](CODE_OF_CONDUCT.md). For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq), or contact [opensource-codeofconduct@amazon.com](mailto:opensource-codeofconduct@amazon.com) with any additional questions or comments. ## Sample code -See [Sample Code](https://github.com/opensearch-project/opensearch-php/blob/main/USER_GUIDE.md). +See [Sample Code](USER_GUIDE.md). ## Compatibility with OpenSearch @@ -41,8 +42,8 @@ See [Compatibility](COMPATIBILITY.md). ## License -This project is licensed under the [Apache v2.0 License](https://github.com/opensearch-project/opensearch-php/blob/main/LICENSE). +This project is licensed under the [Apache v2.0 License](LICENSE). ## Copyright -Copyright OpenSearch Contributors. See [NOTICE](https://github.com/opensearch-project/opensearch-php/blob/main/NOTICE) for details. \ No newline at end of file +Copyright OpenSearch Contributors. See [NOTICE](NOTICE) for details. \ No newline at end of file diff --git a/composer.json b/composer.json index 6b5af53b..dd4520ae 100644 --- a/composer.json +++ b/composer.json @@ -61,6 +61,9 @@ "integration": [ "phpunit --group Integration" ], + "integration-min": [ + "phpunit --group Integration-Min" + ], "phpunit": [ "phpunit" ], diff --git a/samples/README.md b/samples/README.md new file mode 100644 index 00000000..5c2fd6c9 --- /dev/null +++ b/samples/README.md @@ -0,0 +1,15 @@ +### OpenSearch PHP Client Samples + +Start an OpenSearch instance. + +``` +docker run -d -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" -e "OPENSEARCH_INITIAL_ADMIN_PASSWORD=myStrongPassword123!" opensearchproject/opensearch:latest +``` + +Run sample. + +``` +export OPENSEARCH_PASSWORD=myStrongPassword123! +composer install +composer run index +``` diff --git a/samples/composer.json b/samples/composer.json new file mode 100644 index 00000000..90aa9137 --- /dev/null +++ b/samples/composer.json @@ -0,0 +1,18 @@ +{ + "name": "opensearch-php/samples", + "description": "OpenSearch PHP client samples.", + "type": "project", + "authors": [], + "scripts": { + "index": ["php index.php"] + }, + "repositories": [ + { + "type": "path", + "url": "../" + } + ], + "require": { + "opensearch-project/opensearch-php": "dev-main" + } + } \ No newline at end of file diff --git a/samples/index.php b/samples/index.php new file mode 100644 index 00000000..570acaeb --- /dev/null +++ b/samples/index.php @@ -0,0 +1,23 @@ + [ + 'https://localhost:9200' + ], + 'BasicAuthentication' => ['admin', getenv('OPENSEARCH_PASSWORD')], + 'Retries' => 2, + 'SSLVerification' => false +]); + +$info = $client->info(); + +echo "{$info['version']['distribution']}: {$info['version']['number']}\n"; + +?> diff --git a/tests/ClientIntegrationTest.php b/tests/ClientIntegrationTest.php index 5b491217..c52d9971 100644 --- a/tests/ClientIntegrationTest.php +++ b/tests/ClientIntegrationTest.php @@ -33,6 +33,7 @@ * * @subpackage Tests * @group Integration + * @group Integration-Min */ class ClientIntegrationTest extends \PHPUnit\Framework\TestCase { diff --git a/tests/ConnectionPool/SniffingConnectionPoolIntegrationTest.php b/tests/ConnectionPool/SniffingConnectionPoolIntegrationTest.php index 0373a4e8..e73b1794 100644 --- a/tests/ConnectionPool/SniffingConnectionPoolIntegrationTest.php +++ b/tests/ConnectionPool/SniffingConnectionPoolIntegrationTest.php @@ -32,6 +32,7 @@ * * @subpackage Tests/SniffingConnectionPoolTest * @group Integration + * @group Integration-Min */ class SniffingConnectionPoolIntegrationTest extends TestCase { diff --git a/tests/ConnectionPool/StaticConnectionPoolIntegrationTest.php b/tests/ConnectionPool/StaticConnectionPoolIntegrationTest.php index 6bfc6524..0f3462c3 100644 --- a/tests/ConnectionPool/StaticConnectionPoolIntegrationTest.php +++ b/tests/ConnectionPool/StaticConnectionPoolIntegrationTest.php @@ -29,6 +29,7 @@ * * @subpackage Tests/StaticConnectionPoolTest * @group Integration + * @group Integration-Min */ class StaticConnectionPoolIntegrationTest extends \PHPUnit\Framework\TestCase { diff --git a/tests/Endpoints/CreateIntegrationTest.php b/tests/Endpoints/CreateIntegrationTest.php index f3ef4eb6..55e5e3b0 100644 --- a/tests/Endpoints/CreateIntegrationTest.php +++ b/tests/Endpoints/CreateIntegrationTest.php @@ -28,6 +28,7 @@ * * @subpackage Tests\Endpoints * @group Integration + * @group Integration-Min */ class CreateIntegrationTest extends \PHPUnit\Framework\TestCase { diff --git a/tests/Endpoints/CreatePointInTimeIntegrationTest.php b/tests/Endpoints/CreatePointInTimeIntegrationTest.php index c27f76b5..7e3033e9 100644 --- a/tests/Endpoints/CreatePointInTimeIntegrationTest.php +++ b/tests/Endpoints/CreatePointInTimeIntegrationTest.php @@ -29,6 +29,7 @@ * * @subpackage Tests\Endpoints * @group Integration + * @group Integration-Min */ class CreatePointInTimeIntegrationTest extends \PHPUnit\Framework\TestCase { diff --git a/tests/Endpoints/DeletePointInTimeIntegrationTest.php b/tests/Endpoints/DeletePointInTimeIntegrationTest.php index ad9b2833..d1a7d22e 100644 --- a/tests/Endpoints/DeletePointInTimeIntegrationTest.php +++ b/tests/Endpoints/DeletePointInTimeIntegrationTest.php @@ -29,6 +29,7 @@ * * @subpackage Tests\Endpoints * @group Integration + * @group Integration-Min */ class DeletePointInTimeIntegrationTest extends \PHPUnit\Framework\TestCase { diff --git a/tests/Endpoints/MlNamespaceIntegrationTest.php b/tests/Endpoints/MlNamespaceIntegrationTest.php index 61962d88..6c10335a 100644 --- a/tests/Endpoints/MlNamespaceIntegrationTest.php +++ b/tests/Endpoints/MlNamespaceIntegrationTest.php @@ -30,7 +30,7 @@ public function testRegisterModelGroup() { $client = Utility::getClient(); - if (!Utility::isOpenSearchVersionAtLeast($client, '2.8.0') || !Utility::isOpenSearchVersionAtmost($client, '2.x')) { + if (!Utility::isOpenSearchVersionAtLeast($client, '2.8.0')) { $this->markTestSkipped('Ml plugin tests require OpenSearch >= 2.8.0'); } @@ -47,7 +47,7 @@ public function testgetModels() { $client = Utility::getClient(); - if (!Utility::isOpenSearchVersionAtLeast($client, '2.12.0') || !Utility::isOpenSearchVersionAtmost($client, '2.x')) { + if (!Utility::isOpenSearchVersionAtLeast($client, '2.12.0')) { $this->markTestSkipped('Ml plugin tests require OpenSearch >= 2.12.0'); } @@ -59,7 +59,7 @@ public function testsearchModels() { $client = Utility::getClient(); - if (!Utility::isOpenSearchVersionAtLeast($client, '2.12.0') || !Utility::isOpenSearchVersionAtmost($client, '2.x')) { + if (!Utility::isOpenSearchVersionAtLeast($client, '2.12.0')) { $this->markTestSkipped('Ml plugin tests require OpenSearch >= 2.12.0'); } diff --git a/tests/Utility.php b/tests/Utility.php index 8775829a..7ca46e2d 100644 --- a/tests/Utility.php +++ b/tests/Utility.php @@ -79,35 +79,7 @@ public static function isOpenSearchVersionAtLeast(Client $client, string $versio return false; } $versionNumber = $versionInfo['number']; - return version_compare($versionNumber, $version) >= 0; - } - - /** - * Check if cluster is OpenSearch and version is less than the specified version. - */ - public static function isOpenSearchVersionAtMost(Client $client, string $version): bool - { - $versionInfo = self::getVersion($client); - $distribution = $versionInfo['distribution'] ?? null; - if ($distribution !== 'opensearch') { - return false; - } - $versionNumber = $versionInfo['number']; - return version_compare($versionNumber, $version, '<'); - } - - /** - * Check if cluster is Elasticsearch and version is greater than or equal to specified version. - */ - public static function isElasticSearchVersionAtLeast(Client $client, string $version): bool - { - $versionInfo = self::getVersion($client); - $distribution = $versionInfo['distribution'] ?? null; - if ($distribution === 'opensearch') { - return false; - } - $versionNumber = $versionInfo['number']; - return version_compare($versionNumber, $version) >= 0; + return version_compare($versionNumber, $version, '>='); } private static function getVersion(Client $client): array @@ -137,10 +109,7 @@ public static function cleanUpCluster(Client $client): void */ private static function wipeCluster(Client $client): void { - if (self::isElasticSearchVersionAtLeast($client, '7.4.0')) { - self::deleteAllSLMPolicies($client); - } - + self::deleteAllSLMPolicies($client); self::wipeSnapshots($client); self::wipeDataStreams($client); self::wipeAllIndices($client); @@ -229,12 +198,10 @@ private static function deleteAllSLMPolicies(Client $client): void private static function wipeDataStreams(Client $client): void { try { - if (self::isElasticSearchVersionAtLeast($client, '7.9.0')) { - $client->indices()->deleteDataStream([ - 'name' => '*', - 'expand_wildcards' => 'all' - ]); - } + $client->indices()->deleteDataStream([ + 'name' => '*', + 'expand_wildcards' => 'all' + ]); } catch (OpenSearchException $e) { // We hit a version of ES that doesn't understand expand_wildcards, try again without it try { @@ -255,14 +222,10 @@ private static function wipeDataStreams(Client $client): void */ private static function wipeAllIndices(Client $client): void { - $expand = 'open,closed'; - if (self::isElasticSearchVersionAtLeast($client, '7.7.0')) { - $expand .= ',hidden'; - } try { $client->indices()->delete([ 'index' => '*,-.ds-ilm-history-*', - 'expand_wildcards' => $expand + 'expand_wildcards' => 'open,closed,hidden' ]); } catch (Exception $e) { if ($e->getCode() != '404') {