12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // Licensed to the Apache Software Foundation (ASF) under one
- // or more contributor license agreements. See the NOTICE file
- // distributed with this work for additional information
- // regarding copyright ownership. The ASF licenses this file
- // to you 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
- //
- // http://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.
- // Date: 2015/03/31 14:50:20
- #include <gtest/gtest.h>
- #include <google/protobuf/descriptor.h>
- #include <google/protobuf/descriptor.pb.h>
- #include <google/protobuf/dynamic_message.h>
- #include "brpc/policy/baidu_rpc_meta.pb.h"
- #include "echo.pb.h"
- namespace {
- using namespace google::protobuf;
- using namespace brpc;
- void BuildDependency(const FileDescriptor *file_desc, DescriptorPool *pool) {
- for (int i = 0; i < file_desc->dependency_count(); ++i) {
- const FileDescriptor *fd = file_desc->dependency(i);
- BuildDependency(fd, pool);
- FileDescriptorProto proto;
- fd->CopyTo(&proto);
- ASSERT_TRUE(pool->BuildFile(proto) != NULL);
- }
- FileDescriptorProto proto;
- file_desc->CopyTo(&proto);
- ASSERT_TRUE(pool->BuildFile(proto) != NULL);
- }
- TEST(ProtoTest, proto) {
- policy::RpcMeta meta;
- const Descriptor *desc = meta.GetDescriptor();
- const FileDescriptor *file_desc = desc->file();
- DescriptorPool pool;
- DynamicMessageFactory factory(&pool);
- BuildDependency(file_desc, &pool);
- FileDescriptorProto file_desc_proto;
- file_desc->CopyTo(&file_desc_proto);
- const FileDescriptor *new_file_desc = pool.BuildFile(file_desc_proto);
- ASSERT_TRUE(new_file_desc != NULL);
- const Descriptor *new_desc = new_file_desc->FindMessageTypeByName(desc->name());
- ASSERT_TRUE(new_desc != NULL);
- meta.set_correlation_id(123);
- std::string data;
- ASSERT_TRUE(meta.SerializeToString(&data));
- Message *msg = factory.GetPrototype(new_desc)->New();
- ASSERT_TRUE(msg != NULL);
- ASSERT_TRUE(msg->ParseFromString(data));
- ASSERT_TRUE(msg->SerializeToString(&data));
- policy::RpcMeta new_meta;
- ASSERT_TRUE(new_meta.ParseFromString(data));
- ASSERT_EQ(123, new_meta.correlation_id());
- }
- TEST(ProtoTest, required_enum) {
- test::Message1 msg1;
- msg1.set_stat(test::STATE0_NUM_1);
- std::string buf;
- ASSERT_TRUE(msg1.SerializeToString(&buf));
- test::Message2 msg2;
- ASSERT_TRUE(msg2.ParseFromString(buf));
- ASSERT_EQ((int)msg1.stat(), (int)msg2.stat());
- msg1.set_stat(test::STATE0_NUM_2);
- ASSERT_TRUE(msg1.SerializeToString(&buf));
- ASSERT_FALSE(msg2.ParseFromString(buf));
- }
- } //namespace
|