blob: 3f54cfeb2d2c62d594c2e3c20f08d8ac868dfce2 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.servicecomb.demo.multiServiceCenterClient;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.apache.servicecomb.demo.CategorizedTestCase;
import org.apache.servicecomb.demo.TestMgr;
import org.apache.servicecomb.foundation.common.event.SimpleEventBus;
import org.apache.servicecomb.http.client.auth.DefaultRequestAuthHeaderProvider;
import org.apache.servicecomb.http.client.common.HttpConfiguration.SSLProperties;
import org.apache.servicecomb.service.center.client.AddressManager;
import org.apache.servicecomb.service.center.client.DiscoveryEvents.InstanceChangedEvent;
import org.apache.servicecomb.service.center.client.RegistrationEvents;
import org.apache.servicecomb.service.center.client.RegistrationEvents.HeartBeatEvent;
import org.apache.servicecomb.service.center.client.RegistrationEvents.MicroserviceInstanceRegistrationEvent;
import org.apache.servicecomb.service.center.client.RegistrationEvents.MicroserviceRegistrationEvent;
import org.apache.servicecomb.service.center.client.RegistrationEvents.SchemaRegistrationEvent;
import org.apache.servicecomb.service.center.client.ServiceCenterClient;
import org.apache.servicecomb.service.center.client.ServiceCenterDiscovery;
import org.apache.servicecomb.service.center.client.ServiceCenterDiscovery.SubscriptionKey;
import org.apache.servicecomb.service.center.client.ServiceCenterRegistration;
import org.apache.servicecomb.service.center.client.model.Microservice;
import org.apache.servicecomb.service.center.client.model.MicroserviceInstance;
import org.apache.servicecomb.service.center.client.model.SchemaInfo;
import org.apache.servicecomb.service.center.client.model.ServiceCenterConfiguration;
import org.springframework.stereotype.Component;
import com.google.common.base.Charsets;
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
import com.google.common.hash.Hashing;
@Component
public class RegistryClientTest implements CategorizedTestCase {
private List<RegistrationEvents> events = new ArrayList<>();
private CountDownLatch registrationCounter = new CountDownLatch(1);
private CountDownLatch discoveryCounter = new CountDownLatch(1);
private List<MicroserviceInstance> instances;
// auto test only tests 'hasRegistered=false', can run this client many times to test 'hasRegistered=true'
private boolean hasRegistered = true;
@Override
public void testRestTransport() throws Exception {
AddressManager addressManager = new AddressManager("default", Arrays.asList("http://127.0.0.1:30100"), new EventBus());
SSLProperties sslProperties = new SSLProperties();
sslProperties.setEnabled(false);
ServiceCenterClient serviceCenterClient = new ServiceCenterClient(addressManager, sslProperties,
new DefaultRequestAuthHeaderProvider(), "default", null);
EventBus eventBus = new SimpleEventBus();
ServiceCenterConfiguration serviceCenterConfiguration = new ServiceCenterConfiguration();
ServiceCenterRegistration serviceCenterRegistration = new ServiceCenterRegistration(serviceCenterClient,
serviceCenterConfiguration, eventBus);
Microservice microservice = new Microservice();
microservice.setAppId("app_registry");
microservice.setServiceName("name_registry");
microservice.setVersion("1.0.0");
microservice.setEnvironment("development");
List<String> schemas = new ArrayList<>();
schemas.add("SchemaA");
schemas.add("SchemaB");
microservice.setSchemas(schemas);
MicroserviceInstance microserviceInstance = new MicroserviceInstance();
microserviceInstance.setHostName("host_registry");
List<String> endpoints = new ArrayList<>();
endpoints.add("rest://127.0.0.1/");
microserviceInstance.setEndpoints(endpoints);
List<SchemaInfo> schemaInfos = new ArrayList<>();
SchemaInfo schemaA = new SchemaInfo();
schemaA.setSchemaId("SchemaA");
schemaA.setSchema("schema contents in any format");
schemaA.setSummary(
Hashing.sha256().newHasher().putString("schema contents in any format".toString(), Charsets.UTF_8).hash()
.toString());
schemaInfos.add(schemaA);
SchemaInfo schemaB = new SchemaInfo();
schemaB.setSchemaId("SchemaA");
schemaB.setSchema("schema contents in any format");
schemaB.setSummary(
Hashing.sha256().newHasher().putString("schema contents in any format".toString(), Charsets.UTF_8).hash()
.toString());
schemaInfos.add(schemaB);
serviceCenterRegistration.setMicroservice(microservice);
serviceCenterRegistration.setMicroserviceInstance(microserviceInstance);
serviceCenterRegistration.setSchemaInfos(schemaInfos);
eventBus.register(this);
serviceCenterRegistration.startRegistration();
registrationCounter.await(30000, TimeUnit.MILLISECONDS);
if (hasRegistered) {
TestMgr.check(events.size() >= 3, true);
TestMgr.check(events.get(0).isSuccess(), true);
TestMgr.check(events.get(0) instanceof MicroserviceRegistrationEvent, true);
TestMgr.check(events.get(1).isSuccess(), true);
TestMgr.check(events.get(1) instanceof MicroserviceInstanceRegistrationEvent, true);
TestMgr.check(events.get(2).isSuccess(), true);
TestMgr.check(events.get(2) instanceof HeartBeatEvent, true);
} else {
TestMgr.check(events.size() >= 4, true);
TestMgr.check(events.get(0).isSuccess(), true);
TestMgr.check(events.get(0) instanceof MicroserviceRegistrationEvent, true);
TestMgr.check(events.get(1).isSuccess(), true);
TestMgr.check(events.get(1) instanceof SchemaRegistrationEvent, true);
TestMgr.check(events.get(2).isSuccess(), true);
TestMgr.check(events.get(2) instanceof MicroserviceInstanceRegistrationEvent, true);
TestMgr.check(events.get(3).isSuccess(), true);
TestMgr.check(events.get(3) instanceof HeartBeatEvent, true);
}
ServiceCenterDiscovery discovery = new ServiceCenterDiscovery(serviceCenterClient, eventBus);
discovery.updateMyselfServiceId(microservice.getServiceId());
discovery.startDiscovery();
discovery.registerIfNotPresent(new SubscriptionKey(microservice.getAppId(), microservice.getServiceName()));
discoveryCounter.await(30000, TimeUnit.MILLISECONDS);
TestMgr.check(instances != null, true);
TestMgr.check(instances.size(), 1);
discovery.stop();
serviceCenterRegistration.stop();
serviceCenterClient.deleteMicroserviceInstance(microservice.getServiceId(), microserviceInstance.getInstanceId());
}
@Subscribe
public void onMicroserviceRegistrationEvent(MicroserviceRegistrationEvent event) {
events.add(event);
}
@Subscribe
public void onSchemaRegistrationEvent(SchemaRegistrationEvent event) {
events.add(event);
hasRegistered = false;
}
@Subscribe
public void onMicroserviceInstanceRegistrationEvent(MicroserviceInstanceRegistrationEvent event) {
events.add(event);
}
@Subscribe
public void onHeartBeatEvent(HeartBeatEvent event) {
events.add(event);
registrationCounter.countDown();
}
@Subscribe
public void onInstanceChangedEvent(InstanceChangedEvent event) {
instances = event.getInstances();
discoveryCounter.countDown();
}
}