Files
oci-portal/internal/oci/tenantuser_test.go
T
Wang Defa dbba1f4905
CI / test (push) Successful in 30s
Release / release (push) Successful in 49s
发布 0.1.0:通知渠道、告警规则、令牌版本与安全加固
2026-07-10 17:38:34 +08:00

111 lines
3.4 KiB
Go

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(adminGroupNames[0])},
},
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)
}
})
}
}