@Test(groups = "unit") public void should_delegate_to_wrapped_policy_when_predicate_is_true() { Predicate<Host> predicate = Predicates.alwaysTrue(); HostFilterPolicy policy = new HostFilterPolicy(wrappedPolicy, predicate); policy.onAdd(host1); verify(wrappedPolicy).onAdd(host1); policy.onDown(host1); verify(wrappedPolicy).onDown(host1); policy.onUp(host1); verify(wrappedPolicy).onUp(host1); policy.onRemove(host1); verify(wrappedPolicy).onRemove(host1); assertThat(policy.distance(host1)).isSameAs(HostDistance.LOCAL); policy.close(); verify(wrappedPolicy).close(); }
/** * Create a new policy that wraps the provided child policy but only "allows" hosts whose DC * belongs to the provided list. * * @param childPolicy the wrapped policy. * @param dcs the DCs. * @return the policy. */ public static HostFilterPolicy fromDCWhiteList( LoadBalancingPolicy childPolicy, Iterable<String> dcs) { return new HostFilterPolicy(childPolicy, hostDCPredicate(dcs, true)); }
@Test(groups = "unit") public void should_ignore_DCs_in_black_list() { when(host1.getDatacenter()).thenReturn("dc1"); when(host2.getDatacenter()).thenReturn("dc2"); when(host3.getDatacenter()).thenReturn(null); HostFilterPolicy policy = HostFilterPolicy.fromDCBlackList(wrappedPolicy, Lists.newArrayList("dc2")); assertThat(policy.distance(host1)).isSameAs(HostDistance.LOCAL); assertThat(policy.distance(host2)).isSameAs(HostDistance.IGNORED); assertThat(policy.distance(host3)).isSameAs(HostDistance.LOCAL); }
@Test(groups = "unit", expectedExceptions = IllegalArgumentException.class) public void should_throw_if_predicate_filters_out_all_init_hosts() { Predicate<Host> predicate = Predicates.alwaysFalse(); HostFilterPolicy policy = new HostFilterPolicy(wrappedPolicy, predicate); policy.init(cluster, Lists.newArrayList(host1, host2, host3)); }
@Test(groups = "unit") public void should_return_query_plan_of_wrapped_policy() { when(wrappedPolicy.newQueryPlan(any(String.class), any(Statement.class))) .thenReturn(Iterators.forArray(host1, host2, host3)); HostFilterPolicy policy = new HostFilterPolicy(wrappedPolicy, null); assertThat(policy.newQueryPlan("keyspace", mock(Statement.class))) .containsExactly(host1, host2, host3); }
loadBalancingPolicy = new HostFilterPolicy(loadBalancingPolicy, predicate);
@Test(groups = "unit") public void should_ignore_DCs_not_in_white_list_and_not_null() { when(host1.getDatacenter()).thenReturn("dc1"); when(host2.getDatacenter()).thenReturn("dc2"); when(host3.getDatacenter()).thenReturn(null); HostFilterPolicy policy = HostFilterPolicy.fromDCWhiteList(wrappedPolicy, Lists.newArrayList("dc1")); assertThat(policy.distance(host1)).isSameAs(HostDistance.LOCAL); assertThat(policy.distance(host2)).isSameAs(HostDistance.IGNORED); assertThat(policy.distance(host3)).isSameAs(HostDistance.LOCAL); } }
HostFilterPolicy.fromDCBlackList( DCAwareRoundRobinPolicy.builder().withUsedHostsPerRemoteDc(2).build(), Lists.newArrayList(datacenter(2)));
HostFilterPolicy.fromDCWhiteList( DCAwareRoundRobinPolicy.builder().withUsedHostsPerRemoteDc(2).build(), Lists.newArrayList(datacenter(1), datacenter(2)));
@Test(groups = "unit") public void should_filter_init_hosts_with_predicate() { Predicate<Host> predicate = Predicates.in(Lists.newArrayList(host1, host2)); HostFilterPolicy policy = new HostFilterPolicy(wrappedPolicy, predicate); policy.init(cluster, Lists.newArrayList(host1, host2, host3)); verify(wrappedPolicy).init(eq(cluster), hostsCaptor.capture()); assertThat(hostsCaptor.getValue()).containsOnly(host1, host2); }
@Test(groups = "unit") public void should_return_query_plan_of_wrapped_policy() { when(wrappedPolicy.newQueryPlan(any(String.class), any(Statement.class))) .thenReturn(Iterators.forArray(host1, host2, host3)); HostFilterPolicy policy = new HostFilterPolicy(wrappedPolicy, null); assertThat(policy.newQueryPlan("keyspace", mock(Statement.class))) .containsExactly(host1, host2, host3); }
@Test(groups = "unit") public void should_ignore_DCs_not_in_white_list_and_not_null() { when(host1.getDatacenter()).thenReturn("dc1"); when(host2.getDatacenter()).thenReturn("dc2"); when(host3.getDatacenter()).thenReturn(null); HostFilterPolicy policy = HostFilterPolicy.fromDCWhiteList(wrappedPolicy, Lists.newArrayList("dc1")); assertThat(policy.distance(host1)).isSameAs(HostDistance.LOCAL); assertThat(policy.distance(host2)).isSameAs(HostDistance.IGNORED); assertThat(policy.distance(host3)).isSameAs(HostDistance.LOCAL); } }
HostFilterPolicy.fromDCBlackList( DCAwareRoundRobinPolicy.builder().withUsedHostsPerRemoteDc(2).build(), Lists.newArrayList(datacenter(2)));
HostFilterPolicy.fromDCWhiteList( DCAwareRoundRobinPolicy.builder().withUsedHostsPerRemoteDc(2).build(), Lists.newArrayList(datacenter(1), datacenter(2)));
@Test(groups = "unit") public void should_not_delegate_to_wrapped_policy_when_predicate_is_false() { Predicate<Host> predicate = Predicates.alwaysFalse(); HostFilterPolicy policy = new HostFilterPolicy(wrappedPolicy, predicate); policy.onAdd(host1); verify(wrappedPolicy, never()).onAdd(host1); policy.onDown(host1); verify(wrappedPolicy, never()).onDown(host1); policy.onUp(host1); verify(wrappedPolicy, never()).onUp(host1); policy.onRemove(host1); verify(wrappedPolicy, never()).onRemove(host1); assertThat(policy.distance(host1)).isSameAs(HostDistance.IGNORED); }
/** * Create a new policy that wraps the provided child policy but only "forbids" hosts whose DC * belongs to the provided list. * * @param childPolicy the wrapped policy. * @param dcs the DCs. * @return the policy. */ public static HostFilterPolicy fromDCBlackList( LoadBalancingPolicy childPolicy, Iterable<String> dcs) { return new HostFilterPolicy(childPolicy, Predicates.not(hostDCPredicate(dcs, false))); }
@Test(groups = "unit", expectedExceptions = IllegalArgumentException.class) public void should_throw_if_predicate_filters_out_all_init_hosts() { Predicate<Host> predicate = Predicates.alwaysFalse(); HostFilterPolicy policy = new HostFilterPolicy(wrappedPolicy, predicate); policy.init(cluster, Lists.newArrayList(host1, host2, host3)); }
@Test(groups = "unit") public void should_ignore_DCs_in_black_list() { when(host1.getDatacenter()).thenReturn("dc1"); when(host2.getDatacenter()).thenReturn("dc2"); when(host3.getDatacenter()).thenReturn(null); HostFilterPolicy policy = HostFilterPolicy.fromDCBlackList(wrappedPolicy, Lists.newArrayList("dc2")); assertThat(policy.distance(host1)).isSameAs(HostDistance.LOCAL); assertThat(policy.distance(host2)).isSameAs(HostDistance.IGNORED); assertThat(policy.distance(host3)).isSameAs(HostDistance.LOCAL); }
@Test(groups = "unit") public void should_delegate_to_wrapped_policy_when_predicate_is_true() { Predicate<Host> predicate = Predicates.alwaysTrue(); HostFilterPolicy policy = new HostFilterPolicy(wrappedPolicy, predicate); policy.onAdd(host1); verify(wrappedPolicy).onAdd(host1); policy.onDown(host1); verify(wrappedPolicy).onDown(host1); policy.onUp(host1); verify(wrappedPolicy).onUp(host1); policy.onRemove(host1); verify(wrappedPolicy).onRemove(host1); assertThat(policy.distance(host1)).isSameAs(HostDistance.LOCAL); policy.close(); verify(wrappedPolicy).close(); }
/** * Create a new policy that wraps the provided child policy but only "allows" hosts * whose DC belongs to the provided list. * * @param childPolicy the wrapped policy. * @param dcs the DCs. * @return the policy. */ public static HostFilterPolicy fromDCWhiteList(LoadBalancingPolicy childPolicy, Iterable<String> dcs) { return new HostFilterPolicy(childPolicy, hostDCPredicate(dcs, true)); }