locks_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package fileutil
  2. import (
  3. "os"
  4. "path/filepath"
  5. "testing"
  6. )
  7. // Make sure read works on file created without locking logic
  8. func TestReadLocked(t *testing.T) {
  9. toWrite := "hello world"
  10. dir := t.TempDir()
  11. filename := filepath.Join(dir, "test.txt")
  12. if err := os.WriteFile(filename, []byte(toWrite), 0600); err != nil {
  13. t.Fatalf("failed to write test data: %s", err)
  14. }
  15. read, err := ReadLocked(filename)
  16. if err != nil {
  17. t.Fatalf("Failed to read: %s", err)
  18. }
  19. sread := string(read)
  20. if toWrite != sread {
  21. t.Errorf("Expected read data to be '%s' but was '%s'", toWrite, sread)
  22. }
  23. }
  24. // Does not test concurrency, just makes sure the basic read write functionality
  25. // works
  26. func TestRWLocked(t *testing.T) {
  27. toWrite := "hello world"
  28. dir := t.TempDir()
  29. filename := filepath.Join(dir, "test.txt")
  30. if _, err := WriteLocked(filename, []byte(toWrite)); err != nil {
  31. t.Fatalf("Failed to write: %s", err)
  32. }
  33. read, err := ReadLocked(filename)
  34. if err != nil {
  35. t.Fatalf("Failed to read: %s", err)
  36. }
  37. sread := string(read)
  38. if toWrite != sread {
  39. t.Errorf("Expected read data to be '%s' but was '%s'", toWrite, sread)
  40. }
  41. }
  42. func TestReadLockedFDMiddlePosition(t *testing.T) {
  43. toWrite := "hello world"
  44. dir := t.TempDir()
  45. filename := filepath.Join(dir, "test.txt")
  46. if err := os.WriteFile(filename, []byte(toWrite), 0600); err != nil {
  47. t.Fatalf("failed to write test data: %s", err)
  48. }
  49. f, err := os.Open(filename)
  50. if err != nil {
  51. t.Fatalf("opening after write: %s", err)
  52. }
  53. if _, err := f.Seek(3, 0); err != nil {
  54. t.Fatalf("seeking: %s", err)
  55. }
  56. read, err := ReadLockedFD(f)
  57. if err != nil {
  58. t.Fatalf("Failed to read: %s", err)
  59. }
  60. sread := string(read)
  61. if toWrite != sread {
  62. t.Errorf("Expected read data to be '%s' but was '%s'", toWrite, sread)
  63. }
  64. }
  65. func TestWriteLockedFDMiddlePosition(t *testing.T) {
  66. toWrite := "hello world"
  67. toWriteOver := "goodbye land"
  68. dir := t.TempDir()
  69. filename := filepath.Join(dir, "test.txt")
  70. if err := os.WriteFile(filename, []byte(toWrite), 0600); err != nil {
  71. t.Fatalf("failed to write test data: %s", err)
  72. }
  73. f, err := os.OpenFile(filename, os.O_RDWR, 0600)
  74. if err != nil {
  75. t.Fatalf("opening after write: %s", err)
  76. }
  77. if _, err := f.Seek(3, 0); err != nil {
  78. t.Fatalf("seeking: %s", err)
  79. }
  80. if _, err := WriteLockedFD(f, []byte(toWriteOver)); err != nil {
  81. t.Fatalf("writing over: %s", err)
  82. }
  83. read, err := ReadLockedFD(f)
  84. if err != nil {
  85. t.Fatalf("Failed to read: %s", err)
  86. }
  87. sread := string(read)
  88. if toWriteOver != sread {
  89. t.Errorf("Expected read data to be '%s' but was '%s'", toWriteOver, sread)
  90. }
  91. }