If nobody objects, I'd like to commit this simple fix. Currently, if a test
fails, I cannot  re-run it w/ same seed unless I delete the directory
manually, or in the test itself (since CloseableFile doesn't delete the dir
if the test failed).

Shai


On Wed, Dec 19, 2012 at 5:15 PM, Shai Erera <ser...@gmail.com> wrote:

> I patched _TestUtil like so, and the test passes
>>
>
> Sorry, I meant to say that if fails where I expect it to fail, not on
> Access is Denied.
>
> Shai
>
>
> On Wed, Dec 19, 2012 at 5:14 PM, Shai Erera <ser...@gmail.com> wrote:
>
>> Hi
>>
>> When a test fails, the file system directories that it created are not
>> deleted.
>>
>> At least on Windows, when you run the test with the same seed again,
>> _TestUtil.getTempDir fails on  "Access Denied". The reason is that it calls
>> file.createNewFile() on a directory. I don't know if it's specific to
>> Windows, but I tried this test with both J9 and Oracle JVMs:
>>
>>   @Test
>>   public void testAccessDenied() throws Exception {
>>     _TestUtil.getTempDir("testAccessDenied").mkdirs();
>>     fail("msg");
>>   }
>>
>> Because of the fail() in the end, the directory is not deleted. If you
>> run it with the same seed twice (say, -Dtests.seed=6EDF27F12DB68F8D), then
>> you'll get:
>>
>> java.lang.RuntimeException: java.io.IOException: Access is denied
>>     at
>> __randomizedtesting.SeedInfo.seed([6EDF27F12DB68F8D:668298B50F63FCD2]:0)
>>     at org.apache.lucene.util._TestUtil.getTempDir(_TestUtil.java:107)
>>     at
>> org.apache.lucene.TestAssertions.testAccessDenied(TestAssertions.java:62)
>>
>> I patched _TestUtil like so, and the test passes:
>>
>> Index:
>> lucene/test-framework/src/java/org/apache/lucene/util/_TestUtil.java
>> ===================================================================
>> ---
>> lucene/test-framework/src/java/org/apache/lucene/util/_TestUtil.java
>> (revision 1423868)
>> +++
>> lucene/test-framework/src/java/org/apache/lucene/util/_TestUtil.java
>> (working copy)
>> @@ -750,7 +750,7 @@
>>      final Random random = new
>> Random(RandomizedContext.current().getRandom().nextLong());
>>      do {
>>        result = genTempFile(random, prefix, newSuffix, directory);
>> -    } while (!result.createNewFile());
>> +    } while (result.exists() || !result.createNewFile());
>>      return result;
>>    }
>>
>> Basically, adding an exists() check before createNewFile(). Even though
>> createNewFile() documents that it returns false if the file exists, it does
>> not specify the behavior when the file exists and is a directory, and
>> obviously fails.
>>
>> I made sure that calling genTempFile like so in a loop won't ruin
>> randomness - since it only uses random.nextInt() once, I think it's safe to
>> add this check?
>>
>> Shai
>>
>
>

Reply via email to