Back to Repositories

Validating Cluster Service Creation Workflows in Apollo Config

This test suite evaluates the ClusterService component in Apollo Configuration Center, focusing on cluster creation validation. It specifically tests the system’s handling of duplicate cluster creation scenarios and proper exception handling within the service layer.

Test Coverage Overview

The test suite covers the critical validation logic for cluster creation in Apollo.

Key areas tested include:
  • Duplicate cluster creation prevention
  • Integration with AdminService for app creation
  • Service exception handling for invalid operations
  • Default cluster creation validation

Implementation Analysis

The testing approach utilizes JUnit framework with Spring’s dependency injection for service integration testing. The test implements AbstractIntegrationTest as a base class, demonstrating a hierarchical test structure with proper service autowiring for ClusterService and AdminService components.

The test employs expected exception testing pattern using @Test(expected = ServiceException.class) to verify proper error handling.

Technical Details

Testing tools and configuration:
  • JUnit 4 testing framework
  • Spring Framework for dependency injection
  • AbstractIntegrationTest base class for common setup
  • Mock data setup for App entity
  • Service layer integration testing

Best Practices Demonstrated

The test demonstrates several testing best practices in service layer validation.

Notable practices include:
  • Proper test isolation and setup
  • Clear test method naming convention
  • Explicit exception testing
  • Integration test separation
  • Consistent data setup patterns

apolloconfig/apollo

apollo-biz/src/test/java/com/ctrip/framework/apollo/biz/service/ClusterServiceTest.java

            
/*
 * Copyright 2024 Apollo Authors
 *
 * 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.ctrip.framework.apollo.biz.service;

import com.ctrip.framework.apollo.biz.AbstractIntegrationTest;
import com.ctrip.framework.apollo.common.entity.App;
import com.ctrip.framework.apollo.common.exception.ServiceException;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Date;

public class ClusterServiceTest extends AbstractIntegrationTest {

  @Autowired
  private AdminService adminService;

  @Autowired
  private ClusterService clusterService;

  @Test(expected = ServiceException.class)
  public void testCreateDuplicateCluster() {
    String appId = "someAppId";
    App app = new App();
    app.setAppId(appId);
    app.setName("someAppName");
    String owner = "someOwnerName";
    app.setOwnerName(owner);
    app.setOwnerEmail("[email protected]");
    app.setDataChangeCreatedBy(owner);
    app.setDataChangeLastModifiedBy(owner);
    app.setDataChangeCreatedTime(new Date());

    adminService.createNewApp(app);

    clusterService.createDefaultCluster(appId, owner);
  }
}