gitea源码

adopt_test.go 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package repository
  4. import (
  5. "os"
  6. "path"
  7. "path/filepath"
  8. "testing"
  9. "code.gitea.io/gitea/models/db"
  10. repo_model "code.gitea.io/gitea/models/repo"
  11. "code.gitea.io/gitea/models/unittest"
  12. user_model "code.gitea.io/gitea/models/user"
  13. "code.gitea.io/gitea/modules/setting"
  14. "code.gitea.io/gitea/modules/util"
  15. "github.com/stretchr/testify/assert"
  16. )
  17. func TestCheckUnadoptedRepositories_Add(t *testing.T) {
  18. start := 10
  19. end := 20
  20. unadopted := &unadoptedRepositories{
  21. start: start,
  22. end: end,
  23. index: 0,
  24. }
  25. total := 30
  26. for range total {
  27. unadopted.add("something")
  28. }
  29. assert.Equal(t, total, unadopted.index)
  30. assert.Len(t, unadopted.repositories, end-start)
  31. }
  32. func TestCheckUnadoptedRepositories(t *testing.T) {
  33. assert.NoError(t, unittest.PrepareTestDatabase())
  34. //
  35. // Non existent user
  36. //
  37. unadopted := &unadoptedRepositories{start: 0, end: 100}
  38. err := checkUnadoptedRepositories(t.Context(), "notauser", []string{"repo"}, unadopted)
  39. assert.NoError(t, err)
  40. assert.Empty(t, unadopted.repositories)
  41. //
  42. // Unadopted repository is returned
  43. // Existing (adopted) repository is not returned
  44. //
  45. userName := "user2"
  46. repoName := "repo2"
  47. unadoptedRepoName := "unadopted"
  48. unadopted = &unadoptedRepositories{start: 0, end: 100}
  49. err = checkUnadoptedRepositories(t.Context(), userName, []string{repoName, unadoptedRepoName}, unadopted)
  50. assert.NoError(t, err)
  51. assert.Equal(t, []string{path.Join(userName, unadoptedRepoName)}, unadopted.repositories)
  52. //
  53. // Existing (adopted) repository is not returned
  54. //
  55. unadopted = &unadoptedRepositories{start: 0, end: 100}
  56. err = checkUnadoptedRepositories(t.Context(), userName, []string{repoName}, unadopted)
  57. assert.NoError(t, err)
  58. assert.Empty(t, unadopted.repositories)
  59. assert.Equal(t, 0, unadopted.index)
  60. }
  61. func TestListUnadoptedRepositories_ListOptions(t *testing.T) {
  62. assert.NoError(t, unittest.PrepareTestDatabase())
  63. username := "user2"
  64. unadoptedList := []string{path.Join(username, "unadopted1"), path.Join(username, "unadopted2")}
  65. for _, unadopted := range unadoptedList {
  66. _ = os.Mkdir(filepath.Join(setting.RepoRootPath, unadopted+".git"), 0o755)
  67. }
  68. opts := db.ListOptions{Page: 1, PageSize: 1}
  69. repoNames, count, err := ListUnadoptedRepositories(t.Context(), "", &opts)
  70. assert.NoError(t, err)
  71. assert.Equal(t, 2, count)
  72. assert.Equal(t, unadoptedList[0], repoNames[0])
  73. opts = db.ListOptions{Page: 2, PageSize: 1}
  74. repoNames, count, err = ListUnadoptedRepositories(t.Context(), "", &opts)
  75. assert.NoError(t, err)
  76. assert.Equal(t, 2, count)
  77. assert.Equal(t, unadoptedList[1], repoNames[0])
  78. }
  79. func TestAdoptRepository(t *testing.T) {
  80. assert.NoError(t, unittest.PrepareTestDatabase())
  81. user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
  82. // a successful adopt
  83. destDir := filepath.Join(setting.RepoRootPath, user2.Name, "test-adopt.git")
  84. assert.NoError(t, unittest.SyncDirs(filepath.Join(setting.RepoRootPath, user2.Name, "repo1.git"), destDir))
  85. adoptedRepo, err := AdoptRepository(t.Context(), user2, user2, CreateRepoOptions{Name: "test-adopt"})
  86. assert.NoError(t, err)
  87. repoTestAdopt := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: "test-adopt"})
  88. assert.Equal(t, "sha1", repoTestAdopt.ObjectFormatName)
  89. // just delete the adopted repo's db records
  90. err = deleteFailedAdoptRepository(adoptedRepo.ID)
  91. assert.NoError(t, err)
  92. unittest.AssertNotExistsBean(t, &repo_model.Repository{OwnerName: user2.Name, Name: "test-adopt"})
  93. // a failed adopt because some mock data
  94. // remove the hooks directory and create a file so that we cannot create the hooks successfully
  95. _ = os.RemoveAll(filepath.Join(destDir, "hooks", "update.d"))
  96. assert.NoError(t, os.WriteFile(filepath.Join(destDir, "hooks", "update.d"), []byte("tests"), os.ModePerm))
  97. adoptedRepo, err = AdoptRepository(t.Context(), user2, user2, CreateRepoOptions{Name: "test-adopt"})
  98. assert.Error(t, err)
  99. assert.Nil(t, adoptedRepo)
  100. unittest.AssertNotExistsBean(t, &repo_model.Repository{OwnerName: user2.Name, Name: "test-adopt"})
  101. exist, err := util.IsExist(repo_model.RepoPath(user2.Name, "test-adopt"))
  102. assert.NoError(t, err)
  103. assert.True(t, exist) // the repository should be still in the disk
  104. }