Skip to content

Instantly share code, notes, and snippets.

@fd0
Last active December 30, 2015 14:44
Show Gist options
  • Save fd0/7dbbef2dd5e78bbf8723 to your computer and use it in GitHub Desktop.
Save fd0/7dbbef2dd5e78bbf8723 to your computer and use it in GitHub Desktop.
package main
import (
"bytes"
"fmt"
"io"
"log"
"time"
crand "crypto/rand"
"math/rand"
"github.com/davecgh/go-spew/spew"
"github.com/minio/minio-go"
)
const bucket = "minio-s3-bug-test"
const path = "testfile2"
func main() {
rand.Seed(time.Now().Unix())
// connect and make sure bucket exists
client, err := minio.New("play.minio.io:9000", "foo", "secret", false)
err = client.MakeBucket(bucket, "", "")
if err != nil {
fmt.Printf("bucket create error: %v\n", err)
}
// generate data
buf := make([]byte, rand.Intn(1<<19))
fmt.Printf("len = %d\n", len(buf))
_, err = io.ReadFull(crand.Reader, buf)
if err != nil {
log.Fatal(err)
}
// save the data
n, err := client.PutObject(bucket, path, bytes.NewReader(buf), int64(len(buf)), "binary/octet-stream")
fmt.Printf("n %v, err %v\n", n, err)
if err != nil {
log.Fatal(err)
}
if n != int64(len(buf)) {
log.Fatalf("number of bytes does not match, want %v, got %v\n", len(buf), n)
}
// read the data back
rda, stat, err := client.GetObjectPartial(bucket, path)
fmt.Printf("size %v, err %v\n", stat.Size, err)
if stat.Size != int64(len(buf)) {
log.Fatalf("number of bytes in stat does not match, want %v, got %v\n",
len(buf), stat.Size)
}
offset := int64(32000)
// read directly
buf2 := make([]byte, 512)
fmt.Printf("ReadAt(len(buf2) %v, offset %v)\n", len(buf2), offset)
m, err := rda.ReadAt(buf2, offset)
fmt.Printf("m %v, err %v\n", m, err)
spew.Dump(buf[offset : offset+512])
spew.Dump(buf2)
if !bytes.Equal(buf[offset:offset+512], buf2) {
log.Fatal("wrong bytes returned")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment