Just to help facilitate the discussion, here's a pull request that changes GMSLocator from:
this.viewFile = new File(System.getProperty("user.dir"), "locator" + server.getPort() + "view.dat"); ...to: this.viewFile = new File(System.getProperty("user.dir"), "locator" + server.getPort() + "view.dat"); To allow the new test LocatorViewFileTemporaryFolderDUnitTest to redirect the locator view dat file to a JUnit TemporaryFolder. The only other way I can think of to this is to introduce a new Geode property for "current-directory" which a test could specify. That property value would have to be pushed down to every class that creates a new File. Pull request: https://github.com/apache/geode/pull/1243 On Fri, Jan 5, 2018 at 3:32 PM, Kirk Lund <kl...@apache.org> wrote: > Any calls such as: > > File file = new File("myfile"); > > ...results in creating a file in the current working directory of IntelliJ > or Gradle when executing the test. > > I previously made a change to Gfsh so that tests can pass in a parent > directory which will be used instead. This allowed me to change all of the > Gfsh tests to write to a JUnit TemporaryFolder. > > This allows us to clean up ALL file artifacts produced from a test and > also allows us to avoid file-based pollution from one test to another. > > I'd like to propose that we either always pass a parent directory into a > component that produces file artifacts or change all of our code from using > the constructor File(String pathname) to using the constructor File(String > parent, String child). > > That 2nd approach would involve changing lines like this: > > File file = new File("myfile"); > > ...to: > > File file = new File(System.getProperty("user.dir"), "myfile"); > > Then if you add this line to a test: > > System.setProperty("user.dir", temporaryFolder.getRoot(). > getAbsolutePath()); > > ...you're able to redirect all file artifacts to the JUnit TemporaryFolder. > > If we don't make this change to product code, then I really don't think we > should be manipulating "user.dir" in ANY of our tests because the results > are rather broken. > > If we don't like using "user.dir" then we could devise our own Geode > system property for "the current working directory." Honestly, I don't care > what system property we use or don't use, but I really want to have ALL > file artifacts properly cleaned and deleted after every test. And I really > want to prevent file-based test pollution. >