Back to Repositories

Validating Observable Error Propagation Patterns in Netflix Hystrix

This test suite validates error propagation behavior in Hystrix’s Observable patterns using AspectJ weaving. It focuses on verifying how errors are handled and propagated through the reactive streams implementation in Netflix’s Hystrix library.

Test Coverage Overview

The test suite provides comprehensive coverage of Observable error handling scenarios in Hystrix.

Key areas covered include:
  • Error propagation in Observable chains
  • AspectJ compile-time weaving configuration
  • User service error handling patterns
  • Integration with Hystrix’s core error handling mechanisms

Implementation Analysis

The testing approach leverages JUnit and AspectJ for compile-time weaving of Hystrix aspects. The implementation extends BasicObservableErrorPropagationTest to inherit core error testing scenarios while providing environment-specific configuration through @BeforeClass setup.

Technical patterns include:
  • Inheritance-based test organization
  • Environment property configuration
  • Service factory method pattern

Technical Details

Testing tools and configuration:
  • JUnit test framework
  • AspectJ compile-time weaving
  • System property configuration for weaving mode
  • Custom UserService implementation
  • Integration with Hystrix Observable patterns

Best Practices Demonstrated

The test suite demonstrates several testing best practices for reactive applications.

Notable practices include:
  • Clean separation of concerns through inheritance
  • Proper test environment configuration
  • Consistent error handling patterns
  • Modular test organization
  • Clear setup and initialization procedures

netflix/hystrix

hystrix-contrib/hystrix-javanica/src/ajcTest/java/com/netflix/hystrix/contrib/javanica/test/aspectj/error/ObservableErrorPropagationTest.java

            
/**
 * Copyright 2016 Netflix, Inc.
 *
 * Licensed 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 com.netflix.hystrix.contrib.javanica.test.aspectj.error;

import com.netflix.hystrix.contrib.javanica.test.common.error.BasicErrorPropagationTest;
import com.netflix.hystrix.contrib.javanica.test.common.error.BasicObservableErrorPropagationTest;
import org.junit.BeforeClass;

/**
 * Created by dmgcodevil
 */
public class ObservableErrorPropagationTest extends BasicObservableErrorPropagationTest {

    @BeforeClass
    public static void setUpEnv() {
        System.setProperty("weavingMode", "compile");
    }

    @Override
    protected UserService createUserService() {
        return new UserService();
    }

}