Exemplo n.º 1
0
    def test_insertFile_skipErrors(self):
        # Similar to test_insertFile_commandline, but just test to see if skipErrors option works
        # Test run will show errror / warning messages from the app, but these are expected
        DBUtil.runDBScript(
            self.SCRIPT_FILE,
            False)  # Assume this works based on test_runDBScript method

        tableName = "TestTypes"
        columnNames = ["MyReal", "MyYesNo", "MyText", "MyInteger"]

        idFile = StringIO()

        # Try with bogus data that should generate errors

        dataFile = StringIO()
        dataFile.write("ABCD\tPositive\tBadTest\t100.123\n")
        dataFile.write("700.7\t" + FALSE_STR + "\tXTest\t777\n")
        dataFile.write("1,099\tNegative\tMoBadTest\tfoo\n")
        dataFile = StringIO(dataFile.getvalue())

        idFile = StringIO()

        origStdin = sys.stdin
        origStdout = sys.stdout
        sys.stdin = dataFile
        sys.stdout = idFile
        argv = ["DBUtil.py", "-i-", "-t" + tableName, "-o-"]
        argv.extend(columnNames)
        expectErr = True
        actualErr = False
        try:
            DBUtil.main(argv)
        except Exception, err:
            actualErr = True
Exemplo n.º 2
0
    def test_updateFromFile_commandline(self):
        # Similar to test_updateFromFile, but from higher-level command-line interface
        DBUtil.runDBScript( self.SCRIPT_FILE, False ) # Assume this works based on test_runDBScript method

        # Insert some blank data first to update
        for idValue in self.ID_DATA:
            DBUtil.execute("insert into TestTypes ("+self.ID_COL+") values (%s)",(idValue,));

        # Negative test case
        results = DBUtil.execute( self.DATA_QUERY );
        self.assertNotEqual( self.DATA_ROWS, results );

        # Now do the actual update from the file, but build in column names to data file
        dataFileWithCols = StringIO();
        dataFileWithCols.write(self.DATA_COLS);
        dataFileWithCols.write(self.DATA_FILE.getvalue());
        dataFileWithCols = StringIO(dataFileWithCols.getvalue());

        sys.stdin = dataFileWithCols;
        argv = ["DBUtil.py","-u-","-t"+self.DATA_TABLE,"-d\\t"]
        DBUtil.main(argv)

        # Verify positive results
        results = DBUtil.execute( self.DATA_QUERY );
        self.assertEqual( self.DATA_ROWS, results );

        ########################################################
        # Repeat test but data file will use more than one key column (adding MyText)
        # Further note that MyText is used as both a key column to look up the row to update
        #   and as a value column to modify
        dataFileWithCols = StringIO()
        dataFileWithCols.write("MyInteger\tMyText\tMyText\tMyReal\tMyYesNo\n");
        dataFileWithCols.write("100\tATest\tAAA\tNone\t"+TRUE_STR+"\t\n");
        dataFileWithCols.write("200\tNone\tBBB\t222.2\tNone\t\n");
        dataFileWithCols.write("300\tCTest\tNone\t333.3\t"+TRUE_STR+"\t\n");
        dataFileWithCols = StringIO(dataFileWithCols.getvalue())

        # Expected results after this update
        self.DATA_ROWS = [];
        self.DATA_ROWS.append([100,None, True, "AAA",]);
        self.DATA_ROWS.append([200,200.2,False, None,]); # This row is unchanged, because one of the key values cannot be found as null
        self.DATA_ROWS.append([300,333.3,True,  None,]);

        # Negative test case
        results = DBUtil.execute( self.DATA_QUERY );
        self.assertNotEqual( self.DATA_ROWS, results );

        # Now do the actual update from the file, but with an extra parameter specifying 2 key columns
        sys.stdin = dataFileWithCols;
        argv = ["DBUtil.py","-u-","-t"+self.DATA_TABLE,"-n2"]
        DBUtil.main(argv)

        # Verify positive results
        results = DBUtil.execute( self.DATA_QUERY );
        self.assertEqual( self.DATA_ROWS, results );
