Change TestCompletion to only ever look inside of BaseDir
authorFrederic Riss <friss@apple.com>
Tue, 4 Sep 2018 23:09:49 +0000 (23:09 +0000)
committerFrederic Riss <friss@apple.com>
Tue, 4 Sep 2018 23:09:49 +0000 (23:09 +0000)
TestCompletion was failing quite frequently on our Linux bots. Some tracing
revealed that when we are iterating BaseDir we are not getting all the entries.
More specifically, we are sometimes missing the entry corresponding to the
TestCompletion directory that the first test in DirCompletionAbsolute is
looking for. BaseDir is the directory where lit is creating all the temporary
files. The semantics of opendir/readdir are unclear when it comes to iterating
over a directory that changes contents, but it seems like on Linux you might
fail to list an entry even if it was there before opendir and is still present
throughout the iteration. Changing the test to only look inside of the test-
specific directory seems to fix the instability.

This commit also removes some assertions that were added to try to track down
this issue.

llvm-svn: 341425

lldb/unittests/Interpreter/TestCompletion.cpp

index 47f364e..e781de0 100644 (file)
@@ -164,15 +164,11 @@ TEST_F(CompletionTest, DirCompletionAbsolute) {
   // When a directory is specified that doesn't end in a slash, it searches
   // for that directory, not items under it.
   // Sanity check that the path we complete on exists and isn't too long.
-  ASSERT_TRUE(llvm::sys::fs::exists(BaseDir));
-#ifdef PATH_MAX
-  ASSERT_LE(BaseDir.size(), static_cast<size_t>(PATH_MAX));
-#endif
-  size_t Count =
-      CommandCompletions::DiskDirectories(BaseDir, Results, Resolver);
+  size_t Count = CommandCompletions::DiskDirectories(Twine(BaseDir) + "/fooa",
+                                                     Results, Resolver);
   ASSERT_EQ(1u, Count);
   ASSERT_EQ(Count, Results.GetSize());
-  EXPECT_TRUE(HasEquivalentFile(BaseDir, Results));
+  EXPECT_TRUE(HasEquivalentFile(DirFooA, Results));
 
   Count =
     CommandCompletions::DiskDirectories(Twine(BaseDir) + "/.", Results, Resolver);