brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · fa96f32 Raw
93 lines · cpp
1//===-- sanitizer_mac_test.cpp --------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// Tests for sanitizer_mac.{h,cpp}10//11//===----------------------------------------------------------------------===//12 13#include "sanitizer_common/sanitizer_platform.h"14#if SANITIZER_APPLE15 16#include "sanitizer_common/sanitizer_mac.h"17 18#include "gtest/gtest.h"19 20#include <sys/sysctl.h>  // sysctlbyname21#include <mach/kern_return.h>  // KERN_SUCCESS22 23namespace __sanitizer {24 25void ParseVersion(const char *vers, u16 *major, u16 *minor);26 27TEST(SanitizerMac, ParseVersion) {28  u16 major, minor;29 30  ParseVersion("11.22.33", &major, &minor);31  EXPECT_EQ(major, 11);32  EXPECT_EQ(minor, 22);33 34  ParseVersion("1.2", &major, &minor);35  EXPECT_EQ(major, 1);36  EXPECT_EQ(minor, 2);37}38 39// TODO(yln): Run sanitizer unit tests for the simulators (rdar://65680742)40#if SANITIZER_IOSSIM41TEST(SanitizerMac, GetMacosAlignedVersion) {42  const char *vers_str;43  if (SANITIZER_IOS || SANITIZER_TVOS) {44    vers_str = "13.0";45  } else if (SANITIZER_WATCHOS) {46    vers_str = "6.5";47  } else {48    FAIL() << "unsupported simulator runtime";49  }50  setenv("SIMULATOR_RUNTIME_VERSION", vers_str, /*overwrite=*/1);51 52  MacosVersion vers = GetMacosAlignedVersion();53  EXPECT_EQ(vers.major, 10);54  EXPECT_EQ(vers.minor, 15);55}56#else57TEST(SanitizerMac, GetMacosAlignedVersion) {58  MacosVersion vers = GetMacosAlignedVersion();59  std::ostringstream oss;60  oss << vers.major << '.' << vers.minor;61  std::string actual = oss.str();62 63  char buf[100];64  size_t len = sizeof(buf);65  int res = sysctlbyname("kern.osproductversion", buf, &len, nullptr, 0);66  ASSERT_EQ(res, KERN_SUCCESS);67  std::string expected(buf);68 69  // Prefix match70  ASSERT_EQ(expected.compare(0, actual.size(), actual), 0);71}72#endif73 74TEST(SanitizerMac, GetDarwinKernelVersion) {75  DarwinKernelVersion vers = GetDarwinKernelVersion();76  std::ostringstream oss;77  oss << vers.major << '.' << vers.minor;78  std::string actual = oss.str();79 80  char buf[100];81  size_t len = sizeof(buf);82  int res = sysctlbyname("kern.osrelease", buf, &len, nullptr, 0);83  ASSERT_EQ(res, KERN_SUCCESS);84  std::string expected(buf);85 86  // Prefix match87  ASSERT_EQ(expected.compare(0, actual.size(), actual), 0);88}89 90}  // namespace __sanitizer91 92#endif  // SANITIZER_APPLE93