Package org.xmlBlaster.contrib.dbwatcher.detector

Examples of org.xmlBlaster.contrib.dbwatcher.detector.I_ChangeDetector


      this.prefs.put("converter.addMeta", ""+true);
      this.prefs.put("db.queryMeatStatement", "SELECT * FROM TEST_TS WHERE TO_CHAR(ts, 'YYYY-MM-DD HH24:MI:SSXFF') > '${oldTimestamp}' ORDER BY ICAO_ID");
      this.prefs.put("mom.topicName", "db.change.event.${groupColValue}");
     
      this.processor = createTest(new Info(prefs), this.updateMap);
      I_ChangeDetector changeDetector = processor.getChangeDetector();
     
      for (int i=0; i<2; i++) {
         log.info("Testing no table ...");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
      log.info("Now testing an empty table ...");
      this.dbPool.update("CREATE TABLE TEST_TS (ts TIMESTAMP(9), colKey NUMBER(10,3), col1 VARCHAR(20), col2 NUMBER(12), ICAO_ID VARCHAR(10))");
      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 1, this.updateMap.size());
      String xml = (String)this.updateMap.get("db.change.event.${groupColValue}");
      assertNotNull("No db.change.event.${groupColValue} message has arrived", xml);
      assertEquals("", xml);
      this.updateMap.clear();

      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
      log.info("Insert one row");
      this.dbPool.update("INSERT INTO TEST_TS VALUES (CURRENT_TIMESTAMP, '1.1', '<Bla', '9000', 'EDDI')");
      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 1, this.updateMap.size());
      String xml = (String)this.updateMap.get("db.change.event.EDDI");
      assertEquals("", xml);
      this.updateMap.clear();

      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
         log.info("Update one row");
         this.dbPool.update("UPDATE TEST_TS SET ts=CURRENT_TIMESTAMP, colKey='4.44' WHERE ICAO_ID='EDDI'");
         changeDetector.checkAgain(null);
         Thread.sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.EDDI");
         assertNotNull("xml returned is null", xml);
         assertEquals("", xml);
         this.updateMap.clear();

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      // Is not detected by Timestamp poller!
      {
         log.info("Delete one row");
         this.dbPool.update("DELETE FROM TEST_TS WHERE ICAO_ID='EDDI'");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
         // TODO: We don't know that EDDI was deleted
         //String xml = (String)this.updateMap.get("db.change.event.${groupColValue}");
         //assertNotNull("xml returned is null", xml);
         //assertEquals("", xml);
         this.updateMap.clear();

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
         log.info("Drop a table");
         this.dbPool.update("DROP TABLE TEST_TS");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.${groupColValue}");
         assertNotNull("xml returned is null", xml);
         assertEquals("", xml);
         this.updateMap.clear();

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      log.info("SUCCESS");
View Full Code Here


      this.prefs.put("converter.addMeta", ""+true);
      this.prefs.put("db.queryMeatStatement", "SELECT * FROM TEST_TS WHERE TO_CHAR(ts, 'YYYY-MM-DD HH24:MI:SSXFF') > '${oldTimestamp}' ORDER BY ICAO_ID");
      this.prefs.put("mom.topicName", "db.change.event.${groupColValue}");
     
      this.processor = createTest(new Info(prefs), this.updateMap);
      I_ChangeDetector changeDetector = processor.getChangeDetector();
     
      for (int i=0; i<2; i++) {
         log.info("Testing no table ...");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
      log.info("Now testing an empty table ...");
      this.dbPool.update("CREATE TABLE TEST_TS (ts TIMESTAMP(9), colKey NUMBER(10,3), col1 VARCHAR(20), col2 NUMBER(12), ICAO_ID VARCHAR(10))");
      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 1, this.updateMap.size());
      String xml = (String)this.updateMap.get("db.change.event.${groupColValue}");
      assertNotNull("No db.change.event.${groupColValue} message has arrived", xml);
      assertXpathNotExists("/myRootTag/row[@num='0']", xml);
      assertXpathEvaluatesTo("CREATE", "/myRootTag/desc/command/text()", xml);
      this.updateMap.clear();

      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
      log.info("Insert one row");
      this.dbPool.update("INSERT INTO TEST_TS VALUES (CURRENT_TIMESTAMP, '1.1', '<Bla', '9000', 'EDDI')");
      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 1, this.updateMap.size());
      String xml = (String)this.updateMap.get("db.change.event.EDDI");
      assertNotNull("xml returned is null", xml);
      assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
      assertXpathEvaluatesTo("<Bla", "/myRootTag/row[@num='0']/col[@name='COL1']/text()", xml);
      //assertTrue(xml.indexOf("Bla-1.1") != -1);
      this.updateMap.clear();

      writeToFile("db.change.event.INSERT", xml);

      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
         log.info("Update one row");
         this.dbPool.update("UPDATE TEST_TS SET ts=CURRENT_TIMESTAMP, colKey='4.44' WHERE ICAO_ID='EDDI'");
         changeDetector.checkAgain(null);
         Thread.sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.EDDI");
         assertNotNull("xml returned is null", xml);
         assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
         assertXpathEvaluatesTo("4.44", "/myRootTag/row[@num='0']/col[@name='COLKEY']/text()", xml);
         this.updateMap.clear();

         writeToFile("db.change.event.UPDATE", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      // Is not detected by Timestamp poller!
      {
         log.info("Delete one row");
         this.dbPool.update("DELETE FROM TEST_TS WHERE ICAO_ID='EDDI'");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
         // TODO: We don't know that EDDI was deleted
         //String xml = (String)this.updateMap.get("db.change.event.${groupColValue}");
         //assertNotNull("xml returned is null", xml);
         this.updateMap.clear();

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
         log.info("Drop a table");
         this.dbPool.update("DROP TABLE TEST_TS");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.${groupColValue}");
         assertNotNull("xml returned is null", xml);
         assertXpathEvaluatesTo("DROP", "/myRootTag/desc/command/text()", xml);
         assertXpathNotExists("/myRootTag/row[@num='0']", xml);
         this.updateMap.clear();

         writeToFile("db.change.event.DROP", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      log.info("SUCCESS");
View Full Code Here

      this.prefs.put("converter.addMeta", ""+true);
      this.prefs.put("changeDetector.detectStatement", "SELECT colKey, col1, col2, ICAO_ID FROM TEST_POLL");
      this.prefs.put("mom.topicName", "db.change.event.TEST_POLL");
     
      this.processor = createTest(new Info(prefs), this.updateMap);
      I_ChangeDetector changeDetector = processor.getChangeDetector();
     
      for (int i=0; i<2; i++) {
         log.info("Testing no table ...");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
      log.info("Now testing an empty table ...");
      this.dbPool.update("CREATE TABLE TEST_POLL (colKey NUMBER(10,3), col1 VARCHAR(20), col2 NUMBER(12), ICAO_ID VARCHAR(10))");
      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 1, this.updateMap.size());
      String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
      assertNotNull("No db.change.event.${groupColValue} message has arrived", xml);
      assertXpathNotExists("/myRootTag/row[@num='0']", xml);
      assertXpathEvaluatesTo("CREATE", "/myRootTag/desc/command/text()", xml);
      this.updateMap.clear();

      writeToFile("db.change.event.CREATE", xml);

      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
      log.info("Insert one row");
      this.dbPool.update("INSERT INTO TEST_POLL VALUES ('1.1', '<Bla', '9000', 'EDDI')");
      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 1, this.updateMap.size());
      String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
      assertNotNull("xml returned is null", xml);
      // TODO: We deliver a "UPDATE" because of the CREATE md5: Is it easy possible to detect the INSERT?
      assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
      assertXpathEvaluatesTo("<Bla", "/myRootTag/row[@num='0']/col[@name='COL1']/text()", xml);
      this.updateMap.clear();

      writeToFile("db.change.event.INSERT", xml);

      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }
           
      {
         log.info("Update one row");
         this.dbPool.update("UPDATE TEST_POLL SET col1='BXXX' WHERE ICAO_ID='EDDI'");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
         assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
         assertXpathEvaluatesTo("BXXX", "/myRootTag/row[@num='0']/col[@name='COL1']/text()", xml);
         this.updateMap.clear();

         writeToFile("db.change.event.UPDATE", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
         log.info("Delete one row");
         this.dbPool.update("DELETE FROM TEST_POLL WHERE ICAO_ID='EDDI'");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
         // TODO: We deliver "UPDATE" instead of DELETE:
         assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
         assertXpathNotExists("/myRootTag/row[@num='0']", xml);
         this.updateMap.clear();

         writeToFile("db.change.event.DELETE", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
         log.info("Drop a table");
         this.dbPool.update("DROP TABLE TEST_POLL");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
         assertXpathEvaluatesTo("DROP", "/myRootTag/desc/command/text()", xml);
         assertXpathNotExists("/myRootTag/row[@num='0']", xml);
         this.updateMap.clear();

         writeToFile("db.change.event.DROP", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      log.info("SUCCESS");
View Full Code Here

      this.dbPool.update("CREATE TABLE TEST_POLL (colKey NUMBER(10,3), col1 VARCHAR(20), col2 NUMBER(12), ICAO_ID VARCHAR(10))");
      //this.dbPool.update("INSERT INTO TEST_POLL (colKey, col1, col2) VALUES ('2.0', 'XXX', '2000')");
      this.dbPool.update("INSERT INTO TEST_POLL (colKey) VALUES ('2.0')");
     
      this.processor = createTest(new Info(prefs), this.updateMap);
      I_ChangeDetector changeDetector = processor.getChangeDetector();
     
      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 1, this.updateMap.size());
      String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
      assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
      assertXpathEvaluatesTo("2", "/myRootTag/row[@num='0']/col[@name='COLKEY']/text()", xml);
View Full Code Here

      this.prefs.put("converter.addMeta", ""+true);
      this.prefs.put("changeDetector.detectStatement", "SELECT colKey, col1, col2, ICAO_ID FROM TEST_POLL");
      this.prefs.put("mom.topicName", "db.change.event.TEST_POLL");
     
      this.processor = createTest(new Info(prefs), this.updateMap);
      I_ChangeDetector changeDetector = processor.getChangeDetector();
     
      for (int i=0; i<2; i++) {
         log.info("Testing no table ...");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
      log.info("Now testing an empty table ...");
      this.dbPool.update("CREATE TABLE TEST_POLL (colKey NUMBER(10,3), col1 VARCHAR(20), col2 NUMBER(12), ICAO_ID VARCHAR(10))");
      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 1, this.updateMap.size());
      String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
      assertNotNull("No db.change.event.${groupColValue} message has arrived", xml);
      assertXpathNotExists("/myRootTag/row[@num='0']", xml);
      assertXpathEvaluatesTo("CREATE", "/myRootTag/desc/command/text()", xml);
      this.updateMap.clear();

      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
      log.info("Insert one row");
      this.dbPool.update("INSERT INTO TEST_POLL VALUES ('1.1', '<Bla', '9000', 'EDDI')");
      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 1, this.updateMap.size());
      String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
      assertNotNull("xml returned is null", xml);
      assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
      //assertXpathEvaluatesTo("Bla-1,1", "/myRootTag/row[@num='0']/col[@name='BLA-||COLKEY']/text()", xml);
      assertTrue(xml.indexOf("Bla-1.1") != -1);
      this.updateMap.clear();

      writeToFile("db.change.event.INSERT", xml);

      changeDetector.checkAgain(null);
      sleep(500);
      assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }
           
      {
         log.info("Update one row");
         this.dbPool.update("UPDATE TEST_POLL SET colKey='4.44' WHERE ICAO_ID='EDDI'");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
         assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
         //assertXpathEvaluatesTo("Bla-4.44", "/myRootTag/row[@num='0']/col[@name='BLA-||COLKEY']/text()", xml);
         assertTrue(xml.indexOf("Bla-4.44") != -1);
         this.updateMap.clear();

         writeToFile("db.change.event.UPDATE", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
         log.info("Delete one row");
         this.dbPool.update("DELETE FROM TEST_POLL WHERE ICAO_ID='EDDI'");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
         assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
         assertXpathNotExists("/myRootTag/row[@num='0']", xml);
         this.updateMap.clear();

         writeToFile("db.change.event.DELETE", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      {
         log.info("Drop a table");
         this.dbPool.update("DROP TABLE TEST_POLL");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.TEST_POLL");
         assertXpathEvaluatesTo("DROP", "/myRootTag/desc/command/text()", xml);
         assertXpathNotExists("/myRootTag/row[@num='0']", xml);
         this.updateMap.clear();

         writeToFile("db.change.event.DROP", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
      }

      log.info("SUCCESS");
View Full Code Here

            if (this.processor != null) this.processor.shutdown();
            this.prefs.put("converter.class", "org.xmlBlaster.contrib.dbwatcher.convert.ResultSetToXmlConverter");
            hasConverter = true;
         }
         this.processor = createTest(new Info(prefs), this.updateMap);
         I_ChangeDetector changeDetector = processor.getChangeDetector();

         for (int i=0; i<2; i++) {
            log.info("Testing no table ...");
            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }

         {
         log.info("Now testing an empty table ...");
         this.dbPool.update("CREATE TABLE TEST_POLL (colKey NUMBER(10,3), col1 VARCHAR(20), col2 NUMBER(12), ICAO_ID VARCHAR(10))");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.${groupColValue}");
         assertNotNull("No db.change.event.${groupColValue} message has arrived", xml);
         if (hasConverter) {
            assertXpathNotExists("/myRootTag/row[@num='0']", xml);
            assertXpathEvaluatesTo("CREATE", "/myRootTag/desc/command/text()", xml);
         }
         this.updateMap.clear();

         writeToFile("db.change.event.CREATE", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }

         {
         log.info("Insert one row");
         this.dbPool.update("INSERT INTO TEST_POLL VALUES ('1.1', '<Bla', '9000', 'EDDI')");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.EDDI");
         assertNotNull("No db.change.event.EDDI message has arrived", xml);
         if (hasConverter) {
            assertXpathEvaluatesTo("INSERT", "/myRootTag/desc/command/text()", xml);
            assertTrue(xml.indexOf("Bla-1.1") != -1);
         }
         this.updateMap.clear();

         writeToFile("db.change.event.INSERT", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }
              
         {
            log.info("Update one row");
            this.dbPool.update("UPDATE TEST_POLL SET col1='BXXX' WHERE ICAO_ID='EDDI'");
            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 1, this.updateMap.size());
            String xml = (String)this.updateMap.get("db.change.event.EDDI");
            assertNotNull("No db.change.event.EDDI message has arrived", xml);
            if (hasConverter) {
               assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
               assertFalse(xml.indexOf("BXXX") != -1); // col is not in queryMeatStatement
            }
            this.updateMap.clear();

            writeToFile("db.change.event.UPDATE", xml);

            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }

         {
            log.info("Delete one row");
            this.dbPool.update("DELETE FROM TEST_POLL WHERE ICAO_ID='EDDI'");
            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 1, this.updateMap.size());
            String xml = (String)this.updateMap.get("db.change.event.EDDI");
            assertNotNull("No db.change.event.EDDI message has arrived", xml);
            if (hasConverter) {
               assertXpathEvaluatesTo("DELETE", "/myRootTag/desc/command/text()", xml);
               assertXpathNotExists("/myRootTag/row[@num='0']", xml);
            }
            this.updateMap.clear();

            writeToFile("db.change.event.DELETE", xml);

            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }

         {
            log.info("Drop a table");
            this.dbPool.update("DROP TABLE TEST_POLL");
            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 1, this.updateMap.size());
            String xml = (String)this.updateMap.get("db.change.event.${groupColValue}");
            assertNotNull("No db.change.event.${groupColValue} message has arrived", xml);
            if (hasConverter) {
               assertXpathEvaluatesTo("DROP", "/myRootTag/desc/command/text()", xml);
               assertXpathNotExists("/myRootTag/row[@num='0']", xml);
            }
            this.updateMap.clear();

            writeToFile("db.change.event.DROP", xml);

            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }

      }
View Full Code Here

            this.processor.shutdown();
            this.prefs.put("converter.class", "org.xmlBlaster.contrib.dbwatcher.convert.ResultSetToXmlConverter");
            hasConverter = true;
         }
         this.processor = createTest(new Info(prefs), this.updateMap);
         I_ChangeDetector changeDetector = processor.getChangeDetector();

         for (int i=0; i<2; i++) {
            log.info("Testing no table ...");
            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }

         {
         log.info("Now testing an empty table ...");
         this.dbPool.update("CREATE TABLE TEST_POLL (colKey NUMBER(10,3), col1 VARCHAR(20), col2 NUMBER(12), ICAO_ID VARCHAR(10))");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.${groupColValue}");
         assertNotNull("No db.change.event.${groupColValue} message has arrived", xml);
         if (hasConverter) {
            assertXpathNotExists("/myRootTag/row[@num='0']", xml);
            assertXpathEvaluatesTo("CREATE", "/myRootTag/desc/command/text()", xml);
         }
         this.updateMap.clear();

         writeToFile("db.change.event.CREATE", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }

         {
         log.info("Insert one row");
         this.dbPool.update("INSERT INTO TEST_POLL VALUES ('1.1', '<Bla', '9000', 'EDDI')");
         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 1, this.updateMap.size());
         String xml = (String)this.updateMap.get("db.change.event.EDDI");
         assertNotNull("No db.change.event.EDDI message has arrived", xml);
         if (hasConverter) {
            assertXpathEvaluatesTo("INSERT", "/myRootTag/desc/command/text()", xml);
            assertXpathEvaluatesTo("<Bla", "/myRootTag/row[@num='0']/col[@name='COL1']/text()", xml);
         }
         this.updateMap.clear();

         writeToFile("db.change.event.INSERT", xml);

         changeDetector.checkAgain(null);
         sleep(500);
         assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }
              
         {
            log.info("Update one row");
            this.dbPool.update("UPDATE TEST_POLL SET col1='BXXX' WHERE ICAO_ID='EDDI'");
            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 1, this.updateMap.size());
            String xml = (String)this.updateMap.get("db.change.event.EDDI");
            assertNotNull("No db.change.event.EDDI message has arrived", xml);
            if (hasConverter) {
               assertXpathEvaluatesTo("UPDATE", "/myRootTag/desc/command/text()", xml);
               assertXpathEvaluatesTo("BXXX", "/myRootTag/row[@num='0']/col[@name='COL1']/text()", xml);
            }
            this.updateMap.clear();

            writeToFile("db.change.event.UPDATE", xml);

            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }

         {
            log.info("Delete one row");
            this.dbPool.update("DELETE FROM TEST_POLL WHERE ICAO_ID='EDDI'");
            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 1, this.updateMap.size());
            String xml = (String)this.updateMap.get("db.change.event.EDDI");
            assertNotNull("No db.change.event.EDDI message has arrived", xml);
            if (hasConverter) {
               assertXpathEvaluatesTo("DELETE", "/myRootTag/desc/command/text()", xml);
               assertXpathNotExists("/myRootTag/row[@num='0']", xml);
            }
            this.updateMap.clear();

            writeToFile("db.change.event.DELETE", xml);

            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }

         {
            log.info("Drop a table");
            this.dbPool.update("DROP TABLE TEST_POLL");
            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 1, this.updateMap.size());
            String xml = (String)this.updateMap.get("db.change.event.${groupColValue}");
            assertNotNull("No db.change.event.${groupColValue} message has arrived", xml);
            if (hasConverter) {
               assertXpathEvaluatesTo("DROP", "/myRootTag/desc/command/text()", xml);
               assertXpathNotExists("/myRootTag/row[@num='0']", xml);
            }
            this.updateMap.clear();

            writeToFile("db.change.event.DROP", xml);

            changeDetector.checkAgain(null);
            sleep(500);
            assertEquals("Number of message is wrong", 0, this.updateMap.size());
         }
      }
      log.info("SUCCESS");
View Full Code Here

TOP

Related Classes of org.xmlBlaster.contrib.dbwatcher.detector.I_ChangeDetector

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.