mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
server: consistent behaviour for list apis with project=-1 (#11767)
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
parent
a574f7ac99
commit
dfcbd2e977
@ -2563,7 +2563,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||||||
} else {
|
} else {
|
||||||
SearchCriteria<NetworkVO> additionalSC = _networksDao.createSearchCriteria();
|
SearchCriteria<NetworkVO> additionalSC = _networksDao.createSearchCriteria();
|
||||||
|
|
||||||
addAccountSpecificNetworksToSearch(additionalSC, sb, networkFilter, skipProjectNetworks, permittedAccounts, path, isRecursive);
|
addAccountSpecificNetworksToSearch(additionalSC, sb, networkFilter, skipProjectNetworks, permittedAccounts, path, isRecursive, projectId);
|
||||||
addDomainSpecificNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, domainId, path, isRecursive);
|
addDomainSpecificNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, domainId, path, isRecursive);
|
||||||
addSharedNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, path, isRecursive);
|
addSharedNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, path, isRecursive);
|
||||||
|
|
||||||
@ -2623,7 +2623,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||||||
|
|
||||||
private void addAccountSpecificNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb,
|
private void addAccountSpecificNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb,
|
||||||
Network.NetworkFilter networkFilter, boolean skipProjectNetworks,
|
Network.NetworkFilter networkFilter, boolean skipProjectNetworks,
|
||||||
List<Long> permittedAccounts, String path, boolean isRecursive) {
|
List<Long> permittedAccounts, String path, boolean isRecursive, Long projectId) {
|
||||||
if (!Arrays.asList(Network.NetworkFilter.Account, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) {
|
if (!Arrays.asList(Network.NetworkFilter.Account, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2642,7 +2642,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||||||
} else {
|
} else {
|
||||||
accountSC.addAnd("accountId", SearchCriteria.Op.IN, permittedAccounts.toArray());
|
accountSC.addAnd("accountId", SearchCriteria.Op.IN, permittedAccounts.toArray());
|
||||||
}
|
}
|
||||||
addProjectNetworksConditionToSearch(accountSC, skipProjectNetworks);
|
addProjectNetworksConditionToSearch(accountSC, skipProjectNetworks, projectId);
|
||||||
additionalSC.addOr("id", SearchCriteria.Op.SC, accountSC);
|
additionalSC.addOr("id", SearchCriteria.Op.SC, accountSC);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2823,8 +2823,17 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addProjectNetworksConditionToSearch(SearchCriteria<NetworkVO> sc, boolean skipProjectNetworks) {
|
protected void addProjectNetworksConditionToSearch(SearchCriteria<NetworkVO> sc, boolean skipProjectNetworks) {
|
||||||
sc.getJoin("account").addAnd("type", skipProjectNetworks ? Op.NEQ : Op.EQ, Account.Type.PROJECT);
|
addProjectNetworksConditionToSearch(sc, skipProjectNetworks, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addProjectNetworksConditionToSearch(SearchCriteria<NetworkVO> sc, boolean skipProjectNetworks,
|
||||||
|
Long projectId) {
|
||||||
|
if (!skipProjectNetworks && projectId == -1) {
|
||||||
|
sc.getJoin("account").addAnd("type", Op.NNULL);
|
||||||
|
} else {
|
||||||
|
sc.getJoin("account").addAnd("type", skipProjectNetworks ? Op.NEQ : Op.EQ, Account.Type.PROJECT);
|
||||||
|
}
|
||||||
sc.addAnd("id", Op.SC, sc.getJoin("account"));
|
sc.addAnd("id", Op.SC, sc.getJoin("account"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -114,6 +114,7 @@ import com.cloud.user.dao.UserDao;
|
|||||||
import com.cloud.utils.Pair;
|
import com.cloud.utils.Pair;
|
||||||
import com.cloud.utils.component.ComponentContext;
|
import com.cloud.utils.component.ComponentContext;
|
||||||
import com.cloud.utils.db.EntityManager;
|
import com.cloud.utils.db.EntityManager;
|
||||||
|
import com.cloud.utils.db.SearchCriteria;
|
||||||
import com.cloud.utils.exception.CloudRuntimeException;
|
import com.cloud.utils.exception.CloudRuntimeException;
|
||||||
import com.cloud.utils.net.Ip;
|
import com.cloud.utils.net.Ip;
|
||||||
import com.cloud.vm.DomainRouterVO;
|
import com.cloud.vm.DomainRouterVO;
|
||||||
@ -1299,4 +1300,34 @@ public class NetworkServiceImplTest {
|
|||||||
Assert.assertEquals("Mac address is not valid: invalid-mac", e.getMessage());
|
Assert.assertEquals("Mac address is not valid: invalid-mac", e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void addProjectNetworksConditionToSearch_includesProjectNetworksWhenNotSkipped() {
|
||||||
|
SearchCriteria<NetworkVO> sc = Mockito.mock(SearchCriteria.class);
|
||||||
|
SearchCriteria accountJoin = Mockito.mock(SearchCriteria.class);
|
||||||
|
Mockito.when(sc.getJoin("account")).thenReturn(accountJoin);
|
||||||
|
service.addProjectNetworksConditionToSearch(sc, false, -1L);
|
||||||
|
Mockito.verify(accountJoin).addAnd("type", SearchCriteria.Op.NNULL);
|
||||||
|
Mockito.verify(sc).addAnd("id", SearchCriteria.Op.SC, accountJoin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void addProjectNetworksConditionToSearch_excludesProjectNetworksWhenSkipped() {
|
||||||
|
SearchCriteria<NetworkVO> sc = Mockito.mock(SearchCriteria.class);
|
||||||
|
SearchCriteria accountJoin = Mockito.mock(SearchCriteria.class);
|
||||||
|
Mockito.when(sc.getJoin("account")).thenReturn(accountJoin);
|
||||||
|
service.addProjectNetworksConditionToSearch(sc, true, -1L);
|
||||||
|
Mockito.verify(accountJoin).addAnd("type", SearchCriteria.Op.NEQ, Account.Type.PROJECT);
|
||||||
|
Mockito.verify(sc).addAnd("id", SearchCriteria.Op.SC, accountJoin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void addProjectNetworksConditionToSearch_includesSpecificProjectWhenProjectIdProvided() {
|
||||||
|
SearchCriteria<NetworkVO> sc = Mockito.mock(SearchCriteria.class);
|
||||||
|
SearchCriteria accountJoin = Mockito.mock(SearchCriteria.class);
|
||||||
|
Mockito.when(sc.getJoin("account")).thenReturn(accountJoin);
|
||||||
|
service.addProjectNetworksConditionToSearch(sc, false, 123L);
|
||||||
|
Mockito.verify(accountJoin).addAnd("type", SearchCriteria.Op.EQ, Account.Type.PROJECT);
|
||||||
|
Mockito.verify(sc).addAnd("id", SearchCriteria.Op.SC, accountJoin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user