github.com/mithrandie/csvq@v1.18.1/lib/file/handler_test.go (about) 1 package file 2 3 import ( 4 "context" 5 "testing" 6 ) 7 8 func TestHandler(t *testing.T) { 9 fileForRead := GetTestFilePath("open.txt") 10 fileForUpdate := GetTestFilePath("update.txt") 11 fileForCreate := GetTestFilePath("create.txt") 12 13 doneCtx, cancel := context.WithCancel(context.Background()) 14 cancel() 15 16 ctx := context.Background() 17 container := NewContainer() 18 defer func() { 19 if err := container.CloseAllWithErrors(); err != nil { 20 t.Log(err) 21 } 22 }() 23 24 h, err := container.CreateHandlerWithoutLock(ctx, fileForCreate, waitTimeoutForTests, retryDelayForTests) 25 if err == nil { 26 t.Fatalf("no error, want NotExistError") 27 } 28 if _, ok := err.(*NotExistError); !ok { 29 t.Fatalf("error = %#v, want NotExistError", err) 30 } 31 _ = container.Close(h) 32 33 h, err = container.CreateHandlerWithoutLock(ctx, fileForRead, waitTimeoutForTests, retryDelayForTests) 34 if err != nil { 35 t.Fatalf("unexpected error %#v", err) 36 } 37 _ = container.Close(h) 38 39 rh, err := container.CreateHandlerForRead(doneCtx, fileForRead, waitTimeoutForTests, retryDelayForTests) 40 if err == nil { 41 t.Fatalf("no error, want ContextCanceled") 42 } 43 if _, ok := err.(*ContextCanceled); !ok { 44 t.Fatalf("error = %#v, want ContextCanceled", err) 45 } 46 _ = container.Close(rh) 47 48 rh, err = container.CreateHandlerForRead(ctx, fileForCreate, waitTimeoutForTests, retryDelayForTests) 49 if err == nil { 50 t.Fatalf("no error, want NotExistError") 51 } 52 if _, ok := err.(*NotExistError); !ok { 53 t.Fatalf("error = %#v, want NotExistError", err) 54 } 55 56 rh, err = container.CreateHandlerForRead(ctx, fileForRead, waitTimeoutForTests, retryDelayForTests) 57 if err != nil { 58 t.Fatalf("error = %#v, expect no error", err) 59 } 60 _, err = rh.FileForUpdate() 61 if err == nil { 62 t.Fatalf("no error, want error") 63 } 64 65 _, err = container.CreateHandlerForRead(ctx, fileForRead, waitTimeoutForTests, retryDelayForTests) 66 if err == nil { 67 t.Fatalf("no error, want error") 68 } 69 _ = container.Close(rh) 70 71 uh, err := container.CreateHandlerForUpdate(ctx, fileForCreate, waitTimeoutForTests, retryDelayForTests) 72 if err == nil { 73 t.Fatalf("no error, want NotExistError") 74 } 75 if _, ok := err.(*NotExistError); !ok { 76 t.Fatalf("error = %#v, want NotExistError", err) 77 } 78 79 ch, err := container.CreateHandlerForCreate(fileForRead) 80 if err == nil { 81 t.Fatalf("no error, want AlreadyExistError") 82 } 83 if _, ok := err.(*AlreadyExistError); !ok { 84 t.Fatalf("error = %#v, want AlreadyExistError", err) 85 } 86 87 ch, err = container.CreateHandlerForCreate(fileForCreate) 88 if err != nil { 89 t.Fatalf("error = %#v, expect no error", err) 90 } 91 92 if ch.File().Name() != fileForCreate { 93 t.Fatalf("filename to read = %q, expect %q", ch.File().Name(), fileForCreate) 94 } 95 96 fp, err := ch.FileForUpdate() 97 if err != nil { 98 t.Fatalf("unexpected error: %s", err) 99 } 100 if fp.Name() != fileForCreate { 101 t.Fatalf("filename to update = %q, expect %q", fp.Name(), fileForCreate) 102 } 103 104 rh, err = container.CreateHandlerForRead(ctx, fileForCreate, waitTimeoutForTests, retryDelayForTests) 105 if err == nil { 106 t.Fatalf("no error, want TimeoutError") 107 } 108 if _, ok := err.(*TimeoutError); !ok { 109 t.Fatalf("error = %#v, want TimeoutError", err) 110 } 111 112 _, err = container.CreateHandlerForCreate(fileForCreate) 113 if err == nil { 114 t.Fatalf("no error, want AlreadyExistError") 115 } 116 if _, ok := err.(*AlreadyExistError); !ok { 117 t.Fatalf("error = %#v, want AlreadyExistError", err) 118 } 119 120 _ = container.Commit(ch) 121 122 rh, err = container.CreateHandlerForRead(ctx, fileForCreate, waitTimeoutForTests, retryDelayForTests) 123 if err != nil { 124 t.Fatalf("error = %#v, expect no error", err) 125 } 126 _ = container.Close(rh) 127 128 uh, err = container.CreateHandlerForUpdate(ctx, fileForUpdate, waitTimeoutForTests, retryDelayForTests) 129 if err != nil { 130 t.Fatalf("error = %#v, expect no error", err) 131 } 132 133 if uh.File().Name() != fileForUpdate { 134 t.Fatalf("filename to read = %q, expect %q", uh.File().Name(), fileForUpdate) 135 } 136 137 fp, err = uh.FileForUpdate() 138 if err != nil { 139 t.Fatalf("unexpected error: %s", err) 140 } 141 if fp.Name() != TempFilePath(fileForUpdate) { 142 t.Fatalf("filename to update = %q, expect %q", fp.Name(), TempFilePath(fileForUpdate)) 143 } 144 145 rh, err = container.CreateHandlerForRead(ctx, fileForUpdate, waitTimeoutForTests, retryDelayForTests) 146 if err == nil { 147 t.Fatalf("no error, want TimeoutError") 148 } 149 if _, ok := err.(*TimeoutError); !ok { 150 t.Fatalf("error = %#v, want TimeoutError", err) 151 } 152 153 _, err = container.CreateHandlerForUpdate(ctx, fileForUpdate, waitTimeoutForTests, retryDelayForTests) 154 if err == nil { 155 t.Fatalf("no error, want TimeoutError") 156 } 157 if _, ok := err.(*TimeoutError); !ok { 158 t.Fatalf("error = %#v, want TimeoutError", err) 159 } 160 161 _ = container.Commit(uh) 162 163 rh, err = container.CreateHandlerForRead(ctx, fileForUpdate, waitTimeoutForTests, retryDelayForTests) 164 if err != nil { 165 t.Fatalf("error = %#v, expect no error", err) 166 } 167 }