package alien4cloud.component.repository; import static org.junit.Assert.*; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import javax.annotation.Resource; import org.alien4cloud.tosca.catalog.repository.ICsarRepositry; import org.alien4cloud.tosca.model.Csar; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import alien4cloud.common.AlienConstants; import alien4cloud.component.repository.exception.CSARStorageFailureException; import alien4cloud.exception.NotFoundException; import alien4cloud.utils.FileUtil; import lombok.extern.slf4j.Slf4j; @Slf4j @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:application-context-test.xml") public class CsarRepositoryTest { @Resource private ICsarRepositry repo; private String tmpPath = "src/test/resources/data/test-file.zip"; private String testFileName = "positive"; private static final String ARCHIVE_EXTENSION = "csar"; @Value("${directories.alien}/${directories.csar_repository}") private String alienRepoDir; @Test(expected = NotFoundException.class) public void CSARVersionNotFoundTest() { cleanup(); repo.getCSAR(testFileName, "1.0"); } @Test public void storeCSARTest() { cleanup(); testStoreSuccessful("1.0"); } @Test public void getCASERTest() { cleanup(); storeTestCSAR(testFileName, "1.0", tmpPath); testGetCSARSuccessul(); } @Test(expected = CSARStorageFailureException.class) public void testBadTmpPathToStore() { cleanup(); storeTestCSAR(testFileName, "1.0", "src/test/files/positive.rar"); } public void testStoreSuccessful(String version) { Path path = storeTestCSAR(testFileName, version, tmpPath); assertTrue("File " + path + " Was supposed to be created but not the case.", fileExists(path, false)); } @Test public void testOverrideExistingSnapshotVersion() { cleanup(); testStoreSuccessful("1.0-snapshot"); testStoreSuccessful("1.0-snapshot"); } private Path storeTestCSAR(String testFileName, String version, String tmpPath) { Path path = Paths.get(tmpPath).toAbsolutePath(); Csar csar = new Csar(testFileName, version); csar.setWorkspace(AlienConstants.GLOBAL_WORKSPACE_ID); repo.storeCSAR(csar, path); return path; } public void testGetCSARSuccessul() { Path path = repo.getCSAR(testFileName, "1.0"); assertNotNull(path); String[] splits = path.toString().split("[\\\\/]"); String name = splits[splits.length - 1]; String expectedName = testFileName.concat("-".concat("1.0").concat(".").concat(ARCHIVE_EXTENSION)); assertEquals(expectedName, name); log.debug("GET Result: " + path); } private boolean fileExists(Path path, boolean isDirectory) { if (isDirectory) { return Files.isDirectory(path); } return Files.exists(path); } @After public void cleanup() { if (fileExists(Paths.get(alienRepoDir), true)) { log.debug("cleaning the test env"); try { FileUtil.delete(Paths.get(alienRepoDir)); } catch (IOException e) { e.printStackTrace(); } } } }