Skip to content

Commit

Permalink
feat(storage): add autoclass samples (#2737)
Browse files Browse the repository at this point in the history
Fixes #2707

Requires googleapis/google-cloud-go#6828
Tests pass locally with library feature support
  • Loading branch information
Cori1109 committed Nov 7, 2022
1 parent f311320 commit d9d955f
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 0 deletions.
39 changes: 39 additions & 0 deletions storage/buckets/buckets_test.go
Expand Up @@ -756,3 +756,42 @@ func TestRPO(t *testing.T) {
t.Fatalf("deleteBucket: %v", err)
}
}

// TestAutoclass tests the following samples:
// getAutoclass, setAutoclass
func TestAutoclass(t *testing.T) {
tc := testutil.SystemTest(t)
ctx := context.Background()

bucketName := testutil.UniqueBucketName(testPrefix)
defer testutil.DeleteBucketIfExists(ctx, client, bucketName)

// Test create new bucket with Autoclass enabled.
autoclassConfig := &storage.BucketAttrs{
Autoclass: &storage.Autoclass{
Enabled: true,
},
}
bucket := client.Bucket(bucketName)
if err := bucket.Create(ctx, tc.ProjectID, autoclassConfig); err != nil {
t.Fatalf("Bucket creation failed: %v", err)
}

// Test get Autoclass config.
buf := new(bytes.Buffer)
if err := getAutoclass(buf, bucketName); err != nil {
t.Errorf("getAutoclass: %#v", err)
}
if got, want := buf.String(), "Autoclass enabled was set to true"; !strings.Contains(got, want) {
t.Errorf("got %q, want %q", got, want)
}

// Test set Autoclass config.
value := false
if err := setAutoclass(buf, bucketName, value); err != nil {
t.Errorf("setAutoclass: %#v", err)
}
if got, want := buf.String(), "Autoclass enabled was set to false"; !strings.Contains(got, want) {
t.Errorf("got %q, want %q", got, want)
}
}
49 changes: 49 additions & 0 deletions storage/buckets/get_autoclass.go
@@ -0,0 +1,49 @@
// Copyright 2022 Google LLC
//
// 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
//
// https://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 buckets

// [START storage_get_autoclass]
import (
"context"
"fmt"
"io"
"time"

"cloud.google.com/go/storage"
)

// getAutoclass gets the Autoclass configuration for a bucket.
// See https://cloud.google.com/storage/docs/using-autoclass for more information.
func getAutoclass(w io.Writer, bucketName string) error {
// bucketName := "bucket-name"
ctx := context.Background()
client, err := storage.NewClient(ctx)
if err != nil {
return fmt.Errorf("storage.NewClient: %v", err)
}
defer client.Close()

ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()

attrs, err := client.Bucket(bucketName).Attrs(ctx)
if err != nil {
return fmt.Errorf("Bucket(%q).Attrs: %v", bucketName, err)
}
fmt.Fprintf(w, "Autoclass enabled was set to %v on bucket %q at %v", attrs.Autoclass.Enabled, bucketName, attrs.Autoclass.ToggleTime)
return nil
}

// [END storage_get_autoclass]
58 changes: 58 additions & 0 deletions storage/buckets/set_autoclass.go
@@ -0,0 +1,58 @@
// Copyright 2022 Google LLC
//
// 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
//
// https://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 buckets

// [START storage_set_autoclass]
import (
"context"
"fmt"
"io"
"time"

"cloud.google.com/go/storage"
)

// setAutoclass sets the Autoclass configuration for a bucket.
// See https://cloud.google.com/storage/docs/using-autoclass for more information.

// Note: Only update requests that disable Autoclass are currently supported.
// To enable Autoclass, you must set it at bucket creation time.
func setAutoclass(w io.Writer, bucketName string, value bool) error {
// bucketName := "bucket-name"
// value := false
ctx := context.Background()
client, err := storage.NewClient(ctx)
if err != nil {
return fmt.Errorf("storage.NewClient: %v", err)
}
defer client.Close()

ctx, cancel := context.WithTimeout(ctx, time.Second*10)
defer cancel()

bucket := client.Bucket(bucketName)
bucketAttrsToUpdate := storage.BucketAttrsToUpdate{
Autoclass: &storage.Autoclass{
Enabled: value,
},
}
if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil {
return fmt.Errorf("Bucket(%q).Update: %v", bucketName, err)
}
fmt.Fprintf(w, "Autoclass enabled was set to %v on bucket %q \n", bucketAttrsToUpdate.Autoclass.Enabled, bucketName)
return nil
}

// [END storage_set_autoclass]

0 comments on commit d9d955f

Please sign in to comment.