|
2 | 2 | "cells": [ |
3 | 3 | { |
4 | 4 | "cell_type": "markdown", |
5 | | - "metadata": {}, |
| 5 | + "metadata": { |
| 6 | + "editable": true, |
| 7 | + "slideshow": { |
| 8 | + "slide_type": "" |
| 9 | + }, |
| 10 | + "tags": [] |
| 11 | + }, |
6 | 12 | "source": [ |
7 | 13 | "# Harmony Regression Test Suite\n", |
8 | 14 | "\n", |
9 | | - "This test suite ensures some overall features of the main Harmony service work as expected. Currently that is limited to ensuring the expected services are deployed to all Harmony environments." |
| 15 | + "This test suite ensures some Harmony Service was deployed successfully and the expected endpoints are returning successfully." |
10 | 16 | ] |
11 | 17 | }, |
12 | 18 | { |
13 | 19 | "cell_type": "code", |
14 | 20 | "execution_count": null, |
15 | 21 | "metadata": { |
| 22 | + "editable": true, |
| 23 | + "slideshow": { |
| 24 | + "slide_type": "" |
| 25 | + }, |
16 | 26 | "tags": [ |
17 | 27 | "parameters" |
18 | 28 | ] |
|
24 | 34 | }, |
25 | 35 | { |
26 | 36 | "cell_type": "markdown", |
27 | | - "metadata": {}, |
| 37 | + "metadata": { |
| 38 | + "editable": true, |
| 39 | + "slideshow": { |
| 40 | + "slide_type": "" |
| 41 | + }, |
| 42 | + "tags": [] |
| 43 | + }, |
28 | 44 | "source": [ |
29 | 45 | "## Prerequisites\n", |
30 | 46 | "\n", |
|
37 | 53 | }, |
38 | 54 | { |
39 | 55 | "cell_type": "markdown", |
40 | | - "metadata": {}, |
41 | | - "source": [ |
42 | | - "## Import required packages:" |
43 | | - ] |
44 | | - }, |
45 | | - { |
46 | | - "cell_type": "code", |
47 | | - "execution_count": null, |
48 | | - "metadata": {}, |
49 | | - "outputs": [], |
50 | | - "source": [ |
51 | | - "import requests" |
52 | | - ] |
53 | | - }, |
54 | | - { |
55 | | - "cell_type": "markdown", |
56 | | - "metadata": {}, |
| 56 | + "metadata": { |
| 57 | + "editable": true, |
| 58 | + "slideshow": { |
| 59 | + "slide_type": "" |
| 60 | + }, |
| 61 | + "tags": [] |
| 62 | + }, |
57 | 63 | "source": [ |
58 | | - "## Ensure expected services are available, per the `/versions` endpoint:" |
| 64 | + "## Ensure endpoints are returning expected values." |
59 | 65 | ] |
60 | 66 | }, |
61 | 67 | { |
62 | 68 | "cell_type": "code", |
63 | 69 | "execution_count": null, |
64 | | - "metadata": {}, |
| 70 | + "metadata": { |
| 71 | + "editable": true, |
| 72 | + "slideshow": { |
| 73 | + "slide_type": "" |
| 74 | + }, |
| 75 | + "tags": [] |
| 76 | + }, |
65 | 77 | "outputs": [], |
66 | 78 | "source": [ |
67 | | - "expected_service_names = [\n", |
68 | | - " 'harmony/service-example',\n", |
69 | | - " 'nasa/harmony-gdal-adapter',\n", |
70 | | - " 'podaac/l2-subsetter',\n", |
| 79 | + "import requests\n", |
| 80 | + "from requests.adapters import HTTPAdapter\n", |
| 81 | + "from urllib3.util.retry import Retry\n", |
| 82 | + "\n", |
| 83 | + "# Set up retrying so we don't fail for a transient error.\n", |
| 84 | + "retry_strategy = Retry(\n", |
| 85 | + " total=5,\n", |
| 86 | + " backoff_factor=2,\n", |
| 87 | + " status_forcelist=[500, 502, 503, 504],\n", |
| 88 | + ")\n", |
| 89 | + "\n", |
| 90 | + "adapter = HTTPAdapter(max_retries=retry_strategy)\n", |
| 91 | + "session = requests.Session()\n", |
| 92 | + "session.mount('https://', adapter)\n", |
| 93 | + "session.mount('http://', adapter)\n", |
| 94 | + "\n", |
| 95 | + "harmony_endpoints = [\n", |
| 96 | + " '',\n", |
| 97 | + " 'cloud-access',\n", |
| 98 | + " 'docs',\n", |
| 99 | + " 'docs/api',\n", |
| 100 | + " 'docs/edr-api',\n", |
| 101 | + " 'health',\n", |
| 102 | + " 'jobs',\n", |
| 103 | + " 'readiness',\n", |
| 104 | + " 'service-deployment',\n", |
| 105 | + " 'service-deployments-state',\n", |
| 106 | + " 'service-image-tag',\n", |
| 107 | + " 'versions',\n", |
| 108 | + " 'workflow-ui',\n", |
71 | 109 | "]\n", |
72 | 110 | "\n", |
73 | | - "versions_response = requests.get(f'{harmony_host_url}/versions')\n", |
74 | | - "versions_response.raise_for_status()\n", |
75 | | - "actual_services = versions_response.json()\n", |
| 111 | + "for endpoint in harmony_endpoints:\n", |
| 112 | + " try:\n", |
| 113 | + " response = session.get(f'{harmony_host_url}/{endpoint}')\n", |
| 114 | + " response.raise_for_status()\n", |
| 115 | + " assert response.status_code == 200\n", |
| 116 | + " print(f'Endpoint /{endpoint} alive.')\n", |
| 117 | + " except Exception:\n", |
| 118 | + " raise Exception(\n", |
| 119 | + " f'TEST FAILED: Bad response from endpoint {harmony_host_url}/{endpoint}'\n", |
| 120 | + " ) from None\n", |
| 121 | + "\n", |
| 122 | + "# /capabilities requires a collection so a 400 error is expected.\n", |
| 123 | + "response = session.get(f'{harmony_host_url}/capabilities')\n", |
| 124 | + "assert response.status_code == 400\n", |
| 125 | + "print('Endpoint /capabilities alive.')\n", |
76 | 126 | "\n", |
77 | | - "for expected_service_name in expected_service_names:\n", |
78 | | - " assert any(\n", |
79 | | - " [service.get('name') == expected_service_name for service in actual_services]\n", |
80 | | - " ), f'Could not find service: {expected_service_name}'\n", |
81 | 127 | "\n", |
82 | | - "print('All expected services returned from /versions endpoint.')" |
| 128 | + "print('All expected endpoints responding.')" |
83 | 129 | ] |
84 | 130 | } |
85 | 131 | ], |
|
100 | 146 | "name": "python", |
101 | 147 | "nbconvert_exporter": "python", |
102 | 148 | "pygments_lexer": "ipython3", |
103 | | - "version": "3.10.13" |
| 149 | + "version": "3.13.13" |
104 | 150 | } |
105 | 151 | }, |
106 | 152 | "nbformat": 4, |
|
0 commit comments