Exemplo n.º 3
0
    def test_runDBScript_commandline(self):
        # Equivalent to test_runDBScript, but try higher level interface
        #   through command-line "main" method
        origStdin = sys.stdin
        sys.stdin = self.SCRIPT_FILE
        argv = ["DBUtil.py","--script","-"]
        DBUtil.main(argv)
        sys.stdin = origStdin

        # Run some other commands to see if scripts produced expected results
        results = DBUtil.execute("select * from TestTypes where MyInteger > %s", (200,))
        self.assertEqual( 2, len(results) )

        results = DBUtil.execute("select * from TestTypes where MyInteger < %s", (100,))
        self.assertEqual( 0, len(results) )
Exemplo n.º 4
0
    def test_runDBScript_skipErrors(self):
        # Similar to test_runDBScript_commandline, but test skipErrors option
        origStdin = sys.stdin
        sys.stdin = self.SCRIPT_FILE
        argv = ["DBUtil.py", "--script", "-"]
        DBUtil.main(argv)
        sys.stdin = origStdin

        # Run script again.  Should generate errors from redundant create table, etc.  But skip
        self.SCRIPT_FILE.seek(0)
        origStdin = sys.stdin
        sys.stdin = self.SCRIPT_FILE
        argv = ["DBUtil.py", "--script", "--skipErrors", "-"]
        DBUtil.main(argv)
        sys.stdin = origStdin

        # Run script again.  Should generate errors from redundant create table, etc.  Verify by catch
        self.SCRIPT_FILE.seek(0)
        origStdin = sys.stdin
        sys.stdin = self.SCRIPT_FILE
        argv = ["DBUtil.py", "--script", "-"]
        expectErr = True
        actualErr = False
        try:
            DBUtil.main(argv)
        except Exception, err:
            actualErr = True
Exemplo n.º 5
0
    def test_insertFile_commandline(self):
        # Similar to test_insertFile, but from higher-level command-line interface
        DBUtil.runDBScript( self.SCRIPT_FILE, False ) # Assume this works based on test_runDBScript method

        tableName = "TestTypes"
        columnNames = self.DATA_COLS.split();

        idFile = StringIO()

        # Slightly different test, specify tab as delimiter, not just any whitespace
        origStdin = sys.stdin
        origStdout = sys.stdout
        sys.stdin = self.MULTI_LINE_DATA_FILE
        sys.stdout = idFile
        argv = ["DBUtil.py","-i-","-d\\t","-t"+tableName,"-o-"]
        DBUtil.main(argv)
        sys.stdout = origStdout
        sys.stdin = origStdin

        self.assertEqual( 3, idFile.getvalue().count("\n") )
        results = DBUtil.execute( self.DATA_QUERY );
        self.assertEqual( self.MULTI_LINE_DATA_ROWS, results );
Exemplo n.º 6
0
    def test_execute_commandline(self):
        # Run basic executes for both an update and a select query, but
        #   using the higher-level command-line "main" method interface

        DBUtil.runDBScript( self.SCRIPT_FILE, False ) # Assume this works based on test_runDBScript method

        origStdout  = sys.stdout
        sys.stdout  = StringIO()
        argv = ["DBUtil.py","select count(*) from TestTypes where MyInteger > 200","-"]
        DBUtil.main(argv)
        self.assertEqual( 2, int(sys.stdout.getvalue()) )
        sys.stdout  = origStdout

        origStdout  = sys.stdout
        sys.stdout  = StringIO()
        argv = ["DBUtil.py","insert into TestTypes (MyText,MyInteger,MyYesNo) values ('Another',255,True)","-"]
        DBUtil.main(argv)
        #self.assertEqual( 1, int(sys.stdout.getvalue()) )
        sys.stdout  = origStdout

        origStdout  = sys.stdout
        sys.stdout  = StringIO()
        argv = ["DBUtil.py","select count(*) from TestTypes where MyInteger > 200","-"]
        DBUtil.main(argv)
        self.assertEqual( 3, int(sys.stdout.getvalue()) )
        sys.stdout  = origStdout

        # Different test, includeColumnNames
        origStdout  = sys.stdout
        sys.stdout  = StringIO()
        argv = ["DBUtil.py","-c","select TestTypes_id,MyText,MyInteger,MyReal,MyDateTime,MyYesNo from TestTypes where MyInteger > 200 and MyYesNo = True","-"]
        DBUtil.main(argv)
        sampleLines = sys.stdout.getvalue().split("\n")
        expected = ["TestTypes_id","MyText","MyInteger","MyReal","MyDateTime","MyYesNo"]
        sampleColumns = sampleLines[0].split()
        for iCol in range(len(expected)):   # Case-insensitive comparison
            expected[iCol] = expected[iCol].lower()
            sampleColumns[iCol] = sampleColumns[iCol].lower();
        for iCol, col in enumerate(sampleColumns):
            self.assertEqual(expected[iCol],col)
        self.assertEqual( 2+1+1, len(sampleLines) ) # 2 data lines + 1 column name line + 1 newline at end of output
        sys.stdout  = origStdout
