blob: cc2f66e713418e55a5e55614605d18991cf70809 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "tools/symbolizer/analytics.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
namespace symbolizer {
namespace {
using ::analytics::google_analytics_4::Value;
using ::testing::ContainerEq;
TEST(AnalyticsTest, SymbolizationAnalyticsBuilder) {
SymbolizationAnalyticsBuilder builder;
builder.TotalTimerStart();
builder.DownloadTimerStart();
builder.SetAtLeastOneInvalidInput();
builder.SetNumberOfModules(2);
builder.SetNumberOfModulesWithLocalSymbols(3);
builder.SetNumberOfModulesWithCachedSymbols(4);
builder.SetNumberOfModulesWithDownloadedSymbols(5);
builder.SetNumberOfModulesWithDownloadingFailure(6);
builder.IncreaseNumberOfFrames();
builder.IncreaseNumberOfFramesSymbolized();
builder.IncreaseNumberOfFramesInvalid();
builder.SetRemoteSymbolLookupEnabledBit(false);
builder.DownloadTimerStop();
builder.TotalTimerStop();
auto parameters_ua = builder.BuildUaHit().parameters();
ASSERT_GE(std::stoll(parameters_ua["utt"]), std::stoll(parameters_ua["cm11"]));
ASSERT_GE(std::stoll(parameters_ua["cm11"]), 0LL);
parameters_ua["utt"] = "100";
parameters_ua["cm11"] = "50";
const std::map<std::string, std::string> expected_result_ua{
{"t", "timing"}, {"utc", "symbolization"},
{"utv", ""}, {"cm1", "1"},
{"cm2", "2"}, {"cm3", "3"},
{"cm4", "4"}, {"cm5", "5"},
{"cm6", "6"}, {"cm7", "1"},
{"cm8", "1"}, {"cm9", "1"},
{"cm10", "0"}, {"cm11", "50"},
{"utt", "100"}};
EXPECT_THAT(parameters_ua, ContainerEq(expected_result_ua));
auto event = builder.BuildGa4Event();
EXPECT_EQ(event->name(), "symbolize");
ASSERT_TRUE(event->parameters_opt().has_value());
auto parameters = *(event->parameters_opt());
ASSERT_GE(parameters["time_total_ms"], parameters["time_download_ms"]);
ASSERT_GE(std::get<int64_t>(parameters["time_download_ms"]), 0LL);
parameters["time_total_ms"] = 100;
parameters["time_download_ms"] = 50;
const std::map<std::string, Value> expected_result{{"has_invalid_input", true},
{"num_modules", 2},
{"num_modules_local", 3},
{"num_modules_cached", 4},
{"num_modules_downloaded", 5},
{"num_modules_download_fail", 6},
{"num_frames", 1},
{"num_frames_symbolized", 1},
{"num_frames_invalid", 1},
{"remote_symbol_enabled", false},
{"time_download_ms", 50},
{"time_total_ms", 100}};
EXPECT_THAT(parameters, ContainerEq(expected_result));
}
} // namespace
} // namespace symbolizer