gitea源码

tempdir_test.go 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package tempdir
  4. import (
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. "testing"
  9. "time"
  10. "github.com/stretchr/testify/assert"
  11. )
  12. func TestTempDir(t *testing.T) {
  13. base := t.TempDir()
  14. t.Run("Create", func(t *testing.T) {
  15. td := New(base, "sub1/sub2") // make sure the sub dir supports "/" in the path
  16. assert.Equal(t, filepath.Join(base, "sub1", "sub2"), td.JoinPath())
  17. assert.Equal(t, filepath.Join(base, "sub1", "sub2/test"), td.JoinPath("test"))
  18. t.Run("MkdirTempRandom", func(t *testing.T) {
  19. s, cleanup, err := td.MkdirTempRandom("foo")
  20. assert.NoError(t, err)
  21. assert.True(t, strings.HasPrefix(s, filepath.Join(base, "sub1/sub2", "foo")))
  22. _, err = os.Stat(s)
  23. assert.NoError(t, err)
  24. cleanup()
  25. _, err = os.Stat(s)
  26. assert.ErrorIs(t, err, os.ErrNotExist)
  27. })
  28. t.Run("CreateTempFileRandom", func(t *testing.T) {
  29. f, cleanup, err := td.CreateTempFileRandom("foo", "bar")
  30. filename := f.Name()
  31. assert.NoError(t, err)
  32. assert.True(t, strings.HasPrefix(filename, filepath.Join(base, "sub1/sub2", "foo", "bar")))
  33. _, err = os.Stat(filename)
  34. assert.NoError(t, err)
  35. cleanup()
  36. _, err = os.Stat(filename)
  37. assert.ErrorIs(t, err, os.ErrNotExist)
  38. })
  39. t.Run("RemoveOutDated", func(t *testing.T) {
  40. fa1, _, err := td.CreateTempFileRandom("dir-a", "f1")
  41. assert.NoError(t, err)
  42. fa2, _, err := td.CreateTempFileRandom("dir-a", "f2")
  43. assert.NoError(t, err)
  44. _ = os.Chtimes(fa2.Name(), time.Now().Add(-time.Hour), time.Now().Add(-time.Hour))
  45. fb1, _, err := td.CreateTempFileRandom("dir-b", "f1")
  46. assert.NoError(t, err)
  47. _ = os.Chtimes(fb1.Name(), time.Now().Add(-time.Hour), time.Now().Add(-time.Hour))
  48. _, _, _ = fa1.Close(), fa2.Close(), fb1.Close()
  49. td.RemoveOutdated(time.Minute)
  50. _, err = os.Stat(fa1.Name())
  51. assert.NoError(t, err)
  52. _, err = os.Stat(fa2.Name())
  53. assert.ErrorIs(t, err, os.ErrNotExist)
  54. _, err = os.Stat(fb1.Name())
  55. assert.ErrorIs(t, err, os.ErrNotExist)
  56. })
  57. })
  58. t.Run("BaseNotExist", func(t *testing.T) {
  59. td := New(filepath.Join(base, "not-exist"), "sub")
  60. _, _, err := td.MkdirTempRandom("foo")
  61. assert.ErrorIs(t, err, os.ErrNotExist)
  62. })
  63. }