blob: 1f77de00e1b04a9b8d8cc02d81d2cb595b3b75cc [file] [log] [blame]
// Copyright 2024 The Cobalt Authors. All Rights Reserved.
//
// 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 "cobalt/watchdog//instrumentation_log.h"
#include <set>
#include <vector>
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "starboard/common/file.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace cobalt {
namespace watchdog {
class InstrumentationLogTest : public testing::Test {
protected:
InstrumentationLog* instrumentation_log_;
};
TEST_F(InstrumentationLogTest, CanCallLogEvent) {
InstrumentationLog log;
log.LogEvent("abc");
ASSERT_EQ(log.GetLogTrace().size(), 1);
}
TEST_F(InstrumentationLogTest, LogEventReturnsFalseOnMaxLenExceed) {
InstrumentationLog log;
std::string maxLenEvent(kMaxEventLenBytes, 'a');
ASSERT_TRUE(log.LogEvent(maxLenEvent));
std::string exceedingLenEvent(kMaxEventLenBytes + 1, 'a');
ASSERT_FALSE(log.LogEvent(exceedingLenEvent));
}
TEST_F(InstrumentationLogTest, GetLogTraceReturnsEventsInOrder) {
InstrumentationLog log;
for (int i = 0; i < kBufferSize; i++) {
log.LogEvent(std::to_string(i));
}
log.LogEvent("1");
log.LogEvent("2");
log.LogEvent("3");
log.LogEvent("4");
log.LogEvent("5");
ASSERT_EQ(log.GetLogTrace().at(kBufferSize - 1 - 4), "1");
ASSERT_EQ(log.GetLogTrace().at(kBufferSize - 1 - 3), "2");
ASSERT_EQ(log.GetLogTrace().at(kBufferSize - 1 - 2), "3");
ASSERT_EQ(log.GetLogTrace().at(kBufferSize - 1 - 1), "4");
ASSERT_EQ(log.GetLogTrace().at(kBufferSize - 1), "5");
}
TEST_F(InstrumentationLogTest, GetLogTraceCanReturnDuplicateEvents) {
InstrumentationLog log;
log.LogEvent("1");
log.LogEvent("1");
log.LogEvent("1");
ASSERT_EQ(log.GetLogTrace().at(0), "1");
ASSERT_EQ(log.GetLogTrace().at(1), "1");
ASSERT_EQ(log.GetLogTrace().at(2), "1");
}
TEST_F(InstrumentationLogTest, CanGetEmptyTraceAsValue) {
InstrumentationLog log;
ASSERT_EQ(log.GetLogTraceAsValue().GetList().size(), 0);
}
TEST_F(InstrumentationLogTest, CanGetLogTraceAsValue) {
InstrumentationLog log;
log.LogEvent("1");
log.LogEvent("2");
log.LogEvent("3");
ASSERT_EQ(log.GetLogTraceAsValue().GetList().at(0).GetString(), "1");
ASSERT_EQ(log.GetLogTraceAsValue().GetList().at(1).GetString(), "2");
ASSERT_EQ(log.GetLogTraceAsValue().GetList().at(2).GetString(), "3");
}
TEST_F(InstrumentationLogTest, CanClearLog) {
InstrumentationLog log;
log.LogEvent("1");
log.LogEvent("2");
log.LogEvent("3");
ASSERT_EQ(log.GetLogTrace().size(), 3);
log.ClearLog();
ASSERT_EQ(log.GetLogTrace().size(), 0);
}
TEST_F(InstrumentationLogTest, CanClearEmptyLog) {
InstrumentationLog log;
ASSERT_EQ(log.GetLogTrace().size(), 0);
log.ClearLog();
ASSERT_EQ(log.GetLogTrace().size(), 0);
}
} // namespace watchdog
} // namespace cobalt