Back to Repositories

Validating Namespace Creation Controls in Apollo Config

This test suite validates the namespace creation functionality in Apollo’s admin service, focusing on input validation and error handling. It ensures proper validation of namespace names and appropriate error responses when invalid inputs are provided.

Test Coverage Overview

The test suite covers namespace creation validation in Apollo’s admin service.

Key areas tested include:
  • Invalid namespace name validation
  • Error message verification
  • HTTP error response handling
  • Input validation boundary conditions

Implementation Analysis

The testing approach uses JUnit with Spring’s RestTemplate for HTTP endpoint testing. The implementation follows a black-box testing pattern, verifying the API’s external behavior and error responses. The test extends AbstractControllerTest for common testing infrastructure.

Framework features utilized include:
  • RestTemplate for HTTP requests
  • Hamcrest matchers for response validation
  • JUnit assertions for error verification

Technical Details

Testing tools and configuration:
  • JUnit 4 testing framework
  • Spring RestTemplate for API calls
  • Hamcrest matchers for response content verification
  • HttpClientErrorException for error handling
  • Custom InputValidator for business logic validation

Best Practices Demonstrated

The test demonstrates several quality testing practices including proper exception handling verification, explicit error message validation, and clear test case organization. Notable practices include:
  • Specific test case naming
  • Proper error scenario coverage
  • Response content verification
  • Clean and focused test methods

apolloconfig/apollo

apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceControllerTest.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.adminservice.controller;

import com.ctrip.framework.apollo.common.dto.NamespaceDTO;
import com.ctrip.framework.apollo.common.utils.InputValidator;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.web.client.HttpClientErrorException;
import static org.hamcrest.Matchers.containsString;

/**
 * Created by kezhenxu at 2019/1/8 16:27.
 *
 * @author kezhenxu ([email protected])
 */
public class NamespaceControllerTest extends AbstractControllerTest {
  @Test
  public void create() {
    try {
      NamespaceDTO namespaceDTO = new NamespaceDTO();
      namespaceDTO.setClusterName("cluster");
      namespaceDTO.setNamespaceName("invalid name");
      namespaceDTO.setAppId("whatever");
      restTemplate.postForEntity(
          url("/apps/{appId}/clusters/{clusterName}/namespaces"),
          namespaceDTO, NamespaceDTO.class, namespaceDTO.getAppId(), namespaceDTO.getClusterName());
      Assert.fail("Should throw");
    } catch (HttpClientErrorException e) {
      Assert.assertThat(new String(e.getResponseBodyAsByteArray()), containsString(InputValidator.INVALID_CLUSTER_NAMESPACE_MESSAGE));
    }
  }
}