Back to Repositories

Testing Hystrix Exception Handling with Spring CGLIB Proxies in Netflix/Hystrix

This test suite validates the default exception handling behavior in Hystrix when integrated with Spring AOP using CGLIB proxies. It extends basic exception handling tests to verify how Hystrix commands handle and propagate exceptions in a Spring-managed environment.

Test Coverage Overview

The test suite covers default exception propagation scenarios in Hystrix commands within a Spring context.

Key areas tested include:
  • Spring-managed service exception handling
  • Integration between Hystrix command execution and Spring AOP
  • Default exception propagation configurations
  • CGLIB proxy behavior with Hystrix commands

Implementation Analysis

The implementation leverages Spring’s test context framework with CGLIB-based AOP proxying. The test extends BasicDefaultRaiseHystrixExceptionsTest while providing Spring-specific configuration and dependency injection.

Technical patterns include:
  • Spring context configuration using @ContextConfiguration
  • Service autowiring with @Autowired
  • Bean definition with @Configurable and @Bean

Technical Details

Testing tools and configuration:
  • SpringJUnit4ClassRunner for test execution
  • AopCglibConfig for CGLIB proxy configuration
  • Spring context configuration classes
  • Autowired service injection
  • JUnit 4 testing framework

Best Practices Demonstrated

The test demonstrates several testing best practices for Spring-Hystrix integration:

  • Clean separation of Spring configuration from test logic
  • Proper use of dependency injection in tests
  • Extension of base test cases for specialized scenarios
  • Clear configuration management through dedicated config classes

netflix/hystrix

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

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

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;

import com.netflix.hystrix.contrib.javanica.test.common.error.BasicDefaultRaiseHystrixExceptionsTest;
import com.netflix.hystrix.contrib.javanica.test.spring.conf.AopCglibConfig;

/**
 * Created by Mike Cowan
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AopCglibConfig.class, DefaultRaiseHystrixExceptionsTest.DefaultRaiseHystrixExceptionsTestConfig.class})
public class DefaultRaiseHystrixExceptionsTest extends BasicDefaultRaiseHystrixExceptionsTest {

    @Autowired
    private BasicDefaultRaiseHystrixExceptionsTest.Service service;

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

    @Configurable
    public static class DefaultRaiseHystrixExceptionsTestConfig {

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