Integrate SJK into nodetool

Patch by Ekaterina Dimitrov, reviewed by brandonwilliams for
CASSANDRA-12197
diff --git a/nodetool_test.py b/nodetool_test.py
index 012780b..381e917 100644
--- a/nodetool_test.py
+++ b/nodetool_test.py
@@ -445,3 +445,37 @@
         out_sorted = node_describe.split()
         out_sorted.sort()
         return (node_describe, out_sorted)
+
+    @since('4.0')
+    def test_sjk(self):
+        """
+        Verify that SJK generally works.
+        """
+
+        cluster = self.cluster
+        cluster.populate([1]).start()
+        node = cluster.nodelist()[0]
+
+        out, err, _ = node.nodetool('sjk --help')
+        logger.debug(out)
+        hasPattern = False
+        for line in out.split(os.linesep):
+            if "    ttop      [Thread Top] Displays threads from JVM process" == line:
+                hasPattern = True
+        assert hasPattern == True, "Expected help about SJK ttop"
+
+        out, err, _ = node.nodetool('sjk')
+        logger.debug(out)
+        hasPattern = False
+        for line in out.split(os.linesep):
+            if "    ttop      [Thread Top] Displays threads from JVM process" == line:
+                hasPattern = True
+        assert hasPattern == True, "Expected help about SJK ttop"
+
+        out, err, _ = node.nodetool('sjk hh -n 10 --live')
+        logger.debug(out)
+        hasPattern = False
+        for line in out.split(os.linesep):
+            if re.match('.*Instances.*Bytes.*Type.*', line):
+                hasPattern = True
+        assert hasPattern == True, "Expected 'SJK hh' output"