| // 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 |