From 4f992b8358a52d93b997ed01c03a059d7d2eb703 Mon Sep 17 00:00:00 2001 From: cojenco Date: Mon, 7 Nov 2022 10:12:14 -0800 Subject: [PATCH] feat(storage): add autoclass samples (#2737) Fixes #2707 Requires googleapis/google-cloud-go#6828 Tests pass locally with library feature support --- storage/buckets/buckets_test.go | 39 +++++++++++++++++++++ storage/buckets/get_autoclass.go | 49 +++++++++++++++++++++++++++ storage/buckets/set_autoclass.go | 58 ++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 storage/buckets/get_autoclass.go create mode 100644 storage/buckets/set_autoclass.go diff --git a/storage/buckets/buckets_test.go b/storage/buckets/buckets_test.go index 1ec4354c49..815b1c0d57 100644 --- a/storage/buckets/buckets_test.go +++ b/storage/buckets/buckets_test.go @@ -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) + } +} diff --git a/storage/buckets/get_autoclass.go b/storage/buckets/get_autoclass.go new file mode 100644 index 0000000000..bea74263af --- /dev/null +++ b/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] diff --git a/storage/buckets/set_autoclass.go b/storage/buckets/set_autoclass.go new file mode 100644 index 0000000000..10e16bf150 --- /dev/null +++ b/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]