blob: fc79afc2b597ee5b69b6b25b27b99942f8d824e0 [file] [log] [blame]
// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/files/scoped_temp_dir.h>
#include <gtest/gtest.h>
#include "usb_bouncer/entry_manager.h"
#include "usb_bouncer/entry_manager_test_util.h"
#include "usb_bouncer/util.h"
namespace usb_bouncer {
class EntryManagerTest : public testing::Test {
public:
void GarbageCollectTest(bool user_present) {
util_.RefreshDB(user_present /*include_user_db*/, true /*new_db*/);
EXPECT_TRUE(util_.Get()->HandleUdev(EntryManager::UdevAction::kAdd,
kDefaultDevpath));
EXPECT_TRUE(util_.Get()->HandleUdev(EntryManager::UdevAction::kRemove,
kDefaultDevpath));
EXPECT_EQ(util_.GarbageCollectInternal(true /*global_only*/), 0);
EXPECT_TRUE(util_.GlobalTrashContainsEntry(kDefaultDevpath, kDefaultRule));
if (user_present) {
EXPECT_TRUE(util_.UserDBContainsEntry(kDefaultRule));
}
EXPECT_TRUE(util_.Get()->GarbageCollect());
EXPECT_TRUE(util_.GlobalTrashContainsEntry(kDefaultDevpath, kDefaultRule));
if (user_present) {
EXPECT_TRUE(util_.UserDBContainsEntry(kDefaultRule));
}
util_.ExpireEntry(user_present, kDefaultDevpath, kDefaultRule);
EXPECT_EQ(util_.GarbageCollectInternal(true /*global_only*/), 1);
EXPECT_FALSE(util_.GlobalTrashContainsEntry(kDefaultDevpath, kDefaultRule));
if (user_present) {
EXPECT_TRUE(util_.UserDBContainsEntry(kDefaultRule));
}
EXPECT_TRUE(util_.Get()->HandleUdev(EntryManager::UdevAction::kAdd,
kDefaultDevpath));
EXPECT_TRUE(util_.Get()->HandleUdev(EntryManager::UdevAction::kRemove,
kDefaultDevpath));
util_.ExpireEntry(user_present, kDefaultDevpath, kDefaultRule);
EXPECT_TRUE(util_.Get()->GarbageCollect());
EXPECT_FALSE(util_.GlobalTrashContainsEntry(kDefaultDevpath, kDefaultRule));
if (user_present) {
EXPECT_FALSE(util_.UserDBContainsEntry(kDefaultRule));
}
}
void GenerateRulesTest(bool user_present) {
util_.RefreshDB(user_present /*include_user_db*/, true /*new_db*/);
EXPECT_FALSE(util_.Get()->GenerateRules().empty());
EXPECT_TRUE(util_.Get()->HandleUdev(EntryManager::UdevAction::kAdd,
kDefaultDevpath));
std::string rules = util_.Get()->GenerateRules();
EXPECT_FALSE(rules.empty());
EXPECT_NE(rules.find(kDefaultRule, 0), std::string::npos);
}
void HandleUdevTest(bool user_present) {
util_.RefreshDB(user_present /*include_user_db*/, true /*new_db*/);
EXPECT_FALSE(util_.GlobalDBContainsEntry(kDefaultDevpath, kDefaultRule));
EXPECT_FALSE(util_.GlobalTrashContainsEntry(kDefaultDevpath, kDefaultRule));
if (user_present) {
EXPECT_FALSE(util_.UserDBContainsEntry(kDefaultRule));
}
EXPECT_TRUE(util_.Get()->HandleUdev(EntryManager::UdevAction::kAdd,
kDefaultDevpath));
EXPECT_TRUE(util_.GlobalDBContainsEntry(kDefaultDevpath, kDefaultRule));
EXPECT_FALSE(util_.GlobalTrashContainsEntry(kDefaultDevpath, kDefaultRule));
if (user_present) {
EXPECT_TRUE(util_.UserDBContainsEntry(kDefaultRule));
}
EXPECT_FALSE(util_.Get()->HandleUdev(EntryManager::UdevAction::kAdd, ""));
EXPECT_FALSE(util_.Get()->HandleUdev(EntryManager::UdevAction::kAdd,
kUsbguardPolicyDir));
EXPECT_TRUE(util_.Get()->HandleUdev(EntryManager::UdevAction::kRemove,
kDefaultDevpath));
EXPECT_FALSE(util_.GlobalDBContainsEntry(kDefaultDevpath, kDefaultRule));
EXPECT_TRUE(util_.GlobalTrashContainsEntry(kDefaultDevpath, kDefaultRule));
if (user_present) {
EXPECT_TRUE(util_.UserDBContainsEntry(kDefaultRule));
}
EXPECT_FALSE(
util_.Get()->HandleUdev(EntryManager::UdevAction::kRemove, ""));
}
protected:
EntryManagerTestUtil util_;
};
TEST_F(EntryManagerTest, GarbageCollect_NoUser) {
GarbageCollectTest(false /*user_present*/);
}
TEST_F(EntryManagerTest, GarbageCollect_WithUser) {
GarbageCollectTest(true /*user_present*/);
}
TEST_F(EntryManagerTest, GenerateRules_NoUser) {
GenerateRulesTest(false /*user_present*/);
}
TEST_F(EntryManagerTest, GenerateRules_WithUser) {
GenerateRulesTest(true /*user_present*/);
}
TEST_F(EntryManagerTest, HandleUdev_NoUser) {
HandleUdevTest(false /*user_present*/);
}
TEST_F(EntryManagerTest, HandleUdev_WithUser) {
HandleUdevTest(true /*user_present*/);
}
TEST_F(EntryManagerTest, HandleUserLogin_NoUser) {
util_.RefreshDB(false /*include_user_db*/, true /*new_db*/);
EXPECT_FALSE(util_.Get()->HandleUserLogin());
}
TEST_F(EntryManagerTest, HandleUserLogin_WithUser) {
util_.RefreshDB(false /*include_user_db*/, true /*new_db*/);
EXPECT_TRUE(
util_.Get()->HandleUdev(EntryManager::UdevAction::kAdd, kDefaultDevpath));
util_.RefreshDB(true /*include_user_db*/, false /*new_db*/);
EXPECT_TRUE(util_.GlobalDBContainsEntry(kDefaultDevpath, kDefaultRule));
EXPECT_FALSE(util_.UserDBContainsEntry(kDefaultRule));
EXPECT_TRUE(util_.Get()->HandleUserLogin());
EXPECT_TRUE(util_.UserDBContainsEntry(kDefaultRule));
}
} // namespace usb_bouncer