From 779cd45fc2836d14178338ce271c298fa529a24a Mon Sep 17 00:00:00 2001 From: Julie Qiu Date: Mon, 13 May 2024 19:43:57 -0400 Subject: [PATCH 1/2] chore(snippets,gengapic): use sample values in tests (#1513) Refactor TestNewMetadata, TestToMetadataJSON and TestRegionTag in internal/snippets/snippets_test.go to use the internal/testing/sample package. For #1512 --- internal/snippets/BUILD.bazel | 1 + internal/snippets/snippets_test.go | 41 ++++++++++++------------------ internal/testing/sample/sample.go | 7 +++++ 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/internal/snippets/BUILD.bazel b/internal/snippets/BUILD.bazel index 853a4ca24a4..74a5c7c0609 100644 --- a/internal/snippets/BUILD.bazel +++ b/internal/snippets/BUILD.bazel @@ -19,6 +19,7 @@ go_test( embed = [":snippets"], deps = [ "//internal/snippets/metadata", + "//internal/testing/sample", "@com_github_google_go_cmp//cmp", "@org_golang_google_protobuf//proto", ], diff --git a/internal/snippets/snippets_test.go b/internal/snippets/snippets_test.go index 4d224270363..3f398662354 100644 --- a/internal/snippets/snippets_test.go +++ b/internal/snippets/snippets_test.go @@ -19,42 +19,37 @@ import ( "github.com/google/go-cmp/cmp" "github.com/googleapis/gapic-generator-go/internal/snippets/metadata" + "github.com/googleapis/gapic-generator-go/internal/testing/sample" "google.golang.org/protobuf/proto" ) -var protoPkg = "google.cloud.bigquery.migration.v2" -var libPkg = "cloud.google.com/go/bigquery/migration/apiv2" -var defaultHost = "bigquerymigration.googleapis.com" -var version = "v2" -var pkgName = "migration" - func TestNewMetadata(t *testing.T) { - sm := NewMetadata(protoPkg, libPkg, pkgName) + sm := NewMetadata(sample.ProtoPackagePath, sample.GoPackagePath, sample.GoPackageName) - if sm.protoPkg != protoPkg { - t.Errorf("%s: got %s want %s,", t.Name(), sm.protoPkg, protoPkg) + if sm.protoPkg != sample.ProtoPackagePath { + t.Errorf("%s: got %s want %s,", t.Name(), sm.protoPkg, sample.ProtoPackagePath) } - if sm.libPkg != libPkg { - t.Errorf("%s: got %s want %s", t.Name(), sm.libPkg, libPkg) + if sm.libPkg != sample.GoPackagePath { + t.Errorf("%s: got %s want %s", t.Name(), sm.libPkg, sample.GoPackagePath) } if got := len(sm.protoServices); got != 0 { t.Errorf("%s: got %d want empty", t.Name(), len(sm.protoServices)) } - if sm.apiVersion != version { - t.Errorf("%s: got %s want %s", t.Name(), sm.apiVersion, version) + if sm.apiVersion != sample.ProtoVersion { + t.Errorf("%s: got %s want %s", t.Name(), sm.apiVersion, sample.ProtoVersion) } } func TestToMetadataJSON(t *testing.T) { // Build fixture - sm := NewMetadata(protoPkg, libPkg, pkgName) + sm := NewMetadata(sample.ProtoPackagePath, sample.GoPackagePath, sample.GoPackageName) regionTagStart := 18 regionTagEnd := 50 for i := 0; i < 2; i++ { serviceName := fmt.Sprintf("Foo%dService", i) methodName := fmt.Sprintf("Bar%dMethod", i) - sm.AddService(serviceName, defaultHost) - sm.AddMethod(serviceName, methodName, protoPkg, serviceName, regionTagEnd) + sm.AddService(serviceName, sample.ServiceURL) + sm.AddMethod(serviceName, methodName, sample.ProtoPackagePath, serviceName, regionTagEnd) sm.UpdateMethodDoc(serviceName, methodName, methodName+" doc\n New line.") sm.UpdateMethodResult(serviceName, methodName, "mypackage."+methodName+"Result") sm.AddParams(serviceName, methodName, "mypackage."+methodName+"Request") @@ -63,12 +58,12 @@ func TestToMetadataJSON(t *testing.T) { // Build expectation want := &metadata.Index{ ClientLibrary: &metadata.ClientLibrary{ - Name: libPkg, + Name: sample.GoPackagePath, Version: VersionPlaceholder, Language: metadata.Language_GO, Apis: []*metadata.Api{ { - Id: protoPkg, + Id: sample.ProtoPackagePath, Version: "v2", }, }, @@ -142,15 +137,11 @@ func TestToMetadataJSON(t *testing.T) { } func TestRegionTag(t *testing.T) { - protoPkg := "google.cloud.bigquery.migration.v2" libPkg := "google.golang.org/genproto/googleapis/cloud/bigquery/migration/v2" - sm := NewMetadata(protoPkg, libPkg, pkgName) - serviceName := "MigrationService" - defaultHost := "bigquerymigration.googleapis.com" - sm.AddService(serviceName, defaultHost) - methodName := "GetMigrationWorkflow" + sm := NewMetadata(sample.ProtoPackagePath, libPkg, sample.GoPackagePath) + sm.AddService(sample.ServiceName, sample.ServiceURL) want := "bigquerymigration_v2_generated_MigrationService_GetMigrationWorkflow_sync" - if got := sm.RegionTag(serviceName, methodName); got != want { + if got := sm.RegionTag(sample.ServiceName, sample.GetMethod); got != want { t.Errorf("%s: got %s want %s", t.Name(), got, want) } } diff --git a/internal/testing/sample/sample.go b/internal/testing/sample/sample.go index 84290d38708..f145143613f 100644 --- a/internal/testing/sample/sample.go +++ b/internal/testing/sample/sample.go @@ -92,6 +92,9 @@ const ( // Example: // https://github.com/googleapis/googleapis/blob/f7df662a24c56ecaab79cb7d808fed4d2bb4981d/google/cloud/bigquery/migration/v2/migration_service.proto#L17 ProtoPackagePath = "google.cloud.bigquery.migration.v2" + + // ProtoVersion is the major version as defined in the protofile. + ProtoVersion = "v2" ) const ( @@ -126,6 +129,10 @@ const ( // https://pkg.go.dev/cloud.google.com/go/bigquery/migration/apiv2/migrationpb. // https://github.com/googleapis/googleapis/blob/f7df662a24c56ecaab79cb7d808fed4d2bb4981d/google/cloud/bigquery/migration/v2/migration_service.proto#L28 GoProtoPackagePath = "cloud.google.com/go/bigquery/migration/apiv2/migrationpb" + + // GoVersion is the version used in the package path for versioning the Go + // module containing the package. + GoVersion = "apiv2" ) // DescriptorInfoTypeName constructs the name format used by g.descInfo.Type. From e2fc950c316677f5bf8f4786a977ed08c92bb10b Mon Sep 17 00:00:00 2001 From: Julie Qiu Date: Sat, 11 May 2024 15:00:00 -0400 Subject: [PATCH 2/2] chore(internal/snippets,gengapic): use sample values in tests Refactor internal/snippets/snippets_test.go and internal/gengapic/example_test.go to use the internal/testing/sample package. For #1512 --- internal/gengapic/example_test.go | 54 ++++++++---------------- internal/snippets/BUILD.bazel | 1 + internal/snippets/snippets_test.go | 41 ++++++++---------- internal/testing/sample/BUILD.bazel | 6 +++ internal/testing/sample/sample.go | 64 +++++++++++++++++++++++++++++ 5 files changed, 103 insertions(+), 63 deletions(-) diff --git a/internal/gengapic/example_test.go b/internal/gengapic/example_test.go index 2be61d90651..d24f3cf04f5 100644 --- a/internal/gengapic/example_test.go +++ b/internal/gengapic/example_test.go @@ -283,29 +283,19 @@ func TestExample(t *testing.T) { func TestGenSnippetFile(t *testing.T) { var g generator g.imports = map[pbinfo.ImportSpec]bool{} - g.serviceConfig = &serviceconfig.Service{ - Apis: []*apipb.Api{ - {Name: sample.ProtoServiceName}, - }, - } - g.snippetMetadata = snippets.NewMetadata(sample.ProtoPackagePath, sample.GoPackagePath, sample.GoPackageName) + g.serviceConfig = sample.ServiceConfig() - inputType := &descriptorpb.DescriptorProto{ - Name: proto.String(sample.CreateRequest), - } - outputType := &descriptorpb.DescriptorProto{ - Name: proto.String(sample.Resource), - } + serv := sample.Service() + g.snippetMetadata = snippets.NewMetadata(sample.ProtoPackagePath, sample.GoPackagePath, sample.GoPackageName) + g.snippetMetadata.AddService(serv.GetName(), sample.ServiceURL) - file := &descriptorpb.FileDescriptorProto{ - Options: &descriptorpb.FileOptions{ - GoPackage: proto.String(sample.GoProtoPackagePath), - }, - Package: proto.String(sample.ProtoPackagePath), - } + inputType := sample.InputType(sample.CreateRequest) + outputType := sample.OutputType(sample.Resource) files := []*descriptorpb.FileDescriptorProto{} g.descInfo = pbinfo.Of(files) + + file := sample.File() for _, typ := range []*descriptorpb.DescriptorProto{ inputType, outputType, } { @@ -313,24 +303,13 @@ func TestGenSnippetFile(t *testing.T) { g.descInfo.ParentFile[typ] = file } - serv := &descriptorpb.ServiceDescriptorProto{ - Name: proto.String(sample.ServiceName), - Method: []*descriptorpb.MethodDescriptorProto{ - { - Name: proto.String(sample.CreateMethod), - InputType: proto.String(sample.DescriptorInfoTypeName(sample.CreateRequest)), - OutputType: proto.String(sample.DescriptorInfoTypeName(sample.Resource)), - }, - }, - } - - for _, tst := range []struct { - tstName string + for _, test := range []struct { + name string options options imports map[pbinfo.ImportSpec]bool }{ { - tstName: "snippet", + name: "snippet", options: options{ pkgName: "migration", transports: []transport{grpc, rest}, @@ -341,20 +320,19 @@ func TestGenSnippetFile(t *testing.T) { }, }, } { - t.Run(tst.tstName, func(t *testing.T) { + t.Run(test.name, func(t *testing.T) { g.reset() - g.opts = &tst.options - g.snippetMetadata.AddService(serv.GetName(), sample.ServiceURL) + g.opts = &test.options err := g.genSnippetFile(serv, serv.Method[0]) if err != nil { t.Fatal(err) } g.commit(filepath.Join("cloud.google.com/go", "internal", "generated", "snippets", "bigquery", "main.go"), "main") - if diff := cmp.Diff(g.imports, tst.imports); diff != "" { - t.Errorf("TestExample(%s): imports got(-),want(+):\n%s", tst.tstName, diff) + if diff := cmp.Diff(test.imports, g.imports); diff != "" { + t.Errorf("TestExample(%s) imports mismatch: (-want +got):\n%s", test.name, diff) } got := *g.resp.File[0].Content + *g.resp.File[1].Content - txtdiff.Diff(t, got, filepath.Join("testdata", tst.tstName+".want")) + txtdiff.Diff(t, got, filepath.Join("testdata", test.name+".want")) }) } } diff --git a/internal/snippets/BUILD.bazel b/internal/snippets/BUILD.bazel index 853a4ca24a4..74a5c7c0609 100644 --- a/internal/snippets/BUILD.bazel +++ b/internal/snippets/BUILD.bazel @@ -19,6 +19,7 @@ go_test( embed = [":snippets"], deps = [ "//internal/snippets/metadata", + "//internal/testing/sample", "@com_github_google_go_cmp//cmp", "@org_golang_google_protobuf//proto", ], diff --git a/internal/snippets/snippets_test.go b/internal/snippets/snippets_test.go index 4d224270363..3f398662354 100644 --- a/internal/snippets/snippets_test.go +++ b/internal/snippets/snippets_test.go @@ -19,42 +19,37 @@ import ( "github.com/google/go-cmp/cmp" "github.com/googleapis/gapic-generator-go/internal/snippets/metadata" + "github.com/googleapis/gapic-generator-go/internal/testing/sample" "google.golang.org/protobuf/proto" ) -var protoPkg = "google.cloud.bigquery.migration.v2" -var libPkg = "cloud.google.com/go/bigquery/migration/apiv2" -var defaultHost = "bigquerymigration.googleapis.com" -var version = "v2" -var pkgName = "migration" - func TestNewMetadata(t *testing.T) { - sm := NewMetadata(protoPkg, libPkg, pkgName) + sm := NewMetadata(sample.ProtoPackagePath, sample.GoPackagePath, sample.GoPackageName) - if sm.protoPkg != protoPkg { - t.Errorf("%s: got %s want %s,", t.Name(), sm.protoPkg, protoPkg) + if sm.protoPkg != sample.ProtoPackagePath { + t.Errorf("%s: got %s want %s,", t.Name(), sm.protoPkg, sample.ProtoPackagePath) } - if sm.libPkg != libPkg { - t.Errorf("%s: got %s want %s", t.Name(), sm.libPkg, libPkg) + if sm.libPkg != sample.GoPackagePath { + t.Errorf("%s: got %s want %s", t.Name(), sm.libPkg, sample.GoPackagePath) } if got := len(sm.protoServices); got != 0 { t.Errorf("%s: got %d want empty", t.Name(), len(sm.protoServices)) } - if sm.apiVersion != version { - t.Errorf("%s: got %s want %s", t.Name(), sm.apiVersion, version) + if sm.apiVersion != sample.ProtoVersion { + t.Errorf("%s: got %s want %s", t.Name(), sm.apiVersion, sample.ProtoVersion) } } func TestToMetadataJSON(t *testing.T) { // Build fixture - sm := NewMetadata(protoPkg, libPkg, pkgName) + sm := NewMetadata(sample.ProtoPackagePath, sample.GoPackagePath, sample.GoPackageName) regionTagStart := 18 regionTagEnd := 50 for i := 0; i < 2; i++ { serviceName := fmt.Sprintf("Foo%dService", i) methodName := fmt.Sprintf("Bar%dMethod", i) - sm.AddService(serviceName, defaultHost) - sm.AddMethod(serviceName, methodName, protoPkg, serviceName, regionTagEnd) + sm.AddService(serviceName, sample.ServiceURL) + sm.AddMethod(serviceName, methodName, sample.ProtoPackagePath, serviceName, regionTagEnd) sm.UpdateMethodDoc(serviceName, methodName, methodName+" doc\n New line.") sm.UpdateMethodResult(serviceName, methodName, "mypackage."+methodName+"Result") sm.AddParams(serviceName, methodName, "mypackage."+methodName+"Request") @@ -63,12 +58,12 @@ func TestToMetadataJSON(t *testing.T) { // Build expectation want := &metadata.Index{ ClientLibrary: &metadata.ClientLibrary{ - Name: libPkg, + Name: sample.GoPackagePath, Version: VersionPlaceholder, Language: metadata.Language_GO, Apis: []*metadata.Api{ { - Id: protoPkg, + Id: sample.ProtoPackagePath, Version: "v2", }, }, @@ -142,15 +137,11 @@ func TestToMetadataJSON(t *testing.T) { } func TestRegionTag(t *testing.T) { - protoPkg := "google.cloud.bigquery.migration.v2" libPkg := "google.golang.org/genproto/googleapis/cloud/bigquery/migration/v2" - sm := NewMetadata(protoPkg, libPkg, pkgName) - serviceName := "MigrationService" - defaultHost := "bigquerymigration.googleapis.com" - sm.AddService(serviceName, defaultHost) - methodName := "GetMigrationWorkflow" + sm := NewMetadata(sample.ProtoPackagePath, libPkg, sample.GoPackagePath) + sm.AddService(sample.ServiceName, sample.ServiceURL) want := "bigquerymigration_v2_generated_MigrationService_GetMigrationWorkflow_sync" - if got := sm.RegionTag(serviceName, methodName); got != want { + if got := sm.RegionTag(sample.ServiceName, sample.GetMethod); got != want { t.Errorf("%s: got %s want %s", t.Name(), got, want) } } diff --git a/internal/testing/sample/BUILD.bazel b/internal/testing/sample/BUILD.bazel index 527ac977d7f..fa196d9d91d 100644 --- a/internal/testing/sample/BUILD.bazel +++ b/internal/testing/sample/BUILD.bazel @@ -5,4 +5,10 @@ go_library( srcs = ["sample.go"], importpath = "github.com/googleapis/gapic-generator-go/internal/testing/sample", visibility = ["//:__subpackages__"], + deps = [ + "@org_golang_google_genproto_googleapis_api//serviceconfig", + "@org_golang_google_protobuf//proto", + "@org_golang_google_protobuf//types/descriptorpb", + "@org_golang_google_protobuf//types/known/apipb", + ], ) diff --git a/internal/testing/sample/sample.go b/internal/testing/sample/sample.go index 84290d38708..5078c82c0d1 100644 --- a/internal/testing/sample/sample.go +++ b/internal/testing/sample/sample.go @@ -18,6 +18,11 @@ package sample import ( "fmt" + + "google.golang.org/genproto/googleapis/api/serviceconfig" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/descriptorpb" + "google.golang.org/protobuf/types/known/apipb" ) const ( @@ -92,6 +97,9 @@ const ( // Example: // https://github.com/googleapis/googleapis/blob/f7df662a24c56ecaab79cb7d808fed4d2bb4981d/google/cloud/bigquery/migration/v2/migration_service.proto#L17 ProtoPackagePath = "google.cloud.bigquery.migration.v2" + + // ProtoVersion is the major version as defined in the protofile. + ProtoVersion = "v2" ) const ( @@ -126,9 +134,65 @@ const ( // https://pkg.go.dev/cloud.google.com/go/bigquery/migration/apiv2/migrationpb. // https://github.com/googleapis/googleapis/blob/f7df662a24c56ecaab79cb7d808fed4d2bb4981d/google/cloud/bigquery/migration/v2/migration_service.proto#L28 GoProtoPackagePath = "cloud.google.com/go/bigquery/migration/apiv2/migrationpb" + + // GoVersion is the version used in the package path for versioning the Go + // module containing the package. + GoVersion = "apiv2" ) // DescriptorInfoTypeName constructs the name format used by g.descInfo.Type. func DescriptorInfoTypeName(typ string) string { return fmt.Sprintf(".%s.%s", ProtoPackagePath, typ) } + +// ServiceConfig returns service config information. +func ServiceConfig() *serviceconfig.Service { + return &serviceconfig.Service{ + Apis: []*apipb.Api{ + {Name: ProtoServiceName}, + }, + } +} + +// Service returns a service descriptor using the sample values. +func Service() *descriptorpb.ServiceDescriptorProto { + return &descriptorpb.ServiceDescriptorProto{ + Name: proto.String(ServiceName), + Method: []*descriptorpb.MethodDescriptorProto{ + { + Name: proto.String(CreateMethod), + InputType: proto.String(DescriptorInfoTypeName(CreateRequest)), + OutputType: proto.String(DescriptorInfoTypeName(Resource)), + }, + { + Name: proto.String(GetMethod), + InputType: proto.String(DescriptorInfoTypeName(GetRequest)), + OutputType: proto.String(DescriptorInfoTypeName(Resource)), + }, + }, + } +} + +// InputType returns an input type for a method. +func InputType(input string) *descriptorpb.DescriptorProto { + return &descriptorpb.DescriptorProto{ + Name: proto.String(input), + } +} + +// OutputType returns an output type for a method. +func OutputType(output string) *descriptorpb.DescriptorProto { + return &descriptorpb.DescriptorProto{ + Name: proto.String(output), + } +} + +// File returns a proto file. +func File() *descriptorpb.FileDescriptorProto { + return &descriptorpb.FileDescriptorProto{ + Options: &descriptorpb.FileOptions{ + GoPackage: proto.String(GoProtoPackagePath), + }, + Package: proto.String(ProtoPackagePath), + } +}