gt:         dir = File.createTempFile("scripts_repo", "", repos);
context: /*
   *   Copyright 2010 Glencoe Software, Inc. All rights reserved.
   *   Use is subject to license terms supplied in LICENSE.txt
   */
  
  package ome.services.scripts.test;
  
  import java.io.File;
  import java.io.IOException;
  import java.util.Iterator;
  import java.util.List;
  
  import ome.model.core.OriginalFile;
  import ome.server.itests.AbstractManagedContextTest;
  import ome.services.scripts.RepoFile;
  import ome.services.scripts.ScriptRepoHelper;
  import ome.system.Roles;
  
  import org.apache.commons.io.FileUtils;
  import org.apache.commons.io.FilenameUtils;
  import org.testng.annotations.AfterClass;
  import org.testng.annotations.AfterMethod;
  import org.testng.annotations.BeforeMethod;
  import org.testng.annotations.Test;
  
  /**
   * ScriptRepoHelper is the logic used by the ScriptRepositoryI to register
   * official scripts. We're testing here to not need to deploy, have Ice running,
   * etc.
   *
   * Where possible, use of {@link FileUtils} and {@link FilenameUtils} should be
   * avoided in favor of having that logic in the helper itself.
   */
  @Test(groups = "integration")
  public class ScriptRepoHelperTest extends AbstractManagedContextTest {
  
      RepoFile path;
      List<OriginalFile> files;
      ScriptRepoHelper helper;
      File dir;
  
      @BeforeMethod
      public void setup() throws Exception {
          mkdir();
          loginRoot();
          helper = new ScriptRepoHelper(uuid(""), dir, this.executor,
                  this.loginAop.p, new Roles());
          assertEmptyRepo();
      }
  
      @AfterMethod
      public void teardown() throws Exception {
          FileUtils.deleteDirectory(dir); // 1 of 2 uses of FileUtils
      }
  
      @AfterClass
      public void delete() throws Exception {
          FileUtils.deleteDirectory(dir.getParentFile()); // 2 of 2 uses of FileUtils
      }
  
      public void testLoadAddsObjects() throws Exception {
          path = generateFile();
          assertEquals(1, helper.countOnDisk());
          assertEquals(0, helper.countInDb());
          files = helper.loadAll(false);
          assertContains(helper.iterate(), path);
          assertEquals(1, files.size());
          assertEquals(1, helper.countInDb());
          assertEquals(path.fullname(),
                  path.dirname() + path.basename());
          assertEquals(path.fullname(),
                  files.get(0).getPath() + files.get(0).getName());
      }
  
      public void testFindInDb() throws Exception {
          testLoadAddsObjects();
          assertEquals(files.get(0).getId(), helper.findInDb(path, true));
      }
  
      public void testFileModificationsAreFoundManually() throws Exception {
          testLoadAddsObjects();
          Long fileID = files.get(0).getId();
          RepoFile file = helper.write(path, "changed");
          files = helper.loadAll(false);
          assertEquals(fileID, files.get(0).getId());
          helper.modificationCheck();
          files = helper.loadAll(false);
          assertFalse(fileID.equals(files.get(0).getId()));
      }
  
      public void testFileModificationsCanBeFoundOnLoad() throws Exception {
          testLoadAddsObjects();
          Long fileID = files.get(0).getId();
          helper.write(path, "changed");
          files = helper.loadAll(true);
          assertFalse(fileID.equals(files.get(0).getId()));
      }
  
      public void testHiddenFiles() throws Exception {
          path = generateFile(".test", ".py", "import omero");
          files = helper.loadAll(false);
          assertEmptyRepo();
      }
  
      public void testEmptyFiles() throws Exception {
          path = generateFile("test", ".py", "");
          files = helper.loadAll(false);
          assertEmptyRepo();
      }
  
      public void testTxtFiles() throws Exception {
          path = generateFile("test", ".txt", "import omero");
          files = helper.loadAll(false);
          assertEmptyRepo();
      }
  
      public void testFilesAreAddedToUserGroup() throws Exception {
          path = generateFile();
          files = helper.loadAll(false);
          assertEquals(Long.valueOf(new Roles().getUserGroupId()), files.get(0)
                  .getDetails().getGroup().getId());
      }
  
      public void testReplacedFilesAreRemovedFromRepo() throws Exception {
          path = generateFile();
          files = helper.loadAll(false);
          Long oldID = files.get(0).getId();
          helper.write(path, "updated");
          helper.modificationCheck();
          assertFalse(helper.isInRepo(oldID));
      }
  
      public void testFileModificationsUpdateTheHash() throws Exception {
          path = generateFile();
          files = helper.loadAll(false);
          Long oldID = files.get(0).getId();
          helper.write(path, "updated");
          files = helper.loadAll(true);
          Long newID = files.get(0).getId();
          assertFalse(oldID.equals(newID));
          String fsHash = path.hash();
          String dbHash = files.get(0).getHash();
          assertEquals(dbHash, fsHash);
      }
  
      public void testFilesCanBeDeletedByRelativeValue() throws Exception {
          path = generateFile();
          files = helper.loadAll(false);
          Long id = files.get(0).getId();
          assertTrue(path.file().exists());
          helper.delete(id);
          assertFalse(helper.isInRepo(id));
          assertFalse(path.file().exists());
      }
  
      public void testFilesRemovedFromDiskAreRemovedFromDb() throws Exception {
          path = generateFile();
          int before = helper.loadAll(true).size();
          path.file().delete();
          int after = helper.loadAll(true).size();
          assertEquals(before - 1, after);
      }
  
      // Helpers
      // =========================================================================
  
      protected void assertEmptyRepo() {
          assertEquals(0, helper.countOnDisk());
          assertEquals(0, helper.countInDb());
          files = helper.loadAll(false);
          assertEquals(0, files.size());
      }
  
      protected RepoFile generateFile() throws Exception {
          return generateFile("test", ".py", "import omero");
      }
  
      protected RepoFile generateFile(String prefix, String suffix, String contents)
              throws Exception {
          File dir = new File(helper.getScriptDir());
          File f = File.createTempFile(prefix, suffix, dir);
          RepoFile repoFile = new RepoFile(dir, f);
          return helper.write(repoFile, contents);
      }
  
      protected void assertContains(Iterator<File> it, RepoFile repo) {
          boolean found = false;
          while (it.hasNext()) {
              File f = it.next();
              if (repo.matches(f)) {
                  found = true;
              }
          }
          assertTrue(found);
      }
  
      protected void mkdir() throws IOException {
          File f = new File(".");
          File target = new File(f, "target");
          if (!target.exists()) {
              throw new RuntimeException("Can't find target");
          }
  
          File repos = new File(target, "repos");
          repos.mkdirs();
  
  