Make use of JoinPath to build paths to path references can work correctly across operating systems.
PiperOrigin-RevId: 296251146 Change-Id: I4db57dfb924ded085d2cb20969193e497100c052
This commit is contained in:
parent
f446da7fb2
commit
95436d6125
|
@ -914,6 +914,7 @@ tf_cc_test(
|
||||||
"//tensorflow/core/platform/testdata:test_stderr",
|
"//tensorflow/core/platform/testdata:test_stderr",
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
|
":path",
|
||||||
":resource_loader",
|
":resource_loader",
|
||||||
":strcat",
|
":strcat",
|
||||||
":subprocess",
|
":subprocess",
|
||||||
|
|
|
@ -21,6 +21,7 @@ limitations under the License.
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "tensorflow/core/lib/core/status_test_util.h"
|
#include "tensorflow/core/lib/core/status_test_util.h"
|
||||||
|
#include "tensorflow/core/platform/path.h"
|
||||||
#include "tensorflow/core/platform/resource_loader.h"
|
#include "tensorflow/core/platform/resource_loader.h"
|
||||||
#include "tensorflow/core/platform/strcat.h"
|
#include "tensorflow/core/platform/strcat.h"
|
||||||
#include "tensorflow/core/platform/test.h"
|
#include "tensorflow/core/platform/test.h"
|
||||||
|
@ -33,15 +34,9 @@ limitations under the License.
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char kEchoProgram[] = "tensorflow/core/platform/testdata/test_echo";
|
|
||||||
const char kEchoArgv1Program[] =
|
|
||||||
"tensorflow/core/platform/testdata/test_echo_argv_1";
|
|
||||||
const char kNoopProgram[] = "tensorflow/core/platform/testdata/test_noop";
|
|
||||||
const char kStdErrProgram[] = "tensorflow/core/platform/testdata/test_stderr";
|
|
||||||
|
|
||||||
namespace tensorflow {
|
namespace tensorflow {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
static string GetDataFilePath(const string& relative_path) {
|
static string GetDataFilePath(const string& relative_path) {
|
||||||
#ifdef PLATFORM_WINDOWS
|
#ifdef PLATFORM_WINDOWS
|
||||||
// While CreateProcess on windows is resilient to not having ".exe" suffix,
|
// While CreateProcess on windows is resilient to not having ".exe" suffix,
|
||||||
|
@ -51,20 +46,39 @@ static string GetDataFilePath(const string& relative_path) {
|
||||||
return GetDataDependencyFilepath(relative_path);
|
return GetDataDependencyFilepath(relative_path);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
} // namespace
|
|
||||||
|
string EchoProgram() {
|
||||||
|
return io::JoinPath("tensorflow", "core", "platform", "testdata",
|
||||||
|
"test_echo");
|
||||||
|
}
|
||||||
|
|
||||||
|
string EchoArgv1Program() {
|
||||||
|
return io::JoinPath("tensorflow", "core", "platform", "testdata",
|
||||||
|
"test_echo_argv_1");
|
||||||
|
}
|
||||||
|
|
||||||
|
string NoopProgram() {
|
||||||
|
return io::JoinPath("tensorflow", "core", "platform", "testdata",
|
||||||
|
"test_noop");
|
||||||
|
}
|
||||||
|
|
||||||
|
string StdErrProgram() {
|
||||||
|
return io::JoinPath("tensorflow", "core", "platform", "testdata",
|
||||||
|
"test_stderr");
|
||||||
|
}
|
||||||
|
|
||||||
class SubProcessTest : public ::testing::Test {};
|
class SubProcessTest : public ::testing::Test {};
|
||||||
|
|
||||||
TEST_F(SubProcessTest, NoOutputNoComm) {
|
TEST_F(SubProcessTest, NoOutputNoComm) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
proc.SetProgram(GetDataFilePath(kNoopProgram).c_str(), {kNoopProgram});
|
proc.SetProgram(GetDataFilePath(NoopProgram()).c_str(), {NoopProgram()});
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
EXPECT_TRUE(proc.Wait());
|
EXPECT_TRUE(proc.Wait());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(SubProcessTest, NoOutput) {
|
TEST_F(SubProcessTest, NoOutput) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
proc.SetProgram(GetDataFilePath(kNoopProgram).c_str(), {kNoopProgram});
|
proc.SetProgram(GetDataFilePath(NoopProgram()).c_str(), {NoopProgram()});
|
||||||
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
||||||
proc.SetChannelAction(CHAN_STDERR, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDERR, ACTION_PIPE);
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
|
@ -80,8 +94,8 @@ TEST_F(SubProcessTest, NoOutput) {
|
||||||
TEST_F(SubProcessTest, Stdout) {
|
TEST_F(SubProcessTest, Stdout) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
const char test_string[] = "hello_world";
|
const char test_string[] = "hello_world";
|
||||||
proc.SetProgram(GetDataFilePath(kEchoArgv1Program).c_str(),
|
proc.SetProgram(GetDataFilePath(EchoArgv1Program()).c_str(),
|
||||||
{kEchoArgv1Program, test_string});
|
{EchoArgv1Program(), test_string});
|
||||||
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
||||||
proc.SetChannelAction(CHAN_STDERR, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDERR, ACTION_PIPE);
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
|
@ -97,8 +111,8 @@ TEST_F(SubProcessTest, Stdout) {
|
||||||
TEST_F(SubProcessTest, StdoutIgnored) {
|
TEST_F(SubProcessTest, StdoutIgnored) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
const char test_string[] = "hello_world";
|
const char test_string[] = "hello_world";
|
||||||
proc.SetProgram(GetDataFilePath(kEchoArgv1Program).c_str(),
|
proc.SetProgram(GetDataFilePath(EchoArgv1Program()).c_str(),
|
||||||
{kEchoArgv1Program, test_string});
|
{EchoArgv1Program(), test_string});
|
||||||
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
||||||
proc.SetChannelAction(CHAN_STDERR, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDERR, ACTION_PIPE);
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
|
@ -111,8 +125,8 @@ TEST_F(SubProcessTest, StdoutIgnored) {
|
||||||
TEST_F(SubProcessTest, Stderr) {
|
TEST_F(SubProcessTest, Stderr) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
const char test_string[] = "muh_failure!";
|
const char test_string[] = "muh_failure!";
|
||||||
proc.SetProgram(GetDataFilePath(kStdErrProgram).c_str(),
|
proc.SetProgram(GetDataFilePath(StdErrProgram()).c_str(),
|
||||||
{kStdErrProgram, test_string});
|
{StdErrProgram(), test_string});
|
||||||
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
||||||
proc.SetChannelAction(CHAN_STDERR, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDERR, ACTION_PIPE);
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
|
@ -128,8 +142,8 @@ TEST_F(SubProcessTest, Stderr) {
|
||||||
TEST_F(SubProcessTest, StderrIgnored) {
|
TEST_F(SubProcessTest, StderrIgnored) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
const char test_string[] = "muh_failure!";
|
const char test_string[] = "muh_failure!";
|
||||||
proc.SetProgram(GetDataFilePath(kStdErrProgram).c_str(),
|
proc.SetProgram(GetDataFilePath(StdErrProgram()).c_str(),
|
||||||
{kStdErrProgram, test_string});
|
{StdErrProgram(), test_string});
|
||||||
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
||||||
proc.SetChannelAction(CHAN_STDERR, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDERR, ACTION_PIPE);
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
|
@ -141,7 +155,7 @@ TEST_F(SubProcessTest, StderrIgnored) {
|
||||||
|
|
||||||
TEST_F(SubProcessTest, Stdin) {
|
TEST_F(SubProcessTest, Stdin) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
proc.SetProgram(GetDataFilePath(kEchoProgram).c_str(), {kEchoProgram});
|
proc.SetProgram(GetDataFilePath(EchoProgram()).c_str(), {EchoProgram()});
|
||||||
proc.SetChannelAction(CHAN_STDIN, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDIN, ACTION_PIPE);
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
|
|
||||||
|
@ -153,7 +167,7 @@ TEST_F(SubProcessTest, Stdin) {
|
||||||
|
|
||||||
TEST_F(SubProcessTest, StdinStdout) {
|
TEST_F(SubProcessTest, StdinStdout) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
proc.SetProgram(GetDataFilePath(kEchoProgram).c_str(), {kEchoProgram});
|
proc.SetProgram(GetDataFilePath(EchoProgram()).c_str(), {EchoProgram()});
|
||||||
proc.SetChannelAction(CHAN_STDIN, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDIN, ACTION_PIPE);
|
||||||
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
|
@ -170,7 +184,7 @@ TEST_F(SubProcessTest, StdinStdout) {
|
||||||
|
|
||||||
TEST_F(SubProcessTest, StdinChildExit) {
|
TEST_F(SubProcessTest, StdinChildExit) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
proc.SetProgram(GetDataFilePath(kNoopProgram).c_str(), {kNoopProgram});
|
proc.SetProgram(GetDataFilePath(NoopProgram()).c_str(), {NoopProgram()});
|
||||||
proc.SetChannelAction(CHAN_STDIN, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDIN, ACTION_PIPE);
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
|
|
||||||
|
@ -189,7 +203,7 @@ TEST_F(SubProcessTest, StdinChildExit) {
|
||||||
|
|
||||||
TEST_F(SubProcessTest, StdinStdoutOverlap) {
|
TEST_F(SubProcessTest, StdinStdoutOverlap) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
proc.SetProgram(GetDataFilePath(kEchoProgram).c_str(), {kEchoProgram});
|
proc.SetProgram(GetDataFilePath(EchoProgram()).c_str(), {EchoProgram()});
|
||||||
proc.SetChannelAction(CHAN_STDIN, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDIN, ACTION_PIPE);
|
||||||
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
|
@ -213,7 +227,7 @@ TEST_F(SubProcessTest, StdinStdoutOverlap) {
|
||||||
|
|
||||||
TEST_F(SubProcessTest, KillProc) {
|
TEST_F(SubProcessTest, KillProc) {
|
||||||
tensorflow::SubProcess proc;
|
tensorflow::SubProcess proc;
|
||||||
proc.SetProgram(GetDataFilePath(kEchoProgram).c_str(), {kEchoProgram});
|
proc.SetProgram(GetDataFilePath(EchoProgram()).c_str(), {EchoProgram()});
|
||||||
proc.SetChannelAction(CHAN_STDIN, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDIN, ACTION_PIPE);
|
||||||
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
proc.SetChannelAction(CHAN_STDOUT, ACTION_PIPE);
|
||||||
EXPECT_TRUE(proc.Start());
|
EXPECT_TRUE(proc.Start());
|
||||||
|
@ -224,4 +238,5 @@ TEST_F(SubProcessTest, KillProc) {
|
||||||
EXPECT_FALSE(proc.Kill(SIGKILL));
|
EXPECT_FALSE(proc.Kill(SIGKILL));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
} // namespace tensorflow
|
} // namespace tensorflow
|
||||||
|
|
Loading…
Reference in New Issue