blob: 7dbe58be6dd9cc55309430218f6b11c2dc7b1cdb [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 <lib/zx/channel.h>
#include <fbl/ref_ptr.h>
#include <fs/pseudo_dir.h>
#include <gtest/gtest.h>
#include "src/sys/appmgr/hub/realm_hub.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("r", &realm_dir), ZX_OK);
ASSERT_EQ(hub.dir()->Lookup("c", &component_dir), 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(test_realm_name, &name_dir), ZX_OK);
fbl::RefPtr<fs::Vnode> koid_dir;
ASSERT_EQ(name_dir->Lookup(test_realm_koid, &koid_dir), 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("svc", &tmp_dir), ZX_OK);
ASSERT_EQ(tmp_dir->Lookup("testentry", &tmp_dir), ZX_OK);
// test realm removal
ASSERT_EQ(hub.RemoveRealm(hub_info), ZX_OK);
ASSERT_EQ(realm_dir->Lookup(test_realm_name, &name_dir), ZX_ERR_NOT_FOUND);
}
} // namespace
} // namespace component