Skip to content

Commit

Permalink
clone of #6730 but without the prod change -- should fail Windows tes…
Browse files Browse the repository at this point in the history
…ting

Fix `Files.createTempDir` and `FileBackedOutputStream` under Windows _services_, a rare use case.

Fixes #6634

Relevant to #2686 in that it shows that we would ideally run our Windows testing under both Java 8 *and* a newer version....

RELNOTES=`io`: Fixed `Files.createTempDir` and `FileBackedOutputStream` under [Windows _services_, a rare use case](#6634).
PiperOrigin-RevId: 568604081
  • Loading branch information
cpovirk committed Sep 26, 2023
1 parent 5a0af31 commit 97a0e18
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 2 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ jobs:
strategy:
matrix:
os: [ ubuntu-latest ]
java: [ 8, 11, 17 ]
root-pom: [ 'pom.xml', 'android/pom.xml' ]
java: [ 8 ]
root-pom: [ 'pom.xml' ]
include:
- os: windows-latest
java: 17
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.google.common.io;

import static com.google.common.base.StandardSystemProperty.JAVA_IO_TMPDIR;
import static com.google.common.base.StandardSystemProperty.JAVA_SPECIFICATION_VERSION;
import static com.google.common.base.StandardSystemProperty.OS_NAME;
import static com.google.common.truth.Truth.assertThat;
import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE;
Expand Down Expand Up @@ -64,6 +65,41 @@ public void testCreateTempDir() throws IOException {
}
}

public void testBogusSystemPropertiesUsername() {
/*
* Only under Windows (or hypothetically when running with some other non-POSIX, ACL-based
* filesystem) do we look up the username. Thus, this test doesn't test anything interesting
* under most environments.
*
* Under Windows, we test that:
*
* - Under Java 9+, createTempDir() succeeds because it can look up the *real* username, rather
* than relying on the one from the system property.
*
* - Under Java 8, createTempDir() fails because it falls back to the bogus username from the
* system property.
*
* However: Note that we don't actually run our CI on Windows under Java 8, at least as of this
* writing.
*/
boolean isJava8OnWindows = JAVA_SPECIFICATION_VERSION.value().equals("1.8") && isWindows();

String save = System.getProperty("user.name");
System.setProperty("user.name", "-this-is-definitely-not-the-username-we-are-running-as//?");
File temp = null;
try {
temp = Files.createTempDir();
assertThat(isJava8OnWindows).isFalse();
} catch (IllegalStateException expectedIfJavaWindows8) {
assertThat(isJava8OnWindows).isTrue();
} finally {
System.setProperty("user.name", save);
if (temp != null) {
assertThat(temp.delete()).isTrue();
}
}
}

private static boolean isAndroid() {
return System.getProperty("java.runtime.name", "").contains("Android");
}
Expand Down
36 changes: 36 additions & 0 deletions guava-tests/test/com/google/common/io/FilesCreateTempDirTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.google.common.io;

import static com.google.common.base.StandardSystemProperty.JAVA_IO_TMPDIR;
import static com.google.common.base.StandardSystemProperty.JAVA_SPECIFICATION_VERSION;
import static com.google.common.base.StandardSystemProperty.OS_NAME;
import static com.google.common.truth.Truth.assertThat;
import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE;
Expand Down Expand Up @@ -64,6 +65,41 @@ public void testCreateTempDir() throws IOException {
}
}

public void testBogusSystemPropertiesUsername() {
/*
* Only under Windows (or hypothetically when running with some other non-POSIX, ACL-based
* filesystem) do we look up the username. Thus, this test doesn't test anything interesting
* under most environments.
*
* Under Windows, we test that:
*
* - Under Java 9+, createTempDir() succeeds because it can look up the *real* username, rather
* than relying on the one from the system property.
*
* - Under Java 8, createTempDir() fails because it falls back to the bogus username from the
* system property.
*
* However: Note that we don't actually run our CI on Windows under Java 8, at least as of this
* writing.
*/
boolean isJava8OnWindows = JAVA_SPECIFICATION_VERSION.value().equals("1.8") && isWindows();

String save = System.getProperty("user.name");
System.setProperty("user.name", "-this-is-definitely-not-the-username-we-are-running-as//?");
File temp = null;
try {
temp = Files.createTempDir();
assertThat(isJava8OnWindows).isFalse();
} catch (IllegalStateException expectedIfJavaWindows8) {
assertThat(isJava8OnWindows).isTrue();
} finally {
System.setProperty("user.name", save);
if (temp != null) {
assertThat(temp.delete()).isTrue();
}
}
}

private static boolean isAndroid() {
return System.getProperty("java.runtime.name", "").contains("Android");
}
Expand Down

0 comments on commit 97a0e18

Please sign in to comment.