/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.atlas.web.service; import com.google.common.base.Charsets; import org.apache.atlas.ha.HAConfiguration; import org.apache.commons.configuration.Configuration; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.framework.api.ACLProvider; import org.apache.zookeeper.data.ACL; import org.mockito.ArgumentMatcher; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import static org.mockito.Matchers.any; import static org.mockito.Matchers.argThat; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; public class CuratorFactoryTest { @Mock private Configuration configuration; @Mock private HAConfiguration.ZookeeperProperties zookeeperProperties; @Mock private CuratorFrameworkFactory.Builder builder; @BeforeMethod public void setup() { MockitoAnnotations.initMocks(this); } @Test public void shouldAddAuthorization() { when(zookeeperProperties.hasAcl()).thenReturn(true); when(zookeeperProperties.getAcl()).thenReturn("sasl:myclient@EXAMPLE.COM"); when(zookeeperProperties.hasAuth()).thenReturn(true); when(zookeeperProperties.getAuth()).thenReturn("sasl:myclient@EXAMPLE.COM"); CuratorFactory curatorFactory = new CuratorFactory(configuration) { @Override protected void initializeCuratorFramework() { } }; curatorFactory.enhanceBuilderWithSecurityParameters(zookeeperProperties, builder); verify(builder).aclProvider(any(ACLProvider.class)); verify(builder).authorization(eq("sasl"), eq("myclient@EXAMPLE.COM".getBytes(Charsets.UTF_8))); } @Test public void shouldAddAclProviderWithRightACL() { when(zookeeperProperties.hasAcl()).thenReturn(true); when(zookeeperProperties.getAcl()).thenReturn("sasl:myclient@EXAMPLE.COM"); when(zookeeperProperties.hasAuth()).thenReturn(false); CuratorFactory curatorFactory = new CuratorFactory(configuration) { @Override protected void initializeCuratorFramework() { } }; curatorFactory.enhanceBuilderWithSecurityParameters(zookeeperProperties, builder); verify(builder).aclProvider(argThat(new ArgumentMatcher<ACLProvider>() { @Override public boolean matches(Object o) { ACLProvider aclProvider = (ACLProvider) o; ACL acl = aclProvider.getDefaultAcl().get(0); return acl.getId().getId().equals("myclient@EXAMPLE.COM") && acl.getId().getScheme().equals("sasl"); } })); } @Test public void shouldNotAddAnySecureParameters() { when(zookeeperProperties.hasAcl()).thenReturn(false); when(zookeeperProperties.hasAuth()).thenReturn(false); CuratorFactory curatorFactory = new CuratorFactory(configuration) { @Override protected void initializeCuratorFramework() { } }; verifyZeroInteractions(builder); } }