Skip to content

Commit 7ddd642

Browse files
shwstpprdhslove
authored andcommitted
server: consistent behaviour for list apis with project=-1 (apache#11767)
Signed-off-by: Abhishek Kumar <[email protected]>
1 parent 98a2cbe commit 7ddd642

File tree

2 files changed

+45
-5
lines changed

2 files changed

+45
-5
lines changed

server/src/main/java/com/cloud/network/NetworkServiceImpl.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2563,7 +2563,7 @@ public Pair<List<? extends Network>, Integer> searchForNetworks(ListNetworksCmd
25632563
} else {
25642564
SearchCriteria<NetworkVO> additionalSC = _networksDao.createSearchCriteria();
25652565

2566-
addAccountSpecificNetworksToSearch(additionalSC, sb, networkFilter, skipProjectNetworks, permittedAccounts, path, isRecursive);
2566+
addAccountSpecificNetworksToSearch(additionalSC, sb, networkFilter, skipProjectNetworks, permittedAccounts, path, isRecursive, projectId);
25672567
addDomainSpecificNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, domainId, path, isRecursive);
25682568
addSharedNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, path, isRecursive);
25692569

@@ -2623,7 +2623,7 @@ public Pair<List<? extends Network>, Integer> searchForNetworks(ListNetworksCmd
26232623

26242624
private void addAccountSpecificNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb,
26252625
Network.NetworkFilter networkFilter, boolean skipProjectNetworks,
2626-
List<Long> permittedAccounts, String path, boolean isRecursive) {
2626+
List<Long> permittedAccounts, String path, boolean isRecursive, Long projectId) {
26272627
if (!Arrays.asList(Network.NetworkFilter.Account, Network.NetworkFilter.AccountDomain, Network.NetworkFilter.All).contains(networkFilter)) {
26282628
return;
26292629
}
@@ -2642,7 +2642,7 @@ private void addAccountSpecificNetworksToSearch(SearchCriteria<NetworkVO> additi
26422642
} else {
26432643
accountSC.addAnd("accountId", SearchCriteria.Op.IN, permittedAccounts.toArray());
26442644
}
2645-
addProjectNetworksConditionToSearch(accountSC, skipProjectNetworks);
2645+
addProjectNetworksConditionToSearch(accountSC, skipProjectNetworks, projectId);
26462646
additionalSC.addOr("id", SearchCriteria.Op.SC, accountSC);
26472647
}
26482648

@@ -2824,8 +2824,17 @@ private void addDomainNetworksByDomainPathToSearch(SearchCriteria<NetworkVO> add
28242824
}
28252825
}
28262826

2827-
private void addProjectNetworksConditionToSearch(SearchCriteria<NetworkVO> sc, boolean skipProjectNetworks) {
2828-
sc.getJoin("account").addAnd("type", skipProjectNetworks ? Op.NEQ : Op.EQ, Account.Type.PROJECT);
2827+
protected void addProjectNetworksConditionToSearch(SearchCriteria<NetworkVO> sc, boolean skipProjectNetworks) {
2828+
addProjectNetworksConditionToSearch(sc, skipProjectNetworks, null);
2829+
}
2830+
2831+
protected void addProjectNetworksConditionToSearch(SearchCriteria<NetworkVO> sc, boolean skipProjectNetworks,
2832+
Long projectId) {
2833+
if (!skipProjectNetworks && projectId == -1) {
2834+
sc.getJoin("account").addAnd("type", Op.NNULL);
2835+
} else {
2836+
sc.getJoin("account").addAnd("type", skipProjectNetworks ? Op.NEQ : Op.EQ, Account.Type.PROJECT);
2837+
}
28292838
sc.addAnd("id", Op.SC, sc.getJoin("account"));
28302839
}
28312840

server/src/test/java/com/cloud/network/NetworkServiceImplTest.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
import com.cloud.utils.Pair;
115115
import com.cloud.utils.component.ComponentContext;
116116
import com.cloud.utils.db.EntityManager;
117+
import com.cloud.utils.db.SearchCriteria;
117118
import com.cloud.utils.exception.CloudRuntimeException;
118119
import com.cloud.utils.net.Ip;
119120
import com.cloud.vm.DomainRouterVO;
@@ -1299,4 +1300,34 @@ public void testGetIpAddressesFromIps() {
12991300
Assert.assertEquals("Mac address is not valid: invalid-mac", e.getMessage());
13001301
}
13011302
}
1303+
1304+
@Test
1305+
public void addProjectNetworksConditionToSearch_includesProjectNetworksWhenNotSkipped() {
1306+
SearchCriteria<NetworkVO> sc = Mockito.mock(SearchCriteria.class);
1307+
SearchCriteria accountJoin = Mockito.mock(SearchCriteria.class);
1308+
Mockito.when(sc.getJoin("account")).thenReturn(accountJoin);
1309+
service.addProjectNetworksConditionToSearch(sc, false, -1L);
1310+
Mockito.verify(accountJoin).addAnd("type", SearchCriteria.Op.NNULL);
1311+
Mockito.verify(sc).addAnd("id", SearchCriteria.Op.SC, accountJoin);
1312+
}
1313+
1314+
@Test
1315+
public void addProjectNetworksConditionToSearch_excludesProjectNetworksWhenSkipped() {
1316+
SearchCriteria<NetworkVO> sc = Mockito.mock(SearchCriteria.class);
1317+
SearchCriteria accountJoin = Mockito.mock(SearchCriteria.class);
1318+
Mockito.when(sc.getJoin("account")).thenReturn(accountJoin);
1319+
service.addProjectNetworksConditionToSearch(sc, true, -1L);
1320+
Mockito.verify(accountJoin).addAnd("type", SearchCriteria.Op.NEQ, Account.Type.PROJECT);
1321+
Mockito.verify(sc).addAnd("id", SearchCriteria.Op.SC, accountJoin);
1322+
}
1323+
1324+
@Test
1325+
public void addProjectNetworksConditionToSearch_includesSpecificProjectWhenProjectIdProvided() {
1326+
SearchCriteria<NetworkVO> sc = Mockito.mock(SearchCriteria.class);
1327+
SearchCriteria accountJoin = Mockito.mock(SearchCriteria.class);
1328+
Mockito.when(sc.getJoin("account")).thenReturn(accountJoin);
1329+
service.addProjectNetworksConditionToSearch(sc, false, 123L);
1330+
Mockito.verify(accountJoin).addAnd("type", SearchCriteria.Op.EQ, Account.Type.PROJECT);
1331+
Mockito.verify(sc).addAnd("id", SearchCriteria.Op.SC, accountJoin);
1332+
}
13021333
}

0 commit comments

Comments
 (0)