@Test public void shouldCreateSetupInProgressNode() throws Exception { Set<SetupStep> steps = new LinkedHashSet<>(); SetupStep setupStep1 = mock(SetupStep.class); steps.add(setupStep1); when(configuration. getString(HAConfiguration.ATLAS_SERVER_HA_ZK_ROOT_KEY, HAConfiguration.ATLAS_SERVER_ZK_ROOT_DEFAULT)). thenReturn(HAConfiguration.ATLAS_SERVER_ZK_ROOT_DEFAULT); when(configuration.getString(HAConfiguration.HA_ZOOKEEPER_ACL)).thenReturn("digest:user:pwd"); List<ACL> aclList = Arrays.asList(new ACL(ZooDefs.Perms.ALL, new Id("digest", "user:pwd"))); setupServerIdSelectionMocks(); CreateBuilder createBuilder = setupSetupInProgressPathMocks(aclList).getLeft(); InterProcessMutex lock = mock(InterProcessMutex.class); when(curatorFactory.lockInstance(HAConfiguration.ATLAS_SERVER_ZK_ROOT_DEFAULT)). thenReturn(lock); SetupSteps setupSteps = new SetupSteps(steps, curatorFactory, configuration); setupSteps.runSetup(); verify(createBuilder).withACL(aclList); verify(createBuilder).forPath(HAConfiguration.ATLAS_SERVER_ZK_ROOT_DEFAULT+SetupSteps.SETUP_IN_PROGRESS_NODE, "id2".getBytes(Charsets.UTF_8)); }
@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)); }
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()); }
public void writeBytes(String path, byte[] bytes) { try { if (_curator.checkExists().forPath(path) == null) { CreateBuilder builder = _curator.create(); ProtectACLCreateModePathAndBytesable<String> createAble = (ProtectACLCreateModePathAndBytesable<String>) builder .creatingParentsIfNeeded(); createAble.withMode(CreateMode.PERSISTENT).forPath(path, bytes); } else { _curator.setData().forPath(path, bytes); } } catch (Exception e) { throw new RuntimeException(e); } }
@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()); }
/** * test createNode method * @throws Exception */ @Test public void testCreateNode() throws Exception { CuratorStateManager spyStateManager = spy(new CuratorStateManager()); CuratorFramework mockClient = mock(CuratorFramework.class); CreateBuilder mockCreateBuilder = mock(CreateBuilder.class); // Mockito doesn't support mock type-parametrized class, thus suppress the warning @SuppressWarnings("rawtypes") ACLBackgroundPathAndBytesable mockPath = spy(ACLBackgroundPathAndBytesable.class); final byte[] data = new byte[10]; doReturn(mockClient) .when(spyStateManager).getCuratorClient(); doReturn(true) .when(mockClient).blockUntilConnected(anyInt(), any(TimeUnit.class)); doReturn(mockCreateBuilder) .when(mockClient).create(); doReturn(mockPath) .when(mockCreateBuilder).withMode(any(CreateMode.class)); spyStateManager.initialize(config); // Verify the node is created successfully ListenableFuture<Boolean> result = spyStateManager.createNode(PATH, data, false); verify(mockCreateBuilder).withMode(any(CreateMode.class)); verify(mockPath).forPath(PATH, data); assertTrue(result.get()); }
@Override public CreateBuilder create() { return new MockCreateBuilder(); }
/** * Test that errors in the {@link LeaderElectionService} are correctly forwarded to the * {@link LeaderContender}. */ @Test public void testExceptionForwarding() throws Exception { ZooKeeperLeaderElectionService leaderElectionService = null; ZooKeeperLeaderRetrievalService leaderRetrievalService = null; TestingListener listener = new TestingListener(); TestingContender testingContender; CuratorFramework client; final CreateBuilder mockCreateBuilder = mock(CreateBuilder.class, Mockito.RETURNS_DEEP_STUBS); final Exception testException = new Exception("Test exception"); try { client = spy(ZooKeeperUtils.startCuratorFramework(configuration)); Answer<CreateBuilder> answer = new Answer<CreateBuilder>() { private int counter = 0; @Override public CreateBuilder answer(InvocationOnMock invocation) throws Throwable { counter++; // at first we have to create the leader latch, there it mustn't fail yet if (counter < 2) { return (CreateBuilder) invocation.callRealMethod(); } else { return mockCreateBuilder; } } }; doAnswer(answer).when(client).create(); when( mockCreateBuilder .creatingParentsIfNeeded() .withMode(Matchers.any(CreateMode.class)) .forPath(anyString(), any(byte[].class))).thenThrow(testException); leaderElectionService = new ZooKeeperLeaderElectionService(client, "/latch", "/leader"); leaderRetrievalService = ZooKeeperUtils.createLeaderRetrievalService(client, configuration); testingContender = new TestingContender(TEST_URL, leaderElectionService); leaderElectionService.start(testingContender); leaderRetrievalService.start(listener); testingContender.waitForError(timeout.toMillis()); assertNotNull(testingContender.getError()); assertEquals(testException, testingContender.getError().getCause()); } finally { if (leaderElectionService != null) { leaderElectionService.stop(); } if (leaderRetrievalService != null) { leaderRetrievalService.stop(); } } }
private Pair<CreateBuilder, DeleteBuilder> setupSetupInProgressPathMocks(List<ACL> acls) throws Exception { return setupSetupInProgressPathMocks(acls, null); }
@Override public CreateBuilder create() { return namespaceDelegate().create(); }