|
2 | 2 | # Distributed under the terms of the AGPLv3 license, see LICENSE.
|
3 | 3 | import pytest
|
4 | 4 |
|
5 |
| -from cratedb_toolkit.model import DatabaseAddress |
6 |
| -from cratedb_toolkit.retention.model import JobSettings, RetentionPolicy, RetentionStrategy |
7 |
| -from cratedb_toolkit.retention.setup.schema import setup_schema |
8 |
| -from cratedb_toolkit.retention.store import RetentionPolicyStore |
9 | 5 | from cratedb_toolkit.testing.testcontainers.azurite import ExtendedAzuriteContainer
|
10 | 6 | from cratedb_toolkit.testing.testcontainers.cratedb import CrateDBContainer
|
11 | 7 | from cratedb_toolkit.testing.testcontainers.minio import ExtendedMinioContainer
|
| 8 | +from cratedb_toolkit.util import DatabaseAdapter |
12 | 9 | from cratedb_toolkit.util.common import setup_logging
|
13 |
| -from cratedb_toolkit.util.database import DatabaseAdapter, run_sql |
14 | 10 |
|
15 | 11 | # Use different schemas both for storing the retention policy table, and
|
16 | 12 | # the test data, so that they do not accidentally touch the default `doc`
|
@@ -107,186 +103,4 @@ def azurite():
|
107 | 103 | yield azurite
|
108 | 104 |
|
109 | 105 |
|
110 |
| -@pytest.fixture() |
111 |
| -def database(cratedb, settings): |
112 |
| - """ |
113 |
| - Provide a client database adapter, which is connected to the test database instance. |
114 |
| - """ |
115 |
| - yield DatabaseAdapter(dburi=settings.database.dburi) |
116 |
| - |
117 |
| - |
118 |
| -@pytest.fixture() |
119 |
| -def store(database, settings): |
120 |
| - """ |
121 |
| - Provide a client database adapter, which is connected to the test database instance. |
122 |
| - The retention policy database table schema has been established. |
123 |
| - """ |
124 |
| - setup_schema(settings=settings) |
125 |
| - rps = RetentionPolicyStore(settings=settings) |
126 |
| - yield rps |
127 |
| - |
128 |
| - |
129 |
| -@pytest.fixture() |
130 |
| -def settings(cratedb): |
131 |
| - """ |
132 |
| - Provide configuration and runtime settings object, parameterized for the test suite. |
133 |
| - """ |
134 |
| - database_url = cratedb.get_connection_url() |
135 |
| - job_settings = JobSettings(database=DatabaseAddress.from_string(database_url)) |
136 |
| - job_settings.policy_table.schema = TESTDRIVE_EXT_SCHEMA |
137 |
| - return job_settings |
138 |
| - |
139 |
| - |
140 |
| -@pytest.fixture(scope="function") |
141 |
| -def policies(cratedb, settings, store): |
142 |
| - """ |
143 |
| - Populate the retention policy table. |
144 |
| - """ |
145 |
| - database_url = cratedb.get_connection_url() |
146 |
| - rules = [ |
147 |
| - # Retention policy rule for the DELETE strategy. |
148 |
| - RetentionPolicy( |
149 |
| - strategy=RetentionStrategy.DELETE, |
150 |
| - table_schema=TESTDRIVE_DATA_SCHEMA, |
151 |
| - table_name="raw_metrics", |
152 |
| - partition_column="ts_day", |
153 |
| - retention_period=1, |
154 |
| - ), |
155 |
| - # Retention policy rule for the DELETE strategy, using tags. |
156 |
| - RetentionPolicy( |
157 |
| - strategy=RetentionStrategy.DELETE, |
158 |
| - tags={"foo", "bar"}, |
159 |
| - table_schema=TESTDRIVE_DATA_SCHEMA, |
160 |
| - table_name="sensor_readings", |
161 |
| - partition_column="time_month", |
162 |
| - retention_period=1, |
163 |
| - ), |
164 |
| - ] |
165 |
| - for rule in rules: |
166 |
| - store.create(rule, ignore="DuplicateKeyException") |
167 |
| - |
168 |
| - # Synchronize data. |
169 |
| - run_sql(database_url, f"REFRESH TABLE {settings.policy_table.fullname};") |
170 |
| - |
171 |
| - |
172 |
| -@pytest.fixture(scope="function") |
173 |
| -def raw_metrics(cratedb, settings, store): |
174 |
| - """ |
175 |
| - Populate the `raw_metrics` table. |
176 |
| - """ |
177 |
| - |
178 |
| - tablename_full = f'"{TESTDRIVE_DATA_SCHEMA}"."raw_metrics"' |
179 |
| - |
180 |
| - database_url = cratedb.get_connection_url() |
181 |
| - ddl = f""" |
182 |
| - CREATE TABLE {tablename_full} ( |
183 |
| - "variable" TEXT, |
184 |
| - "timestamp" TIMESTAMP WITH TIME ZONE, |
185 |
| - "ts_day" TIMESTAMP GENERATED ALWAYS AS date_trunc('day', "timestamp"), |
186 |
| - "value" REAL, |
187 |
| - "quality" INTEGER, |
188 |
| - PRIMARY KEY ("variable", "timestamp", "ts_day") |
189 |
| - ) |
190 |
| - PARTITIONED BY ("ts_day") |
191 |
| - WITH ("routing.allocation.require.storage" = 'hot') |
192 |
| - ; |
193 |
| - """ |
194 |
| - |
195 |
| - dml = f""" |
196 |
| - INSERT INTO {tablename_full} |
197 |
| - (variable, timestamp, value, quality) |
198 |
| - SELECT |
199 |
| - 'temperature' AS variable, |
200 |
| - generate_series AS timestamp, |
201 |
| - RANDOM()*100 AS value, |
202 |
| - 0 AS quality |
203 |
| - FROM generate_series('2023-06-01', '2023-06-30', '5 days'::INTERVAL); |
204 |
| - """ |
205 |
| - |
206 |
| - run_sql(database_url, ddl) |
207 |
| - run_sql(database_url, dml) |
208 |
| - run_sql(database_url, f"REFRESH TABLE {tablename_full};") |
209 |
| - |
210 |
| - return tablename_full |
211 |
| - |
212 |
| - |
213 |
| -@pytest.fixture(scope="function") |
214 |
| -def sensor_readings(cratedb, settings, store): |
215 |
| - """ |
216 |
| - Populate the `sensor_readings` table. |
217 |
| - """ |
218 |
| - |
219 |
| - tablename_full = f'"{TESTDRIVE_DATA_SCHEMA}"."sensor_readings"' |
220 |
| - |
221 |
| - database_url = cratedb.get_connection_url() |
222 |
| - ddl = f""" |
223 |
| - CREATE TABLE {tablename_full} ( |
224 |
| - time TIMESTAMP WITH TIME ZONE NOT NULL, |
225 |
| - time_month TIMESTAMP WITH TIME ZONE GENERATED ALWAYS AS DATE_TRUNC('month', "time"), |
226 |
| - sensor_id TEXT NOT NULL, |
227 |
| - battery_level DOUBLE PRECISION, |
228 |
| - battery_status TEXT, |
229 |
| - battery_temperature DOUBLE PRECISION |
230 |
| - ) |
231 |
| - PARTITIONED BY (time_month); |
232 |
| - """ |
233 |
| - |
234 |
| - dml = f""" |
235 |
| - INSERT INTO {tablename_full} |
236 |
| - (time, sensor_id, battery_level, battery_status, battery_temperature) |
237 |
| - SELECT |
238 |
| - generate_series AS time, |
239 |
| - 'batt01' AS sensor_id, |
240 |
| - RANDOM()*100 AS battery_level, |
241 |
| - 'FULL' AS battery_status, |
242 |
| - RANDOM()*100 AS battery_temperature |
243 |
| - FROM generate_series( |
244 |
| - '2023-05-01'::TIMESTAMPTZ, |
245 |
| - '2023-06-30'::TIMESTAMPTZ, |
246 |
| - '7 days'::INTERVAL |
247 |
| - ); |
248 |
| - """ |
249 |
| - |
250 |
| - run_sql(database_url, ddl) |
251 |
| - run_sql(database_url, dml) |
252 |
| - run_sql(database_url, f"REFRESH TABLE {tablename_full};") |
253 |
| - |
254 |
| - return tablename_full |
255 |
| - |
256 |
| - |
257 |
| -@pytest.fixture(scope="function") |
258 |
| -def raw_metrics_reallocate_policy(store): |
259 |
| - """ |
260 |
| - Populate the retention policy table. |
261 |
| - """ |
262 |
| - # Retention policy rule for the REALLOCATE strategy. |
263 |
| - rule = RetentionPolicy( |
264 |
| - strategy=RetentionStrategy.REALLOCATE, |
265 |
| - table_schema=TESTDRIVE_DATA_SCHEMA, |
266 |
| - table_name="raw_metrics", |
267 |
| - partition_column="ts_day", |
268 |
| - retention_period=60, |
269 |
| - reallocation_attribute_name="storage", |
270 |
| - reallocation_attribute_value="warm", |
271 |
| - ) |
272 |
| - store.create(rule, ignore="DuplicateKeyException") |
273 |
| - |
274 |
| - |
275 |
| -@pytest.fixture(scope="function") |
276 |
| -def sensor_readings_snapshot_policy(store): |
277 |
| - """ |
278 |
| - Populate the retention policy table. |
279 |
| - """ |
280 |
| - # Retention policy rule for the SNAPSHOT strategy. |
281 |
| - rule = RetentionPolicy( |
282 |
| - strategy=RetentionStrategy.SNAPSHOT, |
283 |
| - table_schema=TESTDRIVE_DATA_SCHEMA, |
284 |
| - table_name="sensor_readings", |
285 |
| - partition_column="time_month", |
286 |
| - retention_period=365, |
287 |
| - target_repository_name="export_cold", |
288 |
| - ) |
289 |
| - store.create(rule, ignore="DuplicateKeyException") |
290 |
| - |
291 |
| - |
292 | 106 | setup_logging()
|
0 commit comments