All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.netflix.eureka2.testkit.data.builder.SampleInstanceInfo Maven / Gradle / Ivy

The newest version!
package com.netflix.eureka2.testkit.data.builder;

import java.util.HashSet;
import java.util.Iterator;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger;

import com.netflix.eureka2.registry.DataCenterInfo;
import com.netflix.eureka2.registry.InstanceInfo;
import com.netflix.eureka2.registry.InstanceInfo.Builder;
import com.netflix.eureka2.registry.InstanceInfo.Status;
import com.netflix.eureka2.registry.NetworkAddress;
import com.netflix.eureka2.registry.ServicePort;
import com.netflix.eureka2.registry.datacenter.AwsDataCenterInfo;
import com.netflix.eureka2.utils.Sets;

/**
 * @author Tomasz Bak
 */
public enum SampleInstanceInfo {

    ZuulServer() {
        @Override
        public Builder builder() {
            return templateFor(this.name());
        }
    },

    DiscoveryServer() {
        @Override
        public Builder builder() {
            return templateFor(this.name());
        }
    },

    CliServer() {
        @Override
        public Builder builder() {
            return templateFor(this.name());
        }
    },
    EurekaWriteServer() {
        @Override
        public Builder builder() {
            return eurekaWriteTemplate(1);
        }
    },
    EurekaReadServer() {
        @Override
        public Builder builder() {
            Builder builder = templateFor(this.name());
            builder.withPorts(Sets.asSet(
                    SampleServicePort.EurekaDiscoveryPort.build()
            ));
            return builder;
        }
    };

    public abstract Builder builder();

    public InstanceInfo build() {
        return builder().build();
    }

    protected Builder templateFor(String name) {
        HashSet healthCheckUrls = new HashSet<>();
        healthCheckUrls.add("http://eureka/healthCheck/" + name + "1");
        healthCheckUrls.add("http://eureka/healthCheck/" + name + "2");
        HashSet ports = new HashSet<>();
        ports.add(80);
        ports.add(8080);
        HashSet securePorts = new HashSet<>();
        securePorts.add(443);
        securePorts.add(8443);
        return new Builder()
                .withId("id#" + name + "_" + UUID.randomUUID().toString())
                .withApp("app#" + name)
                .withAppGroup("group#" + name)
                .withAsg("asg#" + name)
                .withHealthCheckUrls(healthCheckUrls)
                .withHomePageUrl("http://eureka/home/" + name)
                .withPorts(Sets.asSet(new ServicePort(7200, false), new ServicePort(7210, true)))
                .withSecureVipAddress("vipSecure#" + name)
                .withStatus(Status.UP)
                .withStatusPageUrl("http://eureka/status/" + name)
                .withVipAddress("vip#" + name)
                .withMetaData("optionA", "valueA")
                .withMetaData("optionB", "valueB")
                .withDataCenterInfo(SampleAwsDataCenterInfo.UsEast1a.build());
    }

    protected Builder eurekaWriteTemplate(int idx) {
        Builder builder = templateFor(this.name() + '#' + idx);
        builder.withPorts(Sets.asSet(
                SampleServicePort.EurekaRegistrationPort.build(),
                SampleServicePort.EurekaDiscoveryPort.build(),
                SampleServicePort.EurekaReplicationPort.build()
        ));

        return builder;
    }

    public static Iterator collectionOf(final String baseName, final InstanceInfo template) {
        final AwsDataCenterInfo templateDataCenter = (AwsDataCenterInfo) template.getDataCenterInfo();
        final AtomicInteger idx = new AtomicInteger();
        final Iterator publicAddresses = SampleNetworkAddress.collectionOfIPv4("20.20", baseName + ".public.net", null);
        final Iterator privateAddresses = SampleNetworkAddress.collectionOfIPv4("192.168", baseName + ".private.internal", null);
        return new Iterator() {
            @Override
            public boolean hasNext() {
                return true;
            }

            @Override
            public InstanceInfo next() {
                int cidx = idx.incrementAndGet();
                String name = baseName + '_' + cidx;
                NetworkAddress publicAddress = publicAddresses.next();
                NetworkAddress privateAddress = privateAddresses.next();
                DataCenterInfo dataCenter = new AwsDataCenterInfo.Builder()
                        .withAwsDataCenter(templateDataCenter)
                        .withPublicHostName(publicAddress.getHostName())
                        .withPublicIPv4(publicAddress.getIpAddress())
                        .withPrivateHostName(privateAddress.getHostName())
                        .withPrivateIPv4(privateAddress.getIpAddress())
                        .build();
                return new InstanceInfo.Builder()
                        .withId("id#" + name)
                        .withApp("app#" + baseName)
                        .withAppGroup("group#" + baseName)
                        .withAsg("asg#" + baseName)
                        .withHealthCheckUrls(template.getHealthCheckUrls())
                        .withHomePageUrl(template.getHomePageUrl())
                        .withPorts(template.getPorts())
                        .withSecureVipAddress("vipSecure#" + name)
                        .withStatus(template.getStatus())
                        .withStatusPageUrl(template.getStatusPageUrl())
                        .withVipAddress("vip#" + baseName)
                        .withMetaData(template.getMetaData())
                        .withDataCenterInfo(dataCenter)
                        .build();
            }

            @Override
            public void remove() {
                throw new IllegalStateException("Operation not supported");
            }
        };
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy