From dc04a8bed87fd57b75381c6da568e04765bf2d9b Mon Sep 17 00:00:00 2001 From: Kirhaku <38072436+Kirhaku@users.noreply.github.com> Date: Sat, 7 Jan 2023 19:50:12 +0800 Subject: [PATCH] add BZip2Compressor (#444) add bzip2 --- go.mod | 1 + go.sum | 6 ++++ pkg/compressor/bzip2_compress.go | 49 +++++++++++++++++++++++++++ pkg/compressor/bzip2_compress_test.go | 40 ++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 pkg/compressor/bzip2_compress_test.go diff --git a/go.mod b/go.mod index 584f73ca2..ada4213ef 100644 --- a/go.mod +++ b/go.mod @@ -50,6 +50,7 @@ require ( github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/creasty/defaults v1.5.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dsnet/compress v0.0.1 // indirect github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5 // indirect github.com/dubbogo/grpc-go v1.42.10 // indirect github.com/dubbogo/triple v1.1.9 // indirect diff --git a/go.sum b/go.sum index 85e778226..86187c3e9 100644 --- a/go.sum +++ b/go.sum @@ -182,6 +182,9 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5 h1:XoR8SSVziXe698dt4uZYDfsmHpKLemqAgFyndQsq5Kw= github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= @@ -538,8 +541,10 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/knadh/koanf v1.4.3 h1:rSJcSH5LSFhvzBRsAYfT3k7eLP0I4UxeZqjtAatk+wc= github.com/knadh/koanf v1.4.3/go.mod h1:5FAkuykKXZvLqhAbP4peWgM5CTcZmn7L1d27k/a+kfg= github.com/koding/multiconfig v0.0.0-20171124222453-69c27309b2d7/go.mod h1:Y2SaZf2Rzd0pXkLVhLlCiAXFCLSXAIbTKDivVgff/AM= @@ -834,6 +839,7 @@ github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6 github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= diff --git a/pkg/compressor/bzip2_compress.go b/pkg/compressor/bzip2_compress.go index d1eea9879..ad2c99158 100644 --- a/pkg/compressor/bzip2_compress.go +++ b/pkg/compressor/bzip2_compress.go @@ -16,3 +16,52 @@ */ package compressor + +import ( + "bytes" + "io/ioutil" + + "github.com/dsnet/compress/bzip2" +) + +type Bzip2 struct { +} + +// Compress Bzip2 compress +func (g *Bzip2) Compress(b []byte) ([]byte, error) { + var buffer bytes.Buffer + gz, err := bzip2.NewWriter(&buffer, &bzip2.WriterConfig{Level: bzip2.DefaultCompression}) + if err != nil { + return nil, err + } + + if _, err := gz.Write(b); err != nil { + return nil, err + } + + if err := gz.Close(); err != nil { + return nil, err + } + + return buffer.Bytes(), nil +} + +// Decompress Bzip2 decompress +func (g *Bzip2) Decompress(in []byte) ([]byte, error) { + reader, err := bzip2.NewReader(bytes.NewReader(in), nil) + if err != nil { + return nil, err + } + if err = reader.Close(); err != nil { + return nil, err + } + output, err := ioutil.ReadAll(reader) + if err != nil { + return nil, err + } + return output, nil +} + +func (g *Bzip2) GetCompressorType() CompressorType { + return CompressorBzip2 +} diff --git a/pkg/compressor/bzip2_compress_test.go b/pkg/compressor/bzip2_compress_test.go new file mode 100644 index 000000000..4dd780c22 --- /dev/null +++ b/pkg/compressor/bzip2_compress_test.go @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package compressor + +import ( + "strings" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestBzip2Compress(t *testing.T) { + str := strings.Repeat(" bzip2 ", 100) + + b := &Bzip2{} + compressRes, err := b.Compress([]byte(str)) + assert.NoError(t, err) + t.Logf("compress res: %v", string(compressRes)) + + decompressRes, err := b.Decompress(compressRes) + assert.NoError(t, err) + assert.Equal(t, str, string(decompressRes)) + + t.Logf("decompress res: %v", string(decompressRes)) +}