blob: aedab301f6bf27edfc17ccbd6f386fa6e15d5f7d [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.camel.component.consul;
import java.io.Serializable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.orbitz.consul.Consul;
import org.apache.camel.NoSuchBeanException;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.GenericContainer;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
/**
* Unit test for Camel Registry implementation for Consul
*/
public class ConsulRegistryTest implements Serializable {
private static final long serialVersionUID = -3482971969351609265L;
private static ConsulRegistry registry;
private static GenericContainer container;
public class ConsulTestClass implements Serializable {
private static final long serialVersionUID = -4815945688487114891L;
public String hello(String name) {
return "Hello " + name;
}
}
@BeforeAll
public static void setUp() {
container = ConsulTestSupport.consulContainer();
container.start();
registry = new ConsulRegistry(container.getContainerIpAddress(), container.getMappedPort(Consul.DEFAULT_HTTP_PORT));
}
@AfterAll
public static void tearDown() {
container.stop();
}
@Test
public void storeString() {
registry.put("stringTestKey", "stringValue");
String result = (String) registry.lookupByName("stringTestKey");
registry.remove("stringTestKey");
assertNotNull(result);
assertEquals("stringValue", result);
}
@Test
public void overrideExistingKey() {
registry.put("uniqueKey", "stringValueOne");
registry.put("uniqueKey", "stringValueTwo");
String result = (String) registry.lookupByName("uniqueKey");
registry.remove("uniqueKey");
assertNotNull(result);
assertEquals("stringValueTwo", result);
}
@Test
public void checkLookupByName() {
registry.put("namedKey", "namedValue");
String result = (String) registry.lookupByName("namedKey");
registry.remove("namedKey");
assertNotNull(result);
assertEquals("namedValue", result);
}
@Test
public void checkFailedLookupByName() {
registry.put("namedKey", "namedValue");
registry.remove("namedKey");
String result = (String) registry.lookupByName("namedKey");
assertNull(result);
}
@Test
public void checkLookupByNameAndType() {
ConsulTestClass consulTestClass = new ConsulTestClass();
registry.put("testClass", consulTestClass);
ConsulTestClass consulTestClassClone = registry.lookupByNameAndType("testClass", consulTestClass.getClass());
registry.remove("testClass");
assertNotNull(consulTestClassClone);
assertEquals(consulTestClass.getClass(), consulTestClassClone.getClass());
}
@Test
public void checkFailedLookupByNameAndType() {
ConsulTestClass consulTestClass = new ConsulTestClass();
registry.put("testClass", consulTestClass);
registry.remove("testClass");
ConsulTestClass consulTestClassClone = registry.lookupByNameAndType("testClass", consulTestClass.getClass());
assertNull(consulTestClassClone);
}
@Test
public void checkFindByTypeWithName() {
ConsulTestClass consulTestClassOne = new ConsulTestClass();
ConsulTestClass consulTestClassTwo = new ConsulTestClass();
registry.put("testClassOne", consulTestClassOne);
registry.put("testClassTwo", consulTestClassTwo);
Map<String, ? extends ConsulTestClass> consulTestClassMap = registry
.findByTypeWithName(consulTestClassOne.getClass());
registry.remove("testClassOne");
registry.remove("testClassTwo");
HashMap<String, ConsulTestClass> emptyHashMap = new HashMap<>();
assertNotNull(consulTestClassMap);
assertEquals(consulTestClassMap.getClass(), emptyHashMap.getClass());
assertEquals(2, consulTestClassMap.size());
}
public void checkFailedFindByTypeWithName() {
}
@Test
public void storeObject() {
ConsulTestClass testObject = new ConsulTestClass();
registry.put("objectTestClass", testObject);
ConsulTestClass clone = (ConsulTestClass) registry.lookupByName("objectTestClass");
assertEquals(clone.hello("World"), "Hello World");
registry.remove("objectTestClass");
}
@Test
public void findByType() {
ConsulTestClass classOne = new ConsulTestClass();
registry.put("classOne", classOne);
ConsulTestClass classTwo = new ConsulTestClass();
registry.put("classTwo", classTwo);
Set<? extends ConsulTestClass> results = registry.findByType(classOne.getClass());
assertNotNull(results);
HashSet<ConsulTestClass> hashSet = new HashSet<>();
registry.remove("classOne");
registry.remove("classTwo");
assertEquals(results.getClass(), hashSet.getClass());
assertEquals(2, results.size());
}
public void notFindByType() {
}
@Test
public void deleteNonExisting() {
assertThrows(NoSuchBeanException.class, () -> registry.remove("nonExisting"));
}
}