/* * Copyright (c) NASK, NCSC * * This file is part of HoneySpider Network 2.1. * * This is a free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package pl.nask.hsn2.framwework.workflow.repository; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.util.List; import junit.framework.Assert; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.ReaderInputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import pl.nask.hsn2.framework.workflow.repository.GitWorkflowRepository; import pl.nask.hsn2.framework.workflow.repository.WorkflowRepoException; import pl.nask.hsn2.framework.workflow.repository.WorkflowVersionInfo; public class GitRepositoryTest { private static final Logger LOGGER = LoggerFactory.getLogger(GitRepositoryTest.class); String repoDir = removeEndingFileSeparator(System.getProperty("java.io.tmpdir")) + "/test-git-repo"; GitWorkflowRepository repo; String WORKFLOW_NAME = "newTestFile"; String testInput2 = "test input 2"; String testInput = "test input"; @BeforeTest public void initRepo() throws WorkflowRepoException, IOException { File r = new File(repoDir); FileUtils.deleteDirectory(r); repo = new GitWorkflowRepository(repoDir, true); } @AfterTest public void removeRepo() throws IOException { File r = new File(repoDir); FileUtils.deleteDirectory(r); } private String removeEndingFileSeparator(String pathToCheck) { String fileSeparator = System.getProperty("file.separator"); String lastPathChar = "" + pathToCheck.charAt(pathToCheck.length() - 1); String result; if (fileSeparator.equals(lastPathChar)) { result = pathToCheck.substring(0, pathToCheck.length() - 1); } else { result = pathToCheck; } return result; } @Test public void saveNewWorkflow() throws WorkflowRepoException { LOGGER.info("saving workflow..."); StringReader reader = new StringReader(testInput); InputStream is = new ReaderInputStream(reader); repo.saveWorkflow(WORKFLOW_NAME, is); Assert.assertTrue(fileExists(WORKFLOW_NAME)); } @Test(dependsOnMethods = "saveNewWorkflow") public void updateNewWorkflow() throws WorkflowRepoException, InterruptedException { LOGGER.info("updating workflow..."); StringReader reader = new StringReader(testInput2); InputStream is = new ReaderInputStream(reader); repo.saveWorkflow(WORKFLOW_NAME, is); Assert.assertTrue(fileExists(WORKFLOW_NAME)); } @Test(dependsOnMethods = "updateNewWorkflow") public void listWorkflowsTest() throws IOException, WorkflowRepoException { LOGGER.info("listing workflows..."); // creating file not under git management FileWriter f = new FileWriter(new File(repoDir, "unexpectedFile")); f.write("sadsadasfas"); f.close(); List<String> list = repo.listWorkflowNames(); Assert.assertFalse(list.contains(".git")); Assert.assertTrue(list.contains(WORKFLOW_NAME)); for (String fileName : list) { LOGGER.info("found file:{}", fileName); } Assert.assertEquals(list.size(), 1); Assert.assertEquals(list.get(0), WORKFLOW_NAME); } @Test(dependsOnMethods = "updateNewWorkflow") public void getWorkflowFileHead() throws IOException, WorkflowRepoException { InputStream is = repo.getWorkflowFile(WORKFLOW_NAME, null); Assert.assertNotNull(is); assertSameAs(testInput2, is); } @Test(dependsOnMethods = { "updateNewWorkflow", "getVersions" }) public void getWorkflowFileVersion1() throws IOException, WorkflowRepoException { List<WorkflowVersionInfo> versions = repo.getVersions(WORKFLOW_NAME); InputStream is = repo.getWorkflowFile(WORKFLOW_NAME, versions.get(0).getVersion()); // same as head! assertSameAs(testInput2, is); } @Test(dependsOnMethods = { "updateNewWorkflow", "getVersions" }) public void getWorkflowFileVersion2() throws IOException, WorkflowRepoException { List<WorkflowVersionInfo> versions = repo.getVersions(WORKFLOW_NAME); InputStream is = repo.getWorkflowFile(WORKFLOW_NAME, versions.get(1).getVersion()); // same as head! assertSameAs(testInput, is); } private void assertSameAs(String expected, InputStream is) throws IOException { try { String content = IOUtils.toString(is); Assert.assertEquals(expected, content); } finally { is.close(); } } @Test(dependsOnMethods = "updateNewWorkflow") public void getVersions() throws WorkflowRepoException { List<WorkflowVersionInfo> versions = repo.getVersions("newTestFile"); Assert.assertNotNull(versions); Assert.assertEquals(2, versions.size()); for (WorkflowVersionInfo info : versions) { LOGGER.info("rev={}, ts={}", info.getVersion(), info.getVersionTimestamp()); } } private boolean fileExists(String name) { return new File(repoDir, name).exists(); } }