123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- package sync_test
- import (
- "fmt"
- "log"
- "testing"
- "time"
- "github.com/remogatto/prettytest"
- karmen_client "gogs.carducci-dante.gov.it/karmen/core/client"
- "gogs.carducci-dante.gov.it/karmen/core/config"
- "gogs.carducci-dante.gov.it/karmen/core/cron/sync"
- karmen_ldap "gogs.carducci-dante.gov.it/karmen/core/ldap"
- "gogs.carducci-dante.gov.it/karmen/core/orm"
- )
- type testSuite struct {
- prettytest.Suite
- }
- var (
- ldap *karmen_ldap.Client
- karmen *karmen_client.Client
- conf *config.ConfigT
- )
- func TestRunner(t *testing.T) {
- prettytest.Run(
- t,
- new(testSuite),
- )
- }
- func (t *testSuite) BeforeAll() {
- var err error
- time.Sleep(time.Second * 10) // Wait for the server to go up...
- conf = new(config.ConfigT)
- err = config.ReadFile("config.yaml", conf)
- if err != nil {
- panic(err)
- }
- ldap, err = karmen_ldap.NewClient("localhost:389", conf)
- if err != nil {
- panic(err)
- }
- karmen, err = karmen_client.Dial(conf.Url, conf.Admin.Username, conf.Admin.Password)
- if err != nil {
- log.Println(err)
- }
- }
- func (t *testSuite) AfterAll() {
- ldap.Close()
- }
- func (t *testSuite) TestSyncUsers() {
- syncJob := sync.NewSyncJob(conf)
- teachers, err := karmen.GetTeachers()
- t.Nil(err)
- entries, err := ldap.Users(conf.Sync.TeachersSearchBase)
- t.Nil(err)
- users := make([]orm.User, 0)
- for _, teacher := range teachers {
- users = append(users, teacher)
- }
- result, err := syncJob.SyncUsers(ldap, karmen, entries, users)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(len(result.Added), 11)
- t.Equal(len(result.Updated), 0)
- t.Equal(len(result.Removed), 1)
- t.Equal(result.Removed[0], "cn=John DOE,ou=Teachers,ou=People,dc=foo,dc=org")
- }
- // Run sync two times should result in no updating
- teachers, err = karmen.GetTeachers()
- t.Nil(err)
- entries, err = ldap.Users(conf.Sync.TeachersSearchBase)
- t.Nil(err)
- users = make([]orm.User, 0)
- for _, teacher := range teachers {
- users = append(users, teacher)
- }
- result, err = syncJob.SyncUsers(ldap, karmen, entries, users)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(len(result.Added), 0)
- t.Equal(len(result.Updated), 0)
- t.Equal(len(result.Removed), 0)
- }
- // Update user and test LDAP sync
- user := teachers[0]
- user.SetRegenerate(true)
- err = karmen.UpdateUser(user)
- t.Nil(err)
- teachers, err = karmen.GetTeachers()
- t.Nil(err)
- entries, err = ldap.Users(conf.Sync.TeachersSearchBase)
- t.Nil(err)
- users = make([]orm.User, 0)
- for _, teacher := range teachers {
- users = append(users, teacher)
- }
- result, err = syncJob.SyncUsers(ldap, karmen, entries, users)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(len(result.Added), 0)
- t.Equal(len(result.Updated), 1)
- t.Equal(len(result.Removed), 0)
- }
- // Sync administratives
- administratives, err := karmen.GetAdministratives()
- t.Nil(err)
- entries, err = ldap.Users(conf.Sync.AdministrativesSearchBase)
- t.Nil(err)
- users = make([]orm.User, 0)
- for _, administrative := range administratives {
- users = append(users, administrative)
- }
- result, err = syncJob.SyncUsers(ldap, karmen, entries, users)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(2, len(result.Added))
- t.Equal(0, len(result.Updated))
- t.Equal(0, len(result.Removed))
- }
- }
- func (t *testSuite) TestSyncGroup() {
- syncJob := sync.NewSyncJob(conf)
- teachers, err := karmen.GetTeachers()
- t.Nil(err)
- users := make([]orm.User, 0)
- for _, teacher := range teachers {
- users = append(users, teacher)
- }
- result, err := syncJob.SyncGroup(ldap, users, conf.Sync.TeachersGroup)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(11, len(result.Added))
- t.Equal(0, len(result.Updated))
- t.Equal(0, len(result.Removed))
- }
- // Running twice should result in no update
- result, err = syncJob.SyncGroup(ldap, users, conf.Sync.TeachersGroup)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(0, len(result.Added))
- t.Equal(0, len(result.Updated))
- t.Equal(0, len(result.Removed))
- }
- // Test ML sync
- result, err = syncJob.SyncGroup(ldap, users, conf.Sync.TeachersML)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(11, len(result.Added))
- t.Equal(0, len(result.Updated))
- t.Equal(1, len(result.Removed))
- }
- // Running twice should result in no update
- result, err = syncJob.SyncGroup(ldap, users, conf.Sync.TeachersML)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(0, len(result.Added))
- t.Equal(0, len(result.Updated))
- t.Equal(0, len(result.Removed))
- }
- administratives, err := karmen.GetAdministratives()
- t.Nil(err)
- users = make([]orm.User, 0)
- for _, administrative := range administratives {
- users = append(users, administrative)
- }
- result, err = syncJob.SyncGroup(ldap, users, conf.Sync.AdministrativesGroup)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(2, len(result.Added))
- t.Equal(0, len(result.Updated))
- t.Equal(0, len(result.Removed))
- }
- departments, err := karmen.GetDepartments()
- t.Nil(err)
- if !t.Failed() {
- results := make(map[string][]int)
- results["cn=SOSTEGNO,ou=Mailing Lists"] = []int{2, 0, 1}
- results["cn=SOSTEGNO,ou=Dipartimenti"] = []int{2, 0, 0}
- results["cn=LINGUE STRANIERE,ou=Mailing Lists"] = []int{1, 0, 1}
- results["cn=LINGUE STRANIERE,ou=Dipartimenti"] = []int{1, 0, 0}
- for _, department := range departments {
- users := make([]orm.User, 0)
- for _, teacher := range department.Teachers {
- users = append(users, teacher)
- }
- group := fmt.Sprintf("cn=%s,ou=Mailing Lists", department.Name)
- result, err := syncJob.SyncGroup(ldap, users, group)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(results[group][0], len(result.Added))
- t.Equal(results[group][1], len(result.Updated))
- t.Equal(results[group][2], len(result.Removed))
- }
- group = fmt.Sprintf("cn=%s,ou=Dipartimenti", department.Name)
- result, err = syncJob.SyncGroup(ldap, users, group)
- t.Nil(err)
- if !t.Failed() {
- t.Equal(results[group][0], len(result.Added))
- t.Equal(results[group][1], len(result.Updated))
- t.Equal(results[group][2], len(result.Removed))
- }
- }
- }
- }
|