12
12
"""
13
13
14
14
import glob
15
+ import pathlib
15
16
import random
16
17
17
- from materialize import MZ_ROOT
18
- from materialize .mzcompose .composition import Composition , WorkflowArgumentParser
18
+ from materialize import MZ_ROOT , buildkite
19
+ from materialize .mzcompose .composition import (
20
+ Composition ,
21
+ WorkflowArgumentParser ,
22
+ )
19
23
from materialize .mzcompose .services .materialized import Materialized
20
24
from materialize .mzcompose .services .mz import Mz
21
25
from materialize .mzcompose .services .sql_server import SqlServer
26
+ from materialize .mzcompose .services .test_certs import TestCerts
22
27
from materialize .mzcompose .services .testdrive import Testdrive
23
28
29
+ TLS_CONF_PATH = MZ_ROOT / "test" / "sql-server-cdc" / "tls-mssconfig.conf"
30
+
24
31
SERVICES = [
25
32
Mz (app_password = "" ),
26
- Materialized (),
33
+ Materialized (
34
+ additional_system_parameter_defaults = {
35
+ "log_filter" : "mz_storage::source::sql_server=trace,mz_storage::source::sql_server::replication=trace,mz_sql_server_util=debug,info"
36
+ },
37
+ ),
27
38
Testdrive (),
28
- SqlServer (),
39
+ TestCerts (),
40
+ SqlServer (
41
+ volumes_extra = [
42
+ "secrets:/var/opt/mssql/certs" ,
43
+ f"{ TLS_CONF_PATH } :/var/opt/mssql/mssql.conf" ,
44
+ ]
45
+ ),
29
46
]
30
47
31
48
32
- #
33
- # Test that SQL Server ingestion works
34
- #
35
49
def workflow_default (c : Composition , parser : WorkflowArgumentParser ) -> None :
36
50
parser .add_argument (
37
51
"filter" ,
@@ -41,26 +55,46 @@ def workflow_default(c: Composition, parser: WorkflowArgumentParser) -> None:
41
55
)
42
56
args = parser .parse_args ()
43
57
44
- matching_files = []
58
+ matching_files : list [ str ] = []
45
59
for filter in args .filter :
46
60
matching_files .extend (
47
61
glob .glob (filter , root_dir = MZ_ROOT / "test" / "sql-server-cdc-old-syntax" )
48
62
)
49
63
matching_files = sorted (matching_files )
50
- print (f"Filter: { args .filter } Files: { matching_files } " )
64
+ sharded_files : list [str ] = buildkite .shard_list (
65
+ sorted (matching_files ), lambda file : file
66
+ )
67
+ print (f"Filter: { args .filter } Files: { sharded_files } " )
68
+
69
+ # Start with a fresh state
70
+ c .kill ("sql-server" )
71
+ c .rm ("sql-server" )
72
+ c .kill ("materialized" )
73
+ c .rm ("materialized" )
51
74
52
- c .up ("materialized" , "sql-server" )
75
+ # must start test-certs, otherwise the certificates needed by sql-server may not be avaiable
76
+ # in the secrets volume when it starts up
77
+ c .up ("materialized" , "test-certs" , "sql-server" )
53
78
seed = random .getrandbits (16 )
54
79
55
- c .test_parts (
56
- matching_files ,
57
- lambda file : c .run_testdrive_files (
58
- "--no-reset" ,
80
+ ssl_ca = c .exec (
81
+ "sql-server" , "cat" , "/var/opt/mssql/certs/ca.crt" , capture = True
82
+ ).stdout
83
+ alt_ssl_ca = c .exec (
84
+ "sql-server" , "cat" , "/var/opt/mssql/certs/ca-selective.crt" , capture = True
85
+ ).stdout
86
+
87
+ def run (file : pathlib .Path | str ) -> None :
88
+ c .run_testdrive_files (
59
89
"--max-errors=1" ,
60
90
f"--seed={ seed } " ,
91
+ f"--var=ssl-ca={ ssl_ca } " ,
92
+ f"--var=alt-ssl-ca={ alt_ssl_ca } " ,
61
93
f"--var=default-replica-size={ Materialized .Size .DEFAULT_SIZE } -{ Materialized .Size .DEFAULT_SIZE } " ,
62
94
f"--var=default-sql-server-user={ SqlServer .DEFAULT_USER } " ,
63
95
f"--var=default-sql-server-password={ SqlServer .DEFAULT_SA_PASSWORD } " ,
96
+ "setup/setup.td" ,
64
97
str (file ),
65
- ),
66
- )
98
+ )
99
+
100
+ c .test_parts (sharded_files , run )
0 commit comments