You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@knox.apache.org by GitBox <gi...@apache.org> on 2019/11/22 19:37:27 UTC

[GitHub] [knox] risdenk commented on a change in pull request #205: KNOX-2134 - Add caching to ZookeeperRemoteAliasService

risdenk commented on a change in pull request #205: KNOX-2134 - Add caching to ZookeeperRemoteAliasService
URL: https://github.com/apache/knox/pull/205#discussion_r349756298
 
 

 ##########
 File path: gateway-server/src/test/java/org/apache/knox/gateway/services/security/impl/ZookeeperRemoteAliasServiceTest.java
 ##########
 @@ -193,61 +302,123 @@ public void testAliasForCluster() throws Exception {
 
     Assert.assertEquals(aliasesDev.size(), 0);
     Assert.assertFalse("Expected alias '" + expectedAliasDev + "' to be removed but found.",
-        aliasesDev.contains(expectedAliasDev));
+                       aliasesDev.contains(expectedAliasDev));
 
     Assert.assertEquals(aliases.size(), 1);
-    Assert.assertTrue("Expected alias '" + expectedAlias + "' not found ",
-        aliases.contains(expectedAlias.toLowerCase(Locale.ROOT)));
+    assertTrue("Expected alias '" + expectedAlias + "' not found ",
+                      aliases.contains(expectedAlias.toLowerCase(Locale.ROOT)));
 
     /* Test auto-generate password for alias */
     final String testAutoGeneratedpasswordAlias = "knox.test.alias.auto";
 
-    final char[] autoGeneratedPassword = zkAlias
-        .getPasswordFromAliasForCluster(expectedClusterName,
-            testAutoGeneratedpasswordAlias, true);
+    final char[] autoGeneratedPassword =
+        zkAlias.getPasswordFromAliasForCluster(expectedClusterName,
+                                               testAutoGeneratedpasswordAlias,
+                                               true);
     aliases = zkAlias.getAliasesForCluster(expectedClusterName);
 
-    Assert.assertNotNull(autoGeneratedPassword);
-    Assert.assertEquals(aliases.size(), 2);
-    Assert.assertTrue("Expected alias 'knox.test.alias' not found ",
-        aliases.contains(testAutoGeneratedpasswordAlias));
+    assertNotNull(autoGeneratedPassword);
+    Assert.assertEquals(2, aliases.size());
+    assertTrue("Expected alias '" + testAutoGeneratedpasswordAlias + "' not found ",
+                      aliases.contains(testAutoGeneratedpasswordAlias));
   }
 
   @Test
   public void testEncryptDecrypt() throws Exception {
     final String testPassword = "ApacheKnoxPassword123";
 
-    final AliasService defaultAlias = EasyMock
-        .createNiceMock(AliasService.class);
+    final AliasService defaultAlias = EasyMock.createNiceMock(AliasService.class);
     EasyMock.replay(defaultAlias);
 
-    final DefaultMasterService ms = EasyMock
-        .createNiceMock(DefaultMasterService.class);
-    EasyMock.expect(ms.getMasterSecret()).andReturn("knox".toCharArray())
-        .anyTimes();
+    final DefaultMasterService ms = EasyMock.createNiceMock(DefaultMasterService.class);
+    EasyMock.expect(ms.getMasterSecret()).andReturn("knox".toCharArray()).anyTimes();
     EasyMock.replay(ms);
 
-    RemoteConfigurationRegistryClientService clientService = (new ZooKeeperClientServiceProvider())
-                                                                 .newInstance();
+    RemoteConfigurationRegistryClientService clientService = (new ZooKeeperClientServiceProvider()).newInstance();
     clientService.setAliasService(defaultAlias);
     clientService.init(gc, Collections.emptyMap());
 
-    final ZookeeperRemoteAliasService zkAlias = new ZookeeperRemoteAliasService(defaultAlias, ms,
-        clientService);
+    final ZookeeperRemoteAliasService zkAlias = new ZookeeperRemoteAliasService(defaultAlias, ms, clientService);
     zkAlias.init(gc, Collections.emptyMap());
 
     final String encrypted = zkAlias.encrypt(testPassword);
-    Assert.assertNotNull(encrypted);
+    assertNotNull(encrypted);
     final String clear = zkAlias.decrypt(encrypted);
     Assert.assertEquals(testPassword, clear);
 
     try {
       // Match default data that is put into a newly created znode
       final byte[] badData = new byte[0];
       zkAlias.decrypt(new String(badData, StandardCharsets.UTF_8));
-      Assert.fail("Should have failed to decrypt.");
+      fail("Should have failed to decrypt.");
     } catch (IllegalArgumentException e) {
       Assert.assertEquals("Data should have 3 parts split by ::", e.getMessage());
     }
   }
