blob: 5cc96289600f44a2a0b1bcda05e06e96b255700e [file] [log] [blame]
// Copyright 2018 The Fuchsia 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 "garnet/bin/appmgr/hub/realm_hub.h"
#include <fbl/ref_ptr.h>
#include <fs/pseudo-dir.h>
#include <zx/channel.h>
#include "gtest/gtest.h"
namespace component {
namespace {
TEST(RealmHub, Simple) {
RealmHub hub(fbl::AdoptRef(new fs::PseudoDir()));
fbl::RefPtr<fs::Vnode> realm_dir;
fbl::RefPtr<fs::Vnode> component_dir;
ASSERT_EQ(hub.dir()->Lookup(&realm_dir, "r"), ZX_OK);
ASSERT_EQ(hub.dir()->Lookup(&component_dir, "c"), ZX_OK);
auto test_realm_dir = fbl::AdoptRef(new fs::PseudoDir());
fbl::String test_realm_name = "test-realm";
fbl::String test_realm_koid = "1028";
auto hub_info = HubInfo(test_realm_name, test_realm_koid, test_realm_dir);
ASSERT_EQ(hub.AddRealm(hub_info), ZX_OK);
fbl::RefPtr<fs::Vnode> name_dir;
ASSERT_EQ(realm_dir->Lookup(&name_dir, test_realm_name), ZX_OK);
fbl::RefPtr<fs::Vnode> koid_dir;
ASSERT_EQ(name_dir->Lookup(&koid_dir, test_realm_koid), ZX_OK);
// test that currect vnode was added for hub
test_realm_dir->AddEntry("test-dir", fbl::AdoptRef(new fs::PseudoDir()));
fbl::RefPtr<fs::Vnode> test_dir;
ASSERT_EQ(koid_dir->Lookup(&test_dir, "test-dir"), ZX_OK);
// test adding services
auto svc = fbl::AdoptRef(new fs::PseudoDir());
svc->AddEntry("testentry", fbl::AdoptRef(new fs::PseudoDir()));
hub.AddServices(svc);
fbl::RefPtr<fs::Vnode> tmp_dir;
ASSERT_EQ(hub.dir()->Lookup(&tmp_dir, "svc"), ZX_OK);
ASSERT_EQ(tmp_dir->Lookup(&tmp_dir, "testentry"), ZX_OK);
// test realm removal
ASSERT_EQ(hub.RemoveRealm(hub_info), ZX_OK);
ASSERT_EQ(realm_dir->Lookup(&name_dir, test_realm_name), ZX_ERR_NOT_FOUND);
}
} // namespace
} // namespace component