From e21cfc4ef081ae177a1bed959e34f737cdc6695d Mon Sep 17 00:00:00 2001 From: Cathy Ouyang Date: Mon, 10 Oct 2022 16:02:51 -0700 Subject: [PATCH 1/5] feat(storage): add autoclass samples --- storage/buckets/buckets_test.go | 29 +++++++++++++++++ storage/buckets/get_autoclass.go | 49 ++++++++++++++++++++++++++++ storage/buckets/set_autoclass.go | 55 ++++++++++++++++++++++++++++++++ 3 files changed, 133 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..0f2feeb7ee 100644 --- a/storage/buckets/buckets_test.go +++ b/storage/buckets/buckets_test.go @@ -756,3 +756,32 @@ 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, err := testutil.CreateTestBucket(ctx, t, client, tc.ProjectID, testPrefix) + if err != nil { + t.Fatalf("Bucket creation failed: %v", err) + } + defer testutil.DeleteBucketIfExists(ctx, client, bucketName) + + buf := new(bytes.Buffer) + toggle := false + if err := setAutoclass(buf, bucketName, toggle); err != nil { + t.Errorf("setAutoclass: %#v", err) + } + if got, want := buf.String(), "Autoclass enabled is set to false"; !strings.Contains(got, want) { + t.Errorf("got %q, want %q", got, want) + } + + if err := getAutoclass(buf, bucketName); err != nil { + t.Errorf("getAutoclass: %#v", err) + } + if got, want := buf.String(), "Autoclass enabled is 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..471bdefc4a --- /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 is set to %v for %v 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..9ad459484e --- /dev/null +++ b/storage/buckets/set_autoclass.go @@ -0,0 +1,55 @@ +// 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. +func setAutoclass(w io.Writer, bucketName string, toggle bool) error { + // bucketName := "bucket-name" + // toggle := 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: toggle, + }, + } + if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil { + return fmt.Errorf("Bucket(%q).Update: %v", bucketName, err) + } + fmt.Fprintf(w, "Autoclass enabled is set to %v for %v \n", bucketAttrsToUpdate.Autoclass.Enabled, bucketName) + return nil +} + +// [END storage_set_autoclass] From 0bad6e7d417636c7b4b791a4b614134e017df6a7 Mon Sep 17 00:00:00 2001 From: Cathy Ouyang Date: Wed, 12 Oct 2022 15:55:35 -0700 Subject: [PATCH 2/5] add v1 note --- storage/buckets/set_autoclass.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/storage/buckets/set_autoclass.go b/storage/buckets/set_autoclass.go index 9ad459484e..d0c6e0b14c 100644 --- a/storage/buckets/set_autoclass.go +++ b/storage/buckets/set_autoclass.go @@ -26,6 +26,9 @@ import ( // 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, toggle bool) error { // bucketName := "bucket-name" // toggle := false From 5a9ee10235d87699314e23d9fe3f2165b63ab261 Mon Sep 17 00:00:00 2001 From: Cathy Ouyang Date: Wed, 26 Oct 2022 15:52:10 -0700 Subject: [PATCH 3/5] update tests --- storage/buckets/buckets_test.go | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/storage/buckets/buckets_test.go b/storage/buckets/buckets_test.go index 0f2feeb7ee..1b7bfd31f5 100644 --- a/storage/buckets/buckets_test.go +++ b/storage/buckets/buckets_test.go @@ -763,23 +763,33 @@ func TestAutoclass(t *testing.T) { tc := testutil.SystemTest(t) ctx := context.Background() - bucketName, err := testutil.CreateTestBucket(ctx, t, client, tc.ProjectID, testPrefix) - if err != nil { + 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) } - defer testutil.DeleteBucketIfExists(ctx, client, bucketName) + // Test get Autoclass config. buf := new(bytes.Buffer) - toggle := false - if err := setAutoclass(buf, bucketName, toggle); err != nil { - t.Errorf("setAutoclass: %#v", err) + if err := getAutoclass(buf, bucketName); err != nil { + t.Errorf("getAutoclass: %#v", err) } - if got, want := buf.String(), "Autoclass enabled is set to false"; !strings.Contains(got, want) { + if got, want := buf.String(), "Autoclass enabled is set to true"; !strings.Contains(got, want) { t.Errorf("got %q, want %q", got, want) } - if err := getAutoclass(buf, bucketName); err != nil { - t.Errorf("getAutoclass: %#v", err) + // Test set Autoclass config. + toggle := false + if err := setAutoclass(buf, bucketName, toggle); err != nil { + t.Errorf("setAutoclass: %#v", err) } if got, want := buf.String(), "Autoclass enabled is set to false"; !strings.Contains(got, want) { t.Errorf("got %q, want %q", got, want) From f0a09b7c06661d474aafe02b558cbcfd8eba004d Mon Sep 17 00:00:00 2001 From: Cathy Ouyang Date: Tue, 1 Nov 2022 15:04:37 -0700 Subject: [PATCH 4/5] update print statements --- storage/buckets/get_autoclass.go | 2 +- storage/buckets/set_autoclass.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/storage/buckets/get_autoclass.go b/storage/buckets/get_autoclass.go index 471bdefc4a..bea74263af 100644 --- a/storage/buckets/get_autoclass.go +++ b/storage/buckets/get_autoclass.go @@ -42,7 +42,7 @@ func getAutoclass(w io.Writer, bucketName string) error { if err != nil { return fmt.Errorf("Bucket(%q).Attrs: %v", bucketName, err) } - fmt.Fprintf(w, "Autoclass enabled is set to %v for %v at %v", attrs.Autoclass.Enabled, bucketName, attrs.Autoclass.ToggleTime) + fmt.Fprintf(w, "Autoclass enabled was set to %v on bucket %q at %v", attrs.Autoclass.Enabled, bucketName, attrs.Autoclass.ToggleTime) return nil } diff --git a/storage/buckets/set_autoclass.go b/storage/buckets/set_autoclass.go index d0c6e0b14c..849728b3f0 100644 --- a/storage/buckets/set_autoclass.go +++ b/storage/buckets/set_autoclass.go @@ -51,7 +51,7 @@ func setAutoclass(w io.Writer, bucketName string, toggle bool) error { if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil { return fmt.Errorf("Bucket(%q).Update: %v", bucketName, err) } - fmt.Fprintf(w, "Autoclass enabled is set to %v for %v \n", bucketAttrsToUpdate.Autoclass.Enabled, bucketName) + fmt.Fprintf(w, "Autoclass enabled was set to %v on bucket %q \n", bucketAttrsToUpdate.Autoclass.Enabled, bucketName) return nil } From c6a6bf456e18fde8000760b7c46beee5d36053ec Mon Sep 17 00:00:00 2001 From: Cathy Ouyang Date: Tue, 1 Nov 2022 15:23:23 -0700 Subject: [PATCH 5/5] respond to comments --- storage/buckets/buckets_test.go | 8 ++++---- storage/buckets/set_autoclass.go | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/storage/buckets/buckets_test.go b/storage/buckets/buckets_test.go index 1b7bfd31f5..815b1c0d57 100644 --- a/storage/buckets/buckets_test.go +++ b/storage/buckets/buckets_test.go @@ -782,16 +782,16 @@ func TestAutoclass(t *testing.T) { if err := getAutoclass(buf, bucketName); err != nil { t.Errorf("getAutoclass: %#v", err) } - if got, want := buf.String(), "Autoclass enabled is set to true"; !strings.Contains(got, want) { + 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. - toggle := false - if err := setAutoclass(buf, bucketName, toggle); err != nil { + value := false + if err := setAutoclass(buf, bucketName, value); err != nil { t.Errorf("setAutoclass: %#v", err) } - if got, want := buf.String(), "Autoclass enabled is set to false"; !strings.Contains(got, want) { + 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/set_autoclass.go b/storage/buckets/set_autoclass.go index 849728b3f0..10e16bf150 100644 --- a/storage/buckets/set_autoclass.go +++ b/storage/buckets/set_autoclass.go @@ -29,9 +29,9 @@ import ( // 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, toggle bool) error { +func setAutoclass(w io.Writer, bucketName string, value bool) error { // bucketName := "bucket-name" - // toggle := false + // value := false ctx := context.Background() client, err := storage.NewClient(ctx) if err != nil { @@ -45,7 +45,7 @@ func setAutoclass(w io.Writer, bucketName string, toggle bool) error { bucket := client.Bucket(bucketName) bucketAttrsToUpdate := storage.BucketAttrsToUpdate{ Autoclass: &storage.Autoclass{ - Enabled: toggle, + Enabled: value, }, } if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil {