package com.linecorp.armeria.client.endpoint;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
import com.linecorp.armeria.client.Endpoint;
public class OrElseEndpointGroupTest {
@Test
public void updateFirstEndpoints() {
DynamicEndpointGroup firstEndpointGroup = new DynamicEndpointGroup();
DynamicEndpointGroup secondEndpointGroup = new DynamicEndpointGroup();
EndpointGroup endpointGroup = new OrElseEndpointGroup(firstEndpointGroup, secondEndpointGroup);
firstEndpointGroup.setEndpoints(ImmutableList.of(Endpoint.of("127.0.0.1", 1111),
Endpoint.of("127.0.0.1", 2222)));
assertThat(endpointGroup.endpoints()).isEqualTo(ImmutableList.of(Endpoint.of("127.0.0.1", 1111),
Endpoint.of("127.0.0.1", 2222)));
firstEndpointGroup.addEndpoint(Endpoint.of("127.0.0.1", 3333));
assertThat(endpointGroup.endpoints()).isEqualTo(ImmutableList.of(Endpoint.of("127.0.0.1", 1111),
Endpoint.of("127.0.0.1", 2222),
Endpoint.of("127.0.0.1", 3333)));
firstEndpointGroup.removeEndpoint(Endpoint.of("127.0.0.1", 2222));
assertThat(endpointGroup.endpoints()).isEqualTo(ImmutableList.of(Endpoint.of("127.0.0.1", 1111),
Endpoint.of("127.0.0.1", 3333)));
}
@Test
public void updateSecondEndpoints() {
DynamicEndpointGroup firstEndpointGroup = new DynamicEndpointGroup();
DynamicEndpointGroup secondEndpointGroup = new DynamicEndpointGroup();
EndpointGroup endpointGroup = new OrElseEndpointGroup(firstEndpointGroup, secondEndpointGroup);
secondEndpointGroup.setEndpoints(ImmutableList.of(Endpoint.of("127.0.0.1", 1111),
Endpoint.of("127.0.0.1", 2222)));
secondEndpointGroup.addEndpoint(Endpoint.of("127.0.0.1", 3333));
assertThat(endpointGroup.endpoints()).isEqualTo(ImmutableList.of(Endpoint.of("127.0.0.1", 1111),
Endpoint.of("127.0.0.1", 2222),
Endpoint.of("127.0.0.1", 3333)));
secondEndpointGroup.removeEndpoint(Endpoint.of("127.0.0.1", 2222));
assertThat(endpointGroup.endpoints()).isEqualTo(ImmutableList.of(Endpoint.of("127.0.0.1", 1111),
Endpoint.of("127.0.0.1", 3333)));
firstEndpointGroup.addEndpoint(Endpoint.of("127.0.0.1", 4444));
assertThat(endpointGroup.endpoints()).isEqualTo(ImmutableList.of(Endpoint.of("127.0.0.1", 4444)));
// Use firstEndpointGroup's endpoint list even if secondEndpointGroup has change.
secondEndpointGroup.addEndpoint(Endpoint.of("127.0.0.1", 5555));
assertThat(endpointGroup.endpoints()).isEqualTo(ImmutableList.of(Endpoint.of("127.0.0.1", 4444)));
// Fallback to secondEndpointGroup if firstEndpointGroup has no endpoints.
firstEndpointGroup.removeEndpoint(Endpoint.of("127.0.0.1", 4444));
assertThat(endpointGroup.endpoints()).isEqualTo(ImmutableList.of(Endpoint.of("127.0.0.1", 1111),
Endpoint.of("127.0.0.1", 3333),
Endpoint.of("127.0.0.1", 5555)));
}
}