diff --git a/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/FDSServiceImpl.java b/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/FDSServiceImpl.java index e28fb7ea3..6682acc3c 100644 --- a/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/FDSServiceImpl.java +++ b/alitheia/core/src/main/java/eu/sqooss/impl/service/fds/FDSServiceImpl.java @@ -154,7 +154,7 @@ public void run() { private OnDiskCheckout createCheckout(SCMAccessor scm, ProjectVersion pv, String path) { logger.info("Creating new checkout for " + pv); - File projectRoot = new File(fdsCheckoutRoot, pv.getProject().getName()); + File projectRoot = new File(fdsCheckoutRoot, pv.getProjectName()); // It might not exist yet projectRoot.mkdirs(); @@ -194,19 +194,19 @@ private Revision projectFileRevision(ProjectFile pf) { return null; } - String projectVersion = pf.getProjectVersion().getRevisionId(); - long projectId = pf.getProjectVersion().getProject().getId(); - try { + String projectVersion = pf.getRevisionId(); + long projectId = pf.getProjectId(); + try { return tds.getAccessor(projectId).getSCMAccessor().newRevision( projectVersion); } catch (InvalidAccessorException e) { logger.error("Invalid SCM accessor for project " - + pf.getProjectVersion().getProject().getName() + " " + + pf.getProjectName() + " " + e.getMessage()); return null; } } - + /** * Get the File where the given project file will be cached locally by the * FDS. @@ -230,7 +230,7 @@ private File projectFileLocal(ProjectFile pf, Revision r) { // Path generation for a "single file checkout" File checkoutFile = new File(fdsCheckoutRoot + System.getProperty("file.separator") - + pf.getProjectVersion().getProject().getId() + + pf.getProjectId() + System.getProperty("file.separator") + pr.getUniqueId() + System.getProperty("file.separator") + pf.getFileName()); @@ -248,18 +248,26 @@ private File projectFileLocal(ProjectFile pf, Revision r) { */ private SCMAccessor projectFileAccessor(ProjectFile pf) { // Retrieve the project ID - long projectId = pf.getProjectVersion().getProject().getId(); + long projectId = pf.getProjectId(); // Get a TDS handle for the selected ProjectFile try { return tds.getAccessor(projectId).getSCMAccessor(); } catch (InvalidAccessorException e) { logger.error("Invalid SCM accessor for project " - + pf.getProjectVersion().getProject().getName() + " " + + pf.getProjectName() + " " + e.getMessage()); return null; } } + + /** + * Used for testing. It can pass a tds to be used for testing. + * @param newTds + */ + public void setTds(TDSService newTds){ + this.tds = newTds; + } /** * Check whether a checkout can be done @@ -274,7 +282,7 @@ private boolean canCheckout(ProjectVersion pv) throws CheckoutException { } if (!tds.accessorExists(projectId)) { throw new CheckoutException("No accessor available for project: " - + pv.getProject().getName()); + + pv.getProjectName()); } ProjectAccessor a = tds.getAccessor(projectId); @@ -282,7 +290,7 @@ private boolean canCheckout(ProjectVersion pv) throws CheckoutException { if (a == null) { logger.warn("Accessor not available even though it exists."); throw new CheckoutException("Accessor " + "for project " - + pv.getProject().getName() + + pv.getProjectName() + " not available even though it exists."); } @@ -291,14 +299,14 @@ private boolean canCheckout(ProjectVersion pv) throws CheckoutException { if (svn == null) { logger .warn("No SCM available for " - + pv.getProject().getName()); + + pv.getProjectName()); throw new CheckoutException( "No SCM accessor available for project " - + pv.getProject().getName()); + + pv.getProjectName()); } } catch (InvalidAccessorException e) { throw new CheckoutException("Invalid SCM accessor for project " - + pv.getProject().getName() + " " + e.getMessage()); + + pv.getProjectName() + " " + e.getMessage()); } return true; @@ -368,7 +376,7 @@ private synchronized boolean cacheContains(ProjectVersion pv) { * key for indexing cache checkouts. */ private String cacheKey(ProjectVersion pv) { - return pv.getProject().getName() + "|" + pv.getId() + "|" + return pv.getProjectName() + "|" + pv.getId() + "|" + pv.getRevisionId(); } @@ -513,12 +521,12 @@ public InMemoryCheckout getInMemoryCheckout(ProjectVersion pv, svn = tds.getAccessor(projectId).getSCMAccessor(); } catch (InvalidAccessorException e) { throw new CheckoutException("Invalid SCM accessor for project " - + pv.getProject().getName() + ": " + e.getMessage()); + + pv.getProjectName() + ": " + e.getMessage()); } svn.newRevision(pv.getRevisionId()); logger .info("Finding available checkout for " - + pv.getProject().getName() + " revision " + + pv.getProjectName() + " revision " + pv.getRevisionId()); return new InMemoryCheckoutImpl(pv, pattern); @@ -538,7 +546,7 @@ public OnDiskCheckout getCheckout(ProjectVersion pv, String path) svn = tds.getAccessor(projectId).getSCMAccessor(); } catch (InvalidAccessorException e) { throw new CheckoutException("Invalid SCM accessor for project " - + pv.getProject().getName() + ": " + e.getMessage()); + + pv.getProjectName() + ": " + e.getMessage()); } svn.newRevision(pv.getRevisionId()); diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/MetricType.java b/alitheia/core/src/main/java/eu/sqooss/service/db/MetricType.java index 5b8d0721a..04051df21 100644 --- a/alitheia/core/src/main/java/eu/sqooss/service/db/MetricType.java +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/MetricType.java @@ -85,41 +85,152 @@ public class MetricType extends DAObject { * activation types, but not necessarily on a 1-1 basis. */ public enum Type { + PROJECT{ + public Type fromStringType(String s){ + if("PROJECT".equals(s)) + return Type.PROJECT; + return null; + } - PROJECT, - SOURCE_FILE, - SOURCE_DIRECTORY, - MAILING_LIST, - BUG, PROJECT_VERSION, - MAILTHREAD, MAILMESSAGE, - DEVELOPER, NAMESPACE, - EXECUNIT, ENCAPSUNIT; + public Class toActivator(){ + return StoredProject.class; + } + }, + SOURCE_FILE{ + public Type fromStringType(String s){ + if ("SOURCE_CODE".equals(s) || "SOURCE_FILE".equals(s)) + return Type.SOURCE_FILE; + return null; + } - public static Type fromString(String s) { - if ("SOURCE_CODE".equals(s) || "SOURCE_FILE".equals(s)) - return Type.SOURCE_FILE; - if ("SOURCE_FOLDER".equals(s) || "SOURCE_DIRECTORY".equals(s)) - return Type.SOURCE_DIRECTORY; - else if ("MAILING_LIST".equals(s)) - return Type.MAILING_LIST; - else if ("BUG_DATABASE".equals(s) || "BUG".equals(s)) - return Type.BUG; - else if ("THREAD".equals(s) || "MAILTHREAD".equals(s)) - return Type.MAILTHREAD; - else if ("MAILMESSAGE".equals(s)) - return Type.MAILMESSAGE; - else if ("PROJECT_WIDE".equals(s) || "PROJECT_VERSION".equals(s)) - return Type.PROJECT_VERSION; - else if ("DEVELOPER".equals(s)) - return Type.DEVELOPER; - else if ("NAMESPACE".equals(s)) - return Type.NAMESPACE; - else if ("EXECUNIT".equals(s)) - return Type.EXECUNIT; - else if ("ENCAPSUNIT".equals(s)) - return Type.ENCAPSUNIT; - else + public Class toActivator(){ + return ProjectFile.class; + } + }, + SOURCE_DIRECTORY{ + public Type fromStringType(String s){ + if ("SOURCE_FOLDER".equals(s) || "SOURCE_DIRECTORY".equals(s)) + return Type.SOURCE_DIRECTORY; + return null; + } + + public Class toActivator(){ + return ProjectDirectory.class; + } + }, + MAILING_LIST{ + public Type fromStringType(String s){ + if ("MAILING_LIST".equals(s)) + return Type.MAILING_LIST; + return null; + } + + public Class toActivator(){ + return MailingList.class; + } + }, + BUG{ + public Type fromStringType(String s){ + if ("BUG_DATABASE".equals(s) || "BUG".equals(s)) + return Type.BUG; return null; + } + + public Class toActivator(){ + return Bug.class; + } + }, + PROJECT_VERSION{ + public Type fromStringType(String s){ + if ("PROJECT_WIDE".equals(s) || "PROJECT_VERSION".equals(s)) + return Type.PROJECT_VERSION; + return null; + } + + public Class toActivator(){ + return ProjectVersion.class; + } + }, + MAILTHREAD{ + public Type fromStringType(String s){ + if ("THREAD".equals(s) || "MAILTHREAD".equals(s)) + return Type.MAILTHREAD; + return null; + } + + public Class toActivator(){ + return MailingListThread.class; + } + }, + MAILMESSAGE{ + public Type fromStringType(String s){ + if ("MAILMESSAGE".equals(s)) + return Type.MAILMESSAGE; + return null; + } + + public Class toActivator(){ + return MailMessage.class; + } + }, + DEVELOPER{ + public Type fromStringType(String s){ + if ("DEVELOPER".equals(s)) + return Type.DEVELOPER; + return null; + } + + public Class toActivator(){ + return Developer.class; + } + }, + NAMESPACE{ + public Type fromStringType(String s){ + if ("NAMESPACE".equals(s)) + return Type.NAMESPACE; + return null; + } + + public Class toActivator(){ + return NameSpace.class; + } + }, + EXECUNIT{ + public Type fromStringType(String s){ + if ("EXECUNIT".equals(s)) + return Type.EXECUNIT; + return null; + } + + public Class toActivator(){ + return ExecutionUnit.class; + } + }, + ENCAPSUNIT{ + public Type fromStringType(String s){ + if ("ENCAPSUNIT".equals(s)) + return Type.ENCAPSUNIT; + return null; + } + + public Class toActivator(){ + return EncapsulationUnit.class; + } + }; + + public abstract Type fromStringType(String s); + + public abstract Class toActivator(); + + public static Type fromString(String s) { + Type result = null; + for(Type t : Type.values()){ + result = t.fromStringType(s); + if(result != null){ + return result; + } + } + return result; } } @@ -214,35 +325,9 @@ public static MetricType.Type fromActivator(Class activator) return null; } - public Class toActivator() { - switch(Type.fromString(this.type)) { - case SOURCE_DIRECTORY: - return ProjectDirectory.class; - case SOURCE_FILE: - return ProjectFile.class; - case PROJECT_VERSION: - return ProjectVersion.class; - case PROJECT: - return StoredProject.class; - case MAILMESSAGE: - return MailMessage.class; - case MAILING_LIST: - return MailingList.class; - case MAILTHREAD: - return MailingListThread.class; - case BUG: - return Bug.class; - case DEVELOPER: - return Developer.class; - case NAMESPACE: - return NameSpace.class; - case ENCAPSUNIT: - return EncapsulationUnit.class; - case EXECUNIT: - return ExecutionUnit.class; - } - return null; - } + public Class toActivator() { + return Type.fromString(type).toActivator(); + } } //vi: ai nosi sw=4 ts=4 expandtab diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectFile.java b/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectFile.java index 399ae78ad..c1731370d 100644 --- a/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectFile.java +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectFile.java @@ -235,6 +235,17 @@ public ProjectVersion getProjectVersion() { return projectVersion; } + public String getRevisionId(){ + return projectVersion.getRevisionId(); + } + public long getProjectId(){ + return projectVersion.getProjectId(); + } + + public String getProjectName(){ + return projectVersion.getProjectName(); + } + public void setState(ProjectFileState state) { this.state = state; } diff --git a/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectVersion.java b/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectVersion.java index f32cebc48..f0b2cfa41 100644 --- a/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectVersion.java +++ b/alitheia/core/src/main/java/eu/sqooss/service/db/ProjectVersion.java @@ -215,7 +215,15 @@ public void setId(long id) { public StoredProject getProject() { return project; } + + public long getProjectId(){ + return project.getId(); + } + public String getProjectName(){ + return project.getName(); + } + public void setProject(StoredProject project) { this.project = project; } diff --git a/alitheia/core/src/main/java/eu/sqooss/service/tds/Diff.java b/alitheia/core/src/main/java/eu/sqooss/service/tds/Diff.java index ba479d9fc..663a30dfa 100644 --- a/alitheia/core/src/main/java/eu/sqooss/service/tds/Diff.java +++ b/alitheia/core/src/main/java/eu/sqooss/service/tds/Diff.java @@ -80,6 +80,13 @@ public interface Diff { * Get all the chunks indexed by the file they apply to. */ Map> getDiffChunks(); + + /** + * Parse a implementation of Diff. + * + * @return true on success or false and set the error message. + */ + boolean parseDiff(); } // vi: ai nosi sw=4 ts=4 expandtab diff --git a/alitheia/core/src/main/java/eu/sqooss/service/tds/DiffFactory.java b/alitheia/core/src/main/java/eu/sqooss/service/tds/DiffFactory.java index 94da736ea..f91644a75 100644 --- a/alitheia/core/src/main/java/eu/sqooss/service/tds/DiffFactory.java +++ b/alitheia/core/src/main/java/eu/sqooss/service/tds/DiffFactory.java @@ -65,7 +65,7 @@ public static DiffFactory getInstance() { public Diff doUnifiedDiff(Revision start, Revision end, String basePath, String diff) { - UnifiedDiffParser d = new UnifiedDiffParser(start, end, basePath, diff); + Diff d = new UnifiedDiffParser(start, end, basePath, diff); if (d.parseDiff()) return d; diff --git a/alitheia/core/src/main/java/eu/sqooss/service/updater/UpdaterBaseJob.java b/alitheia/core/src/main/java/eu/sqooss/service/updater/UpdaterBaseJob.java index 190dc7756..1447b6202 100644 --- a/alitheia/core/src/main/java/eu/sqooss/service/updater/UpdaterBaseJob.java +++ b/alitheia/core/src/main/java/eu/sqooss/service/updater/UpdaterBaseJob.java @@ -52,7 +52,7 @@ public abstract class UpdaterBaseJob extends Job { protected Logger logger; protected DBService dbs; protected StoredProject project; - protected UpdaterServiceImpl updater; + protected UpdaterService updater; public void setUpdateParams(StoredProject sp, Logger l) { this.project = sp; diff --git a/alitheia/core/src/test/java/eu/sqooss/impl/service/fds/test/FDSServiceImplTest.java b/alitheia/core/src/test/java/eu/sqooss/impl/service/fds/test/FDSServiceImplTest.java new file mode 100644 index 000000000..a59ceb10d --- /dev/null +++ b/alitheia/core/src/test/java/eu/sqooss/impl/service/fds/test/FDSServiceImplTest.java @@ -0,0 +1,94 @@ +package eu.sqooss.impl.service.fds.test; + + +import static org.junit.Assert.*; + +import org.junit.*; + +import org.mockito.Mockito; +import org.powermock.reflect.Whitebox; + +import eu.sqooss.impl.service.fds.*; +import eu.sqooss.service.db.*; +import eu.sqooss.service.tds.*; + +public class FDSServiceImplTest { + + static FDSServiceImpl fdsMock; + static ProjectFile pf; + static String revisionId; + static int projectId; + static ProjectFileState pfs; + static TDSService tds; + static ProjectVersion pv; + static ProjectAccessor accessor; + static SCMAccessor scm; + static Revision newRevision; + static StoredProject project; + + @BeforeClass + public static void init() throws InvalidAccessorException{ + fdsMock = new FDSServiceImpl(); + tds = Mockito.mock(TDSService.class); + pfs = Mockito.mock(ProjectFileState.class); + accessor = Mockito.mock(ProjectAccessor.class); + scm = Mockito.mock(SCMAccessor.class); + newRevision = Mockito.mock(Revision.class); + + revisionId = "test"; + projectId = 0; + + Mockito.stub(tds.getAccessor(projectId)).toReturn(accessor); + Mockito.when(accessor.getSCMAccessor()).thenReturn(scm); + Mockito.when(scm.newRevision(revisionId)).thenReturn(newRevision); + + fdsMock.setTds(tds); + + pf = new ProjectFile(); + pf.setState(pfs); + + project = new StoredProject(); + project.setId(projectId); + + pv = new ProjectVersion(); + pv.setRevisionId(revisionId); + pv.setProject(project); + + pf.setProjectVersion(pv); + } + + @Test + public void testProjectFileRevisionFirstIf() throws Exception { + Mockito.when(pfs.toString()).thenReturn("DELETED"); + Revision result = Whitebox. invokeMethod(fdsMock, "projectFileRevision", pf); + assertTrue(result == null); + } + + @Test + public void testProjectFileRevision() throws Exception { + Mockito.when(pfs.toString()).thenReturn("ADDED"); + Revision result = Whitebox. invokeMethod(fdsMock, "projectFileRevision", pf); + assertTrue( + result.equals( + tds.getAccessor(projectId) + .getSCMAccessor() + .newRevision(pv.getRevisionId()) + ) + ); + } + + @Test + public void testPfGetProjectId(){ + assertEquals(pf.getProjectId(), pf.getProjectVersion().getProject().getId()); + } + + @Test + public void testPfGetRevisionId(){ + assertEquals(pf.getRevisionId(), pf.getProjectVersion().getRevisionId()); + } + + @Test + public void testPfGetProjectName(){ + assertEquals(pf.getProjectName(), pf.getProjectVersion().getProject().getName()); + } +} diff --git a/alitheia/core/src/test/java/eu/sqooss/service/db/test/MetricTypeTest.java b/alitheia/core/src/test/java/eu/sqooss/service/db/test/MetricTypeTest.java new file mode 100644 index 000000000..1f373179d --- /dev/null +++ b/alitheia/core/src/test/java/eu/sqooss/service/db/test/MetricTypeTest.java @@ -0,0 +1,101 @@ +package eu.sqooss.service.db.test; + +import static org.junit.Assert.*; + +import org.junit.*; + +import eu.sqooss.service.db.*; +import eu.sqooss.service.db.MetricType.*; + +public class MetricTypeTest { + + public static MetricType metricSF; + + @BeforeClass + public static void MetricTypeTest(){ + metricSF = new MetricType(); + } + + @Test + public void testTypeFromString(){ + assertEquals(0,Type.fromString("SOURCE_CODE").compareTo(Type.SOURCE_FILE)); + assertEquals(0,Type.fromString("SOURCE_FILE").compareTo(Type.SOURCE_FILE)); + + assertEquals(0,Type.fromString("SOURCE_FOLDER").compareTo(Type.SOURCE_DIRECTORY)); + assertEquals(0,Type.fromString("SOURCE_DIRECTORY").compareTo(Type.SOURCE_DIRECTORY)); + + assertEquals(0,Type.fromString("MAILING_LIST").compareTo(Type.MAILING_LIST)); + + assertEquals(0,Type.fromString("BUG_DATABASE").compareTo(Type.BUG)); + assertEquals(0,Type.fromString("BUG").compareTo(Type.BUG)); + + assertEquals(0,Type.fromString("THREAD").compareTo(Type.MAILTHREAD)); + assertEquals(0,Type.fromString("MAILTHREAD").compareTo(Type.MAILTHREAD)); + + assertEquals(0,Type.fromString("MAILMESSAGE").compareTo(Type.MAILMESSAGE)); + + assertEquals(0,Type.fromString("PROJECT_WIDE").compareTo(Type.PROJECT_VERSION)); + assertEquals(0,Type.fromString("PROJECT_VERSION").compareTo(Type.PROJECT_VERSION)); + + assertEquals(0,Type.fromString("DEVELOPER").compareTo(Type.DEVELOPER)); + + assertEquals(0,Type.fromString("NAMESPACE").compareTo(Type.NAMESPACE)); + + assertEquals(0,Type.fromString("EXECUNIT").compareTo(Type.EXECUNIT)); + + assertEquals(0,Type.fromString("ENCAPSUNIT").compareTo(Type.ENCAPSUNIT)); + + assertEquals(null,Type.fromString("SOMETHING_RANDOM_FOR_THE_NULL")); + + + } + + @Test + public void testTypeOfMetric(){ + metricSF.setEnumType(Type.SOURCE_DIRECTORY); + assertTrue(metricSF.toActivator().equals(ProjectDirectory.class)); + + metricSF.setEnumType(Type.SOURCE_FILE); + assertTrue(metricSF.toActivator().equals(ProjectFile.class)); + + metricSF.setEnumType(Type.PROJECT_VERSION); + assertTrue(metricSF.toActivator().equals(ProjectVersion.class)); + + metricSF.setEnumType(Type.MAILMESSAGE); + assertTrue(metricSF.toActivator().equals(MailMessage.class)); + + metricSF.setEnumType(Type.MAILING_LIST); + assertTrue(metricSF.toActivator().equals(MailingList.class)); + + metricSF.setEnumType(Type.MAILTHREAD); + assertTrue(metricSF.toActivator().equals(MailingListThread.class)); + + metricSF.setEnumType(Type.BUG); + assertTrue(metricSF.toActivator().equals(Bug.class)); + + metricSF.setEnumType(Type.DEVELOPER); + assertTrue(metricSF.toActivator().equals(Developer.class)); + + metricSF.setEnumType(Type.NAMESPACE); + assertTrue(metricSF.toActivator().equals(NameSpace.class)); + + metricSF.setEnumType(Type.ENCAPSUNIT); + assertTrue(metricSF.toActivator().equals(EncapsulationUnit.class)); + + metricSF.setEnumType(Type.EXECUNIT); + assertTrue(metricSF.toActivator().equals(ExecutionUnit.class)); + + metricSF.setEnumType(Type.PROJECT); + metricSF.toActivator(); + } + + /** + * Was used to test the old code, which would return null with toActivator for type Project. + */ + @Ignore + @Test(expected=NullPointerException.class) + public void testTypeOfMetricForProject(){ + metricSF.setEnumType(Type.PROJECT); + metricSF.toActivator(); + } +} diff --git a/alitheia/core/src/test/java/eu/sqooss/service/tds/test/DiffFactoryTest.java b/alitheia/core/src/test/java/eu/sqooss/service/tds/test/DiffFactoryTest.java new file mode 100644 index 000000000..a91bb598c --- /dev/null +++ b/alitheia/core/src/test/java/eu/sqooss/service/tds/test/DiffFactoryTest.java @@ -0,0 +1,38 @@ +package eu.sqooss.service.tds.test; + +import static org.junit.Assert.*; + +import org.junit.*; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; + +import static org.mockito.Mockito.verify; +import static org.powermock.api.mockito.PowerMockito.*; +import eu.sqooss.impl.service.tds.diff.UnifiedDiffParser; +import eu.sqooss.service.tds.Diff; +import eu.sqooss.service.tds.DiffFactory; + + +@RunWith(MockitoJUnitRunner.class) +public class DiffFactoryTest { + + static Diff udpMock; + + @Test + public void DiffCallParseDiff(){ + udpMock = Mockito.mock(UnifiedDiffParser.class); + + testDiffCallparseDiff(); + verify(udpMock).parseDiff(); + } + + + public Diff testDiffCallparseDiff(){ + if (udpMock.parseDiff()) + return udpMock; + + return null; + } +} diff --git a/pom.xml b/pom.xml index 12683f1ee..91498de56 100644 --- a/pom.xml +++ b/pom.xml @@ -49,21 +49,22 @@ 8443 - MySQL localhost alitheia alitheia alitheia c3p0 - --> - + + true branches