diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2022-01-17 23:04:30 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-17 23:04:30 -0800 |
| commit | e271721d4ec04365b15be96d009e20cc6f64317e (patch) | |
| tree | 233f7e5b9b96abde346504474d9e5d739d0ff3b3 /weed/filesys/page_writer/upload_pipeline_test.go | |
| parent | 1bd6d289d48ea3ae3c1461bf090ce0ffa6f2505f (diff) | |
| parent | b2acfd75e9155d49f32eea8d6247d0c8661ec998 (diff) | |
| download | seaweedfs-e271721d4ec04365b15be96d009e20cc6f64317e.tar.xz seaweedfs-e271721d4ec04365b15be96d009e20cc6f64317e.zip | |
Merge pull request #2596 from chrislusf/memory_chunked_write
fix concurrency issues found in tests
Diffstat (limited to 'weed/filesys/page_writer/upload_pipeline_test.go')
| -rw-r--r-- | weed/filesys/page_writer/upload_pipeline_test.go | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/weed/filesys/page_writer/upload_pipeline_test.go b/weed/filesys/page_writer/upload_pipeline_test.go new file mode 100644 index 000000000..d17948251 --- /dev/null +++ b/weed/filesys/page_writer/upload_pipeline_test.go @@ -0,0 +1,47 @@ +package page_writer + +import ( + "github.com/chrislusf/seaweedfs/weed/util" + "testing" +) + +func TestUploadPipeline(t *testing.T) { + + uploadPipeline := NewUploadPipeline("", nil, 2*1024*1024, nil) + + writeRange(uploadPipeline, 0, 131072) + writeRange(uploadPipeline, 131072, 262144) + writeRange(uploadPipeline, 262144, 1025536) + + confirmRange(t, uploadPipeline, 0, 1025536) + + writeRange(uploadPipeline, 1025536, 1296896) + + confirmRange(t, uploadPipeline, 1025536, 1296896) + + writeRange(uploadPipeline, 1296896, 2162688) + + confirmRange(t, uploadPipeline, 1296896, 2162688) + + confirmRange(t, uploadPipeline, 1296896, 2162688) +} + +// startOff and stopOff must be divided by 4 +func writeRange(uploadPipeline *UploadPipeline, startOff, stopOff int64) { + p := make([]byte, 4) + for i := startOff / 4; i < stopOff/4; i += 4 { + util.Uint32toBytes(p, uint32(i)) + uploadPipeline.SaveDataAt(p, i) + } +} + +func confirmRange(t *testing.T, uploadPipeline *UploadPipeline, startOff, stopOff int64) { + p := make([]byte, 4) + for i := startOff; i < stopOff/4; i += 4 { + uploadPipeline.MaybeReadDataAt(p, i) + x := util.BytesToUint32(p) + if x != uint32(i) { + t.Errorf("expecting %d found %d at offset [%d,%d)", i, x, i, i+4) + } + } +} |