Exemplo n.º 7
0
        dataFile = StringIO()
        dataFile.write("ABCD\tPositive\tBadTest\t100.123\n")
        dataFile.write("700.7\t" + FALSE_STR + "\tXTest\t777\n")
        dataFile.write("1,099\tNegative\tMoBadTest\tfoo\n")
        dataFile = StringIO(dataFile.getvalue())

        idFile = StringIO()

        origStdin = sys.stdin
        origStdout = sys.stdout
        sys.stdin = dataFile
        sys.stdout = idFile
        argv = ["DBUtil.py", "-i-", "-t" + tableName, "-o-",
                "-e"]  # -e option skipsErrors
        argv.extend(columnNames)
        DBUtil.main(argv)
        sys.stdout = origStdout
        sys.stdin = origStdin

        # Still expect 1 row to get through successfuly, despite other invalid input
        self.assertEqual(1, idFile.getvalue().count("\n"))
        results = DBUtil.execute(
            "select count(*) from TestTypes where MyText like %s", ("%Test", ))
        self.assertEqual(1, results[0][0])

    def test_insertFile_dateParsing(self):
        # Create a test data file to insert, and verify no errors
        DBUtil.runDBScript(
            self.SCRIPT_FILE,
            False)  # Assume this works based on test_runDBScript method
Exemplo n.º 8
0
    def test_insertFile_skipErrors(self):
        # Similar to test_insertFile_commandline, but just test to see if skipErrors option works
        # Test run will show errror / warning messages from the app, but these are expected
        DBUtil.runDBScript(
            self.SCRIPT_FILE,
            False)  # Assume this works based on test_runDBScript method

        tableName = "TestTypes"
        columnNames = ["MyReal", "MyYesNo", "MyText", "MyInteger"]

        idFile = StringIO()

        # Try with bogus data that should generate errors

        dataFile = StringIO()
        dataFile.write("ABCD\tPositive\tBadTest\t100.123\n")
        dataFile.write("700.7\t" + FALSE_STR + "\tXTest\t777\n")
        dataFile.write("1,099\tNegative\tMoBadTest\tfoo\n")
        dataFile = StringIO(dataFile.getvalue())

        idFile = StringIO()

        origStdin = sys.stdin
        origStdout = sys.stdout
        sys.stdin = dataFile
        sys.stdout = idFile
        argv = ["DBUtil.py", "-i-", "-t" + tableName, "-o-"]
        argv.extend(columnNames)
        expectErr = True
        actualErr = False
        try:
            DBUtil.main(argv)
        except Exception as err:
            actualErr = True
        self.assertEqual(expectErr, actualErr)
        sys.stdout = origStdout
        sys.stdin = origStdin

        # Expect no rows succesffuly inserted since errors in input
        self.assertEqual(0, idFile.getvalue().count("\n"))
        results = DBUtil.execute(
            "select count(*) from TestTypes where MyText like %s", ("%Test", ))
        self.assertEqual(0, results[0][0])

        # Try again, with bogus data that should generate errors
        dataFile = StringIO()
        dataFile.write("ABCD\tPositive\tBadTest\t100.123\n")
        dataFile.write("700.7\t" + FALSE_STR + "\tXTest\t777\n")
        dataFile.write("1,099\tNegative\tMoBadTest\tfoo\n")
        dataFile = StringIO(dataFile.getvalue())

        idFile = StringIO()

        origStdin = sys.stdin
        origStdout = sys.stdout
        sys.stdin = dataFile
        sys.stdout = idFile
        argv = ["DBUtil.py", "-i-", "-t" + tableName, "-o-",
                "-e"]  # -e option skipsErrors
        argv.extend(columnNames)
        DBUtil.main(argv)
        sys.stdout = origStdout
        sys.stdin = origStdin

        # Still expect 1 row to get through successfuly, despite other invalid input
        self.assertEqual(1, idFile.getvalue().count("\n"))
        results = DBUtil.execute(
            "select count(*) from TestTypes where MyText like %s", ("%Test", ))
        self.assertEqual(1, results[0][0])