发布 0.1.0:通知渠道、告警规则、令牌版本与安全加固
This commit is contained in:
@@ -80,7 +80,10 @@ func newTaskEnv(t *testing.T, client oci.Client) (*TaskService, *OciConfigServic
|
||||
t.Fatalf("new cipher: %v", err)
|
||||
}
|
||||
configs := NewOciConfigService(db, cipher, client)
|
||||
return NewTaskService(db, configs, nil, NewSettingService(db, cipher)), configs, db
|
||||
tasks := NewTaskService(db, configs, nil, NewSettingService(db, cipher))
|
||||
// 测试不等待公网 IP 分配:预算置 0,首查后立即回退
|
||||
tasks.snatchIPWait = 0
|
||||
return tasks, configs, db
|
||||
}
|
||||
|
||||
func TestCreateTaskValidation(t *testing.T) {
|
||||
@@ -699,3 +702,102 @@ func TestUpdateTaskFailedToActiveResetsAuthFail(t *testing.T) {
|
||||
t.Error("重新启用后任务未回到调度")
|
||||
}
|
||||
}
|
||||
|
||||
// TestSnatchSuccessVars 锁定抢机成功通知变量的组装:租户/区域/类型/镜像,
|
||||
// 以及 root 密码三种凭据模式与 IP 逐级回退;单项查询失败不阻塞其余字段。
|
||||
func TestSnatchSuccessVars(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
client *fakeClient
|
||||
in oci.CreateInstanceInput
|
||||
insts []oci.Instance
|
||||
want map[string]string
|
||||
}{
|
||||
{
|
||||
name: "生成密码模式全字段",
|
||||
client: &fakeClient{
|
||||
tenancy: oci.TenancyInfo{Name: "mytenancy", HomeRegionKey: "FRA"},
|
||||
instance: oci.Instance{PublicIP: "203.0.113.7"},
|
||||
image: oci.Image{DisplayName: "Ubuntu-24.04"},
|
||||
},
|
||||
in: oci.CreateInstanceInput{Region: "ap-osaka-1", Shape: "VM.Standard.A1.Flex",
|
||||
Ocpus: 4, MemoryInGBs: 24, ImageID: "ocid1.image.oc1..img"},
|
||||
insts: []oci.Instance{{ID: "i1", FreeformTags: map[string]string{"RootPassword": "pw-from-tag"}}},
|
||||
want: map[string]string{
|
||||
"tenant": "试用期",
|
||||
"region": "Japan Central (Osaka)",
|
||||
"shape": "VM.Standard.A1.Flex",
|
||||
"spec": "4C/24G",
|
||||
"image": "Ubuntu-24.04",
|
||||
"ip": "203.0.113.7",
|
||||
"root_password": "pw-from-tag",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "显式密码_未知区域_IP回退内网_镜像失败回退OCID",
|
||||
client: &fakeClient{
|
||||
instance: oci.Instance{PrivateIP: "10.0.0.5"},
|
||||
imageErr: fmt.Errorf("boom"),
|
||||
},
|
||||
in: oci.CreateInstanceInput{Region: "xx-nowhere-1", Shape: "VM.Standard.E2.1.Micro",
|
||||
ImageID: "ocid1.image.oc1..img", RootPassword: "explicit-pw"},
|
||||
insts: []oci.Instance{{ID: "i1"}},
|
||||
want: map[string]string{
|
||||
"tenant": "试用期",
|
||||
"region": "xx-nowhere-1",
|
||||
"shape": "VM.Standard.E2.1.Micro",
|
||||
"spec": "-",
|
||||
"image": "ocid1.image.oc1..img",
|
||||
"ip": "10.0.0.5(内网)",
|
||||
"root_password": "explicit-pw",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "SSH模式_引导卷_区域取配置默认_多台待分配",
|
||||
client: &fakeClient{instanceErr: fmt.Errorf("boom")},
|
||||
in: oci.CreateInstanceInput{Shape: "s",
|
||||
BootVolumeID: "ocid1.bootvolume.oc1..bv", SSHPublicKey: "ssh-ed25519 AAAA"},
|
||||
insts: []oci.Instance{{ID: "i1"}, {ID: "i2"}},
|
||||
want: map[string]string{
|
||||
"region": "Germany Central (Frankfurt)",
|
||||
"image": "引导卷",
|
||||
"ip": "待分配、待分配",
|
||||
"root_password": "—(SSH 密钥登录)、—(SSH 密钥登录)",
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tasks, configs, _ := newTaskEnv(t, tt.client)
|
||||
cfg, err := configs.Import(context.Background(), trialImportInput())
|
||||
if err != nil {
|
||||
t.Fatalf("import: %v", err)
|
||||
}
|
||||
got := tasks.snatchSuccessVars(context.Background(),
|
||||
&snatchPayload{OciConfigID: cfg.ID}, tt.in, tt.insts)
|
||||
for k, want := range tt.want {
|
||||
if got[k] != want {
|
||||
t.Errorf("%s = %q, want %q", k, got[k], want)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestNotifyEventsSnatchVarsMerged 抢满成功事件应合并暂存的补充变量。
|
||||
func TestNotifyEventsSnatchVarsMerged(t *testing.T) {
|
||||
prev := taskSnapshot{Name: "抢机", Status: model.TaskStatusActive}
|
||||
cur := taskSnapshot{Name: "抢机", Status: model.TaskStatusSucceeded, Message: "created 1",
|
||||
SnatchVars: map[string]string{"tenant": "免费01·t", "ip": "203.0.113.7", "root_password": "pw"}}
|
||||
events := notifyEvents(prev, cur)
|
||||
if len(events) != 1 || events[0].Kind != notifySnatchSuccess {
|
||||
t.Fatalf("events = %+v, want 1 条 snatch_success", events)
|
||||
}
|
||||
want := map[string]string{"task_name": "抢机", "message": "created 1",
|
||||
"tenant": "免费01·t", "ip": "203.0.113.7", "root_password": "pw"}
|
||||
for k, v := range want {
|
||||
if events[0].Vars[k] != v {
|
||||
t.Errorf("vars[%s] = %q, want %q", k, events[0].Vars[k], v)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user