mirror of
https://github.com/Awuqing/BackupX.git
synced 2026-05-11 18:10:23 +08:00
* chore: ignore web/dist directory in git repository * 功能: 新增 SAP HANA 完整备份支持与 Backint 协议代理 - 修复 service 层校验 bug,使 SAP HANA 类型可正常创建 - 增强 hdbsql Runner:支持完整/增量/差异/日志备份、并行通道、失败重试 - 新增 Backint 协议代理(backupx backint 子命令),HANA 原生接口直连 BackupX 存储后端 - 新增本地 SQLite 目录维护 EBID↔对象键映射 - 前端新增 SAP HANA 扩展字段表单(备份类型/级别/通道数/重试次数/实例编号) - README 中英文补充 SAP HANA 两种模式的使用说明
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package backint
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestParseConfig(t *testing.T) {
|
|
dir := t.TempDir()
|
|
storagePath := filepath.Join(dir, "storage.json")
|
|
if err := os.WriteFile(storagePath, []byte(`{"basePath":"/tmp/backup"}`), 0644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
input := `
|
|
; 注释
|
|
#STORAGE_TYPE = local_disk
|
|
#STORAGE_CONFIG_JSON = ` + storagePath + `
|
|
#PARALLEL_FACTOR = 4
|
|
#COMPRESS = true
|
|
#KEY_PREFIX = /hana/backups/
|
|
#CATALOG_DB = ` + filepath.Join(dir, "catalog.db") + `
|
|
`
|
|
cfg, err := ParseConfig(strings.NewReader(input))
|
|
if err != nil {
|
|
t.Fatalf("parse: %v", err)
|
|
}
|
|
if cfg.StorageType != "local_disk" {
|
|
t.Errorf("StorageType: %q", cfg.StorageType)
|
|
}
|
|
if cfg.ParallelFactor != 4 {
|
|
t.Errorf("ParallelFactor: %d", cfg.ParallelFactor)
|
|
}
|
|
if !cfg.Compress {
|
|
t.Errorf("Compress should be true")
|
|
}
|
|
if cfg.KeyPrefix != "hana/backups" {
|
|
t.Errorf("KeyPrefix should be trimmed: %q", cfg.KeyPrefix)
|
|
}
|
|
if cfg.StorageConfig["basePath"] != "/tmp/backup" {
|
|
t.Errorf("StorageConfig mismatch: %+v", cfg.StorageConfig)
|
|
}
|
|
}
|
|
|
|
func TestParseConfig_MissingStorageType(t *testing.T) {
|
|
input := `PARALLEL_FACTOR = 1`
|
|
if _, err := ParseConfig(strings.NewReader(input)); err == nil {
|
|
t.Fatal("expected error for missing STORAGE_TYPE")
|
|
}
|
|
}
|
|
|
|
func TestParseConfig_InlineStorageConfig(t *testing.T) {
|
|
input := `STORAGE_TYPE = local_disk
|
|
STORAGE_CONFIG = {"basePath":"/x"}
|
|
`
|
|
cfg, err := ParseConfig(strings.NewReader(input))
|
|
if err != nil {
|
|
t.Fatalf("parse: %v", err)
|
|
}
|
|
if cfg.StorageConfig["basePath"] != "/x" {
|
|
t.Errorf("inline config not parsed: %+v", cfg.StorageConfig)
|
|
}
|
|
}
|
|
|
|
func TestParseConfig_InvalidParallel(t *testing.T) {
|
|
input := `STORAGE_TYPE = local_disk
|
|
STORAGE_CONFIG = {}
|
|
PARALLEL_FACTOR = oops
|
|
`
|
|
if _, err := ParseConfig(strings.NewReader(input)); err == nil {
|
|
t.Fatal("expected error for invalid PARALLEL_FACTOR")
|
|
}
|
|
}
|