| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #define _CRT_SECURE_NO_WARNINGS | 5 #define _CRT_SECURE_NO_WARNINGS |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/eintr_wrapper.h" | 10 #include "base/eintr_wrapper.h" |
| (...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 ret = HANDLE_EINTR(close(sockets[0])); | 488 ret = HANDLE_EINTR(close(sockets[0])); |
| 489 DPCHECK(ret == 0); | 489 DPCHECK(ret == 0); |
| 490 ret = HANDLE_EINTR(close(sockets[1])); | 490 ret = HANDLE_EINTR(close(sockets[1])); |
| 491 DPCHECK(ret == 0); | 491 DPCHECK(ret == 0); |
| 492 ret = HANDLE_EINTR(close(dev_null)); | 492 ret = HANDLE_EINTR(close(dev_null)); |
| 493 DPCHECK(ret == 0); | 493 DPCHECK(ret == 0); |
| 494 } | 494 } |
| 495 | 495 |
| 496 namespace { | 496 namespace { |
| 497 | 497 |
| 498 std::string TestLaunchApp(const base::environment_vector& env_changes) { | 498 std::string TestLaunchProcess(const base::environment_vector& env_changes) { |
| 499 std::vector<std::string> args; | 499 std::vector<std::string> args; |
| 500 base::file_handle_mapping_vector fds_to_remap; | 500 base::file_handle_mapping_vector fds_to_remap; |
| 501 base::ProcessHandle handle; | |
| 502 | 501 |
| 503 args.push_back("bash"); | 502 args.push_back("bash"); |
| 504 args.push_back("-c"); | 503 args.push_back("-c"); |
| 505 args.push_back("echo $BASE_TEST"); | 504 args.push_back("echo $BASE_TEST"); |
| 506 | 505 |
| 507 int fds[2]; | 506 int fds[2]; |
| 508 PCHECK(pipe(fds) == 0); | 507 PCHECK(pipe(fds) == 0); |
| 509 | 508 |
| 510 fds_to_remap.push_back(std::make_pair(fds[1], 1)); | 509 fds_to_remap.push_back(std::make_pair(fds[1], 1)); |
| 511 EXPECT_TRUE(base::LaunchApp(args, env_changes, fds_to_remap, | 510 base::LaunchOptions options; |
| 512 true /* wait for exit */, &handle)); | 511 options.wait = true; |
| 512 options.environ = &env_changes; |
| 513 options.fds_to_remap = &fds_to_remap; |
| 514 EXPECT_TRUE(base::LaunchProcess(args, options)); |
| 513 PCHECK(HANDLE_EINTR(close(fds[1])) == 0); | 515 PCHECK(HANDLE_EINTR(close(fds[1])) == 0); |
| 514 | 516 |
| 515 char buf[512]; | 517 char buf[512]; |
| 516 const ssize_t n = HANDLE_EINTR(read(fds[0], buf, sizeof(buf))); | 518 const ssize_t n = HANDLE_EINTR(read(fds[0], buf, sizeof(buf))); |
| 517 PCHECK(n > 0); | 519 PCHECK(n > 0); |
| 518 | 520 |
| 519 PCHECK(HANDLE_EINTR(close(fds[0])) == 0); | 521 PCHECK(HANDLE_EINTR(close(fds[0])) == 0); |
| 520 | 522 |
| 521 return std::string(buf, n); | 523 return std::string(buf, n); |
| 522 } | 524 } |
| 523 | 525 |
| 524 const char kLargeString[] = | 526 const char kLargeString[] = |
| 525 "0123456789012345678901234567890123456789012345678901234567890123456789" | 527 "0123456789012345678901234567890123456789012345678901234567890123456789" |
| 526 "0123456789012345678901234567890123456789012345678901234567890123456789" | 528 "0123456789012345678901234567890123456789012345678901234567890123456789" |
| 527 "0123456789012345678901234567890123456789012345678901234567890123456789" | 529 "0123456789012345678901234567890123456789012345678901234567890123456789" |
| 528 "0123456789012345678901234567890123456789012345678901234567890123456789" | 530 "0123456789012345678901234567890123456789012345678901234567890123456789" |
| 529 "0123456789012345678901234567890123456789012345678901234567890123456789" | 531 "0123456789012345678901234567890123456789012345678901234567890123456789" |
| 530 "0123456789012345678901234567890123456789012345678901234567890123456789" | 532 "0123456789012345678901234567890123456789012345678901234567890123456789" |
| 531 "0123456789012345678901234567890123456789012345678901234567890123456789"; | 533 "0123456789012345678901234567890123456789012345678901234567890123456789"; |
| 532 | 534 |
| 533 } // namespace | 535 } // namespace |
| 534 | 536 |
| 535 TEST_F(ProcessUtilTest, LaunchApp) { | 537 TEST_F(ProcessUtilTest, LaunchProcess) { |
| 536 base::environment_vector env_changes; | 538 base::environment_vector env_changes; |
| 537 | 539 |
| 538 env_changes.push_back(std::make_pair(std::string("BASE_TEST"), | 540 env_changes.push_back(std::make_pair(std::string("BASE_TEST"), |
| 539 std::string("bar"))); | 541 std::string("bar"))); |
| 540 EXPECT_EQ("bar\n", TestLaunchApp(env_changes)); | 542 EXPECT_EQ("bar\n", TestLaunchProcess(env_changes)); |
| 541 env_changes.clear(); | 543 env_changes.clear(); |
| 542 | 544 |
| 543 EXPECT_EQ(0, setenv("BASE_TEST", "testing", 1 /* override */)); | 545 EXPECT_EQ(0, setenv("BASE_TEST", "testing", 1 /* override */)); |
| 544 EXPECT_EQ("testing\n", TestLaunchApp(env_changes)); | 546 EXPECT_EQ("testing\n", TestLaunchProcess(env_changes)); |
| 545 | 547 |
| 546 env_changes.push_back(std::make_pair(std::string("BASE_TEST"), | 548 env_changes.push_back(std::make_pair(std::string("BASE_TEST"), |
| 547 std::string(""))); | 549 std::string(""))); |
| 548 EXPECT_EQ("\n", TestLaunchApp(env_changes)); | 550 EXPECT_EQ("\n", TestLaunchProcess(env_changes)); |
| 549 | 551 |
| 550 env_changes[0].second = "foo"; | 552 env_changes[0].second = "foo"; |
| 551 EXPECT_EQ("foo\n", TestLaunchApp(env_changes)); | 553 EXPECT_EQ("foo\n", TestLaunchProcess(env_changes)); |
| 552 | 554 |
| 553 env_changes.clear(); | 555 env_changes.clear(); |
| 554 EXPECT_EQ(0, setenv("BASE_TEST", kLargeString, 1 /* override */)); | 556 EXPECT_EQ(0, setenv("BASE_TEST", kLargeString, 1 /* override */)); |
| 555 EXPECT_EQ(std::string(kLargeString) + "\n", TestLaunchApp(env_changes)); | 557 EXPECT_EQ(std::string(kLargeString) + "\n", TestLaunchProcess(env_changes)); |
| 556 | 558 |
| 557 env_changes.push_back(std::make_pair(std::string("BASE_TEST"), | 559 env_changes.push_back(std::make_pair(std::string("BASE_TEST"), |
| 558 std::string("wibble"))); | 560 std::string("wibble"))); |
| 559 EXPECT_EQ("wibble\n", TestLaunchApp(env_changes)); | 561 EXPECT_EQ("wibble\n", TestLaunchProcess(env_changes)); |
| 560 } | 562 } |
| 561 | 563 |
| 562 TEST_F(ProcessUtilTest, AlterEnvironment) { | 564 TEST_F(ProcessUtilTest, AlterEnvironment) { |
| 563 const char* const empty[] = { NULL }; | 565 const char* const empty[] = { NULL }; |
| 564 const char* const a2[] = { "A=2", NULL }; | 566 const char* const a2[] = { "A=2", NULL }; |
| 565 base::environment_vector changes; | 567 base::environment_vector changes; |
| 566 char** e; | 568 char** e; |
| 567 | 569 |
| 568 e = base::AlterEnvironment(changes, empty); | 570 e = base::AlterEnvironment(changes, empty); |
| 569 EXPECT_TRUE(e[0] == NULL); | 571 EXPECT_TRUE(e[0] == NULL); |
| (...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 983 ASSERT_DEATH({ | 985 ASSERT_DEATH({ |
| 984 SetUpInDeathAssert(); | 986 SetUpInDeathAssert(); |
| 985 while ((value_ = base::AllocatePsychoticallyBigObjCObject())) {} | 987 while ((value_ = base::AllocatePsychoticallyBigObjCObject())) {} |
| 986 }, ""); | 988 }, ""); |
| 987 } | 989 } |
| 988 | 990 |
| 989 #endif // !ARCH_CPU_64_BITS | 991 #endif // !ARCH_CPU_64_BITS |
| 990 #endif // OS_MACOSX | 992 #endif // OS_MACOSX |
| 991 | 993 |
| 992 #endif // !defined(OS_WIN) | 994 #endif // !defined(OS_WIN) |
| OLD | NEW |