| // Copyright 2019 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/developer/cmd/tasks/process_task.h" | |
| #include <unistd.h> | |
| #include <utility> | |
| #include <gmock/gmock.h> | |
| #include <gtest/gtest.h> | |
| #include "src/lib/testing/loop_fixture/real_loop_fixture.h" | |
| namespace { | |
| class ProcessTask : public gtest::RealLoopFixture { | |
| public: | |
| zx_status_t ExecuteCommand(std::string line, cmd::Task::CompletionCallback callback) { | |
| cmd::Command command; | |
| command.Parse(std::move(line)); | |
| cmd::ProcessTask task(dispatcher()); | |
| return task.Execute(std::move(command), std::move(callback)); | |
| } | |
| }; | |
| TEST_F(ProcessTask, Search) { | |
| EXPECT_EQ(ZX_ERR_NOT_FOUND, ExecuteCommand("/does/not/exist", nullptr)); | |
| EXPECT_EQ(ZX_ERR_ASYNC, ExecuteCommand("/pkg/bin/trivial_success", nullptr)); | |
| EXPECT_EQ(ZX_ERR_NOT_FOUND, ExecuteCommand("trivial_success", nullptr)); | |
| const char* path = getenv("PATH"); | |
| setenv("PATH", "/pkg/bin", 1); | |
| EXPECT_EQ(ZX_ERR_ASYNC, ExecuteCommand("/pkg/bin/trivial_success", nullptr)); | |
| EXPECT_EQ(ZX_ERR_ASYNC, ExecuteCommand("trivial_success", nullptr)); | |
| setenv("PATH", "/does/not/exist:/pkg/bin:/also/does/not/exit", 1); | |
| EXPECT_EQ(ZX_ERR_ASYNC, ExecuteCommand("/pkg/bin/trivial_success", nullptr)); | |
| EXPECT_EQ(ZX_ERR_ASYNC, ExecuteCommand("trivial_success", nullptr)); | |
| EXPECT_EQ(ZX_ERR_NOT_FOUND, ExecuteCommand("pkg/bin/trivial_success", nullptr)); | |
| if (path) { | |
| setenv("PATH", path, 1); | |
| } else { | |
| unsetenv("PATH"); | |
| } | |
| } | |
| } // namespace |