summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorcmasone@chromium.org <cmasone@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-03 17:42:58 +0000
committercmasone@chromium.org <cmasone@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-03 17:42:58 +0000
commitd52b609362dcdf917db9c908e472ab8641812674 (patch)
treec11c69346be689729b36851132c929fea27a0b4d /net
parentbbabc38e3a8d386f808e6a7be5da89a2d8e1b1c3 (diff)
downloadchromium_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.cc57
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;
}