Test: make sure that tests are not affected by changing in address resolution settings

This commit is contained in:
Igor Motov 2015-04-28 12:18:43 -04:00
parent 38be1e8a1a
commit bac135261c
2 changed files with 34 additions and 23 deletions

View File

@ -38,6 +38,10 @@ public class InetSocketTransportAddress implements TransportAddress {
InetSocketTransportAddress.resolveAddress = resolveAddress;
}
public static boolean getResolveAddress() {
return resolveAddress;
}
private InetSocketAddress address;
InetSocketTransportAddress() {

View File

@ -1141,34 +1141,41 @@ public abstract class ElasticsearchIntegrationTest extends ElasticsearchTestCase
*/
protected void ensureClusterStateConsistency() throws IOException {
if (cluster() != null) {
ClusterState masterClusterState = client().admin().cluster().prepareState().all().get().getState();
byte[] masterClusterStateBytes = ClusterState.Builder.toBytes(masterClusterState);
// remove local node reference
masterClusterState = ClusterState.Builder.fromBytes(masterClusterStateBytes, null);
Map<String, Object> masterStateMap = convertToMap(masterClusterState);
int masterClusterStateSize = ClusterState.Builder.toBytes(masterClusterState).length;
for (Client client : cluster()) {
ClusterState localClusterState = client.admin().cluster().prepareState().all().setLocal(true).get().getState();
byte[] localClusterStateBytes = ClusterState.Builder.toBytes(localClusterState);
boolean getResolvedAddress = InetSocketTransportAddress.getResolveAddress();
try {
InetSocketTransportAddress.setResolveAddress(false);
ClusterState masterClusterState = client().admin().cluster().prepareState().all().get().getState();
byte[] masterClusterStateBytes = ClusterState.Builder.toBytes(masterClusterState);
// remove local node reference
localClusterState = ClusterState.Builder.fromBytes(localClusterStateBytes, null);
Map<String, Object> localStateMap = convertToMap(localClusterState);
int localClusterStateSize = localClusterStateBytes.length;
if (masterClusterState.version() == localClusterState.version()) {
try {
assertThat(masterClusterState.uuid(), equalTo(localClusterState.uuid()));
// We cannot compare serialization bytes since serialization order of maps is not guaranteed
// but we can compare serialization sizes - they should be the same
assertThat(masterClusterStateSize, equalTo(localClusterStateSize));
// Compare JSON serialization
assertThat(mapsEqualIgnoringArrayOrder(masterStateMap, localStateMap), equalTo(true));
} catch (AssertionError error) {
logger.error("Cluster state from master:\n{}\nLocal cluster state:\n{}", masterClusterState.toString(), localClusterState.toString());
throw error;
masterClusterState = ClusterState.Builder.fromBytes(masterClusterStateBytes, null);
Map<String, Object> masterStateMap = convertToMap(masterClusterState);
int masterClusterStateSize = ClusterState.Builder.toBytes(masterClusterState).length;
for (Client client : cluster()) {
ClusterState localClusterState = client.admin().cluster().prepareState().all().setLocal(true).get().getState();
byte[] localClusterStateBytes = ClusterState.Builder.toBytes(localClusterState);
// remove local node reference
localClusterState = ClusterState.Builder.fromBytes(localClusterStateBytes, null);
Map<String, Object> localStateMap = convertToMap(localClusterState);
int localClusterStateSize = localClusterStateBytes.length;
if (masterClusterState.version() == localClusterState.version()) {
try {
assertThat(masterClusterState.uuid(), equalTo(localClusterState.uuid()));
// We cannot compare serialization bytes since serialization order of maps is not guaranteed
// but we can compare serialization sizes - they should be the same
assertThat(masterClusterStateSize, equalTo(localClusterStateSize));
// Compare JSON serialization
assertThat(mapsEqualIgnoringArrayOrder(masterStateMap, localStateMap), equalTo(true));
} catch (AssertionError error) {
logger.error("Cluster state from master:\n{}\nLocal cluster state:\n{}", masterClusterState.toString(), localClusterState.toString());
throw error;
}
}
}
} finally {
InetSocketTransportAddress.setResolveAddress(getResolvedAddress);
}
}
}
/**