diff options
author | cmasone@chromium.org <cmasone@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-03 17:42:58 +0000 |
---|---|---|
committer | cmasone@chromium.org <cmasone@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-03 17:42:58 +0000 |
commit | d52b609362dcdf917db9c908e472ab8641812674 (patch) | |
tree | c11c69346be689729b36851132c929fea27a0b4d /net | |
parent | bbabc38e3a8d386f808e6a7be5da89a2d8e1b1c3 (diff) | |
download | chromium_src-d52b609362dcdf917db9c908e472ab8641812674.zip chromium_src-d52b609362dcdf917db9c908e472ab8641812674.tar.gz chromium_src-d52b609362dcdf917db9c908e472ab8641812674.tar.bz2 |
Set PYTHON_PATH at TestServer Init() instead of Start()
Try to look up python paths at Init() time. It's likely that some paths
in PathService will be overridden later, so if we do not succeed now
we'll try again upon Start(). This is necessary on Chromium OS, as we don't keep the tests next to the browser binary, and InProcessBrowserTest overrides FILE_EXE to point to the browser binary, confusing the test server :-/
BUG=66833
TEST=run browser tests, run chrome os browser test autotest, run ui tests
Review URL: http://codereview.chromium.org/5743008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70392 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/test/python_utils.cc | 57 |
1 files changed, 47 insertions, 10 deletions
diff --git a/net/test/python_utils.cc b/net/test/python_utils.cc index 0c61b48..05f8a98f 100644 --- a/net/test/python_utils.cc +++ b/net/test/python_utils.cc @@ -37,31 +37,68 @@ void AppendToPythonPath(const FilePath& dir) { } } +namespace { + +// Search for |to_try|, rolling up the directory tree from +// |start_dir|. If found, return true and put the path to |to_try| in +// |out_dir|. If not, return false and leave |out_dir| untouched. +bool TryRelativeToDir(const FilePath& start_dir, + const FilePath& to_try, + FilePath* out_dir) { + FilePath dir(start_dir); + while (!file_util::DirectoryExists(dir.Append(to_try))) { + FilePath parent = dir.DirName(); + if (parent == dir) { + // We hit the root directory. + return false; + } + dir = parent; + } + *out_dir = dir; + return true; +} + +} // namespace + bool GetPyProtoPath(FilePath* dir) { // Locate the Python code generated by the protocol buffers compiler. FilePath generated_code_dir; if (!PathService::Get(base::DIR_EXE, &generated_code_dir)) { + LOG(ERROR) << "Can't find " << generated_code_dir.value(); return false; } const FilePath kPyProto(FILE_PATH_LITERAL("pyproto")); #if defined(OS_MACOSX) || defined(OS_CHROMEOS) - // On Mac and Chrome OS, DIR_EXE might be pointing deep into the Release/ - // (or Debug/) directory and we can't depend on how far down it goes. So we - // walk upwards from DIR_EXE until we find a likely looking spot. - while (!file_util::DirectoryExists(generated_code_dir.Append(kPyProto))) { - FilePath parent = generated_code_dir.DirName(); - if (parent == generated_code_dir) { - // We hit the root directory. Maybe we didn't build any targets which - // produced Python protocol buffers. - PathService::Get(base::DIR_EXE, &generated_code_dir); + FilePath source_dir; + if (!PathService::Get(base::DIR_SOURCE_ROOT, &source_dir)) { + LOG(ERROR) << "Can't find " << source_dir.value(); + return false; + } + // On Mac, and possibly Chrome OS, DIR_EXE might be pointing deep + // into the Release/ (or Debug/) directory and we can't depend on + // how far down it goes. So we walk upwards from DIR_EXE until we + // find a likely looking spot. + if (!TryRelativeToDir(generated_code_dir, kPyProto, dir)) { + LOG(WARNING) << "Can't find " << kPyProto.value() + << " next to " << generated_code_dir.value(); + // On Chrome OS, we may have installed the test binaries and support tools + // in a wholly separate location, relative to DIR_SOURCE_ROOT. We'll want + // to do a similar investigation from that point as well. + generated_code_dir = source_dir + .Append(FILE_PATH_LITERAL("out")) + .Append(FILE_PATH_LITERAL("Release")); + if (!TryRelativeToDir(generated_code_dir, kPyProto, dir)) { + LOG(WARNING) << "Can't find " << kPyProto.value() + << " next to " << generated_code_dir.value(); return false; } - generated_code_dir = parent; } + generated_code_dir = *dir; #endif *dir = generated_code_dir.Append(kPyProto); + VLOG(2) << "Found " << kPyProto.value() << " in " << dir->value(); return true; } |