mirror of
https://github.com/nestriness/cdc-file-transfer.git
synced 2026-05-02 01:43:08 +03:00
131
cdc_stream/metrics_recorder_test.cc
Normal file
131
cdc_stream/metrics_recorder_test.cc
Normal file
@@ -0,0 +1,131 @@
|
||||
// Copyright 2022 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
|
||||
//
|
||||
// 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.
|
||||
|
||||
#include "cdc_stream/metrics_recorder.h"
|
||||
|
||||
#include "common/status_test_macros.h"
|
||||
#include "gtest/gtest.h"
|
||||
#include "metrics/metrics.h"
|
||||
|
||||
namespace cdc_ft {
|
||||
namespace {
|
||||
|
||||
struct MetricsRecord {
|
||||
MetricsRecord(metrics::DeveloperLogEvent dev_log_event,
|
||||
metrics::EventType code)
|
||||
: dev_log_event(std::move(dev_log_event)), code(code) {}
|
||||
metrics::DeveloperLogEvent dev_log_event;
|
||||
metrics::EventType code;
|
||||
};
|
||||
|
||||
class MetricsServiceForTesting : public metrics::MetricsService {
|
||||
public:
|
||||
MetricsServiceForTesting() {
|
||||
metrics_records_ = new std::vector<MetricsRecord>();
|
||||
}
|
||||
|
||||
~MetricsServiceForTesting() { delete metrics_records_; }
|
||||
|
||||
void RecordEvent(metrics::DeveloperLogEvent event,
|
||||
metrics::EventType code) const override {
|
||||
metrics_records_->push_back(MetricsRecord(std::move(event), code));
|
||||
}
|
||||
|
||||
int NumberOfRecordRequests() { return (int)metrics_records_->size(); }
|
||||
|
||||
std::vector<MetricsRecord> GetEventsAndClear() {
|
||||
return std::move(*metrics_records_);
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<MetricsRecord>* metrics_records_;
|
||||
};
|
||||
|
||||
class MetricsRecorderTest : public ::testing::Test {
|
||||
public:
|
||||
void SetUp() override { metrics_service_ = new MetricsServiceForTesting(); }
|
||||
|
||||
void TearDown() override { delete metrics_service_; }
|
||||
|
||||
protected:
|
||||
MetricsServiceForTesting* metrics_service_;
|
||||
};
|
||||
|
||||
TEST_F(MetricsRecorderTest, SendEventWithMultisessionId) {
|
||||
MultiSessionMetricsRecorder target(metrics_service_);
|
||||
metrics::DeveloperLogEvent q_evt;
|
||||
q_evt.project_id = "proj/id";
|
||||
q_evt.organization_id = "org/id";
|
||||
|
||||
target.RecordEvent(std::move(q_evt), metrics::EventType::kMultiSessionStart);
|
||||
EXPECT_EQ(metrics_service_->NumberOfRecordRequests(), 1);
|
||||
std::vector<MetricsRecord> requests = metrics_service_->GetEventsAndClear();
|
||||
EXPECT_EQ(requests[0].code, metrics::EventType::kMultiSessionStart);
|
||||
metrics::DeveloperLogEvent expected_evt;
|
||||
expected_evt.project_id = "proj/id";
|
||||
expected_evt.organization_id = "org/id";
|
||||
expected_evt.as_manager_data =
|
||||
std::make_unique<metrics::AssetStreamingManagerData>();
|
||||
expected_evt.as_manager_data->multisession_id = target.MultiSessionId();
|
||||
EXPECT_EQ(requests[0].dev_log_event, expected_evt);
|
||||
EXPECT_FALSE(target.MultiSessionId().empty());
|
||||
|
||||
q_evt = metrics::DeveloperLogEvent();
|
||||
q_evt.project_id = "proj/id";
|
||||
q_evt.organization_id = "org/id";
|
||||
target.RecordEvent(std::move(q_evt), metrics::EventType::kMultiSessionStart);
|
||||
EXPECT_EQ(metrics_service_->NumberOfRecordRequests(), 1);
|
||||
std::vector<MetricsRecord> requests2 = metrics_service_->GetEventsAndClear();
|
||||
EXPECT_EQ(requests2[0].code, metrics::EventType::kMultiSessionStart);
|
||||
EXPECT_EQ(requests2[0].dev_log_event, requests[0].dev_log_event);
|
||||
|
||||
MultiSessionMetricsRecorder target2(metrics_service_);
|
||||
EXPECT_NE(target2.MultiSessionId(), target.MultiSessionId());
|
||||
}
|
||||
|
||||
TEST_F(MetricsRecorderTest, SendEventWithSessionId) {
|
||||
SessionMetricsRecorder target(metrics_service_, "id1", "m_proj", "m_org");
|
||||
metrics::DeveloperLogEvent q_evt;
|
||||
q_evt.project_id = "proj/id";
|
||||
q_evt.organization_id = "org/id";
|
||||
|
||||
target.RecordEvent(std::move(q_evt), metrics::EventType::kSessionStart);
|
||||
EXPECT_EQ(metrics_service_->NumberOfRecordRequests(), 1);
|
||||
std::vector<MetricsRecord> requests = metrics_service_->GetEventsAndClear();
|
||||
EXPECT_EQ(requests[0].code, metrics::EventType::kSessionStart);
|
||||
metrics::DeveloperLogEvent expected_evt;
|
||||
expected_evt.project_id = "m_proj";
|
||||
expected_evt.organization_id = "m_org";
|
||||
expected_evt.as_manager_data =
|
||||
std::make_unique<metrics::AssetStreamingManagerData>();
|
||||
expected_evt.as_manager_data->multisession_id = "id1";
|
||||
expected_evt.as_manager_data->session_id = target.SessionId();
|
||||
EXPECT_EQ(requests[0].dev_log_event, expected_evt);
|
||||
EXPECT_FALSE(target.SessionId().empty());
|
||||
|
||||
q_evt = metrics::DeveloperLogEvent();
|
||||
q_evt.project_id = "proj/id";
|
||||
q_evt.organization_id = "org/id";
|
||||
target.RecordEvent(std::move(q_evt), metrics::EventType::kSessionStart);
|
||||
EXPECT_EQ(metrics_service_->NumberOfRecordRequests(), 1);
|
||||
std::vector<MetricsRecord> requests2 = metrics_service_->GetEventsAndClear();
|
||||
EXPECT_EQ(requests2[0].code, metrics::EventType::kSessionStart);
|
||||
EXPECT_EQ(requests2[0].dev_log_event, requests[0].dev_log_event);
|
||||
|
||||
SessionMetricsRecorder target2(metrics_service_, "id2", "m_proj", "m_org");
|
||||
EXPECT_NE(target2.SessionId(), target.SessionId());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace cdc_ft
|
||||
Reference in New Issue
Block a user