blob: 7f510debfaa5d334017e7be7919d8d16ac856020 [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "login_manager/landlock_policy.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <base/containers/contains.h>
#include <libminijail.h>
#include <scoped_minijail.h>
namespace login_manager {
namespace {
TEST(LandlockPolicyTest, BasicPathsAllowlisted) {
login_manager::LandlockPolicy fs_policy;
auto policy_snapshot = fs_policy.GetPolicySnapshotForTesting();
// Test that we have paths vital to Chrome's operations.
EXPECT_TRUE(base::Contains(policy_snapshot, "/home/chronos"));
EXPECT_TRUE(base::Contains(policy_snapshot, "/home/user"));
EXPECT_TRUE(base::Contains(policy_snapshot, "/tmp"));
// Test that we do not include overly broad paths.
EXPECT_FALSE(base::Contains(policy_snapshot, "/"));
EXPECT_FALSE(base::Contains(policy_snapshot, "/home"));
EXPECT_FALSE(base::Contains(policy_snapshot, "/home/root"));
}
TEST(LandlockPolicyTest, MinijailConfigured) {
login_manager::LandlockPolicy fs_policy;
const ScopedMinijail j(minijail_new());
EXPECT_FALSE(minijail_is_fs_restriction_ruleset_initialized(j.get()));
fs_policy.SetupPolicy(j.get());
if (minijail_is_fs_restriction_available()) {
EXPECT_TRUE(minijail_is_fs_restriction_ruleset_initialized(j.get()));
}
}
} // namespace
} // namespace login_manager