com.netflix.eureka2.testkit.embedded.cluster.EmbeddedEurekaCluster Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eureka-testkit Show documentation
Show all versions of eureka-testkit Show documentation
eureka-testkit developed by Netflix
The newest version!
package com.netflix.eureka2.testkit.embedded.cluster;
import java.util.ArrayList;
import java.util.List;
import com.netflix.eureka2.interests.ChangeNotification;
import com.netflix.eureka2.interests.ChangeNotification.Kind;
import com.netflix.eureka2.registry.InstanceInfo;
import com.netflix.eureka2.server.registry.EurekaServerRegistry;
import com.netflix.eureka2.testkit.embedded.server.EmbeddedEurekaServer;
import rx.Observable;
import rx.subjects.PublishSubject;
/**
* @author Tomasz Bak
*/
public abstract class EmbeddedEurekaCluster {
private final String clusterVip;
protected final List servers = new ArrayList<>();
private final List> clusterAddresses = new ArrayList<>();
private final PublishSubject> clusterAddressUpdates = PublishSubject.create();
protected EmbeddedEurekaCluster(String clusterVip) {
this.clusterVip = clusterVip;
}
public int scaleUpByOne(S newServer, A newAddress) {
servers.add(newServer);
addServerAddress(newAddress);
return servers.size() - 1;
}
public abstract int scaleUpByOne();
public int scaleUpBy(int count) {
for (int i = 0; i < count; i++) {
scaleUpByOne();
}
return servers.size() - 1;
}
public void scaleDownByOne() {
scaleDownByOne(servers.size() - 1);
}
public void scaleDownByOne(int idx) {
removeServerAddress(idx);
S server = servers.remove(idx);
server.shutdown();
}
public void scaleDownBy(int count) {
for (int i = 0; i < count; i++) {
scaleDownByOne();
}
}
public void startUp(int idx) {
S server = servers.get(idx);
if (server != null) {
server.start();
}
}
public void bringDown(int idx) {
S server = servers.get(idx);
if (server != null) {
server.shutdown();
}
}
public void shutdown() {
for (S server : servers) {
server.shutdown();
}
}
public String getVip() {
return clusterVip;
}
public S getServer(int idx) {
return servers.get(idx);
}
public EurekaServerRegistry getEurekaServerRegistry(int idx) {
return servers.get(idx).getEurekaServerRegistry();
}
public abstract R clusterReport();
protected Observable> clusterChangeObservable() {
return Observable.from(clusterAddresses).concatWith(clusterAddressUpdates);
}
private void addServerAddress(A serverAddress) {
clusterAddresses.add(new ChangeNotification(Kind.Add, serverAddress));
clusterAddressUpdates.onNext(new ChangeNotification(Kind.Add, serverAddress));
}
private void removeServerAddress(int idx) {
ChangeNotification addChange = clusterAddresses.remove(idx);
clusterAddressUpdates.onNext(new ChangeNotification(Kind.Delete, addChange.getData()));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy