@Test public void testDataIsUpdatedWithAtlasServerAddress() throws Exception { when(configuration.getString(HAConfiguration.ATLAS_SERVER_ADDRESS_PREFIX +"id1")).thenReturn(HOST_PORT); when(configuration.getString( HAConfiguration.ATLAS_SERVER_HA_ZK_ROOT_KEY, HAConfiguration.ATLAS_SERVER_ZK_ROOT_DEFAULT)). thenReturn(HAConfiguration.ATLAS_SERVER_ZK_ROOT_DEFAULT); when(curatorFactory.clientInstance()).thenReturn(curatorFramework); ExistsBuilder existsBuilder = mock(ExistsBuilder.class); when(curatorFramework.checkExists()).thenReturn(existsBuilder); when(existsBuilder.forPath(getPath())).thenReturn(new Stat()); SetDataBuilder setDataBuilder = mock(SetDataBuilder.class); when(curatorFramework.setData()).thenReturn(setDataBuilder); ActiveInstanceState activeInstanceState = new ActiveInstanceState(configuration, curatorFactory); activeInstanceState.update("id1"); verify(setDataBuilder).forPath( getPath(), SERVER_ADDRESS.getBytes(Charset.forName("UTF-8"))); }
@Test public void testCanReadFromZookeeper() throws Exception { CuratorFramework curatorFramework = mock(CuratorFramework.class); ExistsBuilder existsBuilder = mock(ExistsBuilder.class); GetDataBuilder getDataBuilder = mock(GetDataBuilder.class); GetChildrenBuilder getChildrenBuilder = mock(GetChildrenBuilder.class); when(getDataBuilder.forPath(ConfigurationType.GLOBAL.getZookeeperRoot())).thenReturn(mockGlobalData()); when(curatorFramework.checkExists()).thenReturn(existsBuilder); when(curatorFramework.getData()).thenReturn(getDataBuilder); when(curatorFramework.getChildren()).thenReturn(getChildrenBuilder); when(getChildrenBuilder.forPath(anyString())).thenReturn(Collections.<String> emptyList()); Configuration configuration = new Configuration(Paths.get("foo")); configuration.curatorFramework = curatorFramework; configuration.update(); checkResult(configuration); }
@SuppressWarnings("unchecked") @Test public void testStart() throws Exception { CuratorFramework framework = mockFramework(); ExistsBuilder ceBuilder = mock(ExistsBuilder.class); CreateBuilder createBuilder = mock(CreateBuilder.class); when(framework.checkExists()).thenReturn(ceBuilder); when(ceBuilder.forPath("/services/myservice/nodes")).thenReturn(mock(Stat.class)); when(framework.create()).thenReturn(createBuilder); when(framework.getState()).thenReturn(CuratorFrameworkState.STARTED); ACLBackgroundPathAndBytesable<String> os = mock(ACLBackgroundPathAndBytesable.class); when(createBuilder.withMode(CreateMode.EPHEMERAL)).thenReturn(os); DiscoService service = new DiscoService(framework, "myservice"); byte[] payload = "foo bar baz bingo".getBytes(); service.start("foo", 4321, true, payload); verify(os).forPath(eq("/services/myservice/nodes/foo:4321"), eq(payload)); }
@SuppressWarnings("unchecked") @Test public void testDeletesEphemeralNode() throws Exception { CuratorFramework framework = mockFramework(); ExistsBuilder ceBuilder = mock(ExistsBuilder.class); CreateBuilder createBuilder = mock(CreateBuilder.class); when(framework.checkExists()).thenReturn(ceBuilder); when(ceBuilder.forPath("/services/myservice/nodes")).thenReturn(mock(Stat.class)); when(ceBuilder.forPath("/services/myservice/nodes/foo:4321")).thenReturn(mock(Stat.class)); when(framework.create()).thenReturn(createBuilder); when(framework.getState()).thenReturn(CuratorFrameworkState.STARTED); DeleteBuilder deleteBuilder = mock(DeleteBuilder.class); when(framework.delete()).thenReturn(deleteBuilder); ACLBackgroundPathAndBytesable<String> os = mock(ACLBackgroundPathAndBytesable.class); when(createBuilder.withMode(CreateMode.EPHEMERAL)).thenReturn(os); DiscoService service = new DiscoService(framework, "myservice"); byte[] payload = "foo bar baz bingo".getBytes(); service.start("foo", 4321, true, payload); verify(deleteBuilder).forPath("/services/myservice/nodes/foo:4321"); verify(os).forPath(eq("/services/myservice/nodes/foo:4321"), eq(payload)); }
/** * Tests that if we attempt to delete a node that doesnt actually exist * just silently returns. * * To simulate a race condition we do this using mocks. */ @Test public void testDeleteNodeIfNoChildren_withNodeThatDoesntExist() throws Exception { final String basePath = "/testDeleteNodeIfNoChildren_withNodeThatDoesntExist"; final CuratorFramework mockCurator = mock(CuratorFramework.class); // Exists builder should return true saying our basePath exists. final ExistsBuilder mockExistsBuilder = mock(ExistsBuilder.class); when(mockExistsBuilder.forPath(eq(basePath))).thenReturn(new Stat()); when(mockCurator.checkExists()).thenReturn(mockExistsBuilder); // When we look for children, make sure it returns an empty list. final GetChildrenBuilder mockGetChildrenBuilder = mock(GetChildrenBuilder.class); when(mockGetChildrenBuilder.forPath(eq(basePath))).thenReturn(new ArrayList<>()); when(mockCurator.getChildren()).thenReturn(mockGetChildrenBuilder); // When we go to delete the actual node, we toss a no-node exception. // This effectively simulates a race condition between checking if the node exists (our mock above says yes) // and it being removed before we call delete on it. final DeleteBuilder mockDeleteBuilder = mock(DeleteBuilder.class); when(mockDeleteBuilder.forPath(eq(basePath))).thenThrow(new KeeperException.NoNodeException()); when(mockCurator.delete()).thenReturn(mockDeleteBuilder); // Now create our helper final CuratorHelper curatorHelper = new CuratorHelper(mockCurator); // Call our method curatorHelper.deleteNodeIfNoChildren(basePath); }
protected void setupClient() { client = mock(CuratorFramework.class); existsBuilder = mock(ExistsBuilder.class); pathCreator = mock(ZookeeperConnector.IPathCreator.class); stackCache = mock(IStacksCache.class); nodeCacheFactory = mock(INodeCacheFactory.class); pathChildrenCacheFactory = mock(IPathChildrenCacheFactory.class); when(client.checkExists()).thenReturn(existsBuilder); when(client.getState()).thenReturn(CuratorFrameworkState.STARTED); }
public void createNonExisting() throws Exception { CuratorFramework client = mock(CuratorFramework.class); ExistsBuilder builder = mock(ExistsBuilder.class); CreateBuilder createBuilder = mock(CreateBuilder.class); //ProtectACLCreateModeStatPathAndBytesable<String> protector = mock(ProtectACLCreateModeStatPathAndBytesable.class); when(builder.forPath(anyString())).thenReturn(null); when(client.checkExists()).thenReturn(builder); when(client.create()).thenReturn(createBuilder); //when(createBuilder.creatingParentContainersIfNeeded()).thenReturn((ProtectACLCreateModeStatPathAndBytesable<String>)protector); new DistributedLockServiceCuratorImpl(client, "/", 0); //verify(protector).forPath(anyString(), anyObject()); }
public void createNonExisting2() throws Exception { CuratorFramework client = mock(CuratorFramework.class); ExistsBuilder builder = mock(ExistsBuilder.class); CreateBuilder createBuilder = mock(CreateBuilder.class); //ProtectACLCreateModeStatPathAndBytesable<String> protector = mock(ProtectACLCreateModeStatPathAndBytesable.class); when(builder.forPath(anyString())).thenReturn(new Stat()); when(client.checkExists()).thenReturn(builder); when(client.create()).thenReturn(createBuilder); //when(createBuilder.creatingParentContainersIfNeeded()).thenReturn(protector); new DistributedLockServiceCuratorImpl(client, "/", 0); //verify(protector, times(0)).forPath(anyString(), anyObject()); }
@Test public void createNonExisting() throws Exception { CuratorFramework client = mock(CuratorFramework.class); ExistsBuilder builder = mock(ExistsBuilder.class); CreateBuilder createBuilder = mock(CreateBuilder.class); ProtectACLCreateModeStatPathAndBytesable<String> protector = mock(ProtectACLCreateModeStatPathAndBytesable.class); when(builder.forPath(anyString())).thenReturn(null); when(client.checkExists()).thenReturn(builder); when(client.create()).thenReturn(createBuilder); when(createBuilder.creatingParentContainersIfNeeded()).thenReturn((ProtectACLCreateModeStatPathAndBytesable<String>)protector); new DistributedLockServiceCuratorImpl(client, "/", 0); verify(protector).forPath(anyString(), anyObject()); }
@Test public void createNonExisting2() throws Exception { CuratorFramework client = mock(CuratorFramework.class); ExistsBuilder builder = mock(ExistsBuilder.class); CreateBuilder createBuilder = mock(CreateBuilder.class); ProtectACLCreateModeStatPathAndBytesable<String> protector = mock(ProtectACLCreateModeStatPathAndBytesable.class); when(builder.forPath(anyString())).thenReturn(new Stat()); when(client.checkExists()).thenReturn(builder); when(client.create()).thenReturn(createBuilder); when(createBuilder.creatingParentContainersIfNeeded()).thenReturn(protector); new DistributedLockServiceCuratorImpl(client, "/", 0); verify(protector, times(0)).forPath(anyString(), anyObject()); }
private Pair<CreateBuilder, DeleteBuilder> setupSetupInProgressPathMocks(List<ACL> acls, Stat stat) throws Exception { when(curatorFactory.clientInstance()).thenReturn(client); CreateBuilder createBuilder = mock(CreateBuilder.class); when(createBuilder.withACL(acls)).thenReturn(createBuilder); when(client.create()).thenReturn(createBuilder); DeleteBuilder deleteBuilder = mock(DeleteBuilder.class); when(client.delete()).thenReturn(deleteBuilder); Pair<CreateBuilder, DeleteBuilder> pair = Pair.of(createBuilder, deleteBuilder); ExistsBuilder existsBuilder = mock(ExistsBuilder.class); when(client.checkExists()).thenReturn(existsBuilder); when(existsBuilder.forPath(HAConfiguration.ATLAS_SERVER_ZK_ROOT_DEFAULT+SetupSteps.SETUP_IN_PROGRESS_NODE)). thenReturn(stat); return pair; }
@Test public void testSharedPathIsCreatedIfNotExists() throws Exception { when(configuration.getString(HAConfiguration.ATLAS_SERVER_ADDRESS_PREFIX +"id1")).thenReturn(HOST_PORT); when(configuration.getString( HAConfiguration.ATLAS_SERVER_HA_ZK_ROOT_KEY, HAConfiguration.ATLAS_SERVER_ZK_ROOT_DEFAULT)). thenReturn(HAConfiguration.ATLAS_SERVER_ZK_ROOT_DEFAULT); when(curatorFactory.clientInstance()).thenReturn(curatorFramework); ExistsBuilder existsBuilder = mock(ExistsBuilder.class); when(curatorFramework.checkExists()).thenReturn(existsBuilder); when(existsBuilder.forPath(getPath())).thenReturn(null); CreateBuilder createBuilder = mock(CreateBuilder.class); when(curatorFramework.create()).thenReturn(createBuilder); when(createBuilder.withMode(CreateMode.EPHEMERAL)).thenReturn(createBuilder); when(createBuilder.withACL(ZooDefs.Ids.OPEN_ACL_UNSAFE)).thenReturn(createBuilder); SetDataBuilder setDataBuilder = mock(SetDataBuilder.class); when(curatorFramework.setData()).thenReturn(setDataBuilder); ActiveInstanceState activeInstanceState = new ActiveInstanceState(configuration, curatorFactory); activeInstanceState.update("id1"); verify(createBuilder).forPath(getPath()); }
@Before public void before() { existsBuilder = mock(ExistsBuilder.class); final CuratorFramework curatorFramework = mock(CuratorFramework.class); when(curatorFramework.checkExists()).thenReturn(existsBuilder); final ZooKeeperHolder zkHolder = mock(ZooKeeperHolder.class); when(zkHolder.get()).thenReturn(curatorFramework); featureToggleService = new FeatureToggleServiceZk(zkHolder); }
/** * Test nodeExists method * @throws Exception */ @Test public void testExistNode() throws Exception { CuratorStateManager spyStateManager = spy(new CuratorStateManager()); CuratorFramework mockClient = mock(CuratorFramework.class); ExistsBuilder mockExistsBuilder = mock(ExistsBuilder.class); final String correctPath = "/correct/path"; final String wrongPath = "/wrong/path"; doReturn(mockClient) .when(spyStateManager).getCuratorClient(); doReturn(true) .when(mockClient).blockUntilConnected(anyInt(), any(TimeUnit.class)); doReturn(mockExistsBuilder) .when(mockClient).checkExists(); doReturn(new Stat()) .when(mockExistsBuilder).forPath(correctPath); doReturn(null) .when(mockExistsBuilder).forPath(wrongPath); spyStateManager.initialize(config); // Verify the result is true when path is correct ListenableFuture<Boolean> result1 = spyStateManager.nodeExists(correctPath); verify(mockExistsBuilder).forPath(correctPath); assertTrue(result1.get()); // Verify the result is false when path is wrong ListenableFuture<Boolean> result2 = spyStateManager.nodeExists(wrongPath); verify(mockExistsBuilder).forPath(wrongPath); assertFalse(result2.get()); }
public boolean sync(String projectName) { if (uninitialized()) return false; // (local + non_local) * (remote + non_monitor) if (projectName == null) { _log.error("Sync failed! Cause projectName cannot be null!"); return false; } ExistsBuilder existsBuilder = curatorFramework.checkExists(); Stat stat; try { stat = existsBuilder.forPath(ZNODE_PREFIX.concat(projectName)); } catch (Exception e) { _log.error("Sync failed! Cause: {}", e.getMessage()); return false; } Prop localProp = PROJECT_PROPERTIES.get(projectName); boolean isRemote, isLocal; if (stat == null) { _log.debug("Configuration about project[{}] is not on remote.", projectName); isRemote = false; } else { _log.debug("Configuration about project[{}] is on remote.", projectName); isRemote = true; } if (localProp == null) { _log.debug("Configuration about project[{}] is not on local.", projectName); isLocal = false; } else { _log.debug("Configuration about project[{}] is on local.", projectName); isLocal = true; } boolean isSynced = internalSync(projectName, localProp, isRemote, isLocal); if (isSynced) _log.debug("Sync success!"); return isSynced; }
@Test public void testStop() throws Exception { Stat stat = new Stat(); String path = "/services/myservice/nodes/foo:1234"; CuratorFramework framework = mockFramework(); ExistsBuilder existsBuilder = mock(ExistsBuilder.class); when(existsBuilder.forPath(path)).thenReturn(stat); when(framework.checkExists()).thenReturn(existsBuilder); DeleteBuilder deleteBuilder = mock(DeleteBuilder.class); when(framework.delete()).thenReturn(deleteBuilder); DiscoService manager = new DiscoService(framework, "myservice"); manager.node = path; manager.stop(); verify(deleteBuilder).forPath(path); }
@Override public ExistsBuilder checkExists() { return new MockExistsBuilder(); }
@Override public ExistsBuilder checkExists() { return namespaceDelegate().checkExists(); }