mirror of
https://github.com/versity/versitygw.git
synced 2026-01-03 02:25:16 +00:00
* feat: test CLI command set up for client side testing, test cases are corresponded with subcommands, added full-flow test case * fix: TLS configuration removed * feat: Added benchmark test for client side testing in the CLI * fix: Removed unused variables * fix: fixed staticcheck error
85 lines
1.3 KiB
Go
85 lines
1.3 KiB
Go
package integration
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"crypto/sha256"
|
|
"hash"
|
|
"io"
|
|
)
|
|
|
|
type RReader struct {
|
|
buf []byte
|
|
dataleft int
|
|
hash hash.Hash
|
|
}
|
|
|
|
func NewDataReader(totalsize, bufsize int) *RReader {
|
|
b := make([]byte, bufsize)
|
|
rand.Read(b)
|
|
return &RReader{
|
|
buf: b,
|
|
dataleft: totalsize,
|
|
hash: sha256.New(),
|
|
}
|
|
}
|
|
|
|
func (r *RReader) Read(p []byte) (int, error) {
|
|
n := min(len(p), len(r.buf), r.dataleft)
|
|
r.dataleft -= n
|
|
err := error(nil)
|
|
if n == 0 {
|
|
err = io.EOF
|
|
}
|
|
r.hash.Write(r.buf[:n])
|
|
return copy(p, r.buf[:n]), err
|
|
}
|
|
|
|
func (r *RReader) Sum() []byte {
|
|
return r.hash.Sum(nil)
|
|
}
|
|
|
|
type ZReader struct {
|
|
buf []byte
|
|
dataleft int
|
|
}
|
|
|
|
func NewZeroReader(totalsize, bufsize int) *ZReader {
|
|
b := make([]byte, bufsize)
|
|
return &ZReader{buf: b, dataleft: totalsize}
|
|
}
|
|
|
|
func (r *ZReader) Read(p []byte) (int, error) {
|
|
n := min(len(p), len(r.buf), r.dataleft)
|
|
r.dataleft -= n
|
|
err := error(nil)
|
|
if n == 0 {
|
|
err = io.EOF
|
|
}
|
|
return copy(p, r.buf[:n]), err
|
|
}
|
|
|
|
func min(values ...int) int {
|
|
if len(values) == 0 {
|
|
return 0
|
|
}
|
|
|
|
min := values[0]
|
|
for _, v := range values {
|
|
if v < min {
|
|
min = v
|
|
}
|
|
}
|
|
|
|
return min
|
|
}
|
|
|
|
type NW struct{}
|
|
|
|
func NewNullWriter() NW {
|
|
return NW{}
|
|
}
|
|
|
|
func (NW) WriteAt(p []byte, off int64) (n int, err error) {
|
|
return len(p), nil
|
|
}
|