| // 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/run_test_component/run_test_component.h" |
| |
| #include <string> |
| |
| #include "gtest/gtest.h" |
| #include "lib/fxl/files/directory.h" |
| #include "lib/fxl/files/file.h" |
| #include "lib/fxl/files/scoped_temp_dir.h" |
| #include "lib/fxl/strings/string_printf.h" |
| #include "lib/fxl/strings/substitute.h" |
| |
| namespace run { |
| namespace { |
| |
| TEST(Url, ParseURL) { |
| EXPECT_EQ("", GetComponentManifestPath("")); |
| EXPECT_EQ("", GetComponentManifestPath("random_string")); |
| EXPECT_EQ("", GetComponentManifestPath("https://google.com")); |
| EXPECT_EQ("", GetComponentManifestPath( |
| "fuchsia-pkg://fuchsia.com/component_hello_world#")); |
| |
| EXPECT_EQ( |
| "/pkgfs/packages/component_hello_world/0/meta/hello.cmx", |
| GetComponentManifestPath( |
| "fuchsia-pkg://fuchsia.com/component_hello_world#meta/hello.cmx")); |
| } |
| |
| TEST(Url, GenerateComponentUrl) { |
| EXPECT_EQ("", GenerateComponentUrl("")); |
| |
| EXPECT_EQ("", GenerateComponentUrl("/system/sys/pname/0/meta/hello.cmx")); |
| |
| EXPECT_EQ("", GenerateComponentUrl("pname")); |
| |
| EXPECT_EQ("", GenerateComponentUrl("pname/0/meta/foo")); |
| |
| EXPECT_EQ("", GenerateComponentUrl("pname/meta/foo.cmx")); |
| |
| EXPECT_EQ("fuchsia-pkg://fuchsia.com/component_hello_world#meta/hello.cmx", |
| GenerateComponentUrl("component_hello_world/0/meta/hello.cmx")); |
| } |
| |
| bool CreateEmptyFile(const std::string& path) { |
| return files::WriteFile(path, "", 0); |
| } |
| |
| TEST(RunTest, ParseArgs) { |
| constexpr char kBinName[] = "bin_name"; |
| |
| constexpr char component_url[] = |
| "fuchsia-pkg://fuchsia.com/component_hello_world#meta/hello.cmx"; |
| { |
| const char* argv[] = {kBinName, component_url}; |
| auto result = ParseArgs(2, argv, ""); |
| EXPECT_FALSE(result.error); |
| EXPECT_EQ(component_url, result.launch_info.url); |
| EXPECT_EQ(0u, result.launch_info.arguments->size()); |
| EXPECT_EQ(0u, result.matching_urls.size()); |
| } |
| |
| { |
| const char* argv[] = {kBinName, component_url, "myarg1", "myarg2"}; |
| auto result = ParseArgs(4, argv, ""); |
| EXPECT_FALSE(result.error); |
| EXPECT_EQ(component_url, result.launch_info.url); |
| EXPECT_EQ(2u, result.launch_info.arguments->size()); |
| EXPECT_EQ(argv[2], result.launch_info.arguments.get()[0]); |
| EXPECT_EQ(argv[3], result.launch_info.arguments.get()[1]); |
| } |
| |
| // Create filesystem to run glob on. |
| files::ScopedTempDir dir; |
| constexpr char test_pkg[] = "test_pkg"; |
| constexpr char test_file_prefix[] = "test_file"; |
| auto meta_dir_path = fxl::Substitute("$0/$1/0/meta", dir.path(), test_pkg); |
| ASSERT_TRUE(files::CreateDirectory(meta_dir_path)) |
| << meta_dir_path << " " << errno; |
| auto cmx_file_path1 = |
| fxl::Substitute("$0/$11.cmx", meta_dir_path, test_file_prefix); |
| auto cmx_file_path2 = |
| fxl::Substitute("$0/$12.cmx", meta_dir_path, test_file_prefix); |
| auto cmx_file_path3 = |
| fxl::Substitute("$0/$13.cmx", meta_dir_path, test_file_prefix); |
| ASSERT_TRUE(CreateEmptyFile(cmx_file_path1)); |
| ASSERT_TRUE(CreateEmptyFile(cmx_file_path2)); |
| ASSERT_TRUE(CreateEmptyFile(cmx_file_path3)); |
| auto expected_url1 = fxl::StringPrintf( |
| "fuchsia-pkg://fuchsia.com/%s#meta/%s1.cmx", test_pkg, test_file_prefix); |
| auto expected_url2 = fxl::StringPrintf( |
| "fuchsia-pkg://fuchsia.com/%s#meta/%s2.cmx", test_pkg, test_file_prefix); |
| auto expected_url3 = fxl::StringPrintf( |
| "fuchsia-pkg://fuchsia.com/%s#meta/%s3.cmx", test_pkg, test_file_prefix); |
| |
| { |
| const char* argv[] = {kBinName, "test_file*"}; |
| auto result = ParseArgs(2, argv, dir.path()); |
| EXPECT_TRUE(result.error); |
| } |
| |
| { |
| const char* argv[] = {kBinName, "test_file"}; |
| auto result = ParseArgs(2, argv, dir.path()); |
| EXPECT_FALSE(result.error); |
| ASSERT_EQ(3u, result.matching_urls.size()); |
| EXPECT_EQ(result.matching_urls[0], expected_url1); |
| EXPECT_EQ(result.matching_urls[1], expected_url2); |
| EXPECT_EQ(result.matching_urls[2], expected_url3); |
| EXPECT_EQ(result.cmx_file_path, cmx_file_path1); |
| } |
| |
| { |
| const char* argv[] = {kBinName, "test_file2"}; |
| auto result = ParseArgs(2, argv, dir.path()); |
| EXPECT_FALSE(result.error); |
| ASSERT_EQ(1u, result.matching_urls.size()); |
| EXPECT_EQ(result.matching_urls[0], expected_url2); |
| EXPECT_EQ(expected_url2, result.launch_info.url); |
| EXPECT_EQ(result.cmx_file_path, cmx_file_path2); |
| } |
| } |
| |
| } // namespace |
| } // namespace run |