xref: /aosp_15_r20/external/sandboxed-api/oss-internship-2020/libuv/tests/test_array.cc (revision ec63e07ab9515d95e79c211197c445ef84cefa6a)
1*ec63e07aSXin Li // Copyright 2020 Google LLC
2*ec63e07aSXin Li //
3*ec63e07aSXin Li // Licensed under the Apache License, Version 2.0 (the "License");
4*ec63e07aSXin Li // you may not use this file except in compliance with the License.
5*ec63e07aSXin Li // You may obtain a copy of the License at
6*ec63e07aSXin Li //
7*ec63e07aSXin Li //     https://www.apache.org/licenses/LICENSE-2.0
8*ec63e07aSXin Li //
9*ec63e07aSXin Li // Unless required by applicable law or agreed to in writing, software
10*ec63e07aSXin Li // distributed under the License is distributed on an "AS IS" BASIS,
11*ec63e07aSXin Li // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*ec63e07aSXin Li // See the License for the specific language governing permissions and
13*ec63e07aSXin Li // limitations under the License.
14*ec63e07aSXin Li 
15*ec63e07aSXin Li #include <linux/futex.h>
16*ec63e07aSXin Li #include <syscall.h>
17*ec63e07aSXin Li #include <uv.h>
18*ec63e07aSXin Li 
19*ec63e07aSXin Li #include "gtest/gtest.h"
20*ec63e07aSXin Li #include "absl/flags/flag.h"
21*ec63e07aSXin Li #include "sandboxed_api/util/status_matchers.h"
22*ec63e07aSXin Li #include "uv_sapi.sapi.h"  // NOLINT(build/include)
23*ec63e07aSXin Li 
24*ec63e07aSXin Li namespace {
25*ec63e07aSXin Li 
26*ec63e07aSXin Li class UVTestArraySapiSandbox : public uv::UVSandbox {
27*ec63e07aSXin Li  private:
ModifyPolicy(sandbox2::PolicyBuilder *)28*ec63e07aSXin Li   std::unique_ptr<sandbox2::Policy> ModifyPolicy(
29*ec63e07aSXin Li       sandbox2::PolicyBuilder*) override {
30*ec63e07aSXin Li     return sandbox2::PolicyBuilder()
31*ec63e07aSXin Li         .AllowDynamicStartup()
32*ec63e07aSXin Li         .AllowExit()
33*ec63e07aSXin Li         .AllowFutexOp(FUTEX_WAKE_PRIVATE)
34*ec63e07aSXin Li         .AllowOpen()
35*ec63e07aSXin Li         .AllowSyscall(__NR_sysinfo)
36*ec63e07aSXin Li         .AllowWrite()
37*ec63e07aSXin Li         .BuildOrDie();
38*ec63e07aSXin Li   }
39*ec63e07aSXin Li };
40*ec63e07aSXin Li 
41*ec63e07aSXin Li class UVTestArray : public ::testing::Test {
42*ec63e07aSXin Li  protected:
SetUp()43*ec63e07aSXin Li   void SetUp() override {
44*ec63e07aSXin Li     sandbox_ = std::make_unique<UVTestArraySapiSandbox>();
45*ec63e07aSXin Li     ASSERT_THAT(sandbox_->Init(), sapi::IsOk());
46*ec63e07aSXin Li     api_ = std::make_unique<uv::UVApi>(sandbox_.get());
47*ec63e07aSXin Li   }
48*ec63e07aSXin Li 
49*ec63e07aSXin Li   std::unique_ptr<UVTestArraySapiSandbox> sandbox_;
50*ec63e07aSXin Li   std::unique_ptr<uv::UVApi> api_;
51*ec63e07aSXin Li };
52*ec63e07aSXin Li 
TEST_F(UVTestArray,LoadAvg)53*ec63e07aSXin Li TEST_F(UVTestArray, LoadAvg) {
54*ec63e07aSXin Li   double avg_buf[] = {-1, -1, -1};
55*ec63e07aSXin Li   sapi::v::Array<double> avg(avg_buf, 3);
56*ec63e07aSXin Li 
57*ec63e07aSXin Li   // Check that loadavg is as initialized before call
58*ec63e07aSXin Li   ASSERT_EQ(avg_buf[0], -1);
59*ec63e07aSXin Li   ASSERT_EQ(avg_buf[1], -1);
60*ec63e07aSXin Li   ASSERT_EQ(avg_buf[2], -1);
61*ec63e07aSXin Li 
62*ec63e07aSXin Li   // Get loadavg
63*ec63e07aSXin Li   ASSERT_THAT(api_->sapi_uv_loadavg(avg.PtrBoth()), sapi::IsOk());
64*ec63e07aSXin Li 
65*ec63e07aSXin Li   // Check that loadavg values are positive
66*ec63e07aSXin Li   ASSERT_GE(avg_buf[0], 0);
67*ec63e07aSXin Li   ASSERT_GE(avg_buf[1], 0);
68*ec63e07aSXin Li   ASSERT_GE(avg_buf[2], 0);
69*ec63e07aSXin Li }
70*ec63e07aSXin Li 
71*ec63e07aSXin Li }  // namespace
72