From 05d8de0d4225dbc4182e7868d34cb10746fe7430 Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 00:28:54 +0200 Subject: [PATCH 01/17] Feat: add mongo dependencies, empty MongodbManager class --- dspot/pom.xml | 6 +++++- .../main/java/eu/stamp_project/mongodb/MongodbManager.java | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java diff --git a/dspot/pom.xml b/dspot/pom.xml index 421f33484..099ad2397 100644 --- a/dspot/pom.xml +++ b/dspot/pom.xml @@ -157,7 +157,11 @@ junit-vintage-engine 5.3.2 - + + org.mongodb + mongodb-driver + 3.2.2 + diff --git a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java new file mode 100644 index 000000000..16e895cae --- /dev/null +++ b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java @@ -0,0 +1,4 @@ +package eu.stamp_project.mongodb; + +public class MongodbManager { +} From e8e8cd80a1a7ba906663fad4efec6de686aad6c1 Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 00:31:02 +0200 Subject: [PATCH 02/17] Feat: add implementation of mongodb --- .../stamp_project/mongodb/MongodbManager.java | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java index 16e895cae..ccf65d07d 100644 --- a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java +++ b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java @@ -1,4 +1,117 @@ package eu.stamp_project.mongodb; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.mongodb.*; + +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; + +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import static com.mongodb.client.model.Filters.*; +import static com.mongodb.client.model.Projections.*; +import static com.mongodb.client.model.Updates.*; +import org.bson.Document; + +/*Parsing date*/ +import java.util.Date; +import java.text.DateFormat; +import java.text.SimpleDateFormat; + +import java.util.ArrayList; +import java.util.List; +/*import java.util.ArrayList; +*/ public class MongodbManager { + private static final Logger LOGGER = LoggerFactory.getLogger(MongodbManager.class); + /*Format of date for saving in Mongodb*/ + private static final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + private static MongodbManager single_instance = null; + + /*Empty later*/ + public boolean dbConnectable; + private String mongoUrl = "mongodb://localhost:27017"; + private String dbName = "Dspot"; + private String repoSlug = "travisplay"; + private String colName = "testRecords"; + + + /*Jacoco Selector*/ + public List jacocoSelectorDocs; + + /*PitMutantScoreSelector*/ + public List pitMutantScoreSelectorDocs;/* + + /*Argumets from input*/ + public Document argsDoc; + + private MongodbManager () { + this.jacocoSelectorDocs = new ArrayList(); + this.pitMutantScoreSelectorDocs = new ArrayList(); + this.argsDoc = new Document(); + } + + public static MongodbManager getInstance() { + if (single_instance == null) { + single_instance = new MongodbManager(); + } + return single_instance; + } + + + public void initMongodbManager (String mongoUrl, String dbName, String colName, String repoSlug) { + this.mongoUrl = mongoUrl; + this.dbName = dbName; + this.colName = colName; + this.repoSlug = repoSlug; + this.dbConnectable = this.testConnectionToDb(); + } + + private String getCurrentDate() { + Date date = new Date(); + return this.dateFormat.format(date); + } + + private boolean testConnectionToDb() { + try { + MongoClient mongoClient = new MongoClient(new MongoClientURI(this.mongoUrl)); + mongoClient.close(); + return true; + }catch (Exception e) { + LOGGER.info("failed to connect to mongodb"); + return false; + } + } + + public void sendInfoToDb() { + try { + MongoClient mongoClient = new MongoClient(new MongoClientURI(this.mongoUrl)); + MongoDatabase database = mongoClient.getDatabase(this.dbName); + MongoCollection coll = database.getCollection(this.colName); + + Document mainDoc = new Document("RepoSlug", this.repoSlug) + .append("Date",this.getCurrentDate()); + mainDoc.append("AmpOptions",argsDoc); + + if (argsDoc.get("test-criterion").equals("JacocoCoverageSelector")) { + Document mergedDoc = new Document(); + for (Document doc : jacocoSelectorDocs) { + mergedDoc.putAll(doc); + } + mainDoc.append("AmpResult",mergedDoc); + }else if (argsDoc.get("test-criterion").equals("PitMutantScoreSelector")) { + Document mergedDoc = new Document(); + for (Document doc : pitMutantScoreSelectorDocs) { + mergedDoc.putAll(doc); + } + mainDoc.append("AmpResult",mergedDoc); + } + + coll.insertOne(mainDoc); + mongoClient.close(); + }catch (Exception e) { + System.out.println("failed to connect to mongodb"); + } + } } From 784deb15563e7977c9842bb443a498c77f598c3a Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 00:40:21 +0200 Subject: [PATCH 03/17] Feat: add JAP option for Mongodb --- .../src/main/java/eu/stamp_project/Main.java | 3 ++ .../utils/options/JSAPOptions.java | 53 +++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/dspot/src/main/java/eu/stamp_project/Main.java b/dspot/src/main/java/eu/stamp_project/Main.java index f491f7cf2..1f61fb878 100644 --- a/dspot/src/main/java/eu/stamp_project/Main.java +++ b/dspot/src/main/java/eu/stamp_project/Main.java @@ -8,6 +8,7 @@ import eu.stamp_project.utils.report.error.ErrorReportImpl; import eu.stamp_project.utils.report.output.OutputReportImpl; import eu.stamp_project.utils.report.output.selector.TestSelectorReportImpl; +import eu.stamp_project.mongodb.MongodbManager; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,6 +60,8 @@ public static void run() { // global report handling Main.GLOBAL_REPORT.output(); Main.GLOBAL_REPORT.reset(); + // Send info to Mongodb + MongodbManager.getInstance().sendInfoToDb(); } public static void createOutputDirectories() { diff --git a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java index fd2f256a5..01e1465ee 100644 --- a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java +++ b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java @@ -7,6 +7,7 @@ import com.martiansoftware.jsap.JSAPResult; import com.martiansoftware.jsap.Parameter; import com.martiansoftware.jsap.Switch; +import eu.stamp_project.mongodb.MongodbManager; import eu.stamp_project.dspot.selector.PitMutantScoreSelector; import eu.stamp_project.utils.options.check.Checker; import eu.stamp_project.utils.AmplificationHelper; @@ -84,6 +85,11 @@ public static void parse(String[] args) { // Anyway, the verification in DSpot is not yet too late nor deep in the amplification's process. final List test = Arrays.asList(jsapConfig.getStringArray("test")); final List testCases = Arrays.asList(jsapConfig.getStringArray("test-cases")); + final String mongoUrl = jsapConfig.getString("mongo-url"); + final String mongoDbname = jsapConfig.getString("mongo-dbname"); + final String mongoColname = jsapConfig.getString("mongo-colname"); + final String repoSlug = jsapConfig.getString("repo-slug"); + Configuration.configure( pathToProperties, @@ -115,6 +121,16 @@ public static void parse(String[] args) { testCases, fullClasspath ); + + // Sending options to mongodb to record the properties of this run + MongodbManager mongodbManager = MongodbManager.getInstance(); + mongodbManager.initMongodbManager(mongoUrl,mongoDbname,mongoColname,repoSlug); + mongodbManager.argsDoc.append("amplifiers",Arrays.toString(jsapConfig.getStringArray("amplifiers"))); + mongodbManager.argsDoc.append("test-criterion",testCriterion); + mongodbManager.argsDoc.append("iteration",Integer.toString(iteration)); + mongodbManager.argsDoc.append("gregor","" + gregor); + mongodbManager.argsDoc.append("descartes","" + descartes); + mongodbManager.argsDoc.append("executeTestParallelWithNumberProcessors",Integer.toString(executeTestParallelWithNumberProcessors)); } private static String helpForEnums(Class enumClass) { @@ -343,6 +359,39 @@ private static JSAP initJSAP() { fullClasspath.setHelp("[optional] specify the classpath of the project. If this option is used, DSpot won't use an AutomaticBuilder (e.g. Maven) to clean, compile and get the classpath of the project. " + "Please ensure that your project is in a good shape, i.e. clean and correctly compiled, sources and test sources."); + FlaggedOption mongoUrl = new FlaggedOption("mongo-url"); + mongoUrl.setLongFlag("mongo-url"); + mongoUrl.setDefault("mongodb://localhost:27017"); + mongoUrl.setRequired(false); + mongoUrl.setStringParser(JSAP.STRING_PARSER); + mongoUrl.setAllowMultipleDeclarations(false); + mongoUrl.setHelp("[optional] If valid url, DSpot will submit to Mongodb database."); + + FlaggedOption mongoDbname = new FlaggedOption("mongo-dbname"); + mongoDbname.setLongFlag("mongo-dbname"); + mongoDbname.setDefault("Dspot"); + mongoDbname.setRequired(false); + mongoDbname.setStringParser(JSAP.STRING_PARSER); + mongoDbname.setAllowMultipleDeclarations(false); + mongoDbname.setHelp("[optional] If valid mongo-url provided, DSpot will submit to the provided database name."); + + FlaggedOption mongoColname = new FlaggedOption("mongo-colname"); + mongoColname.setLongFlag("mongo-colname"); + mongoColname.setDefault("AmpRecords"); + mongoColname.setRequired(false); + mongoColname.setStringParser(JSAP.STRING_PARSER); + mongoColname.setAllowMultipleDeclarations(false); + mongoColname.setHelp("[optional] If valid mongo-url and mongo-dbname provided, DSpot will submit to the provided collection name."); + + FlaggedOption repoSlug = new FlaggedOption("repo-slug"); + repoSlug.setLongFlag("repo-slug"); + repoSlug.setDefault("UnknownSlug"); + repoSlug.setRequired(false); + repoSlug.setStringParser(JSAP.STRING_PARSER); + repoSlug.setAllowMultipleDeclarations(false); + repoSlug.setHelp("[optional] If valid mongo-url provided, DSpot will submit to Mongodb database with the provided slug as identifier for the amplification data submitted."); + + try { jsap.registerParameter(pathToConfigFile); jsap.registerParameter(amplifiers); @@ -373,6 +422,10 @@ private static JSAP initJSAP() { jsap.registerParameter(allowPathInAssertions); jsap.registerParameter(executeTestParallel); jsap.registerParameter(fullClasspath); + jsap.registerParameter(mongoUrl); + jsap.registerParameter(mongoDbname); + jsap.registerParameter(mongoColname); + jsap.registerParameter(repoSlug); jsap.registerParameter(example); jsap.registerParameter(help); } catch (JSAPException e) { From f491cfba527962c62379b1f7eb0652699511b546 Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 00:52:23 +0200 Subject: [PATCH 04/17] Feat: scrape data from PitMutantScoreSelector for MongodbManager --- .../dspot/selector/PitMutantScoreSelector.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java b/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java index 5855f6dd7..fb22d914d 100644 --- a/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java +++ b/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java @@ -1,5 +1,7 @@ package eu.stamp_project.dspot.selector; +import org.bson.Document; +import eu.stamp_project.mongodb.MongodbManager; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import eu.stamp_project.Main; @@ -235,6 +237,11 @@ public TestSelectorElementReport report() { } private String reportStdout() { + Document infoDoc = new Document(); + infoDoc.append("originalKilledMutants","" + this.originalKilledMutants.size()); + infoDoc.append("NewMutantKilled","" + getNbTotalNewMutantKilled()); + MongodbManager.getInstance().pitMutantScoreSelectorDocs.add(new Document(s.replace(".","/D/"),infoDoc)); + return "Test class that has been amplified: " + this.currentClassTestToBeAmplified.getQualifiedName() + AmplificationHelper.LINE_SEPARATOR + "The original test suite kills " + From 97054e80a0b37b72e1e8057e7bf4b8ecff59ca7e Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 00:54:52 +0200 Subject: [PATCH 05/17] Fix: add missing variable --- .../eu/stamp_project/dspot/selector/PitMutantScoreSelector.java | 1 + 1 file changed, 1 insertion(+) diff --git a/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java b/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java index fb22d914d..78703f659 100644 --- a/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java +++ b/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java @@ -237,6 +237,7 @@ public TestSelectorElementReport report() { } private String reportStdout() { + String s = this.currentClassTestToBeAmplified.getQualifiedName(); Document infoDoc = new Document(); infoDoc.append("originalKilledMutants","" + this.originalKilledMutants.size()); infoDoc.append("NewMutantKilled","" + getNbTotalNewMutantKilled()); From 7a3291e9faae52e199a7ed76174a5eb520f0ebd3 Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 00:58:31 +0200 Subject: [PATCH 06/17] Feat: scrape data from JacocoCoverageSelector for MongodbManager --- .../dspot/selector/JacocoCoverageSelector.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java b/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java index 6643ed19f..eb2b50c59 100644 --- a/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java +++ b/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java @@ -1,5 +1,7 @@ package eu.stamp_project.dspot.selector; +import org.bson.Document; +import eu.stamp_project.mongodb.MongodbManager; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import eu.stamp_project.utils.report.output.selector.TestSelectorElementReport; @@ -185,7 +187,9 @@ public TestSelectorElementReport report() { .append(this.selectedAmplifiedTest.size()) .append(" amplified tests.") .append(AmplificationHelper.LINE_SEPARATOR); - + /*Sending info to Mongodb, format original/newkills/percentage*/ + Document infoDoc = new Document(); + infoDoc.append("initialCoverage","" + this.initialCoverage.getInstructionsCovered()); // compute the new coverage obtained by the amplification final CtType clone = this.currentClassTestToBeAmplified.clone(); this.currentClassTestToBeAmplified.getPackage().addType(clone); @@ -222,6 +226,13 @@ public TestSelectorElementReport report() { .append("%") .append(AmplificationHelper.LINE_SEPARATOR); lastReport = new TestSelectorElementReportImpl(report.toString(), jsonReport(coverageResults)); + /*Sending data to Mongodb*/ + String s = this.currentClassTestToBeAmplified.getQualifiedName(); + infoDoc.append("ampCoverage","" + coverageResults.getInstructionsCovered()); + infoDoc.append("totalCoverage","" + coverageResults.getInstructionsTotal()); + + MongodbManager.getInstance().jacocoSelectorDocs.add(new Document(s.replace(".","/D/"),infoDoc)); + return lastReport; } catch (TimeoutException e) { throw new RuntimeException(e); From 54a38060261dcb49bb0d6e6525db40c4fa74e5a2 Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 03:18:18 +0200 Subject: [PATCH 07/17] Feat: scrap path to .java output files and store them into Mongodb --- .../stamp_project/mongodb/MongodbManager.java | 38 ++++++++++++++++++- .../eu/stamp_project/utils/DSpotUtils.java | 5 +++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java index ccf65d07d..88a623ee4 100644 --- a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java +++ b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java @@ -21,8 +21,13 @@ import java.util.ArrayList; import java.util.List; -/*import java.util.ArrayList; -*/ + +import java.nio.file.Files; +import java.nio.charset.StandardCharsets; +import java.nio.charset.Charset; +import java.nio.file.Paths; +import java.io.IOException; + public class MongodbManager { private static final Logger LOGGER = LoggerFactory.getLogger(MongodbManager.class); /*Format of date for saving in Mongodb*/ @@ -46,10 +51,14 @@ public class MongodbManager { /*Argumets from input*/ public Document argsDoc; + /*Output paths for java files*/ + public List javaPathList; + private MongodbManager () { this.jacocoSelectorDocs = new ArrayList(); this.pitMutantScoreSelectorDocs = new ArrayList(); this.argsDoc = new Document(); + this.javaPathList = new ArrayList(); } public static MongodbManager getInstance() { @@ -73,6 +82,11 @@ private String getCurrentDate() { return this.dateFormat.format(date); } + private String getFileNameGivenPath(String path) { + String[] bits = path.split("/"); + return bits[bits.length - 1]; + } + private boolean testConnectionToDb() { try { MongoClient mongoClient = new MongoClient(new MongoClientURI(this.mongoUrl)); @@ -84,6 +98,16 @@ private boolean testConnectionToDb() { } } + + static String readFile(String path, Charset encoding) { + try { + byte[] encoded = Files.readAllBytes(Paths.get(path)); + return new String(encoded, encoding); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + public void sendInfoToDb() { try { MongoClient mongoClient = new MongoClient(new MongoClientURI(this.mongoUrl)); @@ -108,6 +132,16 @@ public void sendInfoToDb() { mainDoc.append("AmpResult",mergedDoc); } + + Document ampFiles = new Document(); + for (String path : javaPathList) { + String fileName = this.getFileNameGivenPath(path).replace(".java",""); + String content = this.readFile(path,StandardCharsets.US_ASCII).replace(".","/D/"); + LOGGER.warn("fileName: " + fileName); + LOGGER.warn("content: " + content); + ampFiles.append(fileName,content); + } + mainDoc.append("Files",ampFiles); coll.insertOne(mainDoc); mongoClient.close(); }catch (Exception e) { diff --git a/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java b/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java index c9543d096..fe2266dd4 100644 --- a/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java +++ b/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java @@ -1,6 +1,7 @@ package eu.stamp_project.utils; import eu.stamp_project.Main; +import eu.stamp_project.mongodb.MongodbManager; import eu.stamp_project.utils.compilation.DSpotCompiler; import eu.stamp_project.utils.program.InputConfiguration; import eu.stamp_project.utils.report.error.Error; @@ -107,6 +108,10 @@ public static void printAndCompileToCheck(CtType type, File directory) { final String pathname = directory.getAbsolutePath() + File.separator + type.getQualifiedName().replaceAll("\\.", regex) + ".java"; + + // Save path to mongodb. + MongodbManager.getInstance().javaPathList.add(pathname); + LOGGER.warn("Henry- Pathname : " + pathname); final CtType existingAmplifiedTestClass; if (new File(pathname).exists()) { existingAmplifiedTestClass = getExistingClass(type, pathname);//FIXME: analyse for optimisation (16% total execution time) From 5e91c60a5af585dee87cb5ccb3834336623940af Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 14:21:40 +0200 Subject: [PATCH 08/17] Feat: Mongodb check if db is connected otherwise no file construction will happen --- dspot/src/main/java/eu/stamp_project/Main.java | 4 +++- .../dspot/selector/JacocoCoverageSelector.java | 18 ++++++++++++------ .../dspot/selector/PitMutantScoreSelector.java | 14 +++++++++----- .../stamp_project/mongodb/MongodbManager.java | 3 ++- .../eu/stamp_project/utils/DSpotUtils.java | 7 +++++-- .../utils/options/JSAPOptions.java | 16 +++++++++------- 6 files changed, 40 insertions(+), 22 deletions(-) diff --git a/dspot/src/main/java/eu/stamp_project/Main.java b/dspot/src/main/java/eu/stamp_project/Main.java index 1f61fb878..befb5a53e 100644 --- a/dspot/src/main/java/eu/stamp_project/Main.java +++ b/dspot/src/main/java/eu/stamp_project/Main.java @@ -61,7 +61,9 @@ public static void run() { Main.GLOBAL_REPORT.output(); Main.GLOBAL_REPORT.reset(); // Send info to Mongodb - MongodbManager.getInstance().sendInfoToDb(); + if (MongodbManager.getInstance().dbConnectable) { + MongodbManager.getInstance().sendInfoToDb(); + } } public static void createOutputDirectories() { diff --git a/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java b/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java index eb2b50c59..400809de2 100644 --- a/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java +++ b/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java @@ -49,6 +49,8 @@ public class JacocoCoverageSelector extends TakeAllSelector { private TestSelectorElementReport lastReport; + private Document infoDoc; + @Override public boolean init() { super.init(); @@ -188,8 +190,10 @@ public TestSelectorElementReport report() { .append(" amplified tests.") .append(AmplificationHelper.LINE_SEPARATOR); /*Sending info to Mongodb, format original/newkills/percentage*/ - Document infoDoc = new Document(); - infoDoc.append("initialCoverage","" + this.initialCoverage.getInstructionsCovered()); + if (MongodbManager.getInstance().dbConnectable) { + infoDoc = new Document(); + infoDoc.append("initialCoverage","" + this.initialCoverage.getInstructionsCovered()); + } // compute the new coverage obtained by the amplification final CtType clone = this.currentClassTestToBeAmplified.clone(); this.currentClassTestToBeAmplified.getPackage().addType(clone); @@ -227,11 +231,13 @@ public TestSelectorElementReport report() { .append(AmplificationHelper.LINE_SEPARATOR); lastReport = new TestSelectorElementReportImpl(report.toString(), jsonReport(coverageResults)); /*Sending data to Mongodb*/ - String s = this.currentClassTestToBeAmplified.getQualifiedName(); - infoDoc.append("ampCoverage","" + coverageResults.getInstructionsCovered()); - infoDoc.append("totalCoverage","" + coverageResults.getInstructionsTotal()); + if (MongodbManager.getInstance().dbConnectable) { + String s = this.currentClassTestToBeAmplified.getQualifiedName(); + infoDoc.append("ampCoverage","" + coverageResults.getInstructionsCovered()); + infoDoc.append("totalCoverage","" + coverageResults.getInstructionsTotal()); - MongodbManager.getInstance().jacocoSelectorDocs.add(new Document(s.replace(".","/D/"),infoDoc)); + MongodbManager.getInstance().jacocoSelectorDocs.add(new Document(s.replace(".","/D/"),infoDoc)); + } return lastReport; } catch (TimeoutException e) { diff --git a/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java b/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java index 78703f659..c28253862 100644 --- a/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java +++ b/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java @@ -55,6 +55,8 @@ public enum OutputFormat {XML, CSV} private TestSelectorElementReport lastReport; + private Document infoDoc; + public PitMutantScoreSelector() { this(OutputFormat.XML); } @@ -237,11 +239,13 @@ public TestSelectorElementReport report() { } private String reportStdout() { - String s = this.currentClassTestToBeAmplified.getQualifiedName(); - Document infoDoc = new Document(); - infoDoc.append("originalKilledMutants","" + this.originalKilledMutants.size()); - infoDoc.append("NewMutantKilled","" + getNbTotalNewMutantKilled()); - MongodbManager.getInstance().pitMutantScoreSelectorDocs.add(new Document(s.replace(".","/D/"),infoDoc)); + if (MongodbManager.getInstance().dbConnectable) { + String s = this.currentClassTestToBeAmplified.getQualifiedName(); + infoDoc = new Document(); + infoDoc.append("originalKilledMutants","" + this.originalKilledMutants.size()); + infoDoc.append("NewMutantKilled","" + getNbTotalNewMutantKilled()); + MongodbManager.getInstance().pitMutantScoreSelectorDocs.add(new Document(s.replace(".","/D/"),infoDoc)); + } return "Test class that has been amplified: " + this.currentClassTestToBeAmplified.getQualifiedName() + AmplificationHelper.LINE_SEPARATOR + diff --git a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java index 88a623ee4..655d27f7c 100644 --- a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java +++ b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java @@ -91,9 +91,10 @@ private boolean testConnectionToDb() { try { MongoClient mongoClient = new MongoClient(new MongoClientURI(this.mongoUrl)); mongoClient.close(); + LOGGER.warn("Mongodb connection Successful"); return true; }catch (Exception e) { - LOGGER.info("failed to connect to mongodb"); + LOGGER.warn("failed to connect to mongodb, No information will be submitted at the end"); return false; } } diff --git a/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java b/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java index fe2266dd4..542017325 100644 --- a/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java +++ b/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java @@ -110,8 +110,11 @@ public static void printAndCompileToCheck(CtType type, File directory) { type.getQualifiedName().replaceAll("\\.", regex) + ".java"; // Save path to mongodb. - MongodbManager.getInstance().javaPathList.add(pathname); - LOGGER.warn("Henry- Pathname : " + pathname); + if (MongodbManager.getInstance().dbConnectable) { + MongodbManager.getInstance().javaPathList.add(pathname); + LOGGER.warn("Henry- Pathname : " + pathname); + } + final CtType existingAmplifiedTestClass; if (new File(pathname).exists()) { existingAmplifiedTestClass = getExistingClass(type, pathname);//FIXME: analyse for optimisation (16% total execution time) diff --git a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java index 01e1465ee..9cbcf0f5d 100644 --- a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java +++ b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java @@ -124,13 +124,15 @@ public static void parse(String[] args) { // Sending options to mongodb to record the properties of this run MongodbManager mongodbManager = MongodbManager.getInstance(); - mongodbManager.initMongodbManager(mongoUrl,mongoDbname,mongoColname,repoSlug); - mongodbManager.argsDoc.append("amplifiers",Arrays.toString(jsapConfig.getStringArray("amplifiers"))); - mongodbManager.argsDoc.append("test-criterion",testCriterion); - mongodbManager.argsDoc.append("iteration",Integer.toString(iteration)); - mongodbManager.argsDoc.append("gregor","" + gregor); - mongodbManager.argsDoc.append("descartes","" + descartes); - mongodbManager.argsDoc.append("executeTestParallelWithNumberProcessors",Integer.toString(executeTestParallelWithNumberProcessors)); + if (MongodbManager.getInstance().dbConnectable) { + mongodbManager.initMongodbManager(mongoUrl,mongoDbname,mongoColname,repoSlug); + mongodbManager.argsDoc.append("amplifiers",Arrays.toString(jsapConfig.getStringArray("amplifiers"))); + mongodbManager.argsDoc.append("test-criterion",testCriterion); + mongodbManager.argsDoc.append("iteration",Integer.toString(iteration)); + mongodbManager.argsDoc.append("gregor","" + gregor); + mongodbManager.argsDoc.append("descartes","" + descartes); + mongodbManager.argsDoc.append("executeTestParallelWithNumberProcessors",Integer.toString(executeTestParallelWithNumberProcessors)); + } } private static String helpForEnums(Class enumClass) { From 2787afefd53f6affb61b84a1968ed35d53e57e1c Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 14:47:16 +0200 Subject: [PATCH 09/17] Fix: add neccessary methods for mongodbConnectable --- .../src/main/java/eu/stamp_project/Main.java | 2 +- .../selector/JacocoCoverageSelector.java | 4 +- .../selector/PitMutantScoreSelector.java | 2 +- .../stamp_project/mongodb/MongodbManager.java | 71 ++++++++++--------- .../eu/stamp_project/utils/DSpotUtils.java | 2 +- .../utils/options/JSAPOptions.java | 3 +- 6 files changed, 45 insertions(+), 39 deletions(-) diff --git a/dspot/src/main/java/eu/stamp_project/Main.java b/dspot/src/main/java/eu/stamp_project/Main.java index befb5a53e..afafa9c83 100644 --- a/dspot/src/main/java/eu/stamp_project/Main.java +++ b/dspot/src/main/java/eu/stamp_project/Main.java @@ -61,7 +61,7 @@ public static void run() { Main.GLOBAL_REPORT.output(); Main.GLOBAL_REPORT.reset(); // Send info to Mongodb - if (MongodbManager.getInstance().dbConnectable) { + if (MongodbManager.getInstance().getDbConnectable()) { MongodbManager.getInstance().sendInfoToDb(); } } diff --git a/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java b/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java index 400809de2..e58442389 100644 --- a/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java +++ b/dspot/src/main/java/eu/stamp_project/dspot/selector/JacocoCoverageSelector.java @@ -190,7 +190,7 @@ public TestSelectorElementReport report() { .append(" amplified tests.") .append(AmplificationHelper.LINE_SEPARATOR); /*Sending info to Mongodb, format original/newkills/percentage*/ - if (MongodbManager.getInstance().dbConnectable) { + if (MongodbManager.getInstance().getDbConnectable()) { infoDoc = new Document(); infoDoc.append("initialCoverage","" + this.initialCoverage.getInstructionsCovered()); } @@ -231,7 +231,7 @@ public TestSelectorElementReport report() { .append(AmplificationHelper.LINE_SEPARATOR); lastReport = new TestSelectorElementReportImpl(report.toString(), jsonReport(coverageResults)); /*Sending data to Mongodb*/ - if (MongodbManager.getInstance().dbConnectable) { + if (MongodbManager.getInstance().getDbConnectable()) { String s = this.currentClassTestToBeAmplified.getQualifiedName(); infoDoc.append("ampCoverage","" + coverageResults.getInstructionsCovered()); infoDoc.append("totalCoverage","" + coverageResults.getInstructionsTotal()); diff --git a/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java b/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java index c28253862..490ace67a 100644 --- a/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java +++ b/dspot/src/main/java/eu/stamp_project/dspot/selector/PitMutantScoreSelector.java @@ -239,7 +239,7 @@ public TestSelectorElementReport report() { } private String reportStdout() { - if (MongodbManager.getInstance().dbConnectable) { + if (MongodbManager.getInstance().getDbConnectable()) { String s = this.currentClassTestToBeAmplified.getQualifiedName(); infoDoc = new Document(); infoDoc.append("originalKilledMutants","" + this.originalKilledMutants.size()); diff --git a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java index 655d27f7c..24ae1a912 100644 --- a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java +++ b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java @@ -35,12 +35,12 @@ public class MongodbManager { private static MongodbManager single_instance = null; /*Empty later*/ - public boolean dbConnectable; - private String mongoUrl = "mongodb://localhost:27017"; - private String dbName = "Dspot"; - private String repoSlug = "travisplay"; - private String colName = "testRecords"; - + private static boolean dbConnectable; + private static String mongoUrl; + private static String dbName; + private static String repoSlug; + private static String colName; + private static MongoClient mongoClient; /*Jacoco Selector*/ public List jacocoSelectorDocs; @@ -59,6 +59,7 @@ private MongodbManager () { this.pitMutantScoreSelectorDocs = new ArrayList(); this.argsDoc = new Document(); this.javaPathList = new ArrayList(); + this.dbConnectable = testConnectionToDb(); } public static MongodbManager getInstance() { @@ -69,27 +70,18 @@ public static MongodbManager getInstance() { } - public void initMongodbManager (String mongoUrl, String dbName, String colName, String repoSlug) { - this.mongoUrl = mongoUrl; - this.dbName = dbName; - this.colName = colName; - this.repoSlug = repoSlug; - this.dbConnectable = this.testConnectionToDb(); + public static void initMongodbManager (String mongoUrl_ln, String dbName_ln, String colName_ln, String repoSlug_ln) { + mongoUrl = mongoUrl_ln; + dbName = dbName_ln; + colName = colName_ln; + repoSlug = repoSlug_ln; + dbConnectable = testConnectionToDb(); } - private String getCurrentDate() { - Date date = new Date(); - return this.dateFormat.format(date); - } - - private String getFileNameGivenPath(String path) { - String[] bits = path.split("/"); - return bits[bits.length - 1]; - } - private boolean testConnectionToDb() { + private static boolean testConnectionToDb() { try { - MongoClient mongoClient = new MongoClient(new MongoClientURI(this.mongoUrl)); + mongoClient = new MongoClient(new MongoClientURI(mongoUrl)); mongoClient.close(); LOGGER.warn("Mongodb connection Successful"); return true; @@ -99,19 +91,13 @@ private boolean testConnectionToDb() { } } - - static String readFile(String path, Charset encoding) { - try { - byte[] encoded = Files.readAllBytes(Paths.get(path)); - return new String(encoded, encoding); - } catch (IOException e) { - throw new RuntimeException(e); - } + public boolean getDbConnectable() { + return dbConnectable; } public void sendInfoToDb() { try { - MongoClient mongoClient = new MongoClient(new MongoClientURI(this.mongoUrl)); + mongoClient = new MongoClient(new MongoClientURI(this.mongoUrl)); MongoDatabase database = mongoClient.getDatabase(this.dbName); MongoCollection coll = database.getCollection(this.colName); @@ -142,11 +128,30 @@ public void sendInfoToDb() { LOGGER.warn("content: " + content); ampFiles.append(fileName,content); } - mainDoc.append("Files",ampFiles); + mainDoc.append("AmpTestFiles",ampFiles); coll.insertOne(mainDoc); mongoClient.close(); }catch (Exception e) { System.out.println("failed to connect to mongodb"); } } + + private static String readFile(String path, Charset encoding) { + try { + byte[] encoded = Files.readAllBytes(Paths.get(path)); + return new String(encoded, encoding); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private String getCurrentDate() { + Date date = new Date(); + return this.dateFormat.format(date); + } + + private String getFileNameGivenPath(String path) { + String[] bits = path.split("/"); + return bits[bits.length - 1]; + } } diff --git a/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java b/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java index 542017325..7f5fe46da 100644 --- a/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java +++ b/dspot/src/main/java/eu/stamp_project/utils/DSpotUtils.java @@ -110,7 +110,7 @@ public static void printAndCompileToCheck(CtType type, File directory) { type.getQualifiedName().replaceAll("\\.", regex) + ".java"; // Save path to mongodb. - if (MongodbManager.getInstance().dbConnectable) { + if (MongodbManager.getInstance().getDbConnectable()) { MongodbManager.getInstance().javaPathList.add(pathname); LOGGER.warn("Henry- Pathname : " + pathname); } diff --git a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java index 9cbcf0f5d..ac2f520fb 100644 --- a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java +++ b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java @@ -123,8 +123,9 @@ public static void parse(String[] args) { ); // Sending options to mongodb to record the properties of this run + MongodbManager.initMongodbManager(mongoUrl,mongoDbname,mongoColname,repoSlug); MongodbManager mongodbManager = MongodbManager.getInstance(); - if (MongodbManager.getInstance().dbConnectable) { + if (MongodbManager.getInstance().getDbConnectable()) { mongodbManager.initMongodbManager(mongoUrl,mongoDbname,mongoColname,repoSlug); mongodbManager.argsDoc.append("amplifiers",Arrays.toString(jsapConfig.getStringArray("amplifiers"))); mongodbManager.argsDoc.append("test-criterion",testCriterion); From 9101cf7759058314bd7319c1ca8759b51916b779 Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 15:20:25 +0200 Subject: [PATCH 10/17] Fix: move a line --- .../src/main/java/eu/stamp_project/mongodb/MongodbManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java index 24ae1a912..db789f99b 100644 --- a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java +++ b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java @@ -35,11 +35,11 @@ public class MongodbManager { private static MongodbManager single_instance = null; /*Empty later*/ - private static boolean dbConnectable; private static String mongoUrl; private static String dbName; private static String repoSlug; private static String colName; + private static boolean dbConnectable; private static MongoClient mongoClient; /*Jacoco Selector*/ From 0208f78bc2da38a91512ebf05bd249a4a9850b2b Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 16:13:55 +0200 Subject: [PATCH 11/17] Feat: add empty test , change default mongo-url --- .../utils/options/JSAPOptions.java | 4 +-- .../mongodb/MongodbManagerTest.java | 28 +++++++++++++++++++ dspot/src/test/resources/mongo-test | 1 + 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java create mode 160000 dspot/src/test/resources/mongo-test diff --git a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java index ac2f520fb..c872d0ea7 100644 --- a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java +++ b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java @@ -364,11 +364,11 @@ private static JSAP initJSAP() { FlaggedOption mongoUrl = new FlaggedOption("mongo-url"); mongoUrl.setLongFlag("mongo-url"); - mongoUrl.setDefault("mongodb://localhost:27017"); + mongoUrl.setDefault("mongodb://IPORHOSTNAME:PORT"); mongoUrl.setRequired(false); mongoUrl.setStringParser(JSAP.STRING_PARSER); mongoUrl.setAllowMultipleDeclarations(false); - mongoUrl.setHelp("[optional] If valid url, DSpot will submit to Mongodb database."); + mongoUrl.setHelp("[optional] If valid url, DSpot will submit to Mongodb database. For default use mongodb://localhost:27017"); FlaggedOption mongoDbname = new FlaggedOption("mongo-dbname"); mongoDbname.setLongFlag("mongo-dbname"); diff --git a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java new file mode 100644 index 000000000..2193cadc6 --- /dev/null +++ b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java @@ -0,0 +1,28 @@ +package eu.stamp_project.mongodb; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import eu.stamp_project.Main; + +public class MongodbManagerTest { + + @Test + public void testMain() { + /*Main.main(new String[]{ + "--clean", + "--verbose", + "--path-to-properties", "src/test/resources/sample/sample.properties", + "--test-criterion", "TakeAllSelector", + "--test", "fr.inria.sample.TestClassWithoutAssert:fr.inria.sample.TestClassWithAssert", + "--test-cases", "test1:test:anOldTest", + "--no-minimize" + });*/ + assertTrue(True); + } + +} \ No newline at end of file diff --git a/dspot/src/test/resources/mongo-test b/dspot/src/test/resources/mongo-test new file mode 160000 index 000000000..31e820795 --- /dev/null +++ b/dspot/src/test/resources/mongo-test @@ -0,0 +1 @@ +Subproject commit 31e8207952e47f528ade0c75b186d24b36483a64 From 6b6893ba870fb09e7b268454df6074a86ccfbd87 Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 22:52:03 +0200 Subject: [PATCH 12/17] Update --- .../stamp_project/mongodb/MongodbManager.java | 19 ++++++++++++++----- .../mongodb/MongodbManagerTest.java | 16 +++++++++------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java index db789f99b..ba0b01670 100644 --- a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java +++ b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java @@ -40,7 +40,6 @@ public class MongodbManager { private static String repoSlug; private static String colName; private static boolean dbConnectable; - private static MongoClient mongoClient; /*Jacoco Selector*/ public List jacocoSelectorDocs; @@ -69,7 +68,6 @@ public static MongodbManager getInstance() { return single_instance; } - public static void initMongodbManager (String mongoUrl_ln, String dbName_ln, String colName_ln, String repoSlug_ln) { mongoUrl = mongoUrl_ln; dbName = dbName_ln; @@ -78,6 +76,17 @@ public static void initMongodbManager (String mongoUrl_ln, String dbName_ln, Str dbConnectable = testConnectionToDb(); } + public static MongoClient connectToMongo (String mongoUrl) { + return new MongoClient(new MongoClientURI(mongoUrl)); + } + + public static MongoDatabase getDatabase (String dbName , MongoClient mongoClient) { + return mongoClient.getDatabase(dbName); + } + + public static MongoCollection getCollection (String colName,MongoDatabase database) { + return database.getCollection(colName); + } private static boolean testConnectionToDb() { try { @@ -97,9 +106,9 @@ public boolean getDbConnectable() { public void sendInfoToDb() { try { - mongoClient = new MongoClient(new MongoClientURI(this.mongoUrl)); - MongoDatabase database = mongoClient.getDatabase(this.dbName); - MongoCollection coll = database.getCollection(this.colName); + MongoClient mongoClient = connectToMongo(this.mongoUrl); + MongoDatabase database = getDatabase(this.dbName,mongoClient); + MongoCollection coll = getCollection(this.colName,database); Document mainDoc = new Document("RepoSlug", this.repoSlug) .append("Date",this.getCurrentDate()); diff --git a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java index 2193cadc6..88c27fca0 100644 --- a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java +++ b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java @@ -13,16 +13,18 @@ public class MongodbManagerTest { @Test public void testMain() { - /*Main.main(new String[]{ + Main.main(new String[]{ "--clean", "--verbose", - "--path-to-properties", "src/test/resources/sample/sample.properties", + "--path-to-properties", "src/test/resources/mongo-test/dspot.properties", "--test-criterion", "TakeAllSelector", - "--test", "fr.inria.sample.TestClassWithoutAssert:fr.inria.sample.TestClassWithAssert", - "--test-cases", "test1:test:anOldTest", - "--no-minimize" - });*/ - assertTrue(True); + "--mongo-url","mongodb://localhost:27017", + "--mongo-colname","AmpTestRecords", + "--repo-slug","Dspot/mongo-test" + }); + + + assertTrue(true); } } \ No newline at end of file From 01cfcca7f5db1cabebcaf465ef56af482e00fc95 Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 22:53:59 +0200 Subject: [PATCH 13/17] Feat: pull mongo image for testing, add implementation of MongodbManagerTest --- .travis.yml | 4 +- .../stamp_project/mongodb/MongodbManager.java | 6 +- .../mongodb/MongodbManagerTest.java | 56 +++++++++++++++++-- dspot/src/test/resources/mongo-test | 1 - 4 files changed, 56 insertions(+), 11 deletions(-) delete mode 160000 dspot/src/test/resources/mongo-test diff --git a/.travis.yml b/.travis.yml index 8994919bb..1b3b52b77 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,7 +28,9 @@ cache: before_install: - sudo apt-get update - sudo apt-get install python3 - +# Pull Mongodb image to test +- docker pull mongo:latest +- docker run --net=host mongo:latest install: - export DSPOT_VERSION=`grep '' dspot/pom.xml | head -n 1 | sed -e 's///' -e 's/<\\/version>//' -e 's/ *//g'` - export MAVEN_HOME=`mvn --version | grep 'Maven home' | sed -e 's/Maven h.* //'` diff --git a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java index ba0b01670..7fe72ce1f 100644 --- a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java +++ b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java @@ -34,7 +34,7 @@ public class MongodbManager { private static final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); private static MongodbManager single_instance = null; - /*Empty later*/ + private static MongoClient mongoClient; private static String mongoUrl; private static String dbName; private static String repoSlug; @@ -82,7 +82,7 @@ public static MongoClient connectToMongo (String mongoUrl) { public static MongoDatabase getDatabase (String dbName , MongoClient mongoClient) { return mongoClient.getDatabase(dbName); - } + } public static MongoCollection getCollection (String colName,MongoDatabase database) { return database.getCollection(colName); @@ -106,7 +106,7 @@ public boolean getDbConnectable() { public void sendInfoToDb() { try { - MongoClient mongoClient = connectToMongo(this.mongoUrl); + mongoClient = connectToMongo(this.mongoUrl); MongoDatabase database = getDatabase(this.dbName,mongoClient); MongoCollection coll = getCollection(this.colName,database); diff --git a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java index 88c27fca0..f54378751 100644 --- a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java +++ b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java @@ -8,23 +8,67 @@ import static org.junit.Assert.assertTrue; import eu.stamp_project.Main; +import eu.stamp_project.mongodb.MongodbManager; + +import com.mongodb.*; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientURI; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoDatabase; +import static com.mongodb.client.model.Filters.*; +import static com.mongodb.client.model.Projections.*; +import static com.mongodb.client.model.Updates.*; +import org.bson.Document; public class MongodbManagerTest { @Test - public void testMain() { + public void testInfoSubmissionToMongodbPitMutantScoreSelector() { Main.main(new String[]{ - "--clean", - "--verbose", - "--path-to-properties", "src/test/resources/mongo-test/dspot.properties", - "--test-criterion", "TakeAllSelector", + "--path-to-properties", "src/test/resources/sample/sample.properties", + "--test-criterion", "PitMutantScoreSelector", + "--test", "fr.inria.sample.TestClassWithoutAssert", + "--path-pit-result", "src/test/resources/sample/mutations.csv", + "--gregor", + "--output-path", "target/trash", "--mongo-url","mongodb://localhost:27017", + "--mongo-dbname","Dspot", "--mongo-colname","AmpTestRecords", "--repo-slug","Dspot/mongo-test" }); + /*Fetch submitted document*/ + MongoClient mongoClient = MongodbManager.connectToMongo("mongodb://localhost:27017"); + MongoCollection coll = MongodbManager.getCollection("AmpTestRecords",MongodbManager.getDatabase("Dspot",mongoClient)); + + Document foundDoc = coll.find(eq("RepoSlug","Dspot/mongo-test")).projection(fields(excludeId(),exclude("Date"),exclude("AmpTestFiles"))).first(); + /*Remove from database*/ + coll.deleteOne(foundDoc); + + String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, AmpOptions=Document{{amplifiers=[None], test-criterion=PitMutantScoreSelector, iteration=3, gregor=true, descartes=true, executeTestParallelWithNumberProcessors=4}}, AmpResult=Document{{fr/D/inria/D/sample/D/TestClassWithoutAssert=Document{{originalKilledMutants=0, NewMutantKilled=67}}}}}}"; - assertTrue(true); + assertEquals(foundDoc.toString(),expectedDocStr); } + @Test + public void testInfoSubmissionToMongodbJacocoCoverageSelector() { + Main.main(new String[]{ + "--path-to-properties", "src/test/resources/project-with-resources/project-with-resources.properties", + "--test-criterion", "JacocoCoverageSelector", + "--iteration", "1", + "--mongo-url","mongodb://localhost:27017", + "--mongo-dbname","Dspot", + "--mongo-colname","AmpTestRecords", + "--repo-slug","Dspot/mongo-test" + }); + MongoClient mongoClient = MongodbManager.connectToMongo("mongodb://localhost:27017"); + MongoCollection coll = MongodbManager.getCollection("AmpTestRecords",MongodbManager.getDatabase("Dspot",mongoClient)); + + Document foundDoc = coll.find(eq("RepoSlug","Dspot/mongo-test")).projection(fields(excludeId(),exclude("Date"),exclude("AmpTestFiles"))).first(); + /*Remove from database*/ + coll.deleteOne(foundDoc); + String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, AmpOptions=Document{{amplifiers=[None], test-criterion=JacocoCoverageSelector, iteration=1, gregor=false, descartes=true, executeTestParallelWithNumberProcessors=4}}, AmpResult=Document{{resolver/D/ClasspathResolverTest=Document{{initialCoverage=123, ampCoverage=123, totalCoverage=130}}, textresources/D/in/D/sources/D/TestResourcesInSources=Document{{initialCoverage=4, ampCoverage=4, totalCoverage=130}}}}}}"; + + assertEquals(foundDoc.toString(),expectedDocStr); + } } \ No newline at end of file diff --git a/dspot/src/test/resources/mongo-test b/dspot/src/test/resources/mongo-test deleted file mode 160000 index 31e820795..000000000 --- a/dspot/src/test/resources/mongo-test +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 31e8207952e47f528ade0c75b186d24b36483a64 From 6df4e7a78cf3660ef485c70f71cc2b0bc66f07f5 Mon Sep 17 00:00:00 2001 From: tailp Date: Sat, 27 Jul 2019 22:57:30 +0200 Subject: [PATCH 14/17] Fix: run mongo in the background --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1b3b52b77..e6c591a99 100644 --- a/.travis.yml +++ b/.travis.yml @@ -30,7 +30,7 @@ before_install: - sudo apt-get install python3 # Pull Mongodb image to test - docker pull mongo:latest -- docker run --net=host mongo:latest +- docker run -d --net=host mongo:latest install: - export DSPOT_VERSION=`grep '' dspot/pom.xml | head -n 1 | sed -e 's///' -e 's/<\\/version>//' -e 's/ *//g'` - export MAVEN_HOME=`mvn --version | grep 'Maven home' | sed -e 's/Maven h.* //'` From 32ca67d864e028b7d9eb650fc50235d7a25e3f22 Mon Sep 17 00:00:00 2001 From: tailp Date: Sun, 28 Jul 2019 00:54:49 +0200 Subject: [PATCH 15/17] Fix: remove Numberof processors before comparing --- .../mongodb/MongodbManagerTest.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java index f54378751..37976ce4f 100644 --- a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java +++ b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java @@ -41,11 +41,15 @@ public void testInfoSubmissionToMongodbPitMutantScoreSelector() { MongoClient mongoClient = MongodbManager.connectToMongo("mongodb://localhost:27017"); MongoCollection coll = MongodbManager.getCollection("AmpTestRecords",MongodbManager.getDatabase("Dspot",mongoClient)); - Document foundDoc = coll.find(eq("RepoSlug","Dspot/mongo-test")).projection(fields(excludeId(),exclude("Date"),exclude("AmpTestFiles"))).first(); + Document foundDoc = coll.find(eq("RepoSlug","Dspot/mongo-test")).projection(fields(excludeId(),exclude("Date"),exclude("AmpTestFiles"),exclude("executeTestParallelWithNumberProcessors"))).first(); /*Remove from database*/ coll.deleteOne(foundDoc); - String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, AmpOptions=Document{{amplifiers=[None], test-criterion=PitMutantScoreSelector, iteration=3, gregor=true, descartes=true, executeTestParallelWithNumberProcessors=4}}, AmpResult=Document{{fr/D/inria/D/sample/D/TestClassWithoutAssert=Document{{originalKilledMutants=0, NewMutantKilled=67}}}}}}"; + Document unwanted = foundDoc.get("AmpOptions",Document.class); + unwanted.remove("executeTestParallelWithNumberProcessors"); + foundDoc.append("AmpOptions",unwanted); + + String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, AmpOptions=Document{{amplifiers=[None], test-criterion=PitMutantScoreSelector, iteration=3, gregor=true, descartes=true}}, AmpResult=Document{{fr/D/inria/D/sample/D/TestClassWithoutAssert=Document{{originalKilledMutants=0, NewMutantKilled=67}}}}}}"; assertEquals(foundDoc.toString(),expectedDocStr); } @@ -64,11 +68,15 @@ public void testInfoSubmissionToMongodbJacocoCoverageSelector() { MongoClient mongoClient = MongodbManager.connectToMongo("mongodb://localhost:27017"); MongoCollection coll = MongodbManager.getCollection("AmpTestRecords",MongodbManager.getDatabase("Dspot",mongoClient)); - Document foundDoc = coll.find(eq("RepoSlug","Dspot/mongo-test")).projection(fields(excludeId(),exclude("Date"),exclude("AmpTestFiles"))).first(); - /*Remove from database*/ + Document foundDoc = coll.find(eq("RepoSlug","Dspot/mongo-test")).projection(fields(excludeId(),exclude("Date"),exclude("AmpTestFiles"),exclude("executeTestParallelWithNumberProcessors"))).first(); coll.deleteOne(foundDoc); - String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, AmpOptions=Document{{amplifiers=[None], test-criterion=JacocoCoverageSelector, iteration=1, gregor=false, descartes=true, executeTestParallelWithNumberProcessors=4}}, AmpResult=Document{{resolver/D/ClasspathResolverTest=Document{{initialCoverage=123, ampCoverage=123, totalCoverage=130}}, textresources/D/in/D/sources/D/TestResourcesInSources=Document{{initialCoverage=4, ampCoverage=4, totalCoverage=130}}}}}}"; - + + Document unwanted = foundDoc.get("AmpOptions",Document.class); + unwanted.remove("executeTestParallelWithNumberProcessors"); + foundDoc.append("AmpOptions",unwanted); + + String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, AmpOptions=Document{{amplifiers=[None], test-criterion=JacocoCoverageSelector, iteration=1, gregor=false, descartes=true}}, AmpResult=Document{{resolver/D/ClasspathResolverTest=Document{{initialCoverage=123, ampCoverage=123, totalCoverage=130}}, textresources/D/in/D/sources/D/TestResourcesInSources=Document{{initialCoverage=4, ampCoverage=4, totalCoverage=130}}}}}}"; + assertEquals(foundDoc.toString(),expectedDocStr); } } \ No newline at end of file From d1ee73cfa15eb6e0282e4c43de24ac73db3382d6 Mon Sep 17 00:00:00 2001 From: tailp Date: Sun, 28 Jul 2019 01:49:40 +0200 Subject: [PATCH 16/17] Feat: add branch name option --- .../eu/stamp_project/mongodb/MongodbManager.java | 5 ++++- .../stamp_project/utils/options/JSAPOptions.java | 15 +++++++++++---- .../stamp_project/mongodb/MongodbManagerTest.java | 10 ++++++---- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java index 7fe72ce1f..ed1545095 100644 --- a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java +++ b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java @@ -38,6 +38,7 @@ public class MongodbManager { private static String mongoUrl; private static String dbName; private static String repoSlug; + private static String repoBranch; private static String colName; private static boolean dbConnectable; @@ -68,11 +69,12 @@ public static MongodbManager getInstance() { return single_instance; } - public static void initMongodbManager (String mongoUrl_ln, String dbName_ln, String colName_ln, String repoSlug_ln) { + public static void initMongodbManager (String mongoUrl_ln, String dbName_ln, String colName_ln, String repoSlug_ln, String repoBranch_ln) { mongoUrl = mongoUrl_ln; dbName = dbName_ln; colName = colName_ln; repoSlug = repoSlug_ln; + repoBranch = repoBranch_ln; dbConnectable = testConnectionToDb(); } @@ -111,6 +113,7 @@ public void sendInfoToDb() { MongoCollection coll = getCollection(this.colName,database); Document mainDoc = new Document("RepoSlug", this.repoSlug) + .append("RepoBranch",this.repoBranch) .append("Date",this.getCurrentDate()); mainDoc.append("AmpOptions",argsDoc); diff --git a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java index c872d0ea7..c2210ca98 100644 --- a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java +++ b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java @@ -89,7 +89,7 @@ public static void parse(String[] args) { final String mongoDbname = jsapConfig.getString("mongo-dbname"); final String mongoColname = jsapConfig.getString("mongo-colname"); final String repoSlug = jsapConfig.getString("repo-slug"); - + final String repoBranch = jsapConfig.getString("repo-branch"); Configuration.configure( pathToProperties, @@ -123,10 +123,9 @@ public static void parse(String[] args) { ); // Sending options to mongodb to record the properties of this run - MongodbManager.initMongodbManager(mongoUrl,mongoDbname,mongoColname,repoSlug); + MongodbManager.initMongodbManager(mongoUrl,mongoDbname,mongoColname,repoSlug,repoBranch); MongodbManager mongodbManager = MongodbManager.getInstance(); if (MongodbManager.getInstance().getDbConnectable()) { - mongodbManager.initMongodbManager(mongoUrl,mongoDbname,mongoColname,repoSlug); mongodbManager.argsDoc.append("amplifiers",Arrays.toString(jsapConfig.getStringArray("amplifiers"))); mongodbManager.argsDoc.append("test-criterion",testCriterion); mongodbManager.argsDoc.append("iteration",Integer.toString(iteration)); @@ -392,8 +391,15 @@ private static JSAP initJSAP() { repoSlug.setRequired(false); repoSlug.setStringParser(JSAP.STRING_PARSER); repoSlug.setAllowMultipleDeclarations(false); - repoSlug.setHelp("[optional] If valid mongo-url provided, DSpot will submit to Mongodb database with the provided slug as identifier for the amplification data submitted."); + repoSlug.setHelp("[optional] slug of the repo for instance Stamp/Dspot,this is used by mongodb as a identifier for analyzed repo's submitted data "); + FlaggedOption repoBranch = new FlaggedOption("repo-branch"); + repoBranch.setLongFlag("repo-branch"); + repoBranch.setDefault("UnknownBranch"); + repoBranch.setRequired(false); + repoBranch.setStringParser(JSAP.STRING_PARSER); + repoBranch.setAllowMultipleDeclarations(false); + repoBranch.setHelp("[optional] branch name of the submitted repo,this is used by mongodb as a identifier for analyzed repo's submitted data"); try { jsap.registerParameter(pathToConfigFile); @@ -429,6 +435,7 @@ private static JSAP initJSAP() { jsap.registerParameter(mongoDbname); jsap.registerParameter(mongoColname); jsap.registerParameter(repoSlug); + jsap.registerParameter(repoBranch); jsap.registerParameter(example); jsap.registerParameter(help); } catch (JSAPException e) { diff --git a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java index 37976ce4f..973bcbb90 100644 --- a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java +++ b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java @@ -34,7 +34,8 @@ public void testInfoSubmissionToMongodbPitMutantScoreSelector() { "--mongo-url","mongodb://localhost:27017", "--mongo-dbname","Dspot", "--mongo-colname","AmpTestRecords", - "--repo-slug","Dspot/mongo-test" + "--repo-slug","Dspot/mongo-test", + "--repo-branch","master" }); /*Fetch submitted document*/ @@ -49,7 +50,7 @@ public void testInfoSubmissionToMongodbPitMutantScoreSelector() { unwanted.remove("executeTestParallelWithNumberProcessors"); foundDoc.append("AmpOptions",unwanted); - String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, AmpOptions=Document{{amplifiers=[None], test-criterion=PitMutantScoreSelector, iteration=3, gregor=true, descartes=true}}, AmpResult=Document{{fr/D/inria/D/sample/D/TestClassWithoutAssert=Document{{originalKilledMutants=0, NewMutantKilled=67}}}}}}"; + String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, RepoBranch=master, AmpOptions=Document{{amplifiers=[None], test-criterion=PitMutantScoreSelector, iteration=3, gregor=true, descartes=true}}, AmpResult=Document{{fr/D/inria/D/sample/D/TestClassWithoutAssert=Document{{originalKilledMutants=0, NewMutantKilled=67}}}}}}"; assertEquals(foundDoc.toString(),expectedDocStr); } @@ -63,7 +64,8 @@ public void testInfoSubmissionToMongodbJacocoCoverageSelector() { "--mongo-url","mongodb://localhost:27017", "--mongo-dbname","Dspot", "--mongo-colname","AmpTestRecords", - "--repo-slug","Dspot/mongo-test" + "--repo-slug","Dspot/mongo-test", + "--repo-branch","master" }); MongoClient mongoClient = MongodbManager.connectToMongo("mongodb://localhost:27017"); MongoCollection coll = MongodbManager.getCollection("AmpTestRecords",MongodbManager.getDatabase("Dspot",mongoClient)); @@ -75,7 +77,7 @@ public void testInfoSubmissionToMongodbJacocoCoverageSelector() { unwanted.remove("executeTestParallelWithNumberProcessors"); foundDoc.append("AmpOptions",unwanted); - String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, AmpOptions=Document{{amplifiers=[None], test-criterion=JacocoCoverageSelector, iteration=1, gregor=false, descartes=true}}, AmpResult=Document{{resolver/D/ClasspathResolverTest=Document{{initialCoverage=123, ampCoverage=123, totalCoverage=130}}, textresources/D/in/D/sources/D/TestResourcesInSources=Document{{initialCoverage=4, ampCoverage=4, totalCoverage=130}}}}}}"; + String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, RepoBranch=master, AmpOptions=Document{{amplifiers=[None], test-criterion=JacocoCoverageSelector, iteration=1, gregor=false, descartes=true}}, AmpResult=Document{{resolver/D/ClasspathResolverTest=Document{{initialCoverage=123, ampCoverage=123, totalCoverage=130}}, textresources/D/in/D/sources/D/TestResourcesInSources=Document{{initialCoverage=4, ampCoverage=4, totalCoverage=130}}}}}}"; assertEquals(foundDoc.toString(),expectedDocStr); } From 1805617add41c7b006ec5f92cd2eff2d75de09f5 Mon Sep 17 00:00:00 2001 From: tailp Date: Sun, 28 Jul 2019 23:57:54 +0200 Subject: [PATCH 17/17] Feat&Fix: Add restful mode for dspot to be used with Nodejs server, fix indentation of test --- .../stamp_project/mongodb/MongodbManager.java | 71 ++++++++++++------- .../utils/options/JSAPOptions.java | 9 ++- .../mongodb/MongodbManagerTest.java | 32 ++++----- 3 files changed, 71 insertions(+), 41 deletions(-) diff --git a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java index ed1545095..06b905d02 100644 --- a/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java +++ b/dspot/src/main/java/eu/stamp_project/mongodb/MongodbManager.java @@ -14,6 +14,7 @@ import static com.mongodb.client.model.Updates.*; import org.bson.Document; + /*Parsing date*/ import java.util.Date; import java.text.DateFormat; @@ -41,6 +42,7 @@ public class MongodbManager { private static String repoBranch; private static String colName; private static boolean dbConnectable; + private static boolean restful; /*Jacoco Selector*/ public List jacocoSelectorDocs; @@ -69,12 +71,13 @@ public static MongodbManager getInstance() { return single_instance; } - public static void initMongodbManager (String mongoUrl_ln, String dbName_ln, String colName_ln, String repoSlug_ln, String repoBranch_ln) { + public static void initMongodbManager (String mongoUrl_ln, String dbName_ln, String colName_ln, String repoSlug_ln, String repoBranch_ln, boolean restful_ln) { mongoUrl = mongoUrl_ln; dbName = dbName_ln; colName = colName_ln; repoSlug = repoSlug_ln; repoBranch = repoBranch_ln; + restful = restful_ln; dbConnectable = testConnectionToDb(); } @@ -112,36 +115,56 @@ public void sendInfoToDb() { MongoDatabase database = getDatabase(this.dbName,mongoClient); MongoCollection coll = getCollection(this.colName,database); - Document mainDoc = new Document("RepoSlug", this.repoSlug) + + Document mainDoc; + if (!restful) { + mainDoc = new Document("RepoSlug", this.repoSlug) .append("RepoBranch",this.repoBranch) .append("Date",this.getCurrentDate()); - mainDoc.append("AmpOptions",argsDoc); - - if (argsDoc.get("test-criterion").equals("JacocoCoverageSelector")) { + mainDoc.append("AmpOptions",argsDoc); + }else { + mainDoc = coll.find(and(eq("RepoSlug",this.repoSlug),eq("RepoBranch",this.repoBranch),eq("State","pending"))).projection(fields(excludeId())).first(); + if (mainDoc != null) { + mainDoc.append("State","recent"); + } + } + System.out.println(mainDoc.toString()); + if (mainDoc != null) { + if (argsDoc.get("test-criterion").equals("JacocoCoverageSelector")) { Document mergedDoc = new Document(); for (Document doc : jacocoSelectorDocs) { mergedDoc.putAll(doc); } mainDoc.append("AmpResult",mergedDoc); - }else if (argsDoc.get("test-criterion").equals("PitMutantScoreSelector")) { - Document mergedDoc = new Document(); - for (Document doc : pitMutantScoreSelectorDocs) { - mergedDoc.putAll(doc); - } - mainDoc.append("AmpResult",mergedDoc); - } - - - Document ampFiles = new Document(); - for (String path : javaPathList) { - String fileName = this.getFileNameGivenPath(path).replace(".java",""); - String content = this.readFile(path,StandardCharsets.US_ASCII).replace(".","/D/"); - LOGGER.warn("fileName: " + fileName); - LOGGER.warn("content: " + content); - ampFiles.append(fileName,content); - } - mainDoc.append("AmpTestFiles",ampFiles); - coll.insertOne(mainDoc); + }else if (argsDoc.get("test-criterion").equals("PitMutantScoreSelector")) { + Document mergedDoc = new Document(); + for (Document doc : pitMutantScoreSelectorDocs) { + mergedDoc.putAll(doc); + } + mainDoc.append("AmpResult",mergedDoc); + } + + + Document ampFiles = new Document(); + for (String path : javaPathList) { + String fileName = this.getFileNameGivenPath(path).replace(".java",""); + String content = this.readFile(path,StandardCharsets.US_ASCII).replace(".","/D/"); + LOGGER.warn("fileName: " + fileName); + LOGGER.warn("content: " + content); + ampFiles.append(fileName,content); + } + mainDoc.append("AmpTestFiles",ampFiles); + if (!restful) { + coll.insertOne(mainDoc); + } else { + // Set the previous recent repo as old + coll.updateOne(and(eq("RepoSlug",this.repoSlug),eq("RepoBranch",this.repoBranch),eq("State","recent")),new Document("$set",new Document("State","old"))); + coll.updateOne(and(eq("RepoSlug",this.repoSlug),eq("RepoBranch",this.repoBranch),eq("State","pending")),new Document("$set",mainDoc)); + } + }else { + LOGGER.warn("Main document for submitting is not initialized, No document found in restful mode."); + } + mongoClient.close(); }catch (Exception e) { System.out.println("failed to connect to mongodb"); diff --git a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java index c2210ca98..d6f361038 100644 --- a/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java +++ b/dspot/src/main/java/eu/stamp_project/utils/options/JSAPOptions.java @@ -90,6 +90,7 @@ public static void parse(String[] args) { final String mongoColname = jsapConfig.getString("mongo-colname"); final String repoSlug = jsapConfig.getString("repo-slug"); final String repoBranch = jsapConfig.getString("repo-branch"); + final boolean restful = jsapConfig.getBoolean("restful"); Configuration.configure( pathToProperties, @@ -123,7 +124,7 @@ public static void parse(String[] args) { ); // Sending options to mongodb to record the properties of this run - MongodbManager.initMongodbManager(mongoUrl,mongoDbname,mongoColname,repoSlug,repoBranch); + MongodbManager.initMongodbManager(mongoUrl,mongoDbname,mongoColname,repoSlug,repoBranch,restful); MongodbManager mongodbManager = MongodbManager.getInstance(); if (MongodbManager.getInstance().getDbConnectable()) { mongodbManager.argsDoc.append("amplifiers",Arrays.toString(jsapConfig.getStringArray("amplifiers"))); @@ -401,6 +402,11 @@ private static JSAP initJSAP() { repoBranch.setAllowMultipleDeclarations(false); repoBranch.setHelp("[optional] branch name of the submitted repo,this is used by mongodb as a identifier for analyzed repo's submitted data"); + Switch restful = new Switch("restful"); + restful.setLongFlag("restful"); + restful.setDefault("false"); + restful.setHelp("If 1 or true it will enable restful mode for managing mongodb database in sync with nodejs webinterface server. Provided with the repo slug and branch, it will first look the document with pending state submitted by Nodejs and build on that."); + try { jsap.registerParameter(pathToConfigFile); jsap.registerParameter(amplifiers); @@ -436,6 +442,7 @@ private static JSAP initJSAP() { jsap.registerParameter(mongoColname); jsap.registerParameter(repoSlug); jsap.registerParameter(repoBranch); + jsap.registerParameter(restful); jsap.registerParameter(example); jsap.registerParameter(help); } catch (JSAPException e) { diff --git a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java index 973bcbb90..f60b24d23 100644 --- a/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java +++ b/dspot/src/test/java/eu/stamp_project/mongodb/MongodbManagerTest.java @@ -38,19 +38,19 @@ public void testInfoSubmissionToMongodbPitMutantScoreSelector() { "--repo-branch","master" }); - /*Fetch submitted document*/ - MongoClient mongoClient = MongodbManager.connectToMongo("mongodb://localhost:27017"); - MongoCollection coll = MongodbManager.getCollection("AmpTestRecords",MongodbManager.getDatabase("Dspot",mongoClient)); + /*Fetch submitted document*/ + MongoClient mongoClient = MongodbManager.connectToMongo("mongodb://localhost:27017"); + MongoCollection coll = MongodbManager.getCollection("AmpTestRecords",MongodbManager.getDatabase("Dspot",mongoClient)); - Document foundDoc = coll.find(eq("RepoSlug","Dspot/mongo-test")).projection(fields(excludeId(),exclude("Date"),exclude("AmpTestFiles"),exclude("executeTestParallelWithNumberProcessors"))).first(); - /*Remove from database*/ - coll.deleteOne(foundDoc); + Document foundDoc = coll.find(eq("RepoSlug","Dspot/mongo-test")).projection(fields(excludeId(),exclude("Date"),exclude("AmpTestFiles"),exclude("executeTestParallelWithNumberProcessors"))).first(); + /*Remove from database*/ + coll.deleteOne(foundDoc); - Document unwanted = foundDoc.get("AmpOptions",Document.class); - unwanted.remove("executeTestParallelWithNumberProcessors"); - foundDoc.append("AmpOptions",unwanted); + Document unwanted = foundDoc.get("AmpOptions",Document.class); + unwanted.remove("executeTestParallelWithNumberProcessors"); + foundDoc.append("AmpOptions",unwanted); - String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, RepoBranch=master, AmpOptions=Document{{amplifiers=[None], test-criterion=PitMutantScoreSelector, iteration=3, gregor=true, descartes=true}}, AmpResult=Document{{fr/D/inria/D/sample/D/TestClassWithoutAssert=Document{{originalKilledMutants=0, NewMutantKilled=67}}}}}}"; + String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, RepoBranch=master, AmpOptions=Document{{amplifiers=[None], test-criterion=PitMutantScoreSelector, iteration=3, gregor=true, descartes=true}}, AmpResult=Document{{fr/D/inria/D/sample/D/TestClassWithoutAssert=Document{{originalKilledMutants=0, NewMutantKilled=67}}}}}}"; assertEquals(foundDoc.toString(),expectedDocStr); } @@ -68,14 +68,14 @@ public void testInfoSubmissionToMongodbJacocoCoverageSelector() { "--repo-branch","master" }); MongoClient mongoClient = MongodbManager.connectToMongo("mongodb://localhost:27017"); - MongoCollection coll = MongodbManager.getCollection("AmpTestRecords",MongodbManager.getDatabase("Dspot",mongoClient)); + MongoCollection coll = MongodbManager.getCollection("AmpTestRecords",MongodbManager.getDatabase("Dspot",mongoClient)); - Document foundDoc = coll.find(eq("RepoSlug","Dspot/mongo-test")).projection(fields(excludeId(),exclude("Date"),exclude("AmpTestFiles"),exclude("executeTestParallelWithNumberProcessors"))).first(); - coll.deleteOne(foundDoc); + Document foundDoc = coll.find(eq("RepoSlug","Dspot/mongo-test")).projection(fields(excludeId(),exclude("Date"),exclude("AmpTestFiles"),exclude("executeTestParallelWithNumberProcessors"))).first(); + coll.deleteOne(foundDoc); - Document unwanted = foundDoc.get("AmpOptions",Document.class); - unwanted.remove("executeTestParallelWithNumberProcessors"); - foundDoc.append("AmpOptions",unwanted); + Document unwanted = foundDoc.get("AmpOptions",Document.class); + unwanted.remove("executeTestParallelWithNumberProcessors"); + foundDoc.append("AmpOptions",unwanted); String expectedDocStr = "Document{{RepoSlug=Dspot/mongo-test, RepoBranch=master, AmpOptions=Document{{amplifiers=[None], test-criterion=JacocoCoverageSelector, iteration=1, gregor=false, descartes=true}}, AmpResult=Document{{resolver/D/ClasspathResolverTest=Document{{initialCoverage=123, ampCoverage=123, totalCoverage=130}}, textresources/D/in/D/sources/D/TestResourcesInSources=Document{{initialCoverage=4, ampCoverage=4, totalCoverage=130}}}}}}";