added a testcase
[dmaap/messagerouter/mirroragent.git] / src / main / java / com / att / nsa / dmaapMMAgent / MirrorMakerAgent.java
index 4e9de52..a80d5b9 100644 (file)
@@ -36,6 +36,7 @@ import java.net.URL;
 import java.util.ArrayList;
 import java.util.Properties;
 
+import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 import org.jasypt.util.text.BasicTextEncryptor;
 
@@ -61,6 +62,7 @@ public class MirrorMakerAgent {
        String topicname = "";
        String mechid = "";
        String password = "";
+       public boolean exitLoop=false;
        private static String secret = "utdfpWlgyDQ2ZB8SLVRtmN834I1JcT9J";
 
        public static void main(String[] args) {
@@ -102,7 +104,7 @@ public class MirrorMakerAgent {
                                try {
                                        input.close();
                                } catch (IOException e) {
-                                       logger.error("IOException" + e);
+                                       logger.error(" IOException occers " + e);
                                }
                        }
                }
@@ -122,7 +124,7 @@ public class MirrorMakerAgent {
                                try {
                                        input.close();
                                } catch (IOException e) {
-                                       e.printStackTrace();
+                                       logger.error("IOException" + e);
                                }
                        }
                }
@@ -152,6 +154,7 @@ public class MirrorMakerAgent {
                        }
                        input = new FileInputStream(mmagenthome + "/etc/" + agentName + propName + ".properties");
                } catch (IOException ex) {
+                       logger.error(" IOException will be handled " + ex);
                        try {
                                input = new FileInputStream(mmagenthome + "/etc/" + propName + ".properties");
                                Properties prop = new Properties();
@@ -166,14 +169,14 @@ public class MirrorMakerAgent {
                                prop.store(out, "");
 
                        } catch (Exception e) {
-                               e.printStackTrace();
+                               logger.error("Exception at checkPropertiesFile " +e);
                        }
                } finally {
                        if (input != null) {
                                try {
                                        input.close();
                                } catch (IOException e) {
-                                       e.printStackTrace();
+                                       logger.error("Exception occurred is " +e);
                                }
                        }
                        if (out != null) {
@@ -181,6 +184,7 @@ public class MirrorMakerAgent {
                                        out.close();
                                } catch (IOException e) {
                                        e.printStackTrace();
+                                       logger.error("Exception is : "+e);
                                }
                        }
                }
@@ -210,6 +214,7 @@ public class MirrorMakerAgent {
                                        try {
                                                Thread.sleep(1000);
                                        } catch (InterruptedException e) {
+                                                Thread.currentThread().interrupt();
                                        }
                                        mirrorMakers.getListMirrorMaker().set(i, mm);
                                } else {
@@ -223,7 +228,7 @@ public class MirrorMakerAgent {
                // System.out.println(g.toJson(mirrorMakers));
        }
 
-       private String subscribeTopic(String timeout) {
+       public String subscribeTopic(String timeout) {
                String response = "";
                try {
                        String requestURL = this.topicURL + "/events/" + this.topicname + "/mirrormakeragent/1?timeout=" + timeout
@@ -250,12 +255,13 @@ public class MirrorMakerAgent {
                                return topicMessage[0];
                        }
                } catch (Exception e) {
+                       logger.error(" Exception Occered " + e);
                        return "ERROR:" + e.getMessage() + " Server Response is:" + response;
                }
                return null;
        }
 
-       private String publishTopic(String message) {
+       public String publishTopic(String message) {
                try {
                        String requestURL = this.topicURL + "/events/" + this.topicname;
                        String authString = this.mechid + ":" + this.password;
@@ -280,11 +286,12 @@ public class MirrorMakerAgent {
                        return response;
 
                } catch (Exception e) {
+                       logger.error(" Exception Occered " + e);
                        return "ERROR:" + e.getLocalizedMessage();
                }
        }
 
-       private void readAgentTopic() {
+       public void readAgentTopic() {
                try {
                        int connectionattempt = 0;
                        while (true) {
@@ -299,53 +306,11 @@ public class MirrorMakerAgent {
 
                                                // Cast the 1st item (since limit=1 and see the type of
                                                // object
-                                               if (object.get("createMirrorMaker") != null) {
-                                                       logger.info("Received createMirrorMaker request from topic");
-                                                       CreateMirrorMaker m = g.fromJson(topicMessage, CreateMirrorMaker.class);
-                                                       createMirrorMaker(m.getCreateMirrorMaker());
-                                                       checkAgentProcess();
-                                                       mirrorMakers.setMessageID(m.getMessageID());
-                                                       publishTopic(g.toJson(mirrorMakers));
-                                                       mirrorMakers.setMessageID("");
-                                               } else if (object.get("updateMirrorMaker") != null) {
-                                                       logger.info("Received updateMirrorMaker request from topic");
-                                                       UpdateMirrorMaker m = g.fromJson(topicMessage, UpdateMirrorMaker.class);
-                                                       updateMirrorMaker(m.getUpdateMirrorMaker());
-                                                       checkAgentProcess();
-                                                       mirrorMakers.setMessageID(m.getMessageID());
-                                                       publishTopic(g.toJson(mirrorMakers));
-                                                       mirrorMakers.setMessageID("");
-                                               } else if (object.get("deleteMirrorMaker") != null) {
-                                                       logger.info("Received deleteMirrorMaker request from topic");
-                                                       DeleteMirrorMaker m = g.fromJson(topicMessage, DeleteMirrorMaker.class);
-                                                       deleteMirrorMaker(m.getDeleteMirrorMaker());
-                                                       checkAgentProcess();
-                                                       mirrorMakers.setMessageID(m.getMessageID());
-                                                       publishTopic(g.toJson(mirrorMakers));
-                                                       mirrorMakers.setMessageID("");
-                                               } else if (object.get("listAllMirrorMaker") != null) {
-                                                       logger.info("Received listALLMirrorMaker request from topic");
-                                                       checkAgentProcess();
-                                                       mirrorMakers.setMessageID((String) object.get("messageID"));
-                                                       publishTopic(g.toJson(mirrorMakers));
-                                                       mirrorMakers.setMessageID("");
-                                               } else if (object.get("updateWhiteList") != null) {
-                                                       logger.info("Received updateWhiteList request from topic");
-                                                       UpdateWhiteList m = g.fromJson(topicMessage, UpdateWhiteList.class);
-                                                       updateWhiteList(m.getUpdateWhiteList());
-                                                       checkAgentProcess();
-                                                       mirrorMakers.setMessageID(m.getMessageID());
-                                                       publishTopic(g.toJson(mirrorMakers));
-                                                       mirrorMakers.setMessageID("");
-                                               } else if (object.get("listMirrorMaker") != null) {
-                                                       logger.info("Received listMirrorMaker from topic, skipping messages");
-                                               } else {
-                                                       logger.info("Received unknown request from topic");
-                                               }
+                                               readAgent(object, topicMessage);
                                        } catch (Exception ex) {
                                                connectionattempt++;
                                                if (connectionattempt > 5) {
-                                                       logger.info("Can't connect to the topic, mmagent shutting down , " + topicMessage);
+                                                       logger.info("Can't connect to the topic, mmagent shutting down , " + topicMessage + ex);
                                                        return;
                                                }
                                                logger.info("Can't connect to the topic, " + topicMessage + " Retrying " + connectionattempt
@@ -357,13 +322,65 @@ public class MirrorMakerAgent {
                                        connectionattempt = 0;
                                        checkAgentProcess();
                                }
-
+               if(exitLoop){
+                  break;
+               }
                        }
                } catch (Exception e) {
-                       e.printStackTrace();
+                       logger.error("Exception at readAgentTopic : " + e);
                }
 
        }
+       
+       public void readAgent(LinkedTreeMap<?, ?> object,String topicMessage){
+               
+               Gson g = new Gson();
+               
+               if (object.get("createMirrorMaker") != null) {
+                       logger.info("Received createMirrorMaker request from topic");
+                       CreateMirrorMaker m = g.fromJson(topicMessage, CreateMirrorMaker.class);
+                       createMirrorMaker(m.getCreateMirrorMaker());
+                       checkAgentProcess();
+                       mirrorMakers.setMessageID(m.getMessageID());
+                       publishTopic(g.toJson(mirrorMakers));
+                       mirrorMakers.setMessageID("");
+               } else if (object.get("updateMirrorMaker") != null) {
+                       logger.info("Received updateMirrorMaker request from topic");
+                       UpdateMirrorMaker m = g.fromJson(topicMessage, UpdateMirrorMaker.class);
+                       updateMirrorMaker(m.getUpdateMirrorMaker());
+                       checkAgentProcess();
+                       mirrorMakers.setMessageID(m.getMessageID());
+                       publishTopic(g.toJson(mirrorMakers));
+                       mirrorMakers.setMessageID("");
+               } else if (object.get("deleteMirrorMaker") != null) {
+                       logger.info("Received deleteMirrorMaker request from topic");
+                       DeleteMirrorMaker m = g.fromJson(topicMessage, DeleteMirrorMaker.class);
+                       deleteMirrorMaker(m.getDeleteMirrorMaker());
+                       checkAgentProcess();
+                       mirrorMakers.setMessageID(m.getMessageID());
+                       publishTopic(g.toJson(mirrorMakers));
+                       mirrorMakers.setMessageID("");
+               } else if (object.get("listAllMirrorMaker") != null) {
+                       logger.info("Received listALLMirrorMaker request from topic");
+                       checkAgentProcess();
+                       mirrorMakers.setMessageID((String) object.get("messageID"));
+                       publishTopic(g.toJson(mirrorMakers));
+                       mirrorMakers.setMessageID("");
+               } else if (object.get("updateWhiteList") != null) {
+                       logger.info("Received updateWhiteList request from topic");
+                       UpdateWhiteList m = g.fromJson(topicMessage, UpdateWhiteList.class);
+                       updateWhiteList(m.getUpdateWhiteList());
+                       checkAgentProcess();
+                       mirrorMakers.setMessageID(m.getMessageID());
+                       publishTopic(g.toJson(mirrorMakers));
+                       mirrorMakers.setMessageID("");
+               } else if (object.get("listMirrorMaker") != null) {
+                       logger.info("Received listMirrorMaker from topic, skipping messages");
+               } else {
+                       logger.info("Received unknown request from topic");
+               }
+               
+       }
 
        protected void createMirrorMaker(MirrorMaker newMirrorMaker) {
                boolean exists = false;
@@ -384,7 +401,7 @@ public class MirrorMakerAgent {
                } else if (exists == false && mirrorMakers == null) {
                        mirrorMakers = new ListMirrorMaker();
                        ArrayList<MirrorMaker> list = mirrorMakers.getListMirrorMaker();
-                       list = new ArrayList<MirrorMaker>();
+                       list = new ArrayList();
                        list.add(newMirrorMaker);
                        mirrorMakers.setListMirrorMaker(list);
                }
@@ -398,7 +415,7 @@ public class MirrorMakerAgent {
                        out = new FileOutputStream(mmagenthome + "/etc/mmagent.config");
                        mirrorMakerProperties.store(out, "");
                } catch (IOException ex) {
-                       ex.printStackTrace();
+                       logger.error(" IOException Occered " + ex);
                } finally {
                        if (out != null) {
                                try {
@@ -439,15 +456,17 @@ public class MirrorMakerAgent {
                                try {
                                        Thread.sleep(1000);
                                } catch (InterruptedException e) {
+                                       logger.log(Level.WARN, "Interrupted!", e);
+                                       Thread.currentThread().interrupt();
                                }
                        } catch (IOException ex) {
-                               ex.printStackTrace();
+                               logger.error(" IOException Occered " + ex);
                        } finally {
                                if (out != null) {
                                        try {
                                                out.close();
                                        } catch (IOException e) {
-                                               e.printStackTrace();
+                                               logger.error(" IOException Occered " + e);
                                        }
                                }
                        }
@@ -482,15 +501,18 @@ public class MirrorMakerAgent {
                                try {
                                        Thread.sleep(1000);
                                } catch (InterruptedException e) {
+                                       logger.log(Level.WARN, "Interrupted!", e);
+                                       Thread.currentThread().interrupt();
                                }
                        } catch (IOException ex) {
-                               ex.printStackTrace();
+                               logger.error("Exception at updateWhiteList : " + ex);
                        } finally {
                                if (out != null) {
                                        try {
                                                out.close();
                                        } catch (IOException e) {
                                                e.printStackTrace();
+                                               logger.error("IOException occered " + e);
                                        }
                                }
                        }