unit test for LoadBalanceController (#279)
* unit test
* add Apache license & remove *
* LoadBalanceController's unit test
* LoadBalanceController's unit test
diff --git a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
index b314aed..4325731 100644
--- a/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
+++ b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/LoadBalanceController.java
@@ -120,10 +120,10 @@
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public boolean deleteLoadBalance(@PathVariable String id, @PathVariable String env) {
- id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
if (id == null) {
throw new IllegalArgumentException("Argument of id is null!");
}
+ id = id.replace(Constants.ANY_VALUE, Constants.PATH_SEPARATOR);
overrideService.deleteBalance(id);
return true;
}
diff --git a/dubbo-admin-backend/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java b/dubbo-admin-backend/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java
new file mode 100644
index 0000000..38bf946
--- /dev/null
+++ b/dubbo-admin-backend/src/test/java/org/apache/dubbo/admin/controller/LoadBalanceControllerTest.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.dubbo.admin.controller;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.dubbo.admin.AbstractSpringIntegrationTest;
+import org.apache.dubbo.admin.model.dto.BalancingDTO;
+import org.apache.dubbo.admin.service.OverrideService;
+import org.apache.dubbo.admin.service.ProviderService;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+
+public class LoadBalanceControllerTest extends AbstractSpringIntegrationTest {
+
+ private final String env = "whatever";
+
+ @MockBean
+ private OverrideService overrideService;
+ @MockBean
+ private ProviderService providerService;
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ @Test
+ public void createLoadbalance() throws IOException {
+ BalancingDTO balancingDTO = new BalancingDTO();
+ ResponseEntity<String> response;
+
+ // service and application are all blank
+ response = restTemplate.postForEntity(url("/api/{env}/rules/balancing"), balancingDTO, String.class, env);
+ assertFalse("should return a fail response, when service and application are all blank", (Boolean) objectMapper.readValue(response.getBody(), Map.class).get("success"));
+ // dubbo version is 2.6
+ balancingDTO.setApplication("test application");
+ balancingDTO.setService("test service");
+ when(providerService.findVersionInApplication("test application")).thenReturn("2.6");
+ response = restTemplate.postForEntity(url("/api/{env}/rules/balancing"), balancingDTO, String.class, env);
+ assertFalse("should return a fail response, when dubbo version is 2.6", (Boolean) objectMapper.readValue(response.getBody(), Map.class).get("success"));
+ // dubbo version is 2.7
+ when(providerService.findVersionInApplication("test application")).thenReturn("2.7");
+ response = restTemplate.postForEntity(url("/api/{env}/rules/balancing"), balancingDTO, String.class, env);
+ assertEquals(HttpStatus.CREATED, response.getStatusCode());
+ assertTrue(Boolean.valueOf(response.getBody()));
+ }
+
+ @Test
+ public void updateLoadbalance() throws IOException {
+ String id = "1";
+ BalancingDTO balancingDTO = new BalancingDTO();
+ URI uri;
+ ResponseEntity<String> response;
+ // unknown id
+ uri = restTemplate.getUriTemplateHandler().expand(url("/api/{env}/rules/balancing/{id}"), env, id);
+ response = restTemplate.exchange(uri, HttpMethod.PUT, new HttpEntity<>(balancingDTO), String.class);
+ assertFalse("should return a fail response, when id is null", (Boolean) objectMapper.readValue(response.getBody(), Map.class).get("success"));
+ // valid id
+ BalancingDTO balancing = mock(BalancingDTO.class);
+ when(overrideService.findBalance(id)).thenReturn(balancing);
+ uri = restTemplate.getUriTemplateHandler().expand(url("/api/{env}/rules/balancing/{id}"), env, id);
+ assertTrue(restTemplate.exchange(uri, HttpMethod.PUT, new HttpEntity<>(balancingDTO), Boolean.class).getBody());
+ verify(overrideService).saveBalance(any(BalancingDTO.class));
+ }
+
+ @Test
+ public void searchLoadbalances() throws IOException {
+ String service = "test service", application = "test application";
+ ResponseEntity<String> response;
+ // service and application are all blank
+ response = restTemplate.getForEntity(url("/api/{env}/rules/balancing"), String.class, env);
+ assertFalse("should return a fail response, when service and application are all blank", (Boolean) objectMapper.readValue(response.getBody(), Map.class).get("success"));
+ // service is valid
+ response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, service, null);
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ verify(overrideService).findBalance(service);
+ // application is valid
+ response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, null, application);
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ verify(overrideService).findBalance(application);
+ // findBalance return a notnull
+ BalancingDTO balancingDTO = new BalancingDTO();
+ when(overrideService.findBalance(anyString())).thenReturn(balancingDTO);
+ response = restTemplate.getForEntity(url("/api/{env}/rules/balancing?service={service}&application={application}"), String.class, env, null, application);
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ assertEquals(1, objectMapper.readValue(response.getBody(), List.class).size());
+ }
+
+ @Test
+ public void detailLoadBalance() throws IOException {
+ String id = "1";
+ ResponseEntity<String> response;
+ // when balancing is not exist
+ response = restTemplate.getForEntity(url("/api/{env}/rules/balancing/{id}"), String.class, env, id);
+ assertFalse("should return a fail response, when id is null", (Boolean) objectMapper.readValue(response.getBody(), Map.class).get("success"));
+ // when balancing is not null
+ BalancingDTO balancingDTO = new BalancingDTO();
+ when(overrideService.findBalance(id)).thenReturn(balancingDTO);
+ response = restTemplate.getForEntity(url("/api/{env}/rules/balancing/{id}"), String.class, env, id);
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ }
+
+ @Test
+ public void deleteLoadBalance() {
+ String id = "1";
+ URI uri;
+ ResponseEntity<String> response;
+
+ uri = restTemplate.getUriTemplateHandler().expand(url("/api/{env}/rules/balancing/{id}"), env, id);
+ response = restTemplate.exchange(uri, HttpMethod.DELETE, new HttpEntity<>(null), String.class);
+ assertEquals(HttpStatus.OK, response.getStatusCode());
+ assertTrue(Boolean.valueOf(response.getBody()));
+ }
+}
\ No newline at end of file