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  }