mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-15 07:06:11 -04:00
125 lines
4.1 KiB
C++
125 lines
4.1 KiB
C++
// Copyright 2020 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.
|
|
|
|
// #include "logs/proto/location/nearby/nearby_client_log.proto.h"
|
|
#include "google/protobuf/descriptor.h"
|
|
#include "gtest/gtest.h"
|
|
#include "internal/platform/logging.h"
|
|
#include "internal/proto/analytics/connections_log.pb.h"
|
|
#include "proto/connections_enums.pb.h"
|
|
|
|
namespace nearby {
|
|
namespace analytics {
|
|
namespace proto {
|
|
|
|
namespace {
|
|
|
|
using G3ConnectionsLog = ::location::nearby::analytics::proto::ConnectionsLog;
|
|
using P3ConnectionsLog = ::location::nearby::analytics::proto::ConnectionsLog;
|
|
|
|
using ::proto2::Descriptor;
|
|
using ::proto2::FieldDescriptor;
|
|
|
|
// Forward declaration.
|
|
bool Compare(const Descriptor* desc1, const Descriptor* desc2);
|
|
|
|
// Compares the two field descriptors and return false if name, number, label,
|
|
// or type is different.
|
|
bool Compare(const FieldDescriptor* field1, const FieldDescriptor* field2) {
|
|
if (field1->name() != field2->name()) {
|
|
LOG(WARNING) << "Field name diff: " << field1->name() << " <=> "
|
|
<< field2->name();
|
|
return false;
|
|
}
|
|
if (field1->number() != field2->number()) {
|
|
LOG(WARNING) << "Field " << field1->name()
|
|
<< " number diff: " << field1->number() << " <=> "
|
|
<< field2->number();
|
|
return false;
|
|
}
|
|
if (field1->label() != field2->label()) {
|
|
LOG(WARNING) << "Field " << field1->name()
|
|
<< " label diff: " << field1->label() << " <=> "
|
|
<< field2->label();
|
|
return false;
|
|
}
|
|
bool bRet = false;
|
|
if (field1->type() != field2->type()) {
|
|
LOG(WARNING) << "Field " << field1->name()
|
|
<< " type diff: " << field1->type() << " <=> "
|
|
<< field2->type();
|
|
return bRet;
|
|
} else if (field1->type() == FieldDescriptor::TYPE_MESSAGE) {
|
|
const Descriptor* msg1 = field1->message_type();
|
|
const Descriptor* msg2 = field2->message_type();
|
|
|
|
bRet = Compare(msg1, msg2);
|
|
} else {
|
|
bRet = true;
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
// Compares the two descriptors and return false immediately if different.
|
|
bool Compare(const Descriptor* desc1, const Descriptor* desc2) {
|
|
LOG(INFO) << "Descriptor1 full name: " << desc1->full_name() << " <=> "
|
|
<< desc2->full_name();
|
|
for (int i = 0; i < desc1->field_count(); ++i) {
|
|
const FieldDescriptor* field1 = desc1->field(i);
|
|
const FieldDescriptor* field2 = desc2->FindFieldByName(field1->name());
|
|
|
|
bool bRet = false;
|
|
if (field2) {
|
|
bRet = Compare(field1, field2);
|
|
} else {
|
|
LOG(ERROR) << "Descriptor1 full name: " << desc1->full_name()
|
|
<< "=> Extra field1 name=" << field1->name()
|
|
<< ", number=" << field1->number()
|
|
<< ", label=" << field1->label()
|
|
<< ", type=" << field1->type();
|
|
}
|
|
if (!bRet) {
|
|
return false;
|
|
}
|
|
}
|
|
for (int i = 0; i < desc2->field_count(); ++i) {
|
|
const FieldDescriptor* field2 = desc2->field(i);
|
|
const FieldDescriptor* field1 = desc1->FindFieldByName(field2->name());
|
|
if (!field1) {
|
|
LOG(ERROR) << "Descriptor2 full name: " << desc2->full_name()
|
|
<< "=> Extra field2 name=" << field2->name()
|
|
<< ", number=" << field2->number()
|
|
<< ", label=" << field2->label()
|
|
<< ", type=" << field2->type();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
TEST(ConnectionsLogTest, TwoMessagesAreIdentical) {
|
|
const proto2::Descriptor* descriptor1 = G3ConnectionsLog::descriptor();
|
|
const proto2::Descriptor* descriptor2 = P3ConnectionsLog::descriptor();
|
|
|
|
EXPECT_TRUE(Compare(descriptor1, descriptor2));
|
|
}
|
|
|
|
} // namespace
|
|
|
|
} // namespace proto
|
|
} // namespace analytics
|
|
} // namespace nearby
|