Skip to content

Commit

Permalink
Add a crashy program for SetString test.
Browse files Browse the repository at this point in the history
b/358663298

Change-Id: If8931dac92837bc7295006e7c3e57fe8f91dc627
  • Loading branch information
v-kryachko committed Dec 4, 2024
1 parent 3181564 commit 73819a1
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
10 changes: 10 additions & 0 deletions starboard/extension/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,13 @@ target(gtest_target_type, "extension_test") {
deps += cobalt_platform_dependencies
}
}

target(gtest_target_type, "setstring_test") {
testonly = true
has_pedantic_warnings = true
sources = [ "setstring_test.cc" ]
deps = [ "//testing/gtest" ]
if (sb_is_modular && current_toolchain == cobalt_toolchain) {
deps += cobalt_platform_dependencies
}
}
69 changes: 69 additions & 0 deletions starboard/extension/setstring_test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// 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.

// This is a kind of death test, as described in
// https://github.com/google/googletest/blob/main/docs/advanced.md#death-tests,
// except, it doesn't spawn another process, but terminates itself.
// It is intended to be started from a host machine on a target device
// to generate a coredump, which is verified on the host.

#include "starboard/client_porting/wrap_main/wrap_main.h"
#include "starboard/event.h"
#include "starboard/extension/crash_handler.h"
#include "starboard/system.h"
#include "testing/gtest/include/gtest/gtest.h"

const char* long_string =
"LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong"
"LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong"
"LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong"
"LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong"
"LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong"
"LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong"
"LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong"
"LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong"
"LongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLongLong"
"String";

TEST(ExtensionTest, SetString) {
typedef CobaltExtensionCrashHandlerApi ExtensionApi;
const char* kExtensionName = kCobaltExtensionCrashHandlerName;

const ExtensionApi* extension_api =
static_cast<const ExtensionApi*>(SbSystemGetExtension(kExtensionName));
if (!extension_api) {
return;
}

extension_api->SetString("Annotation1", long_string);
extension_api->SetString("Annotation2", long_string);
extension_api->SetString("Annotation3", long_string);
extension_api->SetString("Annotation4", long_string);

SbSystemBreakIntoDebugger();
}

namespace {
int InitAndRunAllTests(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
} // namespace

// When we are building Evergreen we need to export SbEventHandle so that the
// ELF loader can find and invoke it.
#if SB_IS(MODULAR)
SB_EXPORT
#endif // SB_IS(MODULAR)
STARBOARD_WRAP_SIMPLE_MAIN(InitAndRunAllTests);

0 comments on commit 73819a1

Please sign in to comment.