|
@@ -1,17 +1,16 @@
|
|
package com.ctrip.apollo.configservice.controller;
|
|
package com.ctrip.apollo.configservice.controller;
|
|
|
|
|
|
-import static org.junit.Assert.assertEquals;
|
|
|
|
-import static org.junit.Assert.assertNull;
|
|
|
|
-import static org.mockito.Matchers.anyString;
|
|
|
|
-import static org.mockito.Matchers.eq;
|
|
|
|
-import static org.mockito.Mockito.mock;
|
|
|
|
-import static org.mockito.Mockito.times;
|
|
|
|
-import static org.mockito.Mockito.verify;
|
|
|
|
-import static org.mockito.Mockito.when;
|
|
|
|
-
|
|
|
|
-import java.util.Map;
|
|
|
|
|
|
+import com.google.common.collect.ImmutableMap;
|
|
|
|
+import com.google.common.collect.Lists;
|
|
|
|
+import com.google.gson.Gson;
|
|
|
|
+import com.google.gson.JsonSyntaxException;
|
|
|
|
|
|
-import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
+import com.ctrip.apollo.biz.entity.AppNamespace;
|
|
|
|
+import com.ctrip.apollo.biz.entity.Release;
|
|
|
|
+import com.ctrip.apollo.biz.service.AppNamespaceService;
|
|
|
|
+import com.ctrip.apollo.biz.service.ConfigService;
|
|
|
|
+import com.ctrip.apollo.core.ConfigConsts;
|
|
|
|
+import com.ctrip.apollo.core.dto.ApolloConfig;
|
|
|
|
|
|
import org.junit.Before;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.junit.Test;
|
|
@@ -20,13 +19,18 @@ import org.mockito.Mock;
|
|
import org.mockito.runners.MockitoJUnitRunner;
|
|
import org.mockito.runners.MockitoJUnitRunner;
|
|
import org.springframework.test.util.ReflectionTestUtils;
|
|
import org.springframework.test.util.ReflectionTestUtils;
|
|
|
|
|
|
-import com.ctrip.apollo.biz.entity.Release;
|
|
|
|
-import com.ctrip.apollo.biz.service.ConfigService;
|
|
|
|
-import com.ctrip.apollo.core.dto.ApolloConfig;
|
|
|
|
-import com.google.common.collect.ImmutableMap;
|
|
|
|
-import com.google.common.collect.Lists;
|
|
|
|
-import com.google.gson.Gson;
|
|
|
|
-import com.google.gson.JsonSyntaxException;
|
|
|
|
|
|
+import java.util.Map;
|
|
|
|
+
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
|
+
|
|
|
|
+import static org.junit.Assert.assertEquals;
|
|
|
|
+import static org.junit.Assert.assertNull;
|
|
|
|
+import static org.mockito.Matchers.anyString;
|
|
|
|
+import static org.mockito.Matchers.eq;
|
|
|
|
+import static org.mockito.Mockito.mock;
|
|
|
|
+import static org.mockito.Mockito.times;
|
|
|
|
+import static org.mockito.Mockito.verify;
|
|
|
|
+import static org.mockito.Mockito.when;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @author Jason Song(song_s@ctrip.com)
|
|
* @author Jason Song(song_s@ctrip.com)
|
|
@@ -36,26 +40,34 @@ public class ConfigControllerTest {
|
|
private ConfigController configController;
|
|
private ConfigController configController;
|
|
@Mock
|
|
@Mock
|
|
private ConfigService configService;
|
|
private ConfigService configService;
|
|
|
|
+ @Mock
|
|
|
|
+ private AppNamespaceService appNamespaceService;
|
|
private String someAppId;
|
|
private String someAppId;
|
|
private String someClusterName;
|
|
private String someClusterName;
|
|
- private String someNamespaceName;
|
|
|
|
|
|
+ private String defaultNamespaceName;
|
|
|
|
+ private String somePublicNamespaceName;
|
|
private String someDataCenter;
|
|
private String someDataCenter;
|
|
- private String someValidConfiguration;
|
|
|
|
@Mock
|
|
@Mock
|
|
private Release someRelease;
|
|
private Release someRelease;
|
|
|
|
+ @Mock
|
|
|
|
+ private Release somePublicRelease;
|
|
|
|
|
|
@Before
|
|
@Before
|
|
public void setUp() throws Exception {
|
|
public void setUp() throws Exception {
|
|
configController = new ConfigController();
|
|
configController = new ConfigController();
|
|
ReflectionTestUtils.setField(configController, "configService", configService);
|
|
ReflectionTestUtils.setField(configController, "configService", configService);
|
|
|
|
+ ReflectionTestUtils.setField(configController, "appNamespaceService", appNamespaceService);
|
|
|
|
|
|
someAppId = "1";
|
|
someAppId = "1";
|
|
someClusterName = "someClusterName";
|
|
someClusterName = "someClusterName";
|
|
- someNamespaceName = "someNamespaceName";
|
|
|
|
|
|
+ defaultNamespaceName = ConfigConsts.NAMESPACE_DEFAULT;
|
|
|
|
+ somePublicNamespaceName = "somePublicNamespace";
|
|
someDataCenter = "someDC";
|
|
someDataCenter = "someDC";
|
|
- someValidConfiguration = "{\"apollo.bar\": \"foo\"}";
|
|
|
|
|
|
+ String someValidConfiguration = "{\"apollo.bar\": \"foo\"}";
|
|
|
|
+ String somePublicConfiguration = "{\"apollo.public.bar\": \"foo\"}";
|
|
|
|
|
|
when(someRelease.getConfigurations()).thenReturn(someValidConfiguration);
|
|
when(someRelease.getConfigurations()).thenReturn(someValidConfiguration);
|
|
|
|
+ when(somePublicRelease.getConfigurations()).thenReturn(somePublicConfiguration);
|
|
}
|
|
}
|
|
|
|
|
|
@Test
|
|
@Test
|
|
@@ -64,17 +76,18 @@ public class ConfigControllerTest {
|
|
long someServerSideNewReleaseId = 2;
|
|
long someServerSideNewReleaseId = 2;
|
|
HttpServletResponse someResponse = mock(HttpServletResponse.class);
|
|
HttpServletResponse someResponse = mock(HttpServletResponse.class);
|
|
|
|
|
|
- when(configService.findRelease(someAppId, someClusterName, someNamespaceName))
|
|
|
|
|
|
+ when(configService.findRelease(someAppId, someClusterName, defaultNamespaceName))
|
|
.thenReturn(someRelease);
|
|
.thenReturn(someRelease);
|
|
when(someRelease.getId()).thenReturn(someServerSideNewReleaseId);
|
|
when(someRelease.getId()).thenReturn(someServerSideNewReleaseId);
|
|
|
|
|
|
ApolloConfig result = configController.queryConfig(someAppId, someClusterName,
|
|
ApolloConfig result = configController.queryConfig(someAppId, someClusterName,
|
|
- someNamespaceName, someDataCenter, String.valueOf(someClientSideReleaseId), someResponse);
|
|
|
|
|
|
+ defaultNamespaceName, someDataCenter, String.valueOf(someClientSideReleaseId),
|
|
|
|
+ someResponse);
|
|
|
|
|
|
- verify(configService, times(1)).findRelease(someAppId, someClusterName, someNamespaceName);
|
|
|
|
|
|
+ verify(configService, times(1)).findRelease(someAppId, someClusterName, defaultNamespaceName);
|
|
assertEquals(someAppId, result.getAppId());
|
|
assertEquals(someAppId, result.getAppId());
|
|
assertEquals(someClusterName, result.getCluster());
|
|
assertEquals(someClusterName, result.getCluster());
|
|
- assertEquals(someNamespaceName, result.getNamespace());
|
|
|
|
|
|
+ assertEquals(defaultNamespaceName, result.getNamespace());
|
|
assertEquals(String.valueOf(someServerSideNewReleaseId), result.getReleaseId());
|
|
assertEquals(String.valueOf(someServerSideNewReleaseId), result.getReleaseId());
|
|
}
|
|
}
|
|
|
|
|
|
@@ -84,10 +97,12 @@ public class ConfigControllerTest {
|
|
long someClientSideReleaseId = 1;
|
|
long someClientSideReleaseId = 1;
|
|
HttpServletResponse someResponse = mock(HttpServletResponse.class);
|
|
HttpServletResponse someResponse = mock(HttpServletResponse.class);
|
|
|
|
|
|
- when(configService.findRelease(someAppId, someClusterName, someNamespaceName)).thenReturn(null);
|
|
|
|
|
|
+ when(configService.findRelease(someAppId, someClusterName, defaultNamespaceName))
|
|
|
|
+ .thenReturn(null);
|
|
|
|
|
|
ApolloConfig result = configController.queryConfig(someAppId, someClusterName,
|
|
ApolloConfig result = configController.queryConfig(someAppId, someClusterName,
|
|
- someNamespaceName, someDataCenter, String.valueOf(someClientSideReleaseId), someResponse);
|
|
|
|
|
|
+ defaultNamespaceName, someDataCenter, String.valueOf(someClientSideReleaseId),
|
|
|
|
+ someResponse);
|
|
|
|
|
|
assertNull(result);
|
|
assertNull(result);
|
|
verify(someResponse, times(1)).sendError(eq(HttpServletResponse.SC_NOT_FOUND), anyString());
|
|
verify(someResponse, times(1)).sendError(eq(HttpServletResponse.SC_NOT_FOUND), anyString());
|
|
@@ -99,19 +114,144 @@ public class ConfigControllerTest {
|
|
long someServerSideReleaseId = someClientSideReleaseId;
|
|
long someServerSideReleaseId = someClientSideReleaseId;
|
|
HttpServletResponse someResponse = mock(HttpServletResponse.class);
|
|
HttpServletResponse someResponse = mock(HttpServletResponse.class);
|
|
|
|
|
|
- when(configService.findRelease(someAppId, someClusterName, someNamespaceName))
|
|
|
|
|
|
+ when(configService.findRelease(someAppId, someClusterName, defaultNamespaceName))
|
|
.thenReturn(someRelease);
|
|
.thenReturn(someRelease);
|
|
when(someRelease.getId()).thenReturn(someServerSideReleaseId);
|
|
when(someRelease.getId()).thenReturn(someServerSideReleaseId);
|
|
|
|
|
|
ApolloConfig
|
|
ApolloConfig
|
|
result =
|
|
result =
|
|
- configController.queryConfig(someAppId, someClusterName, someNamespaceName,
|
|
|
|
|
|
+ configController.queryConfig(someAppId, someClusterName, defaultNamespaceName,
|
|
someDataCenter, String.valueOf(someClientSideReleaseId), someResponse);
|
|
someDataCenter, String.valueOf(someClientSideReleaseId), someResponse);
|
|
|
|
|
|
assertNull(result);
|
|
assertNull(result);
|
|
verify(someResponse, times(1)).setStatus(HttpServletResponse.SC_NOT_MODIFIED);
|
|
verify(someResponse, times(1)).setStatus(HttpServletResponse.SC_NOT_MODIFIED);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
+ public void testQueryConfigWithAppOwnNamespace() throws Exception {
|
|
|
|
+ String someClientSideReleaseId = "1";
|
|
|
|
+ String someServerSideReleaseId = "2";
|
|
|
|
+ String someAppOwnNamespaceName = "someAppOwn";
|
|
|
|
+ HttpServletResponse someResponse = mock(HttpServletResponse.class);
|
|
|
|
+ AppNamespace someAppOwnNamespace =
|
|
|
|
+ assmbleAppNamespace(someAppId, someAppOwnNamespaceName);
|
|
|
|
+
|
|
|
|
+ when(configService.findRelease(someAppId, someClusterName, someAppOwnNamespaceName))
|
|
|
|
+ .thenReturn(someRelease);
|
|
|
|
+ when(appNamespaceService.findByNamespaceName(someAppOwnNamespaceName))
|
|
|
|
+ .thenReturn(someAppOwnNamespace);
|
|
|
|
+ when(someRelease.getId()).thenReturn(Long.valueOf(someServerSideReleaseId));
|
|
|
|
+
|
|
|
|
+ ApolloConfig result =
|
|
|
|
+ configController
|
|
|
|
+ .queryConfig(someAppId, someClusterName, someAppOwnNamespaceName, someDataCenter,
|
|
|
|
+ someClientSideReleaseId, someResponse);
|
|
|
|
+
|
|
|
|
+ assertEquals(someServerSideReleaseId, result.getReleaseId());
|
|
|
|
+ assertEquals(someAppId, result.getAppId());
|
|
|
|
+ assertEquals(someClusterName, result.getCluster());
|
|
|
|
+ assertEquals(someAppOwnNamespaceName, result.getNamespace());
|
|
|
|
+ assertEquals("foo", result.getConfigurations().get("apollo.bar"));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Test
|
|
|
|
+ public void testQueryConfigWithPubicNamespaceAndNoAppOverride() throws Exception {
|
|
|
|
+ String someClientSideReleaseId = "1";
|
|
|
|
+ String someServerSideReleaseId = "2";
|
|
|
|
+ HttpServletResponse someResponse = mock(HttpServletResponse.class);
|
|
|
|
+ String somePublicAppId = "somePublicAppId";
|
|
|
|
+ AppNamespace somePublicAppNamespace =
|
|
|
|
+ assmbleAppNamespace(somePublicAppId, somePublicNamespaceName);
|
|
|
|
+
|
|
|
|
+ when(configService.findRelease(someAppId, someClusterName, somePublicNamespaceName))
|
|
|
|
+ .thenReturn(null);
|
|
|
|
+ when(appNamespaceService.findByNamespaceName(somePublicNamespaceName))
|
|
|
|
+ .thenReturn(somePublicAppNamespace);
|
|
|
|
+ when(configService.findRelease(somePublicAppId, someDataCenter, somePublicNamespaceName))
|
|
|
|
+ .thenReturn(somePublicRelease);
|
|
|
|
+ when(somePublicRelease.getId()).thenReturn(Long.valueOf(someServerSideReleaseId));
|
|
|
|
+
|
|
|
|
+ ApolloConfig result =
|
|
|
|
+ configController
|
|
|
|
+ .queryConfig(someAppId, someClusterName, somePublicNamespaceName, someDataCenter,
|
|
|
|
+ someClientSideReleaseId, someResponse);
|
|
|
|
+
|
|
|
|
+ assertEquals(someServerSideReleaseId, result.getReleaseId());
|
|
|
|
+ assertEquals(someAppId, result.getAppId());
|
|
|
|
+ assertEquals(someClusterName, result.getCluster());
|
|
|
|
+ assertEquals(somePublicNamespaceName, result.getNamespace());
|
|
|
|
+ assertEquals("foo", result.getConfigurations().get("apollo.public.bar"));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Test
|
|
|
|
+ public void testQueryConfigWithPublicNamespaceAndNoAppOverrideAndNoDataCenter() throws Exception {
|
|
|
|
+ String someClientSideReleaseId = "1";
|
|
|
|
+ String someServerSideReleaseId = "2";
|
|
|
|
+ HttpServletResponse someResponse = mock(HttpServletResponse.class);
|
|
|
|
+ String somePublicAppId = "somePublicAppId";
|
|
|
|
+ AppNamespace somePublicAppNamespace =
|
|
|
|
+ assmbleAppNamespace(somePublicAppId, somePublicNamespaceName);
|
|
|
|
+
|
|
|
|
+ when(configService.findRelease(someAppId, someClusterName, somePublicNamespaceName))
|
|
|
|
+ .thenReturn(null);
|
|
|
|
+ when(appNamespaceService.findByNamespaceName(somePublicNamespaceName))
|
|
|
|
+ .thenReturn(somePublicAppNamespace);
|
|
|
|
+ when(configService.findRelease(somePublicAppId, someDataCenter, somePublicNamespaceName))
|
|
|
|
+ .thenReturn(null);
|
|
|
|
+ when(configService
|
|
|
|
+ .findRelease(somePublicAppId, ConfigConsts.CLUSTER_NAME_DEFAULT, somePublicNamespaceName))
|
|
|
|
+ .thenReturn(somePublicRelease);
|
|
|
|
+ when(somePublicRelease.getId()).thenReturn(Long.valueOf(someServerSideReleaseId));
|
|
|
|
+
|
|
|
|
+ ApolloConfig result =
|
|
|
|
+ configController
|
|
|
|
+ .queryConfig(someAppId, someClusterName, somePublicNamespaceName, someDataCenter,
|
|
|
|
+ someClientSideReleaseId, someResponse);
|
|
|
|
+
|
|
|
|
+ assertEquals(someServerSideReleaseId, result.getReleaseId());
|
|
|
|
+ assertEquals(someAppId, result.getAppId());
|
|
|
|
+ assertEquals(someClusterName, result.getCluster());
|
|
|
|
+ assertEquals(somePublicNamespaceName, result.getNamespace());
|
|
|
|
+ assertEquals("foo", result.getConfigurations().get("apollo.public.bar"));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Test
|
|
|
|
+ public void testQueryConfigWithPublicNamespaceAndAppOverride() throws Exception {
|
|
|
|
+ String someAppSideReleaseId = "1";
|
|
|
|
+ String somePublicAppSideReleaseId = "2";
|
|
|
|
+
|
|
|
|
+ HttpServletResponse someResponse = mock(HttpServletResponse.class);
|
|
|
|
+ String somePublicAppId = "somePublicAppId";
|
|
|
|
+ AppNamespace somePublicAppNamespace =
|
|
|
|
+ assmbleAppNamespace(somePublicAppId, somePublicNamespaceName);
|
|
|
|
+
|
|
|
|
+ when(someRelease.getConfigurations()).thenReturn("{\"apollo.public.foo\": \"foo-override\"}");
|
|
|
|
+ when(somePublicRelease.getConfigurations())
|
|
|
|
+ .thenReturn("{\"apollo.public.foo\": \"foo\", \"apollo.public.bar\": \"bar\"}");
|
|
|
|
+
|
|
|
|
+ when(configService.findRelease(someAppId, someClusterName, somePublicNamespaceName))
|
|
|
|
+ .thenReturn(someRelease);
|
|
|
|
+ when(someRelease.getId()).thenReturn(Long.valueOf(someAppSideReleaseId));
|
|
|
|
+ when(appNamespaceService.findByNamespaceName(somePublicNamespaceName))
|
|
|
|
+ .thenReturn(somePublicAppNamespace);
|
|
|
|
+ when(configService.findRelease(somePublicAppId, someDataCenter, somePublicNamespaceName))
|
|
|
|
+ .thenReturn(somePublicRelease);
|
|
|
|
+ when(somePublicRelease.getId()).thenReturn(Long.valueOf(somePublicAppSideReleaseId));
|
|
|
|
+
|
|
|
|
+ ApolloConfig result =
|
|
|
|
+ configController
|
|
|
|
+ .queryConfig(someAppId, someClusterName, somePublicNamespaceName, someDataCenter,
|
|
|
|
+ someAppSideReleaseId, someResponse);
|
|
|
|
+
|
|
|
|
+ assertEquals(String.format("%s|%s", someAppSideReleaseId, somePublicAppSideReleaseId),
|
|
|
|
+ result.getReleaseId());
|
|
|
|
+ assertEquals(someAppId, result.getAppId());
|
|
|
|
+ assertEquals(someClusterName, result.getCluster());
|
|
|
|
+ assertEquals(somePublicNamespaceName, result.getNamespace());
|
|
|
|
+ assertEquals("foo-override", result.getConfigurations().get("apollo.public.foo"));
|
|
|
|
+ assertEquals("bar", result.getConfigurations().get("apollo.public.bar"));
|
|
|
|
+ }
|
|
|
|
+
|
|
@Test
|
|
@Test
|
|
public void testMergeConfigurations() throws Exception {
|
|
public void testMergeConfigurations() throws Exception {
|
|
Gson gson = new Gson();
|
|
Gson gson = new Gson();
|
|
@@ -148,4 +288,11 @@ public class ConfigControllerTest {
|
|
|
|
|
|
configController.mergeReleaseConfigurations(Lists.newArrayList(someRelease));
|
|
configController.mergeReleaseConfigurations(Lists.newArrayList(someRelease));
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ private AppNamespace assmbleAppNamespace(String appId, String namespace) {
|
|
|
|
+ AppNamespace appNamespace = new AppNamespace();
|
|
|
|
+ appNamespace.setAppId(appId);
|
|
|
|
+ appNamespace.setName(namespace);
|
|
|
|
+ return appNamespace;
|
|
|
|
+ }
|
|
}
|
|
}
|