| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package fileutil
- import (
- "os"
- "path/filepath"
- "testing"
- )
- // Make sure read works on file created without locking logic
- func TestReadLocked(t *testing.T) {
- toWrite := "hello world"
- dir := t.TempDir()
- filename := filepath.Join(dir, "test.txt")
- if err := os.WriteFile(filename, []byte(toWrite), 0600); err != nil {
- t.Fatalf("failed to write test data: %s", err)
- }
- read, err := ReadLocked(filename)
- if err != nil {
- t.Fatalf("Failed to read: %s", err)
- }
- sread := string(read)
- if toWrite != sread {
- t.Errorf("Expected read data to be '%s' but was '%s'", toWrite, sread)
- }
- }
- // Does not test concurrency, just makes sure the basic read write functionality
- // works
- func TestRWLocked(t *testing.T) {
- toWrite := "hello world"
- dir := t.TempDir()
- filename := filepath.Join(dir, "test.txt")
- if _, err := WriteLocked(filename, []byte(toWrite)); err != nil {
- t.Fatalf("Failed to write: %s", err)
- }
- read, err := ReadLocked(filename)
- if err != nil {
- t.Fatalf("Failed to read: %s", err)
- }
- sread := string(read)
- if toWrite != sread {
- t.Errorf("Expected read data to be '%s' but was '%s'", toWrite, sread)
- }
- }
- func TestReadLockedFDMiddlePosition(t *testing.T) {
- toWrite := "hello world"
- dir := t.TempDir()
- filename := filepath.Join(dir, "test.txt")
- if err := os.WriteFile(filename, []byte(toWrite), 0600); err != nil {
- t.Fatalf("failed to write test data: %s", err)
- }
- f, err := os.Open(filename)
- if err != nil {
- t.Fatalf("opening after write: %s", err)
- }
- if _, err := f.Seek(3, 0); err != nil {
- t.Fatalf("seeking: %s", err)
- }
- read, err := ReadLockedFD(f)
- if err != nil {
- t.Fatalf("Failed to read: %s", err)
- }
- sread := string(read)
- if toWrite != sread {
- t.Errorf("Expected read data to be '%s' but was '%s'", toWrite, sread)
- }
- }
- func TestWriteLockedFDMiddlePosition(t *testing.T) {
- toWrite := "hello world"
- toWriteOver := "goodbye land"
- dir := t.TempDir()
- filename := filepath.Join(dir, "test.txt")
- if err := os.WriteFile(filename, []byte(toWrite), 0600); err != nil {
- t.Fatalf("failed to write test data: %s", err)
- }
- f, err := os.OpenFile(filename, os.O_RDWR, 0600)
- if err != nil {
- t.Fatalf("opening after write: %s", err)
- }
- if _, err := f.Seek(3, 0); err != nil {
- t.Fatalf("seeking: %s", err)
- }
- if _, err := WriteLockedFD(f, []byte(toWriteOver)); err != nil {
- t.Fatalf("writing over: %s", err)
- }
- read, err := ReadLockedFD(f)
- if err != nil {
- t.Fatalf("Failed to read: %s", err)
- }
- sread := string(read)
- if toWriteOver != sread {
- t.Errorf("Expected read data to be '%s' but was '%s'", toWriteOver, sread)
- }
- }
|