初始提交:OCI 面板后端(含 GenAI 网关一期)
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
package oci
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/oracle/oci-go-sdk/v65/common"
|
||||
"github.com/oracle/oci-go-sdk/v65/identitydomains"
|
||||
)
|
||||
|
||||
func TestGeneratePassword(t *testing.T) {
|
||||
for i := 0; i < 20; i++ {
|
||||
password, err := generatePassword()
|
||||
if err != nil {
|
||||
t.Fatalf("generatePassword: %v", err)
|
||||
}
|
||||
if len(password) != 16 {
|
||||
t.Fatalf("len = %d, want 16", len(password))
|
||||
}
|
||||
for _, set := range passwordCharsets {
|
||||
if !strings.ContainsAny(password, set) {
|
||||
t.Errorf("password %q missing charset %q", password, set)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestToTenantUserDetail(t *testing.T) {
|
||||
adminRoles := &identitydomains.ExtensionUserUser{
|
||||
AppRoles: []identitydomains.UserExtAppRoles{
|
||||
{Value: common.String("r1"), Display: common.String("User Administrator")},
|
||||
{Value: common.String("r2"), Display: common.String(domainAdminRoleName)},
|
||||
},
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
u identitydomains.User
|
||||
want TenantUserDetail
|
||||
}{
|
||||
{
|
||||
name: "姓名与双管理员状态齐全",
|
||||
u: identitydomains.User{
|
||||
Name: &identitydomains.UserName{
|
||||
GivenName: common.String("De"),
|
||||
FamilyName: common.String("Wang"),
|
||||
},
|
||||
Groups: []identitydomains.UserGroups{
|
||||
{Value: common.String("g1"), Display: common.String("Readers")},
|
||||
{Value: common.String("g2"), Display: common.String(administratorsGroupName)},
|
||||
},
|
||||
UrnIetfParamsScimSchemasOracleIdcsExtensionUserUser: adminRoles,
|
||||
},
|
||||
want: TenantUserDetail{InDomain: true, GivenName: "De", FamilyName: "Wang", IsDomainAdmin: true, InAdminGroup: true},
|
||||
},
|
||||
{
|
||||
name: "普通成员无管理员标记",
|
||||
u: identitydomains.User{
|
||||
Name: &identitydomains.UserName{GivenName: common.String("A"), FamilyName: common.String("B")},
|
||||
Groups: []identitydomains.UserGroups{{Value: common.String("g1"), Display: common.String("Readers")}},
|
||||
},
|
||||
want: TenantUserDetail{InDomain: true, GivenName: "A", FamilyName: "B"},
|
||||
},
|
||||
{
|
||||
name: "空档案仅置 InDomain",
|
||||
u: identitydomains.User{},
|
||||
want: TenantUserDetail{InDomain: true},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := toTenantUserDetail(tt.u); got != tt.want {
|
||||
t.Errorf("toTenantUserDetail() = %+v, want %+v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildUsageDetails(t *testing.T) {
|
||||
start := time.Date(2026, 6, 1, 0, 0, 0, 0, time.UTC)
|
||||
end := time.Date(2026, 7, 1, 0, 0, 0, 0, time.UTC)
|
||||
tests := []struct {
|
||||
name string
|
||||
q CostQuery
|
||||
wantErr bool
|
||||
}{
|
||||
{name: "daily cost", q: CostQuery{Granularity: "DAILY", QueryType: "COST", GroupBy: "service"}},
|
||||
{name: "小写粒度可被归一化", q: CostQuery{Granularity: "monthly", QueryType: "usage", GroupBy: "skuName"}},
|
||||
{name: "非法粒度", q: CostQuery{Granularity: "HOURLY2", QueryType: "COST"}, wantErr: true},
|
||||
{name: "非法查询类型", q: CostQuery{Granularity: "DAILY", QueryType: "MONEY"}, wantErr: true},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tt.q.StartTime, tt.q.EndTime = start, end
|
||||
details, err := buildUsageDetails("ocid1.tenancy.oc1..test", tt.q)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Fatalf("buildUsageDetails() error = %v, wantErr %v", err, tt.wantErr)
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if details.TenantId == nil || *details.TenantId != "ocid1.tenancy.oc1..test" {
|
||||
t.Error("tenantId not set")
|
||||
}
|
||||
if len(details.GroupBy) != 1 || details.GroupBy[0] != tt.q.GroupBy {
|
||||
t.Errorf("groupBy = %v, want [%s]", details.GroupBy, tt.q.GroupBy)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user