yeg
2026-09-29 5ec8f0134b031de383608e8f25f45eddaac74cb9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
param([switch] $FullSuite)
$ErrorActionPreference = 'Stop'
$workbookSuffix = [guid]::NewGuid().ToString('N')
$workbookSchema = 'ticket04_import_' + $workbookSuffix
$workbookUser = 'workbook_' + $workbookSuffix.Substring(0, 16)
$workbookPassword = [guid]::NewGuid().ToString('N')
 
function Invoke-WorkbookSql([string] $sql) {
    $sql | wsl --exec docker exec -i infrastructure-mysql-1 sh -lc 'MYSQL_PWD="$MYSQL_ROOT_PASSWORD" mysql -uroot --batch'
    if ($LASTEXITCODE -ne 0) { throw '隔离库管理命令失败' }
}
 
Push-Location (Join-Path $PSScriptRoot '..')
try {
    # 临时账号仅拥有本次随机库的权限,不启动服务、不修改共享开发库。
    Invoke-WorkbookSql "CREATE USER '$workbookUser'@'%' IDENTIFIED BY '$workbookPassword'; GRANT ALL PRIVILEGES ON ${workbookSchema}.* TO '$workbookUser'@'%';"
    $env:WORKBOOK_TEST_SCHEMA = $workbookSchema
    $env:WORKBOOK_TEST_USER = $workbookUser
    $env:WORKBOOK_TEST_PASSWORD = $workbookPassword
    $env:TICKET03_SAMPLE_JSON = (Resolve-Path '../.scratch/simulator-and-data-import-v1/ticket03-sample.json').Path
    if ($FullSuite) { mvn test }
    else { mvn -pl ruoyi-admin -am test '-Dtest=ConsoleWorkbookImportMysqlTest' '-Dsurefire.failIfNoSpecifiedTests=false' }
    if ($LASTEXITCODE -ne 0) { throw '三 Sheet 导入验证失败' }
} finally {
    Remove-Item Env:WORKBOOK_TEST_SCHEMA,Env:WORKBOOK_TEST_USER,Env:WORKBOOK_TEST_PASSWORD,Env:TICKET03_SAMPLE_JSON -ErrorAction SilentlyContinue
    if ($workbookSchema -notmatch '^ticket04_import_[a-f0-9]{32}$' -or $workbookUser -notmatch '^workbook_[a-f0-9]{16}$') { throw '隔离资源名称校验失败' }
    Invoke-WorkbookSql "DROP DATABASE IF EXISTS $workbookSchema; DROP USER IF EXISTS '$workbookUser'@'%';"
    Pop-Location
}