Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/ProtoBuf.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ function service_cb(io, t::CodeGenerators.ServiceType, ctx::CodeGenerators.Conte
response_type = rpc.response_type.name

if rpc.request_type.package_namespace !== nothing
request_type = join([rpc.package_namespace, request_type], ".")
request_type = join([rpc.request_type.package_namespace, request_type], ".")
end
if rpc.response_type.package_namespace !== nothing
response_type = join([rpc.package_namespace, response_type], ".")
response_type = join([rpc.response_type.package_namespace, response_type], ".")
end

export_name = "$(service_name)_$(rpc.name)_Client"
Expand Down
9 changes: 9 additions & 0 deletions test/proto/ext_service.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
syntax = "proto3";
package ext_service;

import "ext_types.proto";

service ExtService {
rpc ExtRPC(ext_types.ExtRequest) returns (ext_types.ExtResponse) {}
rpc ExtStreamRPC(ext_types.ExtRequest) returns (stream ext_types.ExtResponse) {}
}
10 changes: 10 additions & 0 deletions test/proto/ext_types.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
syntax = "proto3";
package ext_types;

message ExtRequest {
uint64 id = 1;
}

message ExtResponse {
uint64 result = 1;
}
19 changes: 19 additions & 0 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,25 @@ include("gen/test/test_pb.jl")
@test contains(generated, "export TestService_TestClientStreamRPC_Client")
@test contains(generated, "export TestService_TestBidirectionalStreamRPC_Client")
end

# Test that request/response type package_namespace is correctly applied when types
# come from a different proto package. Previously this was broken because the code
# checked rpc.package_namespace instead of rpc.request_type.package_namespace and
# rpc.response_type.package_namespace.
mktempdir() do tmpdir
@test isnothing(protojl("ext_service.proto", joinpath(@__DIR__, "proto"), tmpdir))
generated = read(joinpath(tmpdir, "ext_service", "ext_service_pb.jl"), String)
# Request type from ext_types package must be prefixed with package namespace
@test contains(generated, "ext_types.ExtRequest")
# Response type from ext_types package must be prefixed with package namespace
@test contains(generated, "ext_types.ExtResponse")
# Full type parameter string with both namespaced types
@test contains(generated, "gRPCClient.gRPCServiceClient{ext_types.ExtRequest, false, ext_types.ExtResponse, false}")
@test contains(generated, "gRPCClient.gRPCServiceClient{ext_types.ExtRequest, false, ext_types.ExtResponse, true}")
# Service client constructors are present
@test contains(generated, "ExtService_ExtRPC_Client(")
@test contains(generated, "ExtService_ExtStreamRPC_Client(")
end
end

@testset "@async varying request/response" begin
Expand Down