diff --git a/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockAspect.java b/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockAspect.java index d9b1171d1487c0c711db1310683d5972c79e4ec9..add99bb2387460028033a7458db26a7f01542193 100644 --- a/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockAspect.java +++ b/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockAspect.java @@ -71,7 +71,7 @@ public class NamespaceLockAspect { acquireLock(item.getNamespaceId(), operator); } - private void acquireLock(String appId, String clusterName, String namespaceName, + void acquireLock(String appId, String clusterName, String namespaceName, String currentUser) { if (apolloSwitcher.isNamespaceLockSwitchOff()) { return; @@ -82,7 +82,11 @@ public class NamespaceLockAspect { acquireLock(namespace, currentUser); } - private void acquireLock(long namespaceId, String currentUser) { + void acquireLock(long namespaceId, String currentUser) { + if (apolloSwitcher.isNamespaceLockSwitchOff()) { + return; + } + Namespace namespace = namespaceService.findOne(namespaceId); acquireLock(namespace, currentUser); diff --git a/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceLockController.java b/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceLockController.java index 6bcacaa6572648b43fd305aa157f0404c9d785da..ab640a0d90483d8023885877bfcd848f84abf9f1 100644 --- a/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceLockController.java +++ b/apollo-adminservice/src/main/java/com/ctrip/framework/apollo/adminservice/controller/NamespaceLockController.java @@ -8,7 +8,6 @@ import com.ctrip.framework.apollo.biz.utils.ApolloSwitcher; import com.ctrip.framework.apollo.common.utils.BeanUtils; import com.ctrip.framework.apollo.core.dto.NamespaceLockDTO; import com.ctrip.framework.apollo.core.exception.BadRequestException; -import com.ctrip.framework.apollo.core.exception.NotFoundException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; diff --git a/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/AllTests.java b/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/AllTests.java index 30e21a29d1f7baecaf61c46000c35e27b9f042fd..5d39055a1b47511929b6bf3e59770b60100d4d41 100644 --- a/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/AllTests.java +++ b/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/AllTests.java @@ -4,6 +4,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; +import com.ctrip.framework.apollo.adminservice.aop.NamespaceLockTest; import com.ctrip.framework.apollo.adminservice.controller.AppControllerTest; import com.ctrip.framework.apollo.adminservice.controller.ControllerExceptionTest; import com.ctrip.framework.apollo.adminservice.controller.ControllerIntegrationExceptionTest; @@ -12,7 +13,7 @@ import com.ctrip.framework.apollo.adminservice.controller.ReleaseControllerTest; @RunWith(Suite.class) @SuiteClasses({AppControllerTest.class, ReleaseControllerTest.class, ItemSetControllerTest.class, - ControllerExceptionTest.class, ControllerIntegrationExceptionTest.class}) + ControllerExceptionTest.class, ControllerIntegrationExceptionTest.class, NamespaceLockTest.class}) public class AllTests { } diff --git a/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockTest.java b/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockTest.java new file mode 100644 index 0000000000000000000000000000000000000000..12a790c9bac48f348b45d991955e3353bf1c2fce --- /dev/null +++ b/apollo-adminservice/src/test/java/com/ctrip/framework/apollo/adminservice/aop/NamespaceLockTest.java @@ -0,0 +1,150 @@ +package com.ctrip.framework.apollo.adminservice.aop; + + +import com.ctrip.framework.apollo.biz.entity.Namespace; +import com.ctrip.framework.apollo.biz.entity.NamespaceLock; +import com.ctrip.framework.apollo.biz.service.ItemService; +import com.ctrip.framework.apollo.biz.service.NamespaceLockService; +import com.ctrip.framework.apollo.biz.service.NamespaceService; +import com.ctrip.framework.apollo.biz.utils.ApolloSwitcher; +import com.ctrip.framework.apollo.core.exception.BadRequestException; +import com.ctrip.framework.apollo.core.exception.ServiceException; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.dao.DataIntegrityViolationException; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@RunWith(MockitoJUnitRunner.class) +public class NamespaceLockTest { + + private static final String APP = "app-test"; + private static final String CLUSTER = "cluster-test"; + private static final String NAMESPACE = "namespace-test"; + private static final String CURRENT_USER = "user-test"; + private static final String ANOTHER_USER = "user-test2"; + private static final long NAMESPACE_ID = 100; + + @Mock + private NamespaceLockService namespaceLockService; + @Mock + private NamespaceService namespaceService; + @Mock + private ItemService itemService; + @Mock + private ApolloSwitcher apolloSwitcher; + @InjectMocks + NamespaceLockAspect namespaceLockAspect; + + @Test + public void acquireLockWithNotLockedAndSwitchON() { + + when(apolloSwitcher.isNamespaceLockSwitchOff()).thenReturn(true); + + namespaceLockAspect.acquireLock(APP, CLUSTER, NAMESPACE, CURRENT_USER); + + verify(namespaceService, times(0)).findOne(APP, CLUSTER, NAMESPACE); + } + + @Test + public void acquireLockWithNotLockedAndSwitchOFF() { + + when(apolloSwitcher.isNamespaceLockSwitchOff()).thenReturn(false); + when(namespaceService.findOne(APP, CLUSTER, NAMESPACE)).thenReturn(mockNamespace()); + when(namespaceLockService.findLock(anyLong())).thenReturn(null); + + namespaceLockAspect.acquireLock(APP, CLUSTER, NAMESPACE, CURRENT_USER); + + verify(apolloSwitcher).isNamespaceLockSwitchOff(); + verify(namespaceService).findOne(APP, CLUSTER, NAMESPACE); + verify(namespaceLockService).findLock(anyLong()); + verify(namespaceLockService).tryLock(any()); + + } + + @Test(expected = BadRequestException.class) + public void acquireLockWithAlreadyLockedByOtherGuy() { + + when(apolloSwitcher.isNamespaceLockSwitchOff()).thenReturn(false); + when(namespaceService.findOne(APP, CLUSTER, NAMESPACE)).thenReturn(mockNamespace()); + when(namespaceLockService.findLock(NAMESPACE_ID)).thenReturn(mockNamespaceLock(ANOTHER_USER)); + + namespaceLockAspect.acquireLock(APP, CLUSTER, NAMESPACE, CURRENT_USER); + + verify(apolloSwitcher).isNamespaceLockSwitchOff(); + verify(namespaceService).findOne(APP, CLUSTER, NAMESPACE); + verify(namespaceLockService).findLock(NAMESPACE_ID); + } + + @Test + public void acquireLockWithAlreadyLockedBySelf() { + + when(apolloSwitcher.isNamespaceLockSwitchOff()).thenReturn(false); + when(namespaceService.findOne(APP, CLUSTER, NAMESPACE)).thenReturn(mockNamespace()); + when(namespaceLockService.findLock(NAMESPACE_ID)).thenReturn(mockNamespaceLock(CURRENT_USER)); + + namespaceLockAspect.acquireLock(APP, CLUSTER, NAMESPACE, CURRENT_USER); + + verify(apolloSwitcher).isNamespaceLockSwitchOff(); + verify(namespaceService).findOne(APP, CLUSTER, NAMESPACE); + verify(namespaceLockService).findLock(NAMESPACE_ID); + } + + @Test + public void acquireLockWithNamespaceIdSwitchOn(){ + + when(apolloSwitcher.isNamespaceLockSwitchOff()).thenReturn(false); + when(namespaceService.findOne(NAMESPACE_ID)).thenReturn(mockNamespace()); + when(namespaceLockService.findLock(NAMESPACE_ID)).thenReturn(null); + + namespaceLockAspect.acquireLock(NAMESPACE_ID, CURRENT_USER); + + verify(apolloSwitcher).isNamespaceLockSwitchOff(); + verify(namespaceService).findOne(NAMESPACE_ID); + verify(namespaceLockService).findLock(NAMESPACE_ID); + verify(namespaceLockService).tryLock(any()); + } + + @Test(expected = ServiceException.class) + public void testDuplicateLock(){ + + when(apolloSwitcher.isNamespaceLockSwitchOff()).thenReturn(false); + when(namespaceService.findOne(NAMESPACE_ID)).thenReturn(mockNamespace()); + when(namespaceLockService.findLock(NAMESPACE_ID)).thenReturn(null); + when(namespaceLockService.tryLock(any())).thenThrow(DataIntegrityViolationException.class); + + namespaceLockAspect.acquireLock(NAMESPACE_ID, CURRENT_USER); + + verify(apolloSwitcher).isNamespaceLockSwitchOff(); + verify(namespaceService).findOne(NAMESPACE_ID); + verify(namespaceLockService, times(2)).findLock(NAMESPACE_ID); + verify(namespaceLockService).tryLock(any()); + + } + + private Namespace mockNamespace() { + Namespace namespace = new Namespace(); + namespace.setId(NAMESPACE_ID); + namespace.setAppId(APP); + namespace.setClusterName(CLUSTER); + namespace.setNamespaceName(NAMESPACE); + return namespace; + } + + private NamespaceLock mockNamespaceLock(String locedUser) { + NamespaceLock lock = new NamespaceLock(); + lock.setNamespaceId(NAMESPACE_ID); + lock.setDataChangeCreatedBy(locedUser); + return lock; + } + + +} diff --git a/apollo-adminservice/src/test/resources/controller/cleanup.sql b/apollo-adminservice/src/test/resources/controller/cleanup.sql index d023436827302509e9f2e18e40c521e573e590f1..236be1d252cfceb560ac84e902e54e4f75b016a4 100644 --- a/apollo-adminservice/src/test/resources/controller/cleanup.sql +++ b/apollo-adminservice/src/test/resources/controller/cleanup.sql @@ -3,4 +3,6 @@ DELETE FROM Namespace; DELETE FROM AppNamespace; DELETE FROM Cluster; DELETE FROM App; +DELETE FROM NamespaceLock; +DELETE FROM ServerConfig; diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java index e104c14c6bc4b8d7772608f554aa3acbc519c4ec..4243d87ae3dafa7eca4ddecf38e4a10bee17e213 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/AppNamespaceService.java @@ -65,8 +65,7 @@ public class AppNamespaceService { @Transactional public AppNamespace createAppNamespaceInLocal(AppNamespace appNamespace) { // unique check - if (appNamespace.isPublic() && - appNamespaceRepository.findByNameAndIsPublic(appNamespace.getName(), true) != null) { + if (appNamespace.isPublic() && findPublicAppNamespace(appNamespace.getName()) != null) { throw new BadRequestException(appNamespace.getName() + "已存在"); } diff --git a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RoleInitializationService.java b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RoleInitializationService.java index 314d9f69bdf49a7b4a66e2aa63a7adf097bdcd3c..41d2064028b2654488eedd5236644a5e130985f8 100644 --- a/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RoleInitializationService.java +++ b/apollo-portal/src/main/java/com/ctrip/framework/apollo/portal/service/RoleInitializationService.java @@ -102,13 +102,12 @@ public class RoleInitializationService { private void createDefaultNamespaceRole(String appId, String namespaceName, String permissionType, String roleName) { - Permission - modifyDefaultNsPermission = + Permission permisson = createPermisson(RoleUtils.buildNamespaceTargetId(appId, namespaceName), permissionType); - Permission createdModifyDefaultNsPermission = rolePermissionService.createPermission(modifyDefaultNsPermission); + Permission createdPermission = rolePermissionService.createPermission(permisson); Role role = createRole(roleName); rolePermissionService - .createRoleWithPermissions(role, Sets.newHashSet(createdModifyDefaultNsPermission.getId())); + .createRoleWithPermissions(role, Sets.newHashSet(createdPermission.getId())); } } diff --git a/apollo-portal/src/main/resources/static/scripts/controller/config/ConfigNamespaceController.js b/apollo-portal/src/main/resources/static/scripts/controller/config/ConfigNamespaceController.js index aff22ce6377a5a284b220ca85bce79a5afbba3b0..9dd3e7a6a4be8065729f4d4db8c3d9adbf64ae37 100644 --- a/apollo-portal/src/main/resources/static/scripts/controller/config/ConfigNamespaceController.js +++ b/apollo-portal/src/main/resources/static/scripts/controller/config/ConfigNamespaceController.js @@ -99,9 +99,11 @@ application_module.controller("ConfigNamespaceController", toastr.success("更新成功, 如需生效请发布"); //refresh all namespace items $rootScope.refreshNamespaces(); + return true; }, function (result) { toastr.error(AppUtil.errorMsg(result), "更新失败"); + return false; } ); } diff --git a/apollo-portal/src/main/resources/static/scripts/directive/namespace-panel-directive.js b/apollo-portal/src/main/resources/static/scripts/directive/namespace-panel-directive.js index db07d94848dca3a813d4f1cefe0592134c68a3ca..9312533da42c78d6cc00a5fa96b87159329dfda8 100644 --- a/apollo-portal/src/main/resources/static/scripts/directive/namespace-panel-directive.js +++ b/apollo-portal/src/main/resources/static/scripts/directive/namespace-panel-directive.js @@ -120,10 +120,10 @@ directive_module.directive('apollonspanel', } function modifyByText(namespace) { - scope.commitChange(namespace); - namespace.commited = true; - toggleTextEditStatus(namespace); - + if (scope.commitChange(namespace)){ + namespace.commited = true; + toggleTextEditStatus(namespace); + } } function goToParentAppConfigPage(namespace) { diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractPortalTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractIntegrationTest.java similarity index 95% rename from apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractPortalTest.java rename to apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractIntegrationTest.java index 695fd00fa7f776becfd79f779e11a373b7ce6337..c2d79c596e6fef78ff954f65304af70bf79ffca4 100644 --- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractPortalTest.java +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractIntegrationTest.java @@ -15,7 +15,7 @@ import javax.annotation.PostConstruct; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = PortalApplication.class) @WebIntegrationTest(randomPort = true) -public abstract class AbstractPortalTest { +public abstract class AbstractIntegrationTest { RestTemplate restTemplate = new TestRestTemplate("apollo", ""); diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractUnitTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractUnitTest.java new file mode 100644 index 0000000000000000000000000000000000000000..79a8a12e210867b3625dd0887348e22a305adcf9 --- /dev/null +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AbstractUnitTest.java @@ -0,0 +1,9 @@ +package com.ctrip.framework.apollo.portal; + +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public abstract class AbstractUnitTest { + +} diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AllTests.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AllTests.java index ad3f512c93e3fbe3600dad6270ac61612356c23c..f3b62e68b54e0522020272d4c5488d01bd0419b9 100644 --- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AllTests.java +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/AllTests.java @@ -1,7 +1,13 @@ package com.ctrip.framework.apollo.portal; +import com.ctrip.framework.apollo.portal.service.AppNamespaceServiceTest; +import com.ctrip.framework.apollo.portal.service.ConfigServiceTest; +import com.ctrip.framework.apollo.portal.service.NamespaceServiceTest; +import com.ctrip.framework.apollo.portal.service.RoleInitializationServiceTest; import com.ctrip.framework.apollo.portal.service.RolePermissionServiceTest; +import com.ctrip.framework.apollo.portal.service.txtresolver.FileTextResolverTest; +import com.ctrip.framework.apollo.portal.service.txtresolver.PropertyResolverTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; @@ -10,7 +16,8 @@ import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ ConfigServiceTest.class, PropertyResolverTest.class, - NamespaceServiceTest.class, ServiceExceptionTest.class, RolePermissionServiceTest.class + NamespaceServiceTest.class, ServiceExceptionTest.class, RolePermissionServiceTest.class, + AppNamespaceServiceTest.class, RoleInitializationServiceTest.class, FileTextResolverTest.class }) public class AllTests { diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ServiceExceptionTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ServiceExceptionTest.java index 4425ef9a0b73dbc407314def0b1fbf4da6c51896..33a4c6db05bf64b8d0f41a16bd5807e6d098bed9 100644 --- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ServiceExceptionTest.java +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ServiceExceptionTest.java @@ -30,7 +30,7 @@ import com.ctrip.framework.apollo.portal.service.UserService; import com.google.gson.Gson; -public class ServiceExceptionTest extends AbstractPortalTest { +public class ServiceExceptionTest extends AbstractIntegrationTest { @Autowired private AppController appController; diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/AppNamespaceServiceTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/AppNamespaceServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3a805c9b8b3d8860ba2db0f49ce2f40846320473 --- /dev/null +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/AppNamespaceServiceTest.java @@ -0,0 +1,130 @@ +package com.ctrip.framework.apollo.portal.service; + +import com.ctrip.framework.apollo.common.entity.AppNamespace; +import com.ctrip.framework.apollo.core.ConfigConsts; +import com.ctrip.framework.apollo.core.enums.ConfigFileFormat; +import com.ctrip.framework.apollo.core.exception.BadRequestException; +import com.ctrip.framework.apollo.portal.AbstractIntegrationTest; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.jdbc.Sql; + +import java.util.List; + +public class AppNamespaceServiceTest extends AbstractIntegrationTest { + + @Autowired + private AppNamespaceService appNamespaceService; + + private final String APP = "app-test"; + + @Test + @Sql(scripts = "/sql/appnamespaceservice/init-appnamespace.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) + public void testFindPublicAppNamespace() { + + List appNamespaceList = appNamespaceService.findPublicAppNamespaces(); + + Assert.assertNotNull(appNamespaceList); + Assert.assertEquals(5, appNamespaceList.size()); + + } + + @Test + @Sql(scripts = "/sql/appnamespaceservice/init-appnamespace.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) + public void testFindPublicAppNamespaceByName() { + + Assert.assertNotNull(appNamespaceService.findPublicAppNamespace("datasourcexml")); + + Assert.assertNull(appNamespaceService.findPublicAppNamespace("TFF.song0711-02")); + } + + @Test + @Sql(scripts = "/sql/appnamespaceservice/init-appnamespace.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) + public void testFindPublicAppNamespaceByAppAndName() { + + Assert.assertNotNull(appNamespaceService.findByAppIdAndName("100003173", "datasourcexml")); + + Assert.assertNull(appNamespaceService.findByAppIdAndName("100003173", "TFF.song0711-02")); + } + + + @Test + @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) + public void testCreateDefaultAppNamespace() { + appNamespaceService.createDefaultAppNamespace(APP); + + AppNamespace appNamespace = appNamespaceService.findByAppIdAndName(APP, ConfigConsts.NAMESPACE_APPLICATION); + + Assert.assertNotNull(appNamespace); + Assert.assertEquals(ConfigFileFormat.Properties.getValue(), appNamespace.getFormat()); + + } + + @Test(expected = BadRequestException.class) + @Sql(scripts = "/sql/appnamespaceservice/init-appnamespace.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) + public void testCreatePublicAppNamespaceExisted() { + AppNamespace appNamespace = assmbleBaseAppNamespace(); + appNamespace.setPublic(true); + appNamespace.setName("FX.old"); + + appNamespaceService.createAppNamespaceInLocal(appNamespace); + } + + @Test + @Sql(scripts = "/sql/appnamespaceservice/init-appnamespace.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) + public void testCreatePublicAppNamespaceNotExisted() { + AppNamespace appNamespace = assmbleBaseAppNamespace(); + appNamespace.setPublic(true); + + appNamespaceService.createAppNamespaceInLocal(appNamespace); + + AppNamespace createdAppNamespace = appNamespaceService.findPublicAppNamespace(appNamespace.getName()); + + Assert.assertNotNull(createdAppNamespace); + Assert.assertEquals(appNamespace.getName(), createdAppNamespace.getName()); + } + + @Test(expected = BadRequestException.class) + @Sql(scripts = "/sql/appnamespaceservice/init-appnamespace.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) + public void testCreatePrivateAppNamespaceExisted() { + AppNamespace appNamespace = assmbleBaseAppNamespace(); + appNamespace.setPublic(false); + appNamespace.setName("datasource.xml"); + appNamespace.setAppId("100003173"); + + appNamespaceService.createAppNamespaceInLocal(appNamespace); + } + + @Test + @Sql(scripts = "/sql/appnamespaceservice/init-appnamespace.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) + public void testCreatePrivateAppNamespaceNotExisted() { + AppNamespace appNamespace = assmbleBaseAppNamespace(); + appNamespace.setPublic(false); + + appNamespaceService.createAppNamespaceInLocal(appNamespace); + + AppNamespace createdAppNamespace = + appNamespaceService.findByAppIdAndName(appNamespace.getAppId(), appNamespace.getName()); + + Assert.assertNotNull(createdAppNamespace); + Assert.assertEquals(appNamespace.getName(), createdAppNamespace.getName()); + } + + private AppNamespace assmbleBaseAppNamespace() { + AppNamespace appNamespace = new AppNamespace(); + appNamespace.setName("appNamespace"); + appNamespace.setAppId("1000"); + appNamespace.setFormat(ConfigFileFormat.XML.getValue()); + return appNamespace; + } + +} diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ConfigServiceTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/ConfigServiceTest.java similarity index 99% rename from apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ConfigServiceTest.java rename to apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/ConfigServiceTest.java index 6c07a44334663ada7fd99273e59d3e59dd8d6b27..6104b076185ac4fc10c1a1fd220865e296c2da10 100644 --- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/ConfigServiceTest.java +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/ConfigServiceTest.java @@ -1,4 +1,4 @@ -package com.ctrip.framework.apollo.portal; +package com.ctrip.framework.apollo.portal.service; import com.ctrip.framework.apollo.core.ConfigConsts; import com.ctrip.framework.apollo.core.dto.ItemChangeSets; diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/NamespaceServiceTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/NamespaceServiceTest.java similarity index 98% rename from apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/NamespaceServiceTest.java rename to apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/NamespaceServiceTest.java index 5c8cf5bb612865f8638e66c3c8ef6959ee627c52..b833874a8c6a4f1d7e58cbc3c3af1867d89ff200 100644 --- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/NamespaceServiceTest.java +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/NamespaceServiceTest.java @@ -1,4 +1,4 @@ -package com.ctrip.framework.apollo.portal; +package com.ctrip.framework.apollo.portal.service; import com.ctrip.framework.apollo.common.entity.AppNamespace; import com.ctrip.framework.apollo.core.dto.ItemDTO; diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RoleInitializationServiceTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RoleInitializationServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..053fa1249ebbe17a87a00f9a43c84a3c0f548093 --- /dev/null +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RoleInitializationServiceTest.java @@ -0,0 +1,159 @@ +package com.ctrip.framework.apollo.portal.service; + +import com.google.common.collect.Sets; + +import com.ctrip.framework.apollo.common.entity.App; +import com.ctrip.framework.apollo.portal.AbstractUnitTest; +import com.ctrip.framework.apollo.portal.auth.UserInfoHolder; +import com.ctrip.framework.apollo.portal.constant.PermissionType; +import com.ctrip.framework.apollo.portal.entity.po.Permission; +import com.ctrip.framework.apollo.portal.entity.po.Role; +import com.ctrip.framework.apollo.portal.entity.po.UserInfo; +import com.ctrip.framework.apollo.portal.util.RoleUtils; + +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anySet; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class RoleInitializationServiceTest extends AbstractUnitTest { + + private final String APP_ID = "1000"; + private final String APP_NAME = "app-test"; + private final String CLUSTER = "cluster-test"; + private final String NAMESPACE = "namespace-test"; + private final String CURRENT_USER = "user"; + + @Mock + private RolePermissionService rolePermissionService; + @Mock + private UserInfoHolder userInfoHolder; + @InjectMocks + private RoleInitializationService roleInitializationService; + + + @Test + public void testInitAppRoleHasInitBefore(){ + + when(rolePermissionService.findRoleByRoleName(anyString())).thenReturn(mockRole(RoleUtils.buildAppMasterRoleName(APP_ID))); + + roleInitializationService.initAppRoles(mockApp()); + + verify(rolePermissionService, times(1)).findRoleByRoleName(RoleUtils.buildAppMasterRoleName(APP_ID)); + verify(rolePermissionService, times(0)).assignRoleToUsers(anyString(), anySet(), anyString()); + } + + @Test + public void testInitAppRole(){ + + when(rolePermissionService.findRoleByRoleName(anyString())).thenReturn(null); + when(userInfoHolder.getUser()).thenReturn(mockUser()); + when(rolePermissionService.createPermission(any())).thenReturn(mockPermission()); + + roleInitializationService.initAppRoles(mockApp()); + + verify(rolePermissionService, times(3)).findRoleByRoleName(anyString()); + verify(rolePermissionService, times(1)).assignRoleToUsers( + RoleUtils.buildAppMasterRoleName(APP_ID), Sets.newHashSet(CURRENT_USER), CURRENT_USER); + verify(rolePermissionService, times(2)).createPermission(any()); + verify(rolePermissionService, times(3)).createRoleWithPermissions(any(), anySet()); + } + + @Test + public void testInitNamespaceRoleHasExisted(){ + + String modifyNamespaceRoleName = RoleUtils.buildModifyNamespaceRoleName(APP_ID, NAMESPACE); + when(rolePermissionService.findRoleByRoleName(modifyNamespaceRoleName)). + thenReturn(mockRole(modifyNamespaceRoleName)); + + String releaseNamespaceRoleName = RoleUtils.buildReleaseNamespaceRoleName(APP_ID, NAMESPACE); + when(rolePermissionService.findRoleByRoleName(releaseNamespaceRoleName)). + thenReturn(mockRole(releaseNamespaceRoleName)); + + roleInitializationService.initNamespaceRoles(APP_ID, NAMESPACE); + + verify(rolePermissionService, times(2)).findRoleByRoleName(anyString()); + verify(rolePermissionService, times(0)).createPermission(any()); + verify(rolePermissionService, times(0)).createRoleWithPermissions(any(), anySet()); + } + + @Test + public void testInitNamespaceRoleNotExisted(){ + + String modifyNamespaceRoleName = RoleUtils.buildModifyNamespaceRoleName(APP_ID, NAMESPACE); + when(rolePermissionService.findRoleByRoleName(modifyNamespaceRoleName)). + thenReturn(null); + + String releaseNamespaceRoleName = RoleUtils.buildReleaseNamespaceRoleName(APP_ID, NAMESPACE); + when(rolePermissionService.findRoleByRoleName(releaseNamespaceRoleName)). + thenReturn(null); + + when(userInfoHolder.getUser()).thenReturn(mockUser()); + when(rolePermissionService.createPermission(any())).thenReturn(mockPermission()); + + roleInitializationService.initNamespaceRoles(APP_ID, NAMESPACE); + + verify(rolePermissionService, times(2)).findRoleByRoleName(anyString()); + verify(rolePermissionService, times(2)).createPermission(any()); + verify(rolePermissionService, times(2)).createRoleWithPermissions(any(), anySet()); + } + + @Test + public void testInitNamespaceRoleModifyNSExisted(){ + + String modifyNamespaceRoleName = RoleUtils.buildModifyNamespaceRoleName(APP_ID, NAMESPACE); + when(rolePermissionService.findRoleByRoleName(modifyNamespaceRoleName)). + thenReturn(mockRole(modifyNamespaceRoleName)); + + String releaseNamespaceRoleName = RoleUtils.buildReleaseNamespaceRoleName(APP_ID, NAMESPACE); + when(rolePermissionService.findRoleByRoleName(releaseNamespaceRoleName)). + thenReturn(null); + + when(userInfoHolder.getUser()).thenReturn(mockUser()); + when(rolePermissionService.createPermission(any())).thenReturn(mockPermission()); + + roleInitializationService.initNamespaceRoles(APP_ID, NAMESPACE); + + verify(rolePermissionService, times(2)).findRoleByRoleName(anyString()); + verify(rolePermissionService, times(1)).createPermission(any()); + verify(rolePermissionService, times(1)).createRoleWithPermissions(any(), anySet()); + } + + private App mockApp(){ + App app = new App(); + app.setAppId(APP_ID); + app.setName(APP_NAME); + app.setOrgName("xx"); + app.setOrgId("1"); + app.setOwnerName(CURRENT_USER); + app.setDataChangeCreatedBy(CURRENT_USER); + return app; + } + + private Role mockRole(String roleName){ + Role role = new Role(); + role.setRoleName(roleName); + return role; + } + + private UserInfo mockUser(){ + UserInfo userInfo = new UserInfo(); + userInfo.setUserId(CURRENT_USER); + return userInfo; + } + + private Permission mockPermission(){ + Permission permission = new Permission(); + permission.setPermissionType(PermissionType.MODIFY_NAMESPACE); + permission.setTargetId(RoleUtils.buildNamespaceTargetId(APP_ID, NAMESPACE)); + return permission; + } + + +} diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RolePermissionServiceTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RolePermissionServiceTest.java index c3b0abe4cb2a6a93d18f96485105113b7617a331..0446bbd12a6e8f6cc490ea3c995db5aa05b90d20 100644 --- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RolePermissionServiceTest.java +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/RolePermissionServiceTest.java @@ -4,7 +4,7 @@ import com.google.common.collect.FluentIterable; import com.google.common.collect.Sets; import com.ctrip.framework.apollo.common.entity.BaseEntity; -import com.ctrip.framework.apollo.portal.AbstractPortalTest; +import com.ctrip.framework.apollo.portal.AbstractIntegrationTest; import com.ctrip.framework.apollo.portal.entity.po.Permission; import com.ctrip.framework.apollo.portal.entity.po.Role; import com.ctrip.framework.apollo.portal.entity.po.RolePermission; @@ -30,7 +30,7 @@ import static org.junit.Assert.assertTrue; /** * @author Jason Song(song_s@ctrip.com) */ -public class RolePermissionServiceTest extends AbstractPortalTest { +public class RolePermissionServiceTest extends AbstractIntegrationTest { @Autowired private RolePermissionService rolePermissionService; @@ -73,7 +73,7 @@ public class RolePermissionServiceTest extends AbstractPortalTest { } @Test(expected = IllegalStateException.class) - @Sql(scripts = "/sql/insert-test-permissions.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-permissions.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testCreatePermissionWithPermissionExisted() throws Exception { String someTargetId = "someTargetId"; @@ -119,7 +119,7 @@ public class RolePermissionServiceTest extends AbstractPortalTest { } @Test(expected = IllegalStateException.class) - @Sql(scripts = "/sql/insert-test-permissions.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-permissions.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testCreatePermissionsWithPermissionsExisted() throws Exception { String someTargetId = "someTargetId"; @@ -134,7 +134,7 @@ public class RolePermissionServiceTest extends AbstractPortalTest { } @Test - @Sql(scripts = "/sql/insert-test-permissions.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-permissions.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testCreateRoleWithPermissions() throws Exception { String someRoleName = "someRoleName"; @@ -158,7 +158,7 @@ public class RolePermissionServiceTest extends AbstractPortalTest { } @Test(expected = IllegalStateException.class) - @Sql(scripts = "/sql/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testCreateRoleWithPermissionsWithRoleExisted() throws Exception { String someRoleName = "someRoleName"; @@ -168,7 +168,7 @@ public class RolePermissionServiceTest extends AbstractPortalTest { } @Test - @Sql(scripts = "/sql/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testAssignRoleToUsers() throws Exception { String someRoleName = "someRoleName"; @@ -208,8 +208,8 @@ public class RolePermissionServiceTest extends AbstractPortalTest { } @Test - @Sql(scripts = "/sql/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) - @Sql(scripts = "/sql/insert-test-userroles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-userroles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testAssignRoleToUsersWithUserRolesExisted() throws Exception { String someRoleName = "someRoleName"; @@ -236,8 +236,8 @@ public class RolePermissionServiceTest extends AbstractPortalTest { } @Test - @Sql(scripts = "/sql/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) - @Sql(scripts = "/sql/insert-test-userroles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-userroles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testRemoveRoleFromUsers() throws Exception { String someRoleName = "someRoleName"; @@ -257,7 +257,7 @@ public class RolePermissionServiceTest extends AbstractPortalTest { } @Test(expected = IllegalStateException.class) - @Sql(scripts = "/sql/insert-test-userroles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-userroles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testRemoveRoleFromUsersWithRoleNotExisted() throws Exception { String someRoleName = "someRoleName"; @@ -270,8 +270,8 @@ public class RolePermissionServiceTest extends AbstractPortalTest { } @Test - @Sql(scripts = "/sql/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) - @Sql(scripts = "/sql/insert-test-userroles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-userroles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testQueryUsersWithRole() throws Exception { String someRoleName = "someRoleName"; @@ -284,10 +284,10 @@ public class RolePermissionServiceTest extends AbstractPortalTest { } @Test - @Sql(scripts = "/sql/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) - @Sql(scripts = "/sql/insert-test-permissions.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) - @Sql(scripts = "/sql/insert-test-userroles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) - @Sql(scripts = "/sql/insert-test-rolepermissions.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-roles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-permissions.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-userroles.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) + @Sql(scripts = "/sql/permission/insert-test-rolepermissions.sql", executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) @Sql(scripts = "/sql/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) public void testUserHasPermission() throws Exception { String someTargetId = "someTargetId"; diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/txtresolver/FileTextResolverTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/txtresolver/FileTextResolverTest.java new file mode 100644 index 0000000000000000000000000000000000000000..03d0d77024d1be99b352e7a85f392ff8ace17b0b --- /dev/null +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/txtresolver/FileTextResolverTest.java @@ -0,0 +1,54 @@ +package com.ctrip.framework.apollo.portal.service.txtresolver; + +import com.ctrip.framework.apollo.core.ConfigConsts; +import com.ctrip.framework.apollo.core.dto.ItemChangeSets; +import com.ctrip.framework.apollo.core.dto.ItemDTO; +import com.ctrip.framework.apollo.portal.AbstractUnitTest; + +import org.junit.Assert; +import org.junit.Test; +import org.mockito.InjectMocks; + +import java.util.Arrays; +import java.util.Collections; + +public class FileTextResolverTest extends AbstractUnitTest { + + @InjectMocks + private FileTextResolver resolver; + + private final String CONFIG_TEXT = "config_text"; + private final long NAMESPACE = 1000; + + @Test + public void testCreateItem(){ + ItemChangeSets changeSets = resolver.resolve(NAMESPACE, CONFIG_TEXT, Collections.emptyList()); + + Assert.assertEquals(1, changeSets.getCreateItems().size()); + Assert.assertEquals(0, changeSets.getUpdateItems().size()); + Assert.assertEquals(0, changeSets.getDeleteItems().size()); + + ItemDTO createdItem = changeSets.getCreateItems().get(0); + Assert.assertEquals(CONFIG_TEXT, createdItem.getValue()); + + } + + @Test + public void testUpdateItem(){ + ItemDTO existedItem = new ItemDTO(); + existedItem.setId(1000); + existedItem.setKey(ConfigConsts.CONFIG_FILE_CONTENT_KEY); + existedItem.setValue("before"); + + ItemChangeSets changeSets = resolver.resolve(NAMESPACE, CONFIG_TEXT, Arrays.asList(existedItem)); + + Assert.assertEquals(0, changeSets.getCreateItems().size()); + Assert.assertEquals(1, changeSets.getUpdateItems().size()); + Assert.assertEquals(0, changeSets.getDeleteItems().size()); + + ItemDTO updatedItem = changeSets.getUpdateItems().get(0); + Assert.assertEquals(CONFIG_TEXT, updatedItem.getValue()); + + } + +} diff --git a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/PropertyResolverTest.java b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/txtresolver/PropertyResolverTest.java similarity index 91% rename from apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/PropertyResolverTest.java rename to apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/txtresolver/PropertyResolverTest.java index 191819c9cd28dcfb98b61b06c3a0451146ff7aae..e36a437920d51dd49a7dc45f744b8ad095c33337 100644 --- a/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/PropertyResolverTest.java +++ b/apollo-portal/src/test/java/com/ctrip/framework/apollo/portal/service/txtresolver/PropertyResolverTest.java @@ -1,25 +1,23 @@ -package com.ctrip.framework.apollo.portal; +package com.ctrip.framework.apollo.portal.service.txtresolver; import com.ctrip.framework.apollo.core.dto.ItemChangeSets; import com.ctrip.framework.apollo.core.dto.ItemDTO; import com.ctrip.framework.apollo.core.exception.BadRequestException; -import com.ctrip.framework.apollo.portal.service.txtresolver.ConfigTextResolver; +import com.ctrip.framework.apollo.portal.AbstractUnitTest; import org.junit.Assert; import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; +import org.mockito.InjectMocks; import java.util.Arrays; import java.util.Collections; import java.util.List; -public class PropertyResolverTest extends AbstractPortalTest { +public class PropertyResolverTest extends AbstractUnitTest { - @Autowired - @Qualifier("propertyResolver") - private ConfigTextResolver resolver; + @InjectMocks + private PropertyResolver resolver; @Test public void testEmptyText() { diff --git a/apollo-portal/src/test/resources/sql/appnamespaceservice/init-appnamespace.sql b/apollo-portal/src/test/resources/sql/appnamespaceservice/init-appnamespace.sql new file mode 100644 index 0000000000000000000000000000000000000000..c1a4d11c2111961ab222e5d5e1bd0f3474b9f922 --- /dev/null +++ b/apollo-portal/src/test/resources/sql/appnamespaceservice/init-appnamespace.sql @@ -0,0 +1,9 @@ +INSERT INTO `appnamespace` (`Id`, `Name`, `AppId`, `Format`, `IsPublic`, `Comment`, `IsDeleted`, `DataChange_CreatedBy`, `DataChange_CreatedTime`, `DataChange_LastModifiedBy`, `DataChange_LastTime`) +VALUES + (139, 'FX.old', '100003173', 'properties', 1, '', 0, 'zhanglea', '2016-07-11 10:00:58', 'zhanglea', '2016-07-11 10:00:58'), + (140, 'SCC.song0711-03', 'song0711-01', 'properties', 1, '', 0, 'song_s', '2016-07-11 10:04:09', 'song_s', '2016-07-11 10:04:09'), + (141, 'SCC.song0711-04', 'song0711-01', 'properties', 1, '', 0, 'song_s', '2016-07-11 10:06:29', 'song_s', '2016-07-11 10:06:29'), + (142, 'application', 'song0711-02', 'properties', 1, 'default app namespace', 0, 'song_s', '2016-07-11 11:18:24', 'song_s', '2016-07-11 11:18:24'), + (143, 'TFF.song0711-02', 'song0711-02', 'properties', 0, '', 0, 'song_s', '2016-07-11 11:15:11', 'song_s', '2016-07-11 11:15:11'), + (144, 'datasourcexml', '100003173', 'xml', 1, '', 0, 'apollo', '2016-07-11 12:08:29', 'apollo', '2016-07-11 12:08:29'), + (145, 'datasource.xml', '100003173', 'xml', 0, '', 0, 'apollo', '2016-07-11 12:09:30', 'apollo', '2016-07-11 12:09:30'); diff --git a/apollo-portal/src/test/resources/sql/cleanup.sql b/apollo-portal/src/test/resources/sql/cleanup.sql index a15cffe971b9f40a1273a7e41a0fabdb5bc1a3c5..b533af6a0d1d254a1fa0e364ff64506ebf3656b6 100644 --- a/apollo-portal/src/test/resources/sql/cleanup.sql +++ b/apollo-portal/src/test/resources/sql/cleanup.sql @@ -2,3 +2,4 @@ delete from Permission; delete from Role; delete from RolePermission; delete from UserRole; +delete from AppNamespace; diff --git a/apollo-portal/src/test/resources/sql/insert-test-permissions.sql b/apollo-portal/src/test/resources/sql/permission/insert-test-permissions.sql similarity index 100% rename from apollo-portal/src/test/resources/sql/insert-test-permissions.sql rename to apollo-portal/src/test/resources/sql/permission/insert-test-permissions.sql diff --git a/apollo-portal/src/test/resources/sql/insert-test-rolepermissions.sql b/apollo-portal/src/test/resources/sql/permission/insert-test-rolepermissions.sql similarity index 100% rename from apollo-portal/src/test/resources/sql/insert-test-rolepermissions.sql rename to apollo-portal/src/test/resources/sql/permission/insert-test-rolepermissions.sql diff --git a/apollo-portal/src/test/resources/sql/insert-test-roles.sql b/apollo-portal/src/test/resources/sql/permission/insert-test-roles.sql similarity index 100% rename from apollo-portal/src/test/resources/sql/insert-test-roles.sql rename to apollo-portal/src/test/resources/sql/permission/insert-test-roles.sql diff --git a/apollo-portal/src/test/resources/sql/insert-test-userroles.sql b/apollo-portal/src/test/resources/sql/permission/insert-test-userroles.sql similarity index 100% rename from apollo-portal/src/test/resources/sql/insert-test-userroles.sql rename to apollo-portal/src/test/resources/sql/permission/insert-test-userroles.sql