Skip to content

Commit

Permalink
Merge pull request apolloconfig#1894 from nobodyiam/fix-1893
Browse files Browse the repository at this point in the history
do not allow user to create private app namespace with the same name as some public app namespace
  • Loading branch information
nobodyiam authored Jan 18, 2019
2 parents b794f38 + 76984a9 commit 96dca9d
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -135,14 +135,16 @@ public AppNamespace createAppNamespaceInLocal(AppNamespace appNamespace, boolean

appNamespace.setDataChangeLastModifiedBy(operator);

// globally uniqueness check
// globally uniqueness check for public app namespace
if (appNamespace.isPublic()) {
checkAppNamespaceGlobalUniqueness(appNamespace);
}

if (!appNamespace.isPublic() &&
appNamespaceRepository.findByAppIdAndName(appNamespace.getAppId(), appNamespace.getName()) != null) {
throw new BadRequestException("Private AppNamespace " + appNamespace.getName() + " already exists!");
} else {
// check private app namespace
if (appNamespaceRepository.findByAppIdAndName(appNamespace.getAppId(), appNamespace.getName()) != null) {
throw new BadRequestException("Private AppNamespace " + appNamespace.getName() + " already exists!");
}
// should not have the same with public app namespace
checkPublicAppNamespaceGlobalUniqueness(appNamespace);
}

AppNamespace createdAppNamespace = appNamespaceRepository.save(appNamespace);
Expand All @@ -154,10 +156,7 @@ public AppNamespace createAppNamespaceInLocal(AppNamespace appNamespace, boolean
}

private void checkAppNamespaceGlobalUniqueness(AppNamespace appNamespace) {
AppNamespace publicAppNamespace = findPublicAppNamespace(appNamespace.getName());
if (publicAppNamespace != null) {
throw new BadRequestException("Public AppNamespace " + appNamespace.getName() + " already exists in appId: " + publicAppNamespace.getAppId() + "!");
}
checkPublicAppNamespaceGlobalUniqueness(appNamespace);

List<AppNamespace> privateAppNamespaces = findAllPrivateAppNamespaces(appNamespace.getName());

Expand All @@ -176,6 +175,13 @@ private void checkAppNamespaceGlobalUniqueness(AppNamespace appNamespace) {
}
}

private void checkPublicAppNamespaceGlobalUniqueness(AppNamespace appNamespace) {
AppNamespace publicAppNamespace = findPublicAppNamespace(appNamespace.getName());
if (publicAppNamespace != null) {
throw new BadRequestException("Public AppNamespace " + appNamespace.getName() + " already exists in appId: " + publicAppNamespace.getAppId() + "!");
}
}


@Transactional
public AppNamespace deleteAppNamespace(String appId, String namespaceName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,18 @@ public void testCreatePublicAppNamespaceExisted() {
appNamespaceService.createAppNamespaceInLocal(appNamespace);
}

@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 testCreatePublicAppNamespaceExistedAsPrivateAppNamespace() {
AppNamespace appNamespace = assmbleBaseAppNamespace();
appNamespace.setPublic(true);
appNamespace.setName("private-01");
appNamespace.setFormat(ConfigFileFormat.Properties.getValue());

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)
Expand Down Expand Up @@ -122,8 +134,39 @@ public void testCreatePublicAppNamespaceNotExisted() {
public void testCreatePrivateAppNamespaceExisted() {
AppNamespace appNamespace = assmbleBaseAppNamespace();
appNamespace.setPublic(false);
appNamespace.setName("datasource.xml");
appNamespace.setName("datasource");
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 testCreatePrivateAppNamespaceExistedInAnotherAppId() {
AppNamespace appNamespace = assmbleBaseAppNamespace();
appNamespace.setPublic(false);
appNamespace.setName("datasource");
appNamespace.setAppId("song0711-01");

appNamespaceService.createAppNamespaceInLocal(appNamespace);

AppNamespace createdAppNamespace =
appNamespaceService.findByAppIdAndName(appNamespace.getAppId(), 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 testCreatePrivateAppNamespaceExistedInAnotherAppIdAsPublic() {
AppNamespace appNamespace = assmbleBaseAppNamespace();
appNamespace.setPublic(false);
appNamespace.setName("SCC.song0711-03");
appNamespace.setAppId("100003173");
appNamespace.setFormat(ConfigFileFormat.Properties.getValue());

appNamespaceService.createAppNamespaceInLocal(appNamespace);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@ VALUES
(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');
(145, 'datasource.xml', '100003173', 'xml', 0, '', 0, 'apollo', '2016-07-11 12:09:30', 'apollo', '2016-07-11 12:09:30'),
(146, 'FX.private-01', '100003173', 'properties', 0, '', 0, 'apollo', '2016-07-11 12:09:30', 'apollo', '2016-07-11 12:09:30');;

INSERT INTO `app` (`AppId`, `Name`, `OrgId`, `OrgName`, `OwnerName`, `OwnerEmail`, `IsDeleted`, `DataChange_CreatedBy`, `DataChange_LastModifiedBy`)
VALUES
('1000', 'apollo-portal', 'FX', '框架', 'song_s', '[email protected]', 0, 'song_s', 'song_s');
('1000', 'apollo-test', 'FX', '框架', 'song_s', '[email protected]', 0, 'song_s', 'song_s'),
('song0711-01', 'song0711-01', 'SCC', '框架', 'song_s', '[email protected]', 0, 'song_s', 'song_s'),
('song0711-02', 'song0711-02', 'SCC', '框架', 'song_s', '[email protected]', 0, 'song_s', 'song_s'),
('100003173', 'apollo-portal', 'FX', '框架', 'song_s', '[email protected]', 0, 'song_s', 'song_s');

0 comments on commit 96dca9d

Please sign in to comment.