Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions server/src/main/java/com/cloud/network/NetworkServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2562,7 +2562,7 @@ public Pair<List<? extends Network>, Integer> searchForNetworks(ListNetworksCmd
} else {
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);
addSharedNetworksToSearch(additionalSC, sb, networkFilter, permittedAccounts, path, isRecursive);

Expand Down Expand Up @@ -2622,7 +2622,7 @@ public Pair<List<? extends Network>, Integer> searchForNetworks(ListNetworksCmd

private void addAccountSpecificNetworksToSearch(SearchCriteria<NetworkVO> additionalSC, SearchBuilder<NetworkVO> sb,
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)) {
return;
}
Expand All @@ -2641,7 +2641,7 @@ private void addAccountSpecificNetworksToSearch(SearchCriteria<NetworkVO> additi
} else {
accountSC.addAnd("accountId", SearchCriteria.Op.IN, permittedAccounts.toArray());
}
addProjectNetworksConditionToSearch(accountSC, skipProjectNetworks);
addProjectNetworksConditionToSearch(accountSC, skipProjectNetworks, projectId);
additionalSC.addOr("id", SearchCriteria.Op.SC, accountSC);
}

Expand Down Expand Up @@ -2818,8 +2818,17 @@ private void addDomainNetworksByDomainPathToSearch(SearchCriteria<NetworkVO> add
}
}

private void addProjectNetworksConditionToSearch(SearchCriteria<NetworkVO> sc, boolean skipProjectNetworks) {
sc.getJoin("account").addAnd("type", skipProjectNetworks ? Op.NEQ : Op.EQ, Account.Type.PROJECT);
protected void addProjectNetworksConditionToSearch(SearchCriteria<NetworkVO> sc, boolean skipProjectNetworks) {
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"));
}

Expand Down
31 changes: 31 additions & 0 deletions server/src/test/java/com/cloud/network/NetworkServiceImplTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@
import com.cloud.utils.Pair;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.db.EntityManager;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.Ip;
import com.cloud.vm.DomainRouterVO;
Expand Down Expand Up @@ -1299,4 +1300,34 @@ public void testGetIpAddressesFromIps() {
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