package io.airlift.airship.coordinator;
import com.google.common.base.Predicate;
import io.airlift.airship.coordinator.CoordinatorFilterBuilder.HostPredicate;
import io.airlift.airship.coordinator.CoordinatorFilterBuilder.MachinePredicate;
import io.airlift.airship.coordinator.CoordinatorFilterBuilder.StatePredicate;
import io.airlift.airship.coordinator.CoordinatorFilterBuilder.UuidPredicate;
import io.airlift.airship.shared.CoordinatorStatus;
import io.airlift.airship.shared.MockUriInfo;
import org.testng.annotations.Test;
import java.net.URI;
import static io.airlift.airship.shared.CoordinatorLifecycleState.OFFLINE;
import static io.airlift.airship.shared.CoordinatorLifecycleState.ONLINE;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
public class TestCoordinatorFilterBuilder
{
CoordinatorStatus status = new CoordinatorStatus("coordinator-id",
ONLINE,
"coordinator-instance",
URI.create("internal://10.0.0.1"),
URI.create("external://localhost"),
"/unknown/location",
"instance.type");
private Predicate<CoordinatorStatus> buildFilter(String key, String value)
{
return CoordinatorFilterBuilder.build(MockUriInfo.from("fake://localhost?" + key + "=" + value));
}
@Test
public void testAll()
{
assertTrue(CoordinatorFilterBuilder.build(MockUriInfo.from("fake://localhost?all&state=online")).apply(status));
assertTrue(CoordinatorFilterBuilder.build(MockUriInfo.from("fake://localhost?all&state=offline")).apply(status));
assertTrue(CoordinatorFilterBuilder.build(MockUriInfo.from("fake://localhost?all&host=host")).apply(status));
}
@Test
public void testUuidPredicate()
{
assertTrue(new UuidPredicate("coordinator-id").apply(status));
assertTrue(buildFilter("uuid", "coordinator-id").apply(status));
assertFalse(new UuidPredicate("unknown").apply(status));
assertFalse(buildFilter("uuid", "unknown").apply(status));
assertFalse(buildFilter("!uuid", "coordinator-id").apply(status));
assertTrue(buildFilter("!uuid", "unknown").apply(status));
}
@Test
public void testStateSpecPredicate()
{
assertTrue(new StatePredicate(ONLINE).apply(status));
assertTrue(buildFilter("state", "online").apply(status));
assertFalse(new StatePredicate(OFFLINE).apply(status));
assertFalse(buildFilter("state", "offline").apply(status));
assertFalse(buildFilter("!state", "online").apply(status));
assertTrue(buildFilter("!state", "offline").apply(status));
}
@Test
public void testHostSpecPredicate()
{
assertTrue(new HostPredicate("localhost").apply(status));
assertTrue(buildFilter("host", "localhost").apply(status));
assertTrue(new HostPredicate("LOCALHOST").apply(status));
assertTrue(buildFilter("host", "LOCALHOST").apply(status));
assertTrue(new HostPredicate("LocalHost").apply(status));
assertTrue(buildFilter("host", "LocalHost").apply(status));
assertTrue(new HostPredicate("local*").apply(status));
assertTrue(buildFilter("host", "local*").apply(status));
assertTrue(new HostPredicate("LocAL*").apply(status));
assertTrue(buildFilter("host", "LocAL*").apply(status));
assertFalse(new HostPredicate("foo").apply(status));
assertFalse(buildFilter("host", "foo").apply(status));
assertTrue(new HostPredicate("127.0.0.1").apply(status));
assertTrue(buildFilter("host", "127.0.0.1").apply(status));
assertTrue(new HostPredicate("10.0.0.1").apply(status));
assertTrue(buildFilter("host", "10.0.0.1").apply(status));
assertFalse(new HostPredicate("10.1.2.3").apply(status));
assertFalse(buildFilter("host", "10.1.2.3").apply(status));
assertFalse(buildFilter("!host", "localhost").apply(status));
assertFalse(buildFilter("!host", "LOCALHOST").apply(status));
assertFalse(buildFilter("!host", "LocalHost").apply(status));
assertFalse(buildFilter("!host", "local*").apply(status));
assertFalse(buildFilter("!host", "LocAL*").apply(status));
assertTrue(buildFilter("!host", "foo").apply(status));
assertFalse(buildFilter("!host", "127.0.0.1").apply(status));
assertFalse(buildFilter("!host", "10.0.0.1").apply(status));
assertTrue(buildFilter("!host", "10.1.2.3").apply(status));
}
@Test
public void testMachineSpecPredicate()
{
assertTrue(new MachinePredicate("coordinator-instance").apply(status));
assertTrue(buildFilter("machine", "coordinator-instance").apply(status));
assertTrue(new MachinePredicate("coo*").apply(status));
assertTrue(buildFilter("machine", "coo*").apply(status));
assertFalse(new MachinePredicate("COORDINATOR-INSTANCE").apply(status));
assertFalse(buildFilter("machine", "COORDINATOR-INSTANCE").apply(status));
assertFalse(new MachinePredicate("COO*").apply(status));
assertFalse(buildFilter("machine", "COO*").apply(status));
assertFalse(buildFilter("!machine", "coordinator-instance").apply(status));
assertFalse(buildFilter("!machine", "coo*").apply(status));
assertTrue(buildFilter("!machine", "COORDINATOR-INSTANCE").apply(status));
assertTrue(buildFilter("!machine", "COO*").apply(status));
}
}