Add namespace CRUD for wskadmin.

Add tips for using wskadmin to docs.
diff --git a/tests/src/whisk/core/admin/WskAdminTests.scala b/tests/src/whisk/core/admin/WskAdminTests.scala
index 73ee31a..4dfdc79 100644
--- a/tests/src/whisk/core/admin/WskAdminTests.scala
+++ b/tests/src/whisk/core/admin/WskAdminTests.scala
@@ -16,6 +16,8 @@
 
 package whisk.core.admin
 
+import scala.concurrent.duration.DurationInt
+
 import org.junit.runner.RunWith
 import org.scalatest.Matchers
 import org.scalatest.junit.JUnitRunner
@@ -42,23 +44,42 @@
         val wskadmin = new RunWskAdminCmd {}
         val auth = WhiskAuth(Subject(), AuthKey())
         val subject = auth.subject.asString
+        try {
+            println(s"CRD subject: $subject")
+            val create = wskadmin.cli(Seq("user", "create", subject))
+            val get = wskadmin.cli(Seq("user", "get", subject))
+            create.stdout should be(get.stdout)
 
-        println(s"CRD subject: $subject")
-        val create = wskadmin.cli(Seq("user", "create", subject))
-        val get = wskadmin.cli(Seq("user", "get", subject))
-        create.stdout should be(get.stdout)
+            val authkey = get.stdout.trim
+            authkey should include(":")
+            authkey.split(":")(0).length should be(36)
+            authkey.split(":")(1).length should be >= 64
 
-        val authkey = get.stdout.trim
-        authkey should include(":")
-        authkey.split(":")(0).length should be(36)
-        authkey.split(":")(1).length should be >= 64
+            wskadmin.cli(Seq("user", "whois", authkey)).stdout.trim should be(Seq(s"subject: $subject", s"namespace: $subject").mkString("\n"))
 
-        wskadmin.cli(Seq("user", "whois", authkey)).stdout.trim should be(Seq(s"subject: $subject", s"namespace: $subject").mkString("\n"))
-        wskadmin.cli(Seq("user", "delete", subject)).stdout should include("Subject deleted")
+            whisk.utils.retry({
+                // reverse lookup by namespace
+                wskadmin.cli(Seq("user", "list", "-k", subject)).stdout.trim should be(authkey)
+            }, 10, Some(1.second))
 
-        val recreate = wskadmin.cli(Seq("user", "create", subject, "-u", auth.authkey.compact))
-        wskadmin.cli(Seq("user", "get", subject)).stdout.trim should be(auth.authkey.compact)
-        wskadmin.cli(Seq("user", "delete", subject)).stdout should include("Subject deleted")
+            wskadmin.cli(Seq("user", "delete", subject)).stdout should include("Subject deleted")
+
+            // recreate with explicit
+            val newspace = s"${subject}.myspace"
+            wskadmin.cli(Seq("user", "create", subject, "-ns", newspace, "-u", auth.authkey.compact))
+
+            whisk.utils.retry({
+                // reverse lookup by namespace
+                wskadmin.cli(Seq("user", "list", "-k", newspace)).stdout.trim should be(auth.authkey.compact)
+            }, 10, Some(1.second))
+
+            wskadmin.cli(Seq("user", "get", subject, "-ns", newspace)).stdout.trim should be(auth.authkey.compact)
+
+            // delete namespace
+            wskadmin.cli(Seq("user", "delete", subject, "-ns", newspace)).stdout should include("Namespace deleted")
+        } finally {
+            wskadmin.cli(Seq("user", "delete", subject)).stdout should include("Subject deleted")
+        }
     }
 
 }