sync_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package sync_test
  2. import (
  3. "log"
  4. "testing"
  5. "time"
  6. "github.com/remogatto/prettytest"
  7. karmen_client "gogs.carducci-dante.gov.it/karmen/client"
  8. "gogs.carducci-dante.gov.it/karmen/core/config"
  9. "gogs.carducci-dante.gov.it/karmen/core/cron/sync"
  10. "gogs.carducci-dante.gov.it/karmen/core/orm"
  11. karmen_ldap "gogs.carducci-dante.gov.it/karmen/ldap"
  12. )
  13. type testSuite struct {
  14. prettytest.Suite
  15. }
  16. var (
  17. ldap *karmen_ldap.Client
  18. karmen *karmen_client.Client
  19. conf *config.ConfigT
  20. )
  21. func TestRunner(t *testing.T) {
  22. prettytest.Run(
  23. t,
  24. new(testSuite),
  25. )
  26. }
  27. func (t *testSuite) BeforeAll() {
  28. var err error
  29. time.Sleep(time.Second * 10) // Wait for the server to go up...
  30. conf = new(config.ConfigT)
  31. err = config.ReadFile("config.yaml", conf)
  32. if err != nil {
  33. panic(err)
  34. }
  35. ldap, err = karmen_ldap.NewClient("localhost:389", conf)
  36. if err != nil {
  37. panic(err)
  38. }
  39. karmen, err = karmen_client.Dial(conf.Url, conf.Admin.Username, conf.Admin.Password)
  40. if err != nil {
  41. log.Println(err)
  42. }
  43. }
  44. func (t *testSuite) AfterAll() {
  45. ldap.Close()
  46. }
  47. func (t *testSuite) TestSyncUsers() {
  48. syncJob := sync.NewSyncJob(conf)
  49. teachers, err := karmen.GetTeachers()
  50. t.Nil(err)
  51. entries, err := ldap.Users("ou=Teachers,ou=People,dc=foo,dc=org")
  52. t.Nil(err)
  53. users := make([]orm.User, 0)
  54. for _, teacher := range teachers {
  55. users = append(users, teacher)
  56. }
  57. result, err := syncJob.SyncUsers(ldap, karmen, entries, users)
  58. t.Nil(err)
  59. if !t.Failed() {
  60. t.Equal(len(result.Added), 11)
  61. t.Equal(len(result.Updated), 0)
  62. t.Equal(len(result.Removed), 1)
  63. t.Equal(result.Removed[0], "cn=John DOE,ou=Teachers,ou=People,dc=foo,dc=org")
  64. }
  65. // Run sync two times should result in no updating
  66. teachers, err = karmen.GetTeachers()
  67. t.Nil(err)
  68. entries, err = ldap.Users("ou=Teachers,ou=People,dc=foo,dc=org")
  69. t.Nil(err)
  70. users = make([]orm.User, 0)
  71. for _, teacher := range teachers {
  72. users = append(users, teacher)
  73. }
  74. result, err = syncJob.SyncUsers(ldap, karmen, entries, users)
  75. t.Nil(err)
  76. if !t.Failed() {
  77. t.Equal(len(result.Added), 0)
  78. t.Equal(len(result.Updated), 0)
  79. t.Equal(len(result.Removed), 0)
  80. }
  81. // Update user and test LDAP sync
  82. user := teachers[0]
  83. user.SetRegenerate(true)
  84. err = karmen.UpdateUser(user)
  85. t.Nil(err)
  86. teachers, err = karmen.GetTeachers()
  87. t.Nil(err)
  88. entries, err = ldap.Users("ou=Teachers,ou=People,dc=foo,dc=org")
  89. t.Nil(err)
  90. users = make([]orm.User, 0)
  91. for _, teacher := range teachers {
  92. users = append(users, teacher)
  93. }
  94. result, err = syncJob.SyncUsers(ldap, karmen, entries, users)
  95. t.Nil(err)
  96. if !t.Failed() {
  97. t.Equal(len(result.Added), 0)
  98. t.Equal(len(result.Updated), 1)
  99. t.Equal(len(result.Removed), 0)
  100. }
  101. // Sync administratives
  102. administratives, err := karmen.GetAdministratives()
  103. t.Nil(err)
  104. entries, err = ldap.Users("ou=Administratives,ou=People,dc=foo,dc=org")
  105. t.Nil(err)
  106. users = make([]orm.User, 0)
  107. for _, administrative := range administratives {
  108. users = append(users, administrative)
  109. }
  110. result, err = syncJob.SyncUsers(ldap, karmen, entries, users)
  111. t.Nil(err)
  112. if !t.Failed() {
  113. t.Equal(2, len(result.Added))
  114. t.Equal(0, len(result.Updated))
  115. t.Equal(0, len(result.Removed))
  116. }
  117. }
  118. func (t *testSuite) TestSyncGroup() {
  119. syncJob := sync.NewSyncJob(conf)
  120. teachers, err := karmen.GetTeachers()
  121. t.Nil(err)
  122. users := make([]orm.User, 0)
  123. for _, teacher := range teachers {
  124. users = append(users, teacher)
  125. }
  126. result, err := syncJob.SyncGroup(ldap, users, "cn=Teachers")
  127. t.Nil(err)
  128. if !t.Failed() {
  129. t.Equal(11, len(result.Added))
  130. t.Equal(0, len(result.Updated))
  131. t.Equal(1, len(result.Removed))
  132. }
  133. }