Skip to content

Instantly share code, notes, and snippets.

@magiconair
Last active December 16, 2015 06:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save magiconair/5390936 to your computer and use it in GitHub Desktop.
Save magiconair/5390936 to your computer and use it in GitHub Desktop.
package util
import (
"bytes"
"compress/gzip"
"io"
)
func Gunzip(src []byte) (dst []byte, err error) {
if src == nil {
return nil, nil
}
r, err := gzip.NewReader(bytes.NewReader(src))
if err != nil {
return nil, err
}
defer r.Close()
buf := new(bytes.Buffer)
_, err = io.Copy(buf, r)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}
func Gzip(src []byte) (dst []byte, err error) {
if src == nil {
return nil, nil
}
buf := new(bytes.Buffer)
w := gzip.NewWriter(buf)
if _, err := w.Write(src); err != nil {
return nil, err
}
if err = w.Close(); err != nil {
return nil, err
}
return buf.Bytes(), nil
}
package util
import (
"io/ioutil"
"labix.org/v1/pipe"
"os"
"testing"
)
func Test_GzipNil(t *testing.T) {
buf, err := Gzip(nil)
if err != nil {
t.Fatalf("Gzip: %v", err)
}
if buf != nil {
t.Fatalf("Expected 'nil', got %v", buf)
}
}
func Test_Gzip(t *testing.T) {
s := "This is a test"
buf, err := Gzip([]byte(s))
if err != nil {
t.Fatalf("Gzip: %s: %v", s, err)
}
f, err := ioutil.TempFile("/tmp", "test")
if err != nil {
t.Fatalf("TempFile: %v", err)
}
defer func() { os.Remove(f.Name()) }()
err = ioutil.WriteFile(f.Name(), buf, 0644)
if err != nil {
t.Fatalf("WriteFile: %v", err)
}
p := pipe.Line(pipe.Exec("gzip", "-dc", f.Name()))
output, err := pipe.CombinedOutput(p)
if err != nil {
t.Fatalf("pipe.Exec: %v", err)
}
if string(output) != s {
t.Fatalf("Expected '%s' but got '%s'", s, string(output))
}
}
func Test_GunzipNil(t *testing.T) {
buf, err := Gunzip(nil)
if err != nil {
t.Fatalf("Gunzip: %v", err)
}
if buf != nil {
t.Fatalf("Expected 'nil', got %v", buf)
}
}
func Test_Gunzip(t *testing.T) {
s := "This is a test"
f, err := ioutil.TempFile("/tmp", "test")
if err != nil {
t.Fatalf("TempFile: %v", err)
}
defer func() { os.Remove(f.Name()) }()
p := pipe.Line(
pipe.Echo(s),
pipe.Exec("gzip", "-c"),
pipe.WriteFile(f.Name(), 0644))
err = pipe.Run(p)
if err != nil {
t.Fatalf("pipe.Run: %v", err)
}
buf, err := ioutil.ReadFile(f.Name())
if err != nil {
t.Fatalf("ReadFile: %v", err)
}
output, err := Gunzip(buf)
if err != nil {
t.Fatalf("Gunzip: %v", err)
}
if string(output) != s {
t.Fatalf("Expected '%s' but got '%s'", s, string(output))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment