@ -3,10 +3,13 @@ package org.springframework.cloud.netflix.eureka.server;
@@ -3,10 +3,13 @@ package org.springframework.cloud.netflix.eureka.server;
import static org.junit.Assert.* ;
import static org.mockito.Matchers.isA ;
import static org.mockito.Mockito.doAnswer ;
import static org.mockito.Mockito.doReturn ;
import java.util.ArrayList ;
import java.util.LinkedList ;
import java.util.List ;
import com.netflix.discovery.shared.Application ;
import org.junit.Before ;
import org.junit.Test ;
import org.junit.runner.RunWith ;
@ -17,9 +20,10 @@ import org.springframework.boot.builder.SpringApplicationBuilder;
@@ -17,9 +20,10 @@ import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.test.context.SpringBootTest ;
import org.springframework.boot.test.mock.mockito.MockBean ;
import org.springframework.boot.test.mock.mockito.SpyBean ;
import org.springframework.cloud.netflix.eureka.server.InstanceRegistryTest.Application ;
import org.springframework.cloud.netflix.eureka.server.InstanceRegistryTest.Test Application ;
import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceCanceledEvent ;
import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRegisteredEvent ;
import org.springframework.cloud.netflix.eureka.server.event.EurekaInstanceRenewedEvent ;
import org.springframework.context.ApplicationEvent ;
import org.springframework.context.ApplicationListener ;
import org.springframework.context.annotation.Configuration ;
@ -33,13 +37,15 @@ import com.netflix.eureka.registry.PeerAwareInstanceRegistry;
@@ -33,13 +37,15 @@ import com.netflix.eureka.registry.PeerAwareInstanceRegistry;
* @author Bartlomiej Slota
* /
@RunWith ( SpringJUnit4ClassRunner . class )
@SpringBootTest ( classes = Application . class ,
@SpringBootTest ( classes = Test Application. class ,
webEnvironment = SpringBootTest . WebEnvironment . RANDOM_PORT ,
value = { "spring.application.name=eureka" , "logging.level.org.springframework."
+ "cloud.netflix.eureka.server.InstanceRegistry=DEBUG" } )
public class InstanceRegistryTest {
private final List < ApplicationEvent > applicationEvents = new LinkedList < > ( ) ;
private static final String APP_NAME = "MY-APP-NAME" ;
private static final String HOST_NAME = "my-host-name" ;
@SpyBean ( PeerAwareInstanceRegistry . class )
private InstanceRegistry instanceRegistry ;
@ -52,6 +58,9 @@ public class InstanceRegistryTest {
@@ -52,6 +58,9 @@ public class InstanceRegistryTest {
private ApplicationListener < EurekaInstanceCanceledEvent >
instanceCanceledEventListenerMock ;
@MockBean
private ApplicationListener < EurekaInstanceRenewedEvent > instanceRenewedEventListener ;
@Before
public void setup ( ) {
applicationEvents . clear ( ) ;
@ -60,21 +69,23 @@ public class InstanceRegistryTest {
@@ -60,21 +69,23 @@ public class InstanceRegistryTest {
. onApplicationEvent ( isA ( EurekaInstanceRegisteredEvent . class ) ) ;
doAnswer ( applicationListenerAnswer ) . when ( instanceCanceledEventListenerMock )
. onApplicationEvent ( isA ( EurekaInstanceCanceledEvent . class ) ) ;
doAnswer ( applicationListenerAnswer ) . when ( instanceRenewedEventListener )
. onApplicationEvent ( isA ( EurekaInstanceRenewedEvent . class ) ) ;
}
@Test
public void testRegister ( ) throws Exception {
// creating instance info
LeaseInfo leaseInfo = getLeaseInfo ( ) ;
InstanceInfo instanceInfo = getInstanceInfo ( leaseInfo ) ;
final LeaseInfo leaseInfo = getLeaseInfo ( ) ;
final InstanceInfo instanceInfo = getInstanceInfo ( leaseInfo ) ;
// calling tested method
instanceRegistry . register ( instanceInfo , false ) ;
// event of proper type is registered
assertEquals ( 1 , applicationEvents . size ( ) ) ;
assertTrue ( applicationEvents . get ( 0 ) instanceof EurekaInstanceRegisteredEvent ) ;
// event details are correct
EurekaInstanceRegisteredEvent registeredEvent =
final EurekaInstanceRegisteredEvent registeredEvent =
( EurekaInstanceRegisteredEvent ) ( applicationEvents . get ( 0 ) ) ;
assertEquals ( instanceInfo , registeredEvent . getInstanceInfo ( ) ) ;
assertEquals ( leaseInfo . getDurationInSecs ( ) , registeredEvent . getLeaseDuration ( ) ) ;
@ -85,11 +96,11 @@ public class InstanceRegistryTest {
@@ -85,11 +96,11 @@ public class InstanceRegistryTest {
@Test
public void testDefaultLeaseDurationRegisterEvent ( ) throws Exception {
// creating instance info
InstanceInfo instanceInfo = getInstanceInfo ( null ) ;
final InstanceInfo instanceInfo = getInstanceInfo ( null ) ;
// calling tested method
instanceRegistry . register ( instanceInfo , false ) ;
// instance info duration is set to default
EurekaInstanceRegisteredEvent registeredEvent =
final EurekaInstanceRegisteredEvent registeredEvent =
( EurekaInstanceRegisteredEvent ) ( applicationEvents . get ( 0 ) ) ;
assertEquals ( LeaseInfo . DEFAULT_LEASE_DURATION ,
registeredEvent . getLeaseDuration ( ) ) ;
@ -98,25 +109,52 @@ public class InstanceRegistryTest {
@@ -98,25 +109,52 @@ public class InstanceRegistryTest {
@Test
public void testInternalCancel ( ) throws Exception {
// calling tested method
instanceRegistry . internalCancel ( "my-app" , "appId" , false ) ;
instanceRegistry . internalCancel ( APP_NAME , HOST_NAME , false ) ;
// event of proper type is registered
assertEquals ( 1 , applicationEvents . size ( ) ) ;
assertTrue ( applicationEvents . get ( 0 ) instanceof EurekaInstanceCanceledEvent ) ;
// event details are correct
EurekaInstanceCanceledEvent registeredEvent =
final EurekaInstanceCanceledEvent registeredEvent =
( EurekaInstanceCanceledEvent ) ( applicationEvents . get ( 0 ) ) ;
assertEquals ( "my-app" , registeredEvent . getAppName ( ) ) ;
assertEquals ( "appId" , registeredEvent . getServerId ( ) ) ;
assertEquals ( APP_NAME , registeredEvent . getAppName ( ) ) ;
assertEquals ( HOST_NAME , registeredEvent . getServerId ( ) ) ;
assertEquals ( instanceRegistry , registeredEvent . getSource ( ) ) ;
assertFalse ( registeredEvent . isReplication ( ) ) ;
}
@Test
public void testRenew ( ) throws Exception {
// creating application list
final LeaseInfo leaseInfo = getLeaseInfo ( ) ;
final InstanceInfo instanceInfo = getInstanceInfo ( leaseInfo ) ;
final List < InstanceInfo > instances = new ArrayList < > ( ) ;
instances . add ( instanceInfo ) ;
final Application application = new Application ( APP_NAME , instances ) ;
final List < Application > applications = new ArrayList < > ( ) ;
applications . add ( application ) ;
// stubbing applications list
doReturn ( applications ) . when ( instanceRegistry ) . getSortedApplications ( ) ;
// calling tested method
instanceRegistry . renew ( APP_NAME , HOST_NAME , false ) ;
// event of proper type is registered
assertEquals ( 1 , applicationEvents . size ( ) ) ;
assertTrue ( applicationEvents . get ( 0 ) instanceof EurekaInstanceRenewedEvent ) ;
// event details are correct
final EurekaInstanceRenewedEvent registeredEvent = ( EurekaInstanceRenewedEvent )
( applicationEvents . get ( 0 ) ) ;
assertEquals ( APP_NAME , registeredEvent . getAppName ( ) ) ;
assertEquals ( HOST_NAME , registeredEvent . getServerId ( ) ) ;
assertEquals ( instanceRegistry , registeredEvent . getSource ( ) ) ;
assertEquals ( instanceInfo , registeredEvent . getInstanceInfo ( ) ) ;
assertFalse ( registeredEvent . isReplication ( ) ) ;
}
@Configuration
@EnableAutoConfiguration
@EnableEurekaServer
protected static class Application {
protected static class Test Application {
public static void main ( String [ ] args ) {
new SpringApplicationBuilder ( Application . class ) . run ( args ) ;
new SpringApplicationBuilder ( Test Application. class ) . run ( args ) ;
}
}
@ -129,8 +167,8 @@ public class InstanceRegistryTest {
@@ -129,8 +167,8 @@ public class InstanceRegistryTest {
private InstanceInfo getInstanceInfo ( LeaseInfo leaseInfo ) {
InstanceInfo . Builder builder = InstanceInfo . Builder . newBuilder ( ) ;
builder . setAppName ( "my-app-name" ) ;
builder . setHostName ( "my-host-name" ) ;
builder . setAppName ( APP_NAME ) ;
builder . setHostName ( HOST_NAME ) ;
builder . setPort ( 8008 ) ;
builder . setLeaseInfo ( leaseInfo ) ;
return builder . build ( ) ;