da12a9ec1c
- bj_exchange и «кран» Fancy убраны: данные модуля ЛК в PostgreSQL (схема lk) - трансферные таблицы FTV_M2M: создание при установке, события, справочник участников - сверка с DEPO: счёт, ФИО, дата рождения, ИИС по договору, квал-инвестор из опции DEPO - боевой ЛК ЕСИА Финанс при тестовом ИШ: журнал, отказ через DEPO, статусы в ЛК - онлайн-лицензирование в bj, план тестирования M2M для контрагента (интерактивный HTML) - модули QUIK МНП, экспорт QUIK, НПР/УДС; документы и тестовые материалы Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
56 lines
2.4 KiB
Go
56 lines
2.4 KiB
Go
package lkgateway
|
|
|
|
import "testing"
|
|
|
|
func TestADApplyRecheck(t *testing.T) {
|
|
grp := "CN=BJ-Operators,OU=Groups,DC=corp,DC=example,DC=ru"
|
|
|
|
u := &User{Login: "ivanov", Source: "ad", Role: "admin", Active: true}
|
|
changed, drop, _ := adApplyRecheck(u, &adResult{Role: "operator", MatchedBy: "BJ-Operators", Groups: []string{grp}}, nil, nil)
|
|
if !changed || drop || u.Role != "operator" || len(u.ADGroups) != 1 || u.ADGroups[0] != "BJ-Operators" {
|
|
t.Fatalf("смена группы: changed=%v drop=%v role=%q groups=%v", changed, drop, u.Role, u.ADGroups)
|
|
}
|
|
|
|
changed, drop, _ = adApplyRecheck(u, &adResult{Role: "operator", MatchedBy: "BJ-Operators"}, nil, nil)
|
|
if changed || drop {
|
|
t.Fatal("роль не изменилась — изменений быть не должно")
|
|
}
|
|
|
|
changed, drop, _ = adApplyRecheck(u, &adResult{}, nil, &adNoGroupError{sam: "ivanov"})
|
|
if !changed || !drop || u.Role != "" || userHasAccess(u) {
|
|
t.Fatalf("удалён из групп: changed=%v drop=%v role=%q", changed, drop, u.Role)
|
|
}
|
|
changed, drop, _ = adApplyRecheck(u, &adResult{}, nil, &adNoGroupError{sam: "ivanov"})
|
|
if changed || drop {
|
|
t.Fatal("повторная проверка без групп не должна повторно снимать доступ")
|
|
}
|
|
|
|
changed, _, _ = adApplyRecheck(u, &adResult{Role: "viewer", MatchedBy: "BJ-Viewers"}, nil, nil)
|
|
if !changed || u.Role != "viewer" {
|
|
t.Fatal("возврат в группу должен вернуть роль")
|
|
}
|
|
|
|
for _, e := range []error{errADDisabled, errADNotFound} {
|
|
v := &User{Login: "petrov", Source: "ad", Role: "viewer", Active: true}
|
|
if changed, drop, _ := adApplyRecheck(v, nil, e, nil); !changed || !drop || v.Role != "" {
|
|
t.Fatalf("%v: доступ должен сниматься", e)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestADSplitLogin(t *testing.T) {
|
|
a := AuthSettings{ADDomain: "corp.example.ru"}
|
|
for in, want := range map[string][2]string{
|
|
"ivanov": {"ivanov", "ivanov@corp.example.ru"},
|
|
"ivanov@corp.example.ru": {"ivanov", "ivanov@corp.example.ru"},
|
|
`CORP\ivanov`: {"ivanov", "ivanov@corp.example.ru"},
|
|
} {
|
|
if sam, upn := adSplitLogin(a, in); sam != want[0] || upn != want[1] {
|
|
t.Fatalf("%s → %s, %s", in, sam, upn)
|
|
}
|
|
}
|
|
if (AuthSettings{}).recheckEvery() != adRecheckDefault || (AuthSettings{ADRecheckMinutes: 1}).recheckEvery().Minutes() != 5 {
|
|
t.Fatal("интервал перепроверки")
|
|
}
|
|
}
|