blob: 7382afba4b37a74bae1e9e75847fee262aa3bb28 [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 "src/lib/pkg_url/fuchsia_pkg_url.h"
#include "gtest/gtest.h"
namespace component {
namespace {
FuchsiaPkgUrl ParseFuchsiaPkgUrl(const std::string& s) {
FuchsiaPkgUrl url;
EXPECT_TRUE(url.Parse(s));
return url;
}
TEST(FuchsiaPkgUrl, Parse) {
FuchsiaPkgUrl fp;
EXPECT_FALSE(fp.Parse(""));
EXPECT_FALSE(fp.Parse("{}"));
EXPECT_FALSE(fp.Parse(
"file://fuchsia.com/component_hello_world#meta/hello_world.cmx"));
EXPECT_FALSE(fp.Parse("#meta/stuff"));
EXPECT_FALSE(fp.Parse("fuchsia-pkg://fuchsia.com/component_hello_world#"));
EXPECT_TRUE(fp.Parse("fuchsia-pkg://fuchsia.com/component_hello_world"));
EXPECT_EQ("fuchsia.com", fp.host_name());
EXPECT_EQ("component_hello_world", fp.package_name());
EXPECT_EQ("0", fp.variant());
EXPECT_EQ("", fp.hash());
EXPECT_EQ("", fp.resource_path());
EXPECT_TRUE(fp.Parse(
"fuchsia-pkg://fuchsia.com/component_hello_world#meta/hello_world.cmx"));
EXPECT_EQ("fuchsia.com", fp.host_name());
EXPECT_EQ("component_hello_world", fp.package_name());
EXPECT_EQ("0", fp.variant());
EXPECT_EQ("", fp.hash());
EXPECT_EQ("meta/hello_world.cmx", fp.resource_path());
EXPECT_TRUE(
fp.Parse("fuchsia-pkg://fuchsia.com/component_hello_world#meta/stuff"));
EXPECT_EQ("fuchsia.com", fp.host_name());
EXPECT_EQ("component_hello_world", fp.package_name());
EXPECT_EQ("0", fp.variant());
EXPECT_EQ("", fp.hash());
EXPECT_EQ("meta/stuff", fp.resource_path());
EXPECT_TRUE(fp.Parse("fuchsia-pkg://example.com/data-package#stuff"));
EXPECT_EQ("example.com", fp.host_name());
EXPECT_EQ("data-package", fp.package_name());
EXPECT_EQ("0", fp.variant());
EXPECT_EQ("", fp.hash());
EXPECT_EQ("stuff", fp.resource_path());
EXPECT_TRUE(
fp.Parse("fuchsia-pkg://example.com/data-package/variant123#stuff"));
EXPECT_EQ("example.com", fp.host_name());
EXPECT_EQ("data-package", fp.package_name());
EXPECT_EQ("variant123", fp.variant());
EXPECT_EQ("", fp.hash());
EXPECT_EQ("stuff", fp.resource_path());
EXPECT_TRUE(fp.Parse(
"fuchsia-pkg://example.com/data-package/variant123?hash=1234#stuff"));
EXPECT_EQ("example.com", fp.host_name());
EXPECT_EQ("data-package", fp.package_name());
EXPECT_EQ("variant123", fp.variant());
EXPECT_EQ("1234", fp.hash());
EXPECT_EQ("stuff", fp.resource_path());
}
TEST(FuchsiaPkgUrl, pkgfs_dir_path) {
FuchsiaPkgUrl fp;
EXPECT_TRUE(fp.Parse(
"fuchsia-pkg://fuchsia.com/component_hello_world#meta/hello_world.cmx"));
EXPECT_EQ("/pkgfs/packages/component_hello_world/0", fp.pkgfs_dir_path());
EXPECT_TRUE(fp.Parse(
"fuchsia-pkg://fuchsia.com/component_hello_world/variant123#meta/"
"hello_world.cmx"));
EXPECT_EQ("/pkgfs/packages/component_hello_world/variant123",
fp.pkgfs_dir_path());
}
TEST(FuchsiaPkgUrl, GetComponentDefaults) {
EXPECT_EQ("meta/sysmgr.cmx",
ParseFuchsiaPkgUrl("fuchsia-pkg://fuchsia.com/sysmgr")
.GetDefaultComponentCmxPath());
EXPECT_EQ("meta/sysmgr.cmx",
ParseFuchsiaPkgUrl("fuchsia-pkg://fuchsia.com/sysmgr#meta/blah.cmx")
.GetDefaultComponentCmxPath());
}
} // namespace
} // namespace component