forked from TrueCloudLab/distribution
77e69b9cf3
Signed-off-by: Olivier Gambier <olivier@docker.com>
150 lines
4 KiB
Go
150 lines
4 KiB
Go
// Copyright 2014 Google Inc. All Rights Reserved.
|
|
//
|
|
// Licensed 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 storage_test
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"log"
|
|
"testing"
|
|
|
|
"golang.org/x/net/context"
|
|
"golang.org/x/oauth2"
|
|
"golang.org/x/oauth2/google"
|
|
"google.golang.org/cloud"
|
|
"google.golang.org/cloud/storage"
|
|
)
|
|
|
|
// TODO(jbd): Remove after Go 1.4.
|
|
// Related to https://codereview.appspot.com/107320046
|
|
func TestA(t *testing.T) {}
|
|
|
|
func Example_auth() context.Context {
|
|
// Initialize an authorized context with Google Developers Console
|
|
// JSON key. Read the google package examples to learn more about
|
|
// different authorization flows you can use.
|
|
// http://godoc.org/golang.org/x/oauth2/google
|
|
jsonKey, err := ioutil.ReadFile("/path/to/json/keyfile.json")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
conf, err := google.JWTConfigFromJSON(
|
|
jsonKey,
|
|
storage.ScopeFullControl,
|
|
)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
ctx := cloud.NewContext("project-id", conf.Client(oauth2.NoContext))
|
|
// Use the context (see other examples)
|
|
return ctx
|
|
}
|
|
|
|
func ExampleListObjects() {
|
|
ctx := Example_auth()
|
|
|
|
var query *storage.Query
|
|
for {
|
|
// If you are using this package on App Engine Managed VMs runtime,
|
|
// you can init a bucket client with your app's default bucket name.
|
|
// See http://godoc.org/google.golang.org/appengine/file#DefaultBucketName.
|
|
objects, err := storage.ListObjects(ctx, "bucketname", query)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
for _, obj := range objects.Results {
|
|
log.Printf("object name: %s, size: %v", obj.Name, obj.Size)
|
|
}
|
|
// if there are more results, objects.Next
|
|
// will be non-nil.
|
|
query = objects.Next
|
|
if query == nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
log.Println("paginated through all object items in the bucket you specified.")
|
|
}
|
|
|
|
func ExampleNewReader() {
|
|
ctx := Example_auth()
|
|
|
|
rc, err := storage.NewReader(ctx, "bucketname", "filename1")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
slurp, err := ioutil.ReadAll(rc)
|
|
rc.Close()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Println("file contents:", slurp)
|
|
}
|
|
|
|
func ExampleNewWriter() {
|
|
ctx := Example_auth()
|
|
|
|
wc := storage.NewWriter(ctx, "bucketname", "filename1")
|
|
wc.ContentType = "text/plain"
|
|
wc.ACL = []storage.ACLRule{{storage.AllUsers, storage.RoleReader}}
|
|
if _, err := wc.Write([]byte("hello world")); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err := wc.Close(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Println("updated object:", wc.Object())
|
|
}
|
|
|
|
func ExampleCopyObject() {
|
|
ctx := Example_auth()
|
|
|
|
o, err := storage.CopyObject(ctx, "bucketname", "file1", "another-bucketname", "file2", nil)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
log.Println("copied file:", o)
|
|
}
|
|
|
|
func ExampleDeleteObject() {
|
|
// To delete multiple objects in a bucket, first ListObjects then delete them.
|
|
ctx := Example_auth()
|
|
|
|
// If you are using this package on App Engine Managed VMs runtime,
|
|
// you can init a bucket client with your app's default bucket name.
|
|
// See http://godoc.org/google.golang.org/appengine/file#DefaultBucketName.
|
|
const bucket = "bucketname"
|
|
|
|
var query *storage.Query // Set up query as desired.
|
|
for {
|
|
objects, err := storage.ListObjects(ctx, bucket, query)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
for _, obj := range objects.Results {
|
|
log.Printf("deleting object name: %q, size: %v", obj.Name, obj.Size)
|
|
if err := storage.DeleteObject(ctx, bucket, obj.Name); err != nil {
|
|
log.Fatalf("unable to delete %q: %v", obj.Name, err)
|
|
}
|
|
}
|
|
// if there are more results, objects.Next will be non-nil.
|
|
query = objects.Next
|
|
if query == nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
log.Println("deleted all object items in the bucket you specified.")
|
|
}
|