gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-schemafuzz] branch master updated: Some more buggs w


From: gnunet
Subject: [GNUnet-SVN] [taler-schemafuzz] branch master updated: Some more buggs with the main loop ><
Date: Fri, 15 Jun 2018 17:41:40 +0200

This is an automated email from the git hooks/post-receive script.

erwan-ulrich pushed a commit to branch master
in repository schemafuzz.

The following commit(s) were added to refs/heads/master by this push:
     new 6355268  Some more buggs with the main loop ><
6355268 is described below

commit 6355268eb16042d7ed193d505554ee98b7ccffdc
Author: Feideus <address@hidden>
AuthorDate: Fri Jun 15 17:41:31 2018 +0200

    Some more buggs with the main loop ><
---
 src/main/java/org/schemaspy/DBFuzzer.java          | 168 +++++++++++----------
 .../java/org/schemaspy/model/GenericTreeNode.java  |  38 +++--
 .../org/schemaspy/model/GenericTreeNodeTest.java   |   5 +-
 3 files changed, 106 insertions(+), 105 deletions(-)

diff --git a/src/main/java/org/schemaspy/DBFuzzer.java 
b/src/main/java/org/schemaspy/DBFuzzer.java
index 9948b6e..af97545 100644
--- a/src/main/java/org/schemaspy/DBFuzzer.java
+++ b/src/main/java/org/schemaspy/DBFuzzer.java
@@ -31,13 +31,14 @@ public class DBFuzzer
 
     public boolean processFirstMutation(GenericTreeNode rootMutation)
     {
-        boolean resQuery,returnStatus=true;
+        boolean returnStatus=true;
+        int nbUpdates;
         try
         {
             if(rootMutation.getChosenChange() != null)
             {
-                resQuery = 
rootMutation.inject(analyzer.getSqlService(),analyzer.getDb(),false);
-                if(resQuery)
+                nbUpdates = 
rootMutation.inject(analyzer.getSqlService(),analyzer.getDb(),false);
+                if(nbUpdates > 0)
                 {
                     LOGGER.info("GenericTreeNode was sucessfull");
                 }
@@ -76,7 +77,7 @@ public class DBFuzzer
     public boolean fuzz (Config config)
     {
         boolean returnStatus = true;
-        boolean resQuery;
+        int nbUpdates;
         int TreeDepth = 0;
         int maxDepth = 
Integer.parseInt(analyzer.getCommandLineArguments().getMaxDepth());
         int mark = 0;
@@ -131,14 +132,14 @@ public class DBFuzzer
             {
                 if(currentMutation.getChosenChange() != null)
                 {
-                    resQuery = 
currentMutation.inject(analyzer.getSqlService(),analyzer.getDb(),false);
-                    if(resQuery)
+                    nbUpdates = 
currentMutation.inject(analyzer.getSqlService(),analyzer.getDb(),false);
+                    if(nbUpdates > 0)
                     {
                         LOGGER.info("GenericTreeNode was sucessfull");
                         mutationTree.addToTree(currentMutation);
                     }
                     else
-                        LOGGER.info("QueryError");
+                        LOGGER.info("QueryError. This update affected 0 rows");
                 }
             }
             catch(Exception e)
@@ -167,9 +168,9 @@ public class DBFuzzer
             TreeDepth = mutationTree.checkMaxDepth(mutationTree.getRoot());
       }
 
-      System.out.println("success");
-      printMutationTree();
-      removeTemporaryCascade();
+        removeTemporaryCascade();
+        printMutationTree();
+        System.out.println("ending process");
       return returnStatus;
     }
 
@@ -178,26 +179,26 @@ public class DBFuzzer
     public Row pickRandomRow()
     {
         Row res = null;
-
-      do {
-          //Table randomTable = pickRandomTable();
+        do {
+          Table randomTable = pickRandomTable();
 
           //String theQuery = "SELECT * FROM " + randomTable.getName() + " 
ORDER BY RANDOM() LIMIT 1";
-          String theQuery = "SELECT * FROM test_table3 ORDER BY RANDOM() LIMIT 
1"; // Change test_table2 to test_table here to swap back to line finding
-          QueryResponseParser qrp = new QueryResponseParser();
-          ResultSet rs = null;
+          String theQuery = "SELECT * FROM "+randomTable.getName()+" ORDER BY 
RANDOM() LIMIT 1"; // Change test_table2 to test_table here to swap back to 
line finding
           PreparedStatement stmt;
 
-          try {
+          try
+          {
               stmt = analyzer.getSqlService().prepareStatement(theQuery);
-              rs = stmt.executeQuery();
-              res = qrp.parse(rs, 
analyzer.getDb().getTablesMap().get("test_table3")).getRows().get(0); // 
randomTable should be in the get()
-          } catch (Exception e) {
+              ResultSet rs = stmt.executeQuery();
+              res = new QueryResponseParser().parse(rs, 
analyzer.getDb().getTablesMap().get(randomTable.getName())).getRows().get(0); 
// randomTable should be in the get()
+          }
+          catch (Exception e)
+          {
               LOGGER.info("This query threw an error" + e);
           }
-      }
-      while(res == null);
-        return res;
+        }
+        while(res == null);
+            return res;
     }
 
     public Table pickRandomTable()
@@ -218,53 +219,53 @@ public class DBFuzzer
 
     public boolean settingTemporaryCascade(Boolean undo)
     {
-      Iterator i;
-      ForeignKeyConstraint currentFK;
-      String dropSetCascade = null;
-      for(Map.Entry<String,Collection<ForeignKeyConstraint>> entry : 
analyzer.getDb().getLesForeignKeys().entrySet())
-      {
+          Iterator i;
+          ForeignKeyConstraint currentFK;
+          String dropSetCascade = "";
+          for(Map.Entry<String,Collection<ForeignKeyConstraint>> entry : 
analyzer.getDb().getLesForeignKeys().entrySet())
+          {
               i = entry.getValue().iterator();
               while(i.hasNext())
               {
-                currentFK = (ForeignKeyConstraint) i.next();
-                dropSetCascade = "ALTER TABLE 
"+currentFK.getChildTable().getName()+" DROP CONSTRAINT "+currentFK.getName()+ 
" CASCADE";
-                try
-                {
-                    PreparedStatement stmt = 
analyzer.getSqlService().prepareStatement(dropSetCascade, 
analyzer.getDb(),null);
-                    stmt.execute();
-                }
-                catch(Exception e)
-                {
-                    e.printStackTrace();
-                }
-              }
-
-      }
+                 currentFK = (ForeignKeyConstraint) i.next();
+                 dropSetCascade = "ALTER TABLE 
"+currentFK.getChildTable().getName()+" DROP CONSTRAINT "+currentFK.getName()+ 
" CASCADE";
+                 try
+                 {
+                     PreparedStatement stmt = 
analyzer.getSqlService().prepareStatement(dropSetCascade, 
analyzer.getDb(),null);
+                     stmt.execute();
+                 }
+                 catch(Exception e)
+                 {
+                     e.printStackTrace();
+                 }
+          }
 
-        for(Map.Entry<String,Collection<ForeignKeyConstraint>> entry : 
analyzer.getDb().getLesForeignKeys().entrySet())
-        {
-                i = entry.getValue().iterator();
-                while(i.hasNext())
-                {
-                  currentFK = (ForeignKeyConstraint) i.next();
-                  if(!undo)
-                    dropSetCascade = "ALTER TABLE 
"+currentFK.getChildTable().getName()+" ADD CONSTRAINT "+currentFK.getName()+" 
FOREIGN KEY ("+currentFK.getParentColumns().get(0).getName()+" ) REFERENCES 
"+currentFK.getParentTable().getName()+"("+currentFK.getChildColumns().get(0).getName()+")
 ON UPDATE CASCADE";
-                  else
-                  {
-                    dropSetCascade = "ALTER TABLE 
"+currentFK.getChildTable().getName()+" ADD CONSTRAINT "+currentFK.getName()+" 
FOREIGN KEY ("+currentFK.getParentColumns().get(0).getName()+" ) REFERENCES 
"+currentFK.getParentTable().getName()+"("+currentFK.getChildColumns().get(0).getName()+")";
-                  }
-                  try
-                  {
-                           PreparedStatement stmt = 
analyzer.getSqlService().prepareStatement(dropSetCascade, 
analyzer.getDb(),null);
-                           stmt.execute();
-                  }
-                  catch(Exception e)
-                  {
-                      e.printStackTrace();
-                  }
-                }
+     }
 
+      for(Map.Entry<String,Collection<ForeignKeyConstraint>> entry : 
analyzer.getDb().getLesForeignKeys().entrySet())
+      {
+          i = entry.getValue().iterator();
+          while(i.hasNext())
+          {
+              currentFK = (ForeignKeyConstraint) i.next();
+              if(!undo)
+                  dropSetCascade = "ALTER TABLE 
"+currentFK.getChildTable().getName()+" ADD CONSTRAINT "+currentFK.getName()+" 
FOREIGN KEY ("+currentFK.getParentColumns().get(0).getName()+" ) REFERENCES 
"+currentFK.getParentTable().getName()+"("+currentFK.getChildColumns().get(0).getName()+")
 ON UPDATE CASCADE";
+              else
+              {
+                  dropSetCascade = "ALTER TABLE 
"+currentFK.getChildTable().getName()+" ADD CONSTRAINT "+currentFK.getName()+" 
FOREIGN KEY ("+currentFK.getParentColumns().get(0).getName()+" ) REFERENCES 
"+currentFK.getParentTable().getName()+"("+currentFK.getChildColumns().get(0).getName()+")";
+              }
+              try
+              {
+                  PreparedStatement stmt = 
analyzer.getSqlService().prepareStatement(dropSetCascade, 
analyzer.getDb(),null);
+                  stmt.execute();
+              }
+              catch(Exception e)
+              {
+                  e.printStackTrace();
+              }
           }
+
+      }
       if(!undo)
         LOGGER.info("temporary set all fk constraints to cascade");
       else
@@ -306,7 +307,6 @@ public class DBFuzzer
     */
     public GenericTreeNode chooseNextMutation()
     {
-        GenericTreeNode nextMut = null;
         GenericTreeNode previousMutation = mutationTree.getLastMutation();
         int markingDiff = previousMutation.getInterest_mark();
         Random rand = new Random();
@@ -321,24 +321,27 @@ public class DBFuzzer
             if (markingDiff > 0) //
             {
                 int randNumber = 
rand.nextInt(previousMutation.getPotential_changes().size());
-                nextMut = new 
GenericTreeNode(previousMutation.getPost_change_row(), nextId(), 
mutationTree.getRoot(), previousMutation,false,analyzer.getSqlService());
+                GenericTreeNode nextMut = new 
GenericTreeNode(previousMutation.getPost_change_row(), nextId(), 
mutationTree.getRoot(), previousMutation,false,analyzer.getSqlService());
                 
nextMut.setChosenChange(previousMutation.getPotential_changes().get(randNumber));
                 nextMut.initPostChangeRow();
+                return nextMut;
             }
             else if (markingDiff == 0 || markingDiff < 0)
             {
-                Random changeOrDepthen = new Random();
+                Random changeOrDepthen = new Random(); // 1 is same row
 
                 if(changeOrDepthen.nextInt(2) == 1)
                 {
                     SingleChange tmp = 
mutationTree.getRoot().singleChangeBasedOnWeight();
-                    nextMut = new 
GenericTreeNode(tmp.getAttachedToMutation().getPost_change_row(), nextId(), 
mutationTree.getRoot(), 
tmp.getAttachedToMutation(),false,analyzer.getSqlService());
+                    GenericTreeNode nextMut = new 
GenericTreeNode(tmp.getAttachedToMutation().getPost_change_row(), nextId(), 
mutationTree.getRoot(), 
tmp.getAttachedToMutation(),false,analyzer.getSqlService());
                     nextMut.setChosenChange(tmp);
                     nextMut.initPostChangeRow();
+                    return nextMut;
                 }
                 else
                 {
                     Row nextRow;
+                    GenericTreeNode nextMut;
                     do
                     {
                         nextRow = pickRandomRow();
@@ -348,12 +351,13 @@ public class DBFuzzer
                     Random nextSingleChangeId = new Random();
                     
nextMut.setChosenChange(nextMut.getPotential_changes().get(nextSingleChangeId.nextInt(nextMut.getPotential_changes().size())));
                     nextMut.initPostChangeRow();
+                    return nextMut;
                 }
             }
             else
                 System.out.println("I mean What Da Heck");
         }
-        return nextMut;
+        throw new Error("No mutation returned. That should not happen");
     }
 
     public boolean isNewMutation(GenericTreeNode newMut)
@@ -367,23 +371,23 @@ public class DBFuzzer
 
     public void printMutationTree()
     {
-      String displayer = null ;
-      for(int i = 1; i <= mutationTree.getNumberOfNodes();i++)
-      {
-          for(int j = 0; j < mutationTree.find(i).getDepth();j++)
-          {
-              displayer = displayer+("--");
-          }
-          displayer = displayer+(mutationTree.find(i).toString()+"\n");
-      }
-        System.out.println(displayer);
+        if(mutationTree.getNumberOfNodes() == 0)
+            System.out.println("tree is empty");
+        else {
+            String displayer = "";
+            for (int i = 1; i <= mutationTree.getNumberOfNodes(); i++) {
+                for (int j = 0; j < mutationTree.find(i).getDepth(); j++) {
+                    displayer = displayer + ("--");
+                }
+                displayer = displayer + (mutationTree.find(i).toString() + 
"\n");
+            }
+            System.out.println(displayer);
+        }
     }
 
     public int nextId()
     {
-      int res = 0;
-      res =  mutationTree.getLastId()+1;
-      return res;
+      return mutationTree.getLastId()+1;
     }
 
     
diff --git a/src/main/java/org/schemaspy/model/GenericTreeNode.java 
b/src/main/java/org/schemaspy/model/GenericTreeNode.java
index bd69fbb..9d5fbff 100644
--- a/src/main/java/org/schemaspy/model/GenericTreeNode.java
+++ b/src/main/java/org/schemaspy/model/GenericTreeNode.java
@@ -268,7 +268,7 @@ public class GenericTreeNode {
 
             case "character":
             case "character varying":
-            case "bytea":
+            //case "bytea":
             case "varchar":
                 tmp = 
rootForThisMutation.getInitial_state_row().getContent().get(tableColumn.getName());
                 if(typeName.equals("bytea"))
@@ -276,17 +276,14 @@ public class GenericTreeNode {
                     byte[] bytes = SerializationUtils.serialize(tmp);
                     tmp = Arrays.toString(bytes);
                 }
-                if(tmp != null && tmp.toString() != "" )
-                {
 
-                    String tmp2 = tmp.toString().replaceAll("\\d", "");
-                    if (!tmp2.isEmpty())
-                    {
+                if(tmp != null && !tmp.toString().isEmpty() )
+                {
+                        String tmp2 = tmp.toString();
                         char nextChar = (char) (tmp2.charAt(0) + 1);
                         char prevChar = (char) (tmp2.charAt(0) - 1);
                         oneChange.add(new SingleChange(tableColumn, this, 
column_value, (Character.toString(nextChar) + 
column_value.toString().substring(1))));
                         oneChange.add(new SingleChange(tableColumn, this, 
column_value, (Character.toString(prevChar) + 
column_value.toString().substring(1))));
-                    }
                 }
                 break;
 
@@ -303,10 +300,10 @@ public class GenericTreeNode {
                 {
                     Random rand = new Random();
                     int randNum = rand.nextInt(tmp.toString().length());
-                    char tmp2 = tmp.toString().charAt(randNum);
+                    char tmp3 = tmp.toString().charAt(randNum);
 
-                    oneChange.add(new SingleChange(tableColumn, this, 
column_value, tmp.toString().substring(0,randNum) + 
(Character.toString(tmp2++)) + tmp.toString().substring(randNum+1)));
-                    oneChange.add(new SingleChange(tableColumn, this, 
column_value, tmp.toString().substring(0,randNum) + 
(Character.toString(tmp2--)) + tmp.toString().substring(randNum+1)));
+                    oneChange.add(new SingleChange(tableColumn, this, 
column_value, tmp.toString().substring(0,randNum) + 
(Character.toString(tmp3++)) + tmp.toString().substring(randNum+1)));
+                    oneChange.add(new SingleChange(tableColumn, this, 
column_value, tmp.toString().substring(0,randNum) + 
(Character.toString(tmp3--)) + tmp.toString().substring(randNum+1)));
                     break;
                 }
 
@@ -351,7 +348,7 @@ public class GenericTreeNode {
         return oneChange;
     }
 
-    public boolean inject(SqlService sqlService,Database db, boolean undo)
+    public int inject(SqlService sqlService,Database db, boolean undo)
     {
         String theQuery = "";
         if (undo)
@@ -368,14 +365,13 @@ public class GenericTreeNode {
         try
         {
             Statement stmt = sqlService.getConnection().createStatement();
-            stmt.execute(theQuery);
-            System.out.println("Query success");
-            return true;
+            int nbUpdates = stmt.executeUpdate(theQuery);
+            return nbUpdates;
         }
         catch (Exception e)
         {
             System.out.println("Error ! : Mutation Canceled"+e); // 
temporerally putting aside the Unique constraint brought by the 
tranfertToParent Mechanic
-            return false;
+            return 0;
         }
     }
 
@@ -385,7 +381,7 @@ public class GenericTreeNode {
         
this.post_change_row.setValueOfColumn(chosenChange.getParentTableColumn().getName(),
 chosenChange.getNewValue());
     }
 
-    public boolean undo(SqlService sqlService,Database db)
+    public int undo(SqlService sqlService,Database db)
     {
         try
         {
@@ -394,7 +390,7 @@ public class GenericTreeNode {
         catch(Exception e)
         {
             e.printStackTrace();
-            return false;
+            return 0;
         }
     }
 
@@ -524,12 +520,15 @@ public class GenericTreeNode {
 
         for(GenericTreeNode node : goingUp )
         {
-            node.undo(analyzer.getSqlService(),analyzer.getDb());
+            if(node.undo(analyzer.getSqlService(),analyzer.getDb()) > 0);
+                System.out.println("success");
         }
 
         for(GenericTreeNode node : goingDown )
         {
-            node.inject(analyzer.getSqlService(),analyzer.getDb(), false);
+            if(node.inject(analyzer.getSqlService(),analyzer.getDb(), false) > 
0);
+                System.out.println("success");
+
         }
 
         return true;
@@ -829,7 +828,6 @@ public class GenericTreeNode {
                 || column.getTypeName().equals("date")
                 || column.getTypeName().equals("_text")
                 || column.getTypeName().equals("text")
-                || column.getTypeName().equals("fulltext")
                 || column.getTypeName().equals("email")
                 || column.getTypeName().equals("bytea"))
             return 1;
diff --git a/src/test/java/org/schemaspy/model/GenericTreeNodeTest.java 
b/src/test/java/org/schemaspy/model/GenericTreeNodeTest.java
index afe70c5..fb77f06 100644
--- a/src/test/java/org/schemaspy/model/GenericTreeNodeTest.java
+++ b/src/test/java/org/schemaspy/model/GenericTreeNodeTest.java
@@ -189,14 +189,13 @@ public class GenericTreeNodeTest extends 
AbstractTestExecutionListener {
         QueryResponseParser parser = new QueryResponseParser();
         QueryResponse response = 
parser.parse(rs,database.getTablesMap().get("actual_test_table"));
 
-        Row row = response.getRows().get(0);
         GenericTreeNode tmpMutation1 = new 
GenericTreeNode(response.getRows().get(0),1,sqlService);
 
         
tmpMutation1.setChosenChange(tmpMutation1.getPotential_changes().get(0));
         tmpMutation1.initPostChangeRow();
 
 
-        Assert.assertTrue(tmpMutation1.inject(sqlService,database,false)); 
//Test
+        Assert.assertTrue(tmpMutation1.inject(sqlService,database,false) > 0 
); //Test
 
         rs = stmt.executeQuery();
         response = 
parser.parse(rs,database.getTablesMap().get("actual_test_table"));
@@ -205,7 +204,7 @@ public class GenericTreeNodeTest extends 
AbstractTestExecutionListener {
         System.out.println(tmpMutation1.getPost_change_row());
         
Assert.assertTrue(response.getRows().get(0).compare(tmpMutation1.getPost_change_row()));
 
-        Assert.assertTrue(tmpMutation1.undo(sqlService,database)); //Test
+        Assert.assertTrue(tmpMutation1.undo(sqlService,database) > 0); //Test
 
         rs = stmt.executeQuery();
         response = 
parser.parse(rs,database.getTablesMap().get("actual_test_table"));

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]