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("интервал перепроверки") } }