Back to Repositories

Testing Redis Host Configuration Management in Conductor-OSS

This test suite validates the ConfigurationHostSupplier functionality in Conductor’s Redis persistence layer, focusing on host configuration parsing and management. It ensures proper handling of single and multiple Redis host configurations, including authentication scenarios.

Test Coverage Overview

The test suite provides comprehensive coverage of Redis host configuration scenarios.

Key areas tested include:
  • Single host configuration parsing
  • Multiple host configuration handling
  • Authentication credentials processing
  • Host property validation (hostname, port, rack, status)

Edge cases covered include authentication scenarios and multi-host configurations.

Implementation Analysis

The testing approach utilizes JUnit framework with Mockito for dependency mocking. The tests follow a clear arrange-act-assert pattern, with each test method focusing on a specific configuration scenario.

Technical implementation includes:
  • Mock RedisProperties configuration
  • Host string parsing validation
  • Verification of Host object properties
  • Multi-host configuration testing

Technical Details

Testing tools and setup:
  • JUnit 4 testing framework
  • Mockito mocking framework
  • RedisProperties configuration mock
  • ConfigurationHostSupplier implementation
  • Dyno connection pool Host class

Best Practices Demonstrated

The test suite exemplifies several testing best practices for Java unit testing.

Notable practices include:
  • Proper test method naming conventions
  • Clean setup using @Before annotation
  • Independent test cases
  • Thorough assertion coverage
  • Meaningful test scenarios
  • Mock usage for external dependencies

conductor-oss/conductor

redis-persistence/src/test/java/com/netflix/conductor/redis/jedis/ConfigurationHostSupplierTest.java

            
/*
 * Copyright 2020 Conductor Authors.
 * <p>
 * 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
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * 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.conductor.redis.jedis;

import java.util.List;

import org.junit.Before;
import org.junit.Test;

import com.netflix.conductor.redis.config.RedisProperties;
import com.netflix.conductor.redis.dynoqueue.ConfigurationHostSupplier;
import com.netflix.dyno.connectionpool.Host;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class ConfigurationHostSupplierTest {

    private RedisProperties properties;

    private ConfigurationHostSupplier configurationHostSupplier;

    @Before
    public void setUp() {
        properties = mock(RedisProperties.class);
        configurationHostSupplier = new ConfigurationHostSupplier(properties);
    }

    @Test
    public void getHost() {
        when(properties.getHosts()).thenReturn("dyno1:8102:us-east-1c");

        List<Host> hosts = configurationHostSupplier.getHosts();
        assertEquals(1, hosts.size());

        Host firstHost = hosts.get(0);
        assertEquals("dyno1", firstHost.getHostName());
        assertEquals(8102, firstHost.getPort());
        assertEquals("us-east-1c", firstHost.getRack());
        assertTrue(firstHost.isUp());
    }

    @Test
    public void getMultipleHosts() {
        when(properties.getHosts()).thenReturn("dyno1:8102:us-east-1c;dyno2:8103:us-east-1c");

        List<Host> hosts = configurationHostSupplier.getHosts();
        assertEquals(2, hosts.size());

        Host firstHost = hosts.get(0);
        assertEquals("dyno1", firstHost.getHostName());
        assertEquals(8102, firstHost.getPort());
        assertEquals("us-east-1c", firstHost.getRack());
        assertTrue(firstHost.isUp());

        Host secondHost = hosts.get(1);
        assertEquals("dyno2", secondHost.getHostName());
        assertEquals(8103, secondHost.getPort());
        assertEquals("us-east-1c", secondHost.getRack());
        assertTrue(secondHost.isUp());
    }

    @Test
    public void getAuthenticatedHost() {
        when(properties.getHosts()).thenReturn("redis1:6432:us-east-1c:password");

        List<Host> hosts = configurationHostSupplier.getHosts();
        assertEquals(1, hosts.size());

        Host firstHost = hosts.get(0);
        assertEquals("redis1", firstHost.getHostName());
        assertEquals(6432, firstHost.getPort());
        assertEquals("us-east-1c", firstHost.getRack());
        assertEquals("password", firstHost.getPassword());
        assertTrue(firstHost.isUp());
    }
}