Skip to content
This repository was archived by the owner on Jan 18, 2026. It is now read-only.

Commit 1613b8e

Browse files
fix: missing error from ads (#878)
1 parent 0383a29 commit 1613b8e

7 files changed

Lines changed: 100 additions & 2 deletions

File tree

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
[
22
"../../protos/google/cloud/asset/v1/asset_service.proto",
3-
"../../protos/google/cloud/asset/v1/assets.proto"
3+
"../../protos/google/cloud/asset/v1/assets.proto",
4+
"../../protos/google/cloud/orgpolicy/v1/orgpolicy.proto",
5+
"../../protos/google/identity/accesscontextmanager/type/device_resources.proto",
6+
"../../protos/google/identity/accesscontextmanager/v1/access_level.proto",
7+
"../../protos/google/identity/accesscontextmanager/v1/access_policy.proto",
8+
"../../protos/google/identity/accesscontextmanager/v1/service_perimeter.proto"
49
]

baselines/logging/src/v2/config_service_v2_proto_list.json.baseline

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
[
2+
"../../protos/google/logging/type/http_request.proto",
3+
"../../protos/google/logging/type/log_severity.proto",
24
"../../protos/google/logging/v2/log_entry.proto",
35
"../../protos/google/logging/v2/logging.proto",
46
"../../protos/google/logging/v2/logging_config.proto",

baselines/logging/src/v2/logging_service_v2_proto_list.json.baseline

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
[
2+
"../../protos/google/logging/type/http_request.proto",
3+
"../../protos/google/logging/type/log_severity.proto",
24
"../../protos/google/logging/v2/log_entry.proto",
35
"../../protos/google/logging/v2/logging.proto",
46
"../../protos/google/logging/v2/logging_config.proto",

baselines/logging/src/v2/metrics_service_v2_proto_list.json.baseline

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
[
2+
"../../protos/google/logging/type/http_request.proto",
3+
"../../protos/google/logging/type/log_severity.proto",
24
"../../protos/google/logging/v2/log_entry.proto",
35
"../../protos/google/logging/v2/logging.proto",
46
"../../protos/google/logging/v2/logging_config.proto",

typescript/src/schema/proto.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,13 @@ export class Proto {
658658
return map;
659659
}, {} as MessagesMap);
660660
const protopackage = parameters.fd.package;
661-
if (!protopackage || !protopackage.startsWith(parameters.packageName)) {
661+
// Allow to generate if a proto has no service and its package name is differ from its service's.
662+
if (
663+
!protopackage ||
664+
(!protopackage.startsWith(parameters.packageName) &&
665+
parameters.fd.service &&
666+
parameters.fd.service.length > 0)
667+
) {
662668
this.fileToGenerate = false;
663669
}
664670
if (this.fileToGenerate) {

typescript/test/unit/api.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,28 @@ describe('src/schema/api.ts', () => {
123123
]);
124124
});
125125

126+
it('should include the protos has no service and different package name', () => {
127+
const fd1 = new protos.google.protobuf.FileDescriptorProto();
128+
fd1.name = 'google/cloud/example/v1/test.proto';
129+
fd1.package = 'google.cloud.example.v1';
130+
131+
fd1.service = [new protos.google.protobuf.ServiceDescriptorProto()];
132+
fd1.service[0].name = 'Service';
133+
fd1.service[0].options = {
134+
'.google.api.defaultHost': 'hostname.example.com:443',
135+
};
136+
const fd2 = new protos.google.protobuf.FileDescriptorProto();
137+
fd2.name = 'google/cloud/example/v1/error.proto';
138+
fd2.package = 'google.cloud.example.v1.errors';
139+
const api = new API([fd1, fd2], 'google.cloud.example.v1', {
140+
grpcServiceConfig: new protos.grpc.service_config.ServiceConfig(),
141+
});
142+
assert.deepStrictEqual(JSON.parse(api.protoFilesToGenerateJSON), [
143+
'../../protos/google/cloud/example/v1/error.proto',
144+
'../../protos/google/cloud/example/v1/test.proto',
145+
]);
146+
});
147+
126148
it('should return lexicographically first service name as mainServiceName', () => {
127149
const fd1 = new protos.google.protobuf.FileDescriptorProto();
128150
fd1.name = 'google/cloud/test/v1/test.proto';

typescript/test/unit/proto.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,65 @@ describe('src/schema/proto.ts', () => {
177177
'next_page_token'
178178
);
179179
});
180+
it("should allow generate a proto has no service and its package name differ from service's", () => {
181+
const fd = new protos.google.protobuf.FileDescriptorProto();
182+
fd.name = 'google/cloud/showcase/v1beta1/test.proto';
183+
fd.package = 'google.cloud.showcase.v1beta1.errors';
184+
const allMessages: MessagesMap = {};
185+
fd.messageType
186+
.filter(message => message.name)
187+
.forEach(message => {
188+
allMessages['.' + fd.package! + '.' + message.name!] = message;
189+
});
190+
const options: Options = {
191+
grpcServiceConfig: new protos.grpc.service_config.ServiceConfig(),
192+
};
193+
const commentsMap = new CommentsMap([fd]);
194+
const proto = new Proto({
195+
fd,
196+
packageName: 'google.cloud.talent.v4beta1',
197+
allMessages,
198+
allResourceDatabase: new ResourceDatabase(),
199+
resourceDatabase: new ResourceDatabase(),
200+
options,
201+
commentsMap,
202+
});
203+
assert.deepStrictEqual(proto.fileToGenerate, true);
204+
});
205+
it("should not allow generate a service proto with package name differ from the param's pakage name", () => {
206+
const fd = new protos.google.protobuf.FileDescriptorProto();
207+
fd.name = 'google/cloud/showcase/v1beta1/test.proto';
208+
fd.package = 'google.cloud.showcase.v1beta1.TestService';
209+
fd.service = [new protos.google.protobuf.ServiceDescriptorProto()];
210+
fd.service[0].name = 'service';
211+
fd.service[0].method = [
212+
new protos.google.protobuf.MethodDescriptorProto(),
213+
];
214+
fd.service[0].method[0] = new protos.google.protobuf.MethodDescriptorProto();
215+
fd.service[0].method[0].name = 'Test';
216+
fd.service[0].method[0].outputType =
217+
'.google.cloud.showcase.v1beta1.TestOutput';
218+
const options: Options = {
219+
grpcServiceConfig: new protos.grpc.service_config.ServiceConfig(),
220+
};
221+
const allMessages: MessagesMap = {};
222+
fd.messageType
223+
.filter(message => message.name)
224+
.forEach(message => {
225+
allMessages['.' + fd.package! + '.' + message.name!] = message;
226+
});
227+
const commentsMap = new CommentsMap([fd]);
228+
const proto = new Proto({
229+
fd,
230+
packageName: 'google.cloud.showcase.v1beta1.MainService',
231+
allMessages,
232+
allResourceDatabase: new ResourceDatabase(),
233+
resourceDatabase: new ResourceDatabase(),
234+
options,
235+
commentsMap,
236+
});
237+
assert.deepStrictEqual(proto.fileToGenerate, false);
238+
});
180239
});
181240
describe('throw error for misconfigured LRO', () => {
182241
it('throw error if method returns Operation, but without operation_info option', () => {

0 commit comments

Comments
 (0)