@@ -279,34 +279,56 @@ def workflow_http(c: Composition) -> None:
279
279
"""Test http endpoint allows COPY TO S3 but not COPY TO STDOUT."""
280
280
c .up ("materialized" , "minio" )
281
281
282
- c .run_testdrive_files ("http/setup.td" )
283
-
284
- result = c .exec (
285
- "materialized" ,
286
- "curl" ,
287
- "http://localhost:6878/api/sql" ,
288
- "-k" ,
289
- "-s" ,
290
- "--header" ,
291
- "Content-Type: application/json" ,
292
- "--data" ,
293
- "{\" query\" : \" COPY (SELECT 1) TO 's3://copytos3/test/http/' WITH (AWS CONNECTION = aws_conn, FORMAT = 'csv');\" }" ,
294
- capture = True ,
295
- )
296
- assert result .returncode == 0
297
- assert json .loads (result .stdout )["results" ][0 ]["ok" ] == "COPY 1"
298
-
299
- result = c .exec (
300
- "materialized" ,
301
- "curl" ,
302
- "http://localhost:6878/api/sql" ,
303
- "-k" ,
304
- "-s" ,
305
- "--header" ,
306
- "Content-Type: application/json" ,
307
- "--data" ,
308
- '{"query": "COPY (SELECT 1) TO STDOUT"}' ,
309
- capture = True ,
310
- )
311
- assert result .returncode == 0
312
- assert "unsupported via this API" in result .stdout
282
+ with c .override (Testdrive (no_reset = True )):
283
+ c .run_testdrive_files ("http/setup.td" )
284
+
285
+ result = c .exec (
286
+ "materialized" ,
287
+ "curl" ,
288
+ "http://localhost:6878/api/sql" ,
289
+ "-k" ,
290
+ "-s" ,
291
+ "--header" ,
292
+ "Content-Type: application/json" ,
293
+ "--data" ,
294
+ "{\" query\" : \" COPY (SELECT 1) TO 's3://copytos3/test/http/' WITH (AWS CONNECTION = aws_conn, FORMAT = 'csv');\" }" ,
295
+ capture = True ,
296
+ )
297
+ assert result .returncode == 0
298
+ assert (
299
+ json .loads (result .stdout )["results" ][0 ]["error" ]["message" ]
300
+ == 'permission denied for CONNECTION "materialize.public.aws_conn"'
301
+ and json .loads (result .stdout )["results" ][0 ]["error" ]["detail" ]
302
+ == "The 'anonymous_http_user' role needs USAGE privileges on CONNECTION \" materialize.public.aws_conn\" "
303
+ )
304
+
305
+ c .run_testdrive_files ("http/grant.td" )
306
+ result = c .exec (
307
+ "materialized" ,
308
+ "curl" ,
309
+ "http://localhost:6878/api/sql" ,
310
+ "-k" ,
311
+ "-s" ,
312
+ "--header" ,
313
+ "Content-Type: application/json" ,
314
+ "--data" ,
315
+ "{\" query\" : \" COPY (SELECT 1) TO 's3://copytos3/test/http/' WITH (AWS CONNECTION = aws_conn, FORMAT = 'csv');\" }" ,
316
+ capture = True ,
317
+ )
318
+ assert result .returncode == 0
319
+ assert json .loads (result .stdout )["results" ][0 ]["ok" ] == "COPY 1"
320
+
321
+ result = c .exec (
322
+ "materialized" ,
323
+ "curl" ,
324
+ "http://localhost:6878/api/sql" ,
325
+ "-k" ,
326
+ "-s" ,
327
+ "--header" ,
328
+ "Content-Type: application/json" ,
329
+ "--data" ,
330
+ '{"query": "COPY (SELECT 1) TO STDOUT"}' ,
331
+ capture = True ,
332
+ )
333
+ assert result .returncode == 0
334
+ assert "unsupported via this API" in result .stdout
0 commit comments