Back to Repositories

Testing Default Exception Handling with Spring CGLIB Proxies in Netflix Hystrix

This test suite evaluates the default exception handling behavior in Netflix Hystrix when integrated with Spring AOP and CGLIB. It extends basic exception handling tests to verify proper exception propagation and handling in a Spring-managed environment.

Test Coverage Overview

The test suite focuses on validating default exception handling mechanisms in a Spring context using CGLIB proxies.

Key areas covered include:
  • Exception propagation through Spring AOP proxies
  • Default exception ignore patterns
  • Integration between Hystrix and Spring exception handling
  • Service bean lifecycle management

Implementation Analysis

The testing approach utilizes Spring’s test context framework with JUnit4 integration. It implements a hierarchical test structure by extending BasicDefaultIgnoreExceptionsTest while providing Spring-specific configuration and bean management.

Technical patterns include:
  • Spring context configuration using @ContextConfiguration
  • CGLIB-based AOP proxy implementation
  • Autowired service injection
  • Bean definition through @Configurable classes

Technical Details

Testing infrastructure components:
  • SpringJUnit4ClassRunner for test execution
  • Spring Test Context framework
  • CGLIB for proxy generation
  • Hystrix integration annotations
Configuration includes:
  • AOP CGLIB configuration
  • Custom test configuration class
  • Service bean definitions

Best Practices Demonstrated

The test implementation showcases several testing best practices for Spring-based Hystrix applications.

Notable practices include:
  • Clean separation of concerns between base test logic and Spring configuration
  • Proper use of Spring testing annotations
  • Efficient test context reuse
  • Clear service initialization patterns

netflix/hystrix

hystrix-contrib/hystrix-javanica/src/test/java/com/netflix/hystrix/contrib/javanica/test/spring/error/DefaultIgnoreExceptionsTest.java

            
package com.netflix.hystrix.contrib.javanica.test.spring.error;

import com.netflix.hystrix.contrib.javanica.test.common.error.BasicDefaultIgnoreExceptionsTest;
import com.netflix.hystrix.contrib.javanica.test.spring.conf.AopCglibConfig;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Created by dmgcodevil.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AopCglibConfig.class, DefaultIgnoreExceptionsTest.DefaultIgnoreExceptionsTestConfig.class})
public class DefaultIgnoreExceptionsTest extends BasicDefaultIgnoreExceptionsTest {


    @Autowired
    private BasicDefaultIgnoreExceptionsTest.Service service;

    @Override
    protected BasicDefaultIgnoreExceptionsTest.Service createService() {
        return service;
    }

    @Configurable
    public static class DefaultIgnoreExceptionsTestConfig {

        @Bean
        public BasicDefaultIgnoreExceptionsTest.Service userService() {
            return new BasicDefaultIgnoreExceptionsTest.Service();
        }
    }
}