+
+
+  private void validateAliasCache(final Map<String, Map<String, String>> aliasCache,
+                                  final Map<String, Map<String, String>> expectedCacheContents) {
+    for (String cluster : expectedCacheContents.keySet()) {
+      assertTrue("Missing cluster " + cluster, aliasCache.containsKey(cluster));
+      for (String expectedAlias : expectedCacheContents.get(cluster).keySet()) {
+        assertTrue("Missing expected alias (" + expectedAlias + ") for " + cluster,
+            aliasCache.get(cluster).containsKey(expectedAlias));
+        assertEquals("Alias value mismatch",
+            expectedCacheContents.get(cluster).get(expectedAlias),
+            aliasCache.get(cluster).get(expectedAlias));
+      }
+    }
+  }
+
+
+  private void validateClusterZNodes(final RemoteConfigurationRegistryClient client, final List<String> expectedAliasNames) {
+    List<String> aliasNodes = client.listChildEntries(ZookeeperRemoteAliasService.PATH_KNOX_ALIAS_STORE_TOPOLOGY);
+    assertEquals("Unexpected alias nodes.", expectedAliasNames.size(), aliasNodes.size());
+    assertTrue("Alias node mismatch!", aliasNodes.containsAll(expectedAliasNames));
+  }
+
+
+  private void validateClusterAliasZNodes(final RemoteConfigurationRegistryClient client,
+                                          final Map<String, Map<String, String>>  expectedAliasNames) {
+    for (String cluster : expectedAliasNames.keySet()) {
+      List<String> aliasNodes =
+          client.listChildEntries(ZookeeperRemoteAliasService.PATH_KNOX_ALIAS_STORE_TOPOLOGY + "/" + cluster);
+      assertEquals("Unexpected alias nodes.", expectedAliasNames.get(cluster).size(), aliasNodes.size());
+      assertTrue("Alias node mismatch!", aliasNodes.containsAll(expectedAliasNames.get(cluster).keySet()));
+    }
+  }
+
+
+  private void validateClusterAliasZNodeValues(final RemoteConfigurationRegistryClient client,
+                                               final ZookeeperRemoteAliasService       zkAliasService,
+                                               final Map<String, Map<String, String>>  expectedAliases) {
+    for (String cluster : expectedAliases.keySet()) {
+      List<String> aliasNodes =
+          client.listChildEntries(ZookeeperRemoteAliasService.PATH_KNOX_ALIAS_STORE_TOPOLOGY + "/" + cluster);
+      assertEquals("Unexpected alias nodes.", expectedAliases.get(cluster).size(), aliasNodes.size());
+      for (String alias : aliasNodes) {
+        String entryData =
+            client.getEntryData(ZookeeperRemoteAliasService.PATH_KNOX_ALIAS_STORE_TOPOLOGY +
+                "/" + cluster + "/" + alias);
+        String decrypted = null;
+        try {
+          decrypted = zkAliasService.decrypt(entryData);
+        } catch (Exception e) {
+          fail("Error decrypting alias value: " + e.getMessage());
+        }
+        assertNotNull(decrypted);
+        assertEquals("ZNode value mismatch.", expectedAliases.get(cluster).get(alias), decrypted);
+      }
+    }
+  }
+
+  private void waitForCallback() {
+    try {
+      Thread.sleep(1000);
+    } catch (InterruptedException e) {
+      //
 
 Review comment:
   Same as above - `Thread.currentThread().interrupt();`
   
   Also again why 1 second?

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services