|
3 | 3 | from pytest_testconfig import config as py_config |
4 | 4 |
|
5 | 5 | from tests.model_registry.rest_api.constants import MODEL_REGISTER, MODEL_ARTIFACT, MODEL_VERSION, MODEL_REGISTER_DATA |
| 6 | +from tests.model_registry.rest_api.utils import validate_resource_attributes |
6 | 7 | from utilities.constants import DscComponents |
7 | 8 | from simple_logger.logger import get_logger |
8 | 9 |
|
9 | 10 | LOGGER = get_logger(name=__name__) |
| 11 | +CUSTOM_PROPERTY = { |
| 12 | + "customProperties": { |
| 13 | + "my_bool_property": {"bool_value": True, "metadataType": "MetadataBoolValue"}, |
| 14 | + "my_str_property": {"string_value": "my_value", "metadataType": "MetadataStringValue"}, |
| 15 | + "my_double_property": {"double_value": 500.01, "metadataType": "MetadataDoubleValue"}, |
| 16 | + } |
| 17 | +} |
| 18 | +MODEL_VERSION_DESCRIPTION = {"description": "updated model version description"} |
| 19 | +STATE_ARCHIVED = {"state": "ARCHIVED"} |
| 20 | +STATE_LIVE = {"state": "LIVE"} |
| 21 | +REGISTERED_MODEL_DESCRIPTION = {"description": "updated registered model description"} |
| 22 | +MODEL_FORMAT_VERSION = {"modelFormatVersion": "v2"} |
| 23 | +MODEL_FORMAT_NAME = {"modelFormatName": "tensorflow"} |
| 24 | +MODEL_ARTIFACT_DESCRIPTION = {"description": "updated artifact description"} |
10 | 25 |
|
11 | 26 |
|
12 | 27 | @pytest.mark.parametrize( |
@@ -59,47 +74,146 @@ def test_validate_model_registry_resource( |
59 | 74 | expected_params: dict[str, str], |
60 | 75 | data_key: str, |
61 | 76 | ): |
62 | | - errors: list[str:Any] |
63 | | - created_resource_data = registered_model_rest_api[data_key] |
64 | | - if errors := [ |
65 | | - {key: [expected_params[key], created_resource_data.get(key)]} |
66 | | - for key in expected_params.keys() |
67 | | - if not created_resource_data.get(key) or created_resource_data[key] != expected_params[key] |
68 | | - ]: |
69 | | - pytest.fail(f"Model did not get created with expected values: {errors}") |
70 | | - LOGGER.info(f"Successfully validated: {created_resource_data['name']}") |
| 77 | + validate_resource_attributes( |
| 78 | + expected_params=expected_params, |
| 79 | + actual_resource_data=registered_model_rest_api[data_key], |
| 80 | + resource_name=data_key, |
| 81 | + ) |
71 | 82 |
|
72 | 83 | @pytest.mark.parametrize( |
73 | | - "updated_model_artifact, expected_param", |
| 84 | + "updated_model_registry_resource, expected_param", |
74 | 85 | [ |
75 | 86 | pytest.param( |
76 | | - {"description": "updated description"}, |
77 | | - {"description": "updated description"}, |
| 87 | + { |
| 88 | + "resource_name": "model_artifact", |
| 89 | + "api_name": "model_artifacts", |
| 90 | + "data": MODEL_ARTIFACT_DESCRIPTION, |
| 91 | + }, |
| 92 | + MODEL_ARTIFACT_DESCRIPTION, |
78 | 93 | id="test_validate_updated_artifact_description", |
79 | 94 | ), |
80 | 95 | pytest.param( |
81 | | - {"modelFormatName": "tensorflow"}, |
82 | | - {"modelFormatName": "tensorflow"}, |
| 96 | + { |
| 97 | + "resource_name": "model_artifact", |
| 98 | + "api_name": "model_artifacts", |
| 99 | + "data": MODEL_FORMAT_NAME, |
| 100 | + }, |
| 101 | + MODEL_FORMAT_NAME, |
83 | 102 | id="test_validate_updated_artifact_model_format_name", |
84 | 103 | ), |
85 | 104 | pytest.param( |
86 | | - {"modelFormatVersion": "v2"}, |
87 | | - {"modelFormatVersion": "v2"}, |
| 105 | + { |
| 106 | + "resource_name": "model_artifact", |
| 107 | + "api_name": "model_artifacts", |
| 108 | + "data": MODEL_FORMAT_VERSION, |
| 109 | + }, |
| 110 | + MODEL_FORMAT_VERSION, |
88 | 111 | id="test_validate_updated_artifact_model_format_version", |
89 | 112 | ), |
90 | 113 | ], |
91 | | - indirect=["updated_model_artifact"], |
| 114 | + indirect=["updated_model_registry_resource"], |
92 | 115 | ) |
93 | 116 | def test_create_update_model_artifact( |
94 | 117 | self, |
95 | | - updated_model_artifact: dict[str, Any], |
| 118 | + updated_model_registry_resource: dict[str, Any], |
| 119 | + expected_param: dict[str, Any], |
| 120 | + ): |
| 121 | + """ |
| 122 | + Update model artifacts and ensure the updated values are reflected on the artifact |
| 123 | + """ |
| 124 | + |
| 125 | + validate_resource_attributes( |
| 126 | + expected_params=expected_param, |
| 127 | + actual_resource_data=updated_model_registry_resource, |
| 128 | + resource_name="model artifact", |
| 129 | + ) |
| 130 | + |
| 131 | + @pytest.mark.parametrize( |
| 132 | + "updated_model_registry_resource, expected_param", |
| 133 | + [ |
| 134 | + pytest.param( |
| 135 | + { |
| 136 | + "resource_name": "model_version", |
| 137 | + "api_name": "model_versions", |
| 138 | + "data": MODEL_VERSION_DESCRIPTION, |
| 139 | + }, |
| 140 | + MODEL_VERSION_DESCRIPTION, |
| 141 | + id="test_validate_updated_version_description", |
| 142 | + ), |
| 143 | + pytest.param( |
| 144 | + {"resource_name": "model_version", "api_name": "model_versions", "data": STATE_ARCHIVED}, |
| 145 | + STATE_ARCHIVED, |
| 146 | + id="test_validate_updated_version_state_archived", |
| 147 | + ), |
| 148 | + pytest.param( |
| 149 | + {"resource_name": "model_version", "api_name": "model_versions", "data": STATE_LIVE}, |
| 150 | + STATE_LIVE, |
| 151 | + id="test_validate_updated_version_state_unarchived", |
| 152 | + ), |
| 153 | + pytest.param( |
| 154 | + {"resource_name": "model_version", "api_name": "model_versions", "data": CUSTOM_PROPERTY}, |
| 155 | + CUSTOM_PROPERTY, |
| 156 | + id="test_validate_updated_version_custom_properties", |
| 157 | + ), |
| 158 | + ], |
| 159 | + indirect=["updated_model_registry_resource"], |
| 160 | + ) |
| 161 | + def test_updated_model_version( |
| 162 | + self, |
| 163 | + updated_model_registry_resource: dict[str, Any], |
| 164 | + expected_param: dict[str, Any], |
| 165 | + ): |
| 166 | + """ |
| 167 | + Update, [RHOAIENG-24371] archive, unarchive model versions and ensure the updated values |
| 168 | + are reflected on the model version |
| 169 | + """ |
| 170 | + validate_resource_attributes( |
| 171 | + expected_params=expected_param, |
| 172 | + actual_resource_data=updated_model_registry_resource, |
| 173 | + resource_name="model version", |
| 174 | + ) |
| 175 | + |
| 176 | + @pytest.mark.parametrize( |
| 177 | + "updated_model_registry_resource, expected_param", |
| 178 | + [ |
| 179 | + pytest.param( |
| 180 | + { |
| 181 | + "resource_name": "register_model", |
| 182 | + "api_name": "registered_models", |
| 183 | + "data": REGISTERED_MODEL_DESCRIPTION, |
| 184 | + }, |
| 185 | + REGISTERED_MODEL_DESCRIPTION, |
| 186 | + id="test_validate_updated_model_description", |
| 187 | + ), |
| 188 | + pytest.param( |
| 189 | + {"resource_name": "register_model", "api_name": "registered_models", "data": STATE_ARCHIVED}, |
| 190 | + STATE_ARCHIVED, |
| 191 | + id="test_validate_updated_model_state_archived", |
| 192 | + ), |
| 193 | + pytest.param( |
| 194 | + {"resource_name": "register_model", "api_name": "registered_models", "data": STATE_LIVE}, |
| 195 | + STATE_LIVE, |
| 196 | + id="test_validate_updated_model_state_unarchived", |
| 197 | + ), |
| 198 | + pytest.param( |
| 199 | + {"resource_name": "register_model", "api_name": "registered_models", "data": CUSTOM_PROPERTY}, |
| 200 | + CUSTOM_PROPERTY, |
| 201 | + id="test_validate_updated_registered_model_custom_properties", |
| 202 | + ), |
| 203 | + ], |
| 204 | + indirect=["updated_model_registry_resource"], |
| 205 | + ) |
| 206 | + def test_updated_registered_model( |
| 207 | + self, |
| 208 | + updated_model_registry_resource: dict[str, Any], |
96 | 209 | expected_param: dict[str, Any], |
97 | 210 | ): |
98 | | - errors: list[dict[str, list[Any]]] |
99 | | - if errors := [ |
100 | | - {key: [expected_param[key], updated_model_artifact.get(key)]} |
101 | | - for key in expected_param.keys() |
102 | | - if not updated_model_artifact.get(key) or updated_model_artifact[key] != expected_param[key] |
103 | | - ]: |
104 | | - pytest.fail(f"Model did not get updated with expected values: {errors}") |
105 | | - LOGGER.info(f"Successfully validated: {updated_model_artifact['name']}") |
| 211 | + """ |
| 212 | + Update, [RHOAIENG-24371] archive, unarchive registered models and ensure the updated values |
| 213 | + are reflected on the registered model |
| 214 | + """ |
| 215 | + validate_resource_attributes( |
| 216 | + expected_params=expected_param, |
| 217 | + actual_resource_data=updated_model_registry_resource, |
| 218 | + resource_name="registered model", |
| 219 | + ) |
0 commit comments