王一之 e9c32c4118
Some checks failed
Release / deploy (push) Failing after 1m42s
docusaurus插件开发
2024-03-24 18:34:18 +08:00

105 lines
2.0 KiB
Go

package code
import (
"bufio"
"bytes"
"compress/gzip"
"crypto/md5"
"crypto/sha1"
"io"
"testing"
)
type WrapReader struct {
len int
r io.Reader
}
func (w *WrapReader) Read(p []byte) (int, error) {
n, err := w.r.Read(p)
w.len += n
return n, err
}
func TestReader(t *testing.T) {
file := bytes.NewBuffer([]byte("hello world"))
wr := WrapReader{len: 0, r: file}
_, _ = io.Copy(io.Discard, &wr)
t.Logf("文件长度: %d\n", wr.len)
}
func TestGzip(t *testing.T) {
file := bytes.NewBuffer([]byte("hello world"))
buf := bytes.NewBuffer(nil)
w := gzip.NewWriter(buf)
_, _ = io.Copy(w, file)
t.Logf("不Close文件长度: %d\n", buf.Len())
w.Close()
t.Logf("压缩后文件长度: %d\n", buf.Len())
}
func TestIOHash(t *testing.T) {
file := bytes.NewBuffer([]byte("hello world"))
md5 := md5.New()
sha1 := sha1.New()
r := io.TeeReader(file, io.MultiWriter(md5, sha1))
_, _ = io.Copy(io.Discard, r)
t.Logf("md5: %x\n", md5.Sum(nil))
t.Logf("sha1: %x\n", sha1.Sum(nil))
}
func TestLimitReader(t *testing.T) {
file := bytes.NewBuffer([]byte("hello world"))
lr := io.LimitReader(file, 5)
data, _ := io.ReadAll(lr)
t.Logf("%s\n", data)
}
func TestBufIo(t *testing.T) {
// 写入100M文件
file := bytes.NewBufferString("hello world\ngolang")
buf := bufio.NewReader(file)
for {
line, err := buf.ReadString('\n')
if err == io.EOF {
t.Logf("%s", line)
break
}
t.Logf("%s", line)
}
}
// 凯撒加密
type decode struct {
r io.Reader
}
func (d *decode) Read(p []byte) (int, error) {
// 读取数据
n, err := d.r.Read(p)
if err != nil {
if err != io.EOF {
return n, err
}
}
// 解密
for i := 0; i < n; i++ {
p[i]++
}
return n, err
}
func TestDecodePipe(t *testing.T) {
body := bytes.NewBuffer([]byte("gdkkn\u001Fvnqkc"))
r, w := io.Pipe()
defer r.Close()
go func() {
defer w.Close()
// 读取加密数据解密
_, _ = io.Copy(w, &decode{r: body})
}()
// 读取解密数据,保存文件
data, _ := io.ReadAll(r)
t.Logf("%s\n", data)
}