فهرست منبع

ZOOKEEPER-1142. incorrect stat output (phunt via mahadev)

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/trunk@1156497 13f79535-47bb-0310-9956-ffa450edef68
Mahadev Konar 13 سال پیش
والد
کامیت
8eeefcf274

+ 2 - 0
CHANGES.txt

@@ -272,6 +272,8 @@ BUGFIXES:
 
   ZOOKEEPER-1139. jenkins is reporting two warnings, fix these (phunt via mahadev)
 
+  ZOOKEEPER-1142. incorrect stat output (phunt via mahadev)
+
 IMPROVEMENTS:
   ZOOKEEPER-724. Improve junit test integration - log harness information 
   (phunt via mahadev)

+ 2 - 0
src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java

@@ -660,6 +660,7 @@ public class NIOServerCnxn extends ServerCnxn {
                     }
                     for(NIOServerCnxn c : cnxnset){
                         c.dumpConnectionInfo(pw, true);
+                        pw.println();
                     }
                     pw.println();
                 }
@@ -690,6 +691,7 @@ public class NIOServerCnxn extends ServerCnxn {
                 }
                 for (NIOServerCnxn c : cnxns) {
                     c.dumpConnectionInfo(pw, false);
+                    pw.println();
                 }
                 pw.println();
             }

+ 2 - 0
src/java/main/org/apache/zookeeper/server/NettyServerCnxn.java

@@ -472,6 +472,7 @@ public class NettyServerCnxn extends ServerCnxn {
                     }
                     for(ServerCnxn c : cnxns){
                         c.dumpConnectionInfo(pw, true);
+                        pw.println();
                     }
                     pw.println();
                 }
@@ -501,6 +502,7 @@ public class NettyServerCnxn extends ServerCnxn {
                 }
                 for (ServerCnxn c : cnxns) {
                     c.dumpConnectionInfo(pw, false);
+                    pw.println();
                 }
                 pw.println();
             }

+ 1 - 0
src/java/main/org/apache/zookeeper/server/ServerCnxn.java

@@ -442,6 +442,7 @@ public abstract class ServerCnxn implements Stats, Watcher {
                 pwriter.print(getMaxLatency());
             }
         }
+        pwriter.print(")");
     }
 
 }

+ 74 - 4
src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java

@@ -18,13 +18,17 @@
 
 package org.apache.zookeeper.test;
 
+import java.io.BufferedReader;
 import java.io.IOException;
+import java.io.StringReader;
+import java.util.regex.Pattern;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.zookeeper.TestableZooKeeper;
+import org.apache.zookeeper.ZooKeeper;
 import org.junit.Assert;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class FourLetterWordsTest extends ClientBase {
     protected static final Logger LOG =
@@ -91,10 +95,76 @@ public class FourLetterWordsTest extends ClientBase {
         verify("mntr", "zk_server_state\tstandalone");
     }
 
+    private String sendRequest(String cmd) throws IOException {
+      HostPort hpobj = ClientBase.parseHostPortList(hostPort).get(0);
+      return ClientBase.send4LetterWord(hpobj.host, hpobj.port, cmd);
+    }
+
     private void verify(String cmd, String expected) throws IOException {
-        HostPort hpobj = parseHostPortList(hostPort).get(0);
-        String resp = send4LetterWord(hpobj.host, hpobj.port, cmd);
+        String resp = sendRequest(cmd);
         LOG.info("cmd " + cmd + " expected " + expected + " got " + resp);
         Assert.assertTrue(resp.contains(expected));
     }
+    
+    @Test
+    public void validateStatOutput() throws Exception {
+        ZooKeeper zk1 = createClient();
+        ZooKeeper zk2 = createClient();
+        
+        String resp = sendRequest("stat");
+        BufferedReader in = new BufferedReader(new StringReader(resp));
+
+        String line;
+        // first line should be version info
+        line = in.readLine();
+        Assert.assertTrue(Pattern.matches("^.*\\s\\d+\\.\\d+\\.\\d+-.*$", line));
+        Assert.assertTrue(Pattern.matches("^Clients:$", in.readLine()));
+
+        int count = 0;
+        while ((line = in.readLine()).length() > 0) {
+            count++;
+            Assert.assertTrue(Pattern.matches("^ /.*:\\d+\\[\\d+\\]\\(queued=\\d+,recved=\\d+,sent=\\d+\\)$", line));
+        }
+        // ensure at least the two clients we created are accounted for
+        Assert.assertTrue(count >= 2);
+
+        line = in.readLine();
+        Assert.assertTrue(Pattern.matches("^Latency min/avg/max: \\d+/\\d+/\\d+$", line));
+        line = in.readLine();
+        Assert.assertTrue(Pattern.matches("^Received: \\d+$", line));
+        line = in.readLine();
+        Assert.assertTrue(Pattern.matches("^Sent: \\d+$", line));
+        line = in.readLine();
+        Assert.assertTrue(Pattern.matches("^Outstanding: \\d+$", line));
+        line = in.readLine();
+        Assert.assertTrue(Pattern.matches("^Zxid: 0x[\\da-fA-F]+$", line));
+        line = in.readLine();
+        Assert.assertTrue(Pattern.matches("^Mode: .*$", line));
+        line = in.readLine();
+        Assert.assertTrue(Pattern.matches("^Node count: \\d+$", line));
+
+        zk1.close();
+        zk2.close();
+    }
+
+    @Test
+    public void validateConsOutput() throws Exception {
+        ZooKeeper zk1 = createClient();
+        ZooKeeper zk2 = createClient();
+        
+        String resp = sendRequest("cons");
+        BufferedReader in = new BufferedReader(new StringReader(resp));
+
+        String line;
+        int count = 0;
+        while ((line = in.readLine()) != null && line.length() > 0) {
+            count++;
+            Assert.assertTrue(line, Pattern.matches("^ /.*:\\d+\\[\\d+\\]\\(queued=\\d+,recved=\\d+,sent=\\d+.*\\)$", line));
+        }
+        // ensure at least the two clients we created are accounted for
+        Assert.assertTrue(count >= 2);
+
+        zk1.close();
+        zk2.close();
+    }
 }