Skip to content

Commit 4ffeec6

Browse files
vpc: create vpc tiers with dns server of vpc instead of zone (#8621)
* vpc: create vpc tiers with dns server of vpc instead of zone with this change ``` root@r-575-VM:~# cat /etc/dnsmasq.d/cloud.conf dhcp-hostsfile=/etc/dhcphosts.txt listen-address=127.0.0.1,172.17.1.1,172.17.2.1,172.17.3.1 dhcp-range=set:interface-eth2-0,172.17.1.1,static dhcp-option=tag:interface-eth2-0,15,cs2cloud.internal dhcp-option=tag:interface-eth2-0,6,172.17.1.1,10.0.32.1,8.8.8.8 dhcp-option=tag:interface-eth2-0,3,172.17.1.1 dhcp-option=eth2,26,1500 dhcp-option=tag:interface-eth2-0,1,255.255.255.0 dhcp-range=set:interface-eth3-1,172.17.2.1,static dhcp-option=tag:interface-eth3-1,15,cs2cloud.internal dhcp-option=tag:interface-eth3-1,6,172.17.2.1,8.8.8.8,1.1.1.1 dhcp-option=tag:interface-eth3-1,3,172.17.2.1 dhcp-option=eth3,26,1500 dhcp-option=tag:interface-eth3-1,1,255.255.255.0 dhcp-range=set:interface-eth4-2,172.17.3.1,static dhcp-option=tag:interface-eth4-2,15,cs2cloud.internal dhcp-option=tag:interface-eth4-2,6,172.17.3.1,8.8.8.8,1.1.1.1 dhcp-option=tag:interface-eth4-2,3,172.17.3.1 dhcp-option=eth4,26,1500 dhcp-option=tag:interface-eth4-2,1,255.255.255.0 root@r-575-VM:~# ``` * Update PR8621 test:ArgumentMatchers instead of Matchers in test
1 parent 6def370 commit 4ffeec6

File tree

2 files changed

+72
-26
lines changed

2 files changed

+72
-26
lines changed

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,10 @@
102102
import com.cloud.network.rules.FirewallRule.Purpose;
103103
import com.cloud.network.rules.FirewallRuleVO;
104104
import com.cloud.network.rules.dao.PortForwardingRulesDao;
105+
import com.cloud.network.vpc.Vpc;
105106
import com.cloud.network.vpc.VpcGatewayVO;
106107
import com.cloud.network.vpc.dao.PrivateIpDao;
108+
import com.cloud.network.vpc.dao.VpcDao;
107109
import com.cloud.network.vpc.dao.VpcGatewayDao;
108110
import com.cloud.offering.NetworkOffering;
109111
import com.cloud.offering.NetworkOffering.Detail;
@@ -180,6 +182,8 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi
180182
ProjectDao projectDao;
181183
@Inject
182184
NetworkPermissionDao _networkPermissionDao;
185+
@Inject
186+
VpcDao vpcDao;
183187

184188
private List<NetworkElement> networkElements;
185189

@@ -2715,6 +2719,12 @@ public Pair<String, String> getNetworkIp4Dns(final Network network, final DataCe
27152719
if (StringUtils.isNotBlank(network.getDns1())) {
27162720
return new Pair<>(network.getDns1(), network.getDns2());
27172721
}
2722+
if (network.getVpcId() != null) {
2723+
Vpc vpc = vpcDao.findById(network.getVpcId());
2724+
if (vpc != null && StringUtils.isNotBlank(vpc.getIp4Dns1())) {
2725+
return new Pair<>(vpc.getIp4Dns1(), vpc.getIp4Dns2());
2726+
}
2727+
}
27182728
return new Pair<>(zone.getDns1(), zone.getDns2());
27192729
}
27202730

@@ -2723,6 +2733,12 @@ public Pair<String, String> getNetworkIp6Dns(final Network network, final DataCe
27232733
if (StringUtils.isNotBlank(network.getIp6Dns1())) {
27242734
return new Pair<>(network.getIp6Dns1(), network.getIp6Dns2());
27252735
}
2736+
if (network.getVpcId() != null) {
2737+
Vpc vpc = vpcDao.findById(network.getVpcId());
2738+
if (vpc != null && StringUtils.isNotBlank(vpc.getIp6Dns1())) {
2739+
return new Pair<>(vpc.getIp6Dns1(), vpc.getIp6Dns2());
2740+
}
2741+
}
27262742
return new Pair<>(zone.getIp6Dns1(), zone.getIp6Dns2());
27272743
}
27282744

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

Lines changed: 56 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,48 @@
1818

1919
import com.cloud.dc.DataCenter;
2020
import com.cloud.exception.InvalidParameterValueException;
21+
import com.cloud.network.vpc.VpcVO;
22+
import com.cloud.network.vpc.dao.VpcDao;
2123
import com.cloud.utils.Pair;
2224
import org.junit.Assert;
2325
import org.junit.Test;
26+
import org.junit.runner.RunWith;
27+
import org.mockito.ArgumentMatchers;
2428
import org.mockito.InjectMocks;
29+
import org.mockito.Mock;
2530
import org.mockito.Mockito;
31+
import org.mockito.junit.MockitoJUnitRunner;
2632

33+
@RunWith(MockitoJUnitRunner.class)
2734
public class NetworkModelImplTest {
28-
final String[] ip4Dns1 = {"5.5.5.5", "6.6.6.6"};
29-
final String[] ip4Dns2 = {"7.7.7.7", "8.8.8.8"};
30-
final String[] ip6Dns1 = {"2001:4860:4860::5555", "2001:4860:4860::6666"};
31-
final String[] ip6Dns2 = {"2001:4860:4860::7777", "2001:4860:4860::8888"};
35+
final String[] ip4Dns1 = {"5.5.5.5", "6.6.6.6", "9.9.9.9"};
36+
final String[] ip4Dns2 = {"7.7.7.7", "8.8.8.8", "10.10.10.10"};
37+
final String[] ip6Dns1 = {"2001:4860:4860::5555", "2001:4860:4860::6666", "2001:4860:4860::9999"};
38+
final String[] ip6Dns2 = {"2001:4860:4860::7777", "2001:4860:4860::8888", "2001:4860:4860::AAAA"};
39+
40+
@Mock
41+
private VpcDao vpcDao;
3242

3343
@InjectMocks
3444
private NetworkModelImpl networkModel = new NetworkModelImpl();
3545

36-
private void prepareMocks(boolean isIp6, Network network, DataCenter zone,
37-
String dns1, String dns2, String dns3, String dns4) {
46+
private void prepareMocks(boolean isIp6, Network network, DataCenter zone, VpcVO vpc,
47+
String networkDns1, String zoneDns1, String networkDns2, String zoneDns2,
48+
String vpcDns1, String vpcDns2) {
3849
if (isIp6) {
39-
Mockito.when(network.getIp6Dns1()).thenReturn(dns1);
40-
Mockito.when(zone.getIp6Dns1()).thenReturn(dns2);
41-
Mockito.when(network.getIp6Dns2()).thenReturn(dns3);
42-
Mockito.when(zone.getIp6Dns2()).thenReturn(dns4);
50+
Mockito.when(network.getIp6Dns1()).thenReturn(networkDns1);
51+
Mockito.when(zone.getIp6Dns1()).thenReturn(zoneDns1);
52+
Mockito.when(network.getIp6Dns2()).thenReturn(networkDns2);
53+
Mockito.when(zone.getIp6Dns2()).thenReturn(zoneDns2);
54+
Mockito.when(vpc.getIp6Dns1()).thenReturn(vpcDns1);
55+
Mockito.when(vpc.getIp6Dns2()).thenReturn(vpcDns2);
4356
} else {
44-
Mockito.when(network.getDns1()).thenReturn(dns1);
45-
Mockito.when(zone.getDns1()).thenReturn(dns2);
46-
Mockito.when(network.getDns2()).thenReturn(dns3);
47-
Mockito.when(zone.getDns2()).thenReturn(dns4);
57+
Mockito.when(network.getDns1()).thenReturn(networkDns1);
58+
Mockito.when(zone.getDns1()).thenReturn(zoneDns1);
59+
Mockito.when(network.getDns2()).thenReturn(networkDns2);
60+
Mockito.when(zone.getDns2()).thenReturn(zoneDns2);
61+
Mockito.when(vpc.getIp4Dns1()).thenReturn(vpcDns1);
62+
Mockito.when(vpc.getIp4Dns2()).thenReturn(vpcDns2);
4863
}
4964
}
5065

@@ -53,38 +68,53 @@ private void testDnsCases(boolean isIp6) {
5368
String[] dns2 = isIp6 ? ip6Dns2 : ip4Dns2;
5469
Network network = Mockito.mock(Network.class);
5570
DataCenter zone = Mockito.mock(DataCenter.class);
56-
// Both network and zone have valid dns
57-
prepareMocks(isIp6, network, zone, dns1[0], dns1[1], dns2[0], dns1[1]);
71+
VpcVO vpc = Mockito.mock(VpcVO.class);
72+
Mockito.when(network.getVpcId()).thenReturn(1L);
73+
Mockito.doReturn(vpc).when(vpcDao).findById(ArgumentMatchers.anyLong());
74+
// network, vpc and zone have valid dns
75+
prepareMocks(isIp6, network, zone, vpc, dns1[0], dns1[1], dns2[0], dns2[1], dns1[2], dns2[2]);
5876
Pair<String, String> result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
5977
networkModel.getNetworkIp4Dns(network, zone);
6078
Assert.assertEquals(dns1[0], result.first());
6179
Assert.assertEquals(dns2[0], result.second());
62-
// Network has valid dns and zone don't
63-
prepareMocks(isIp6, network, zone, dns1[0], null, dns2[0], null);
80+
// Network has valid dns and vpc/zone don't
81+
prepareMocks(isIp6, network, zone, vpc, dns1[0], null, dns2[0], null, null, null);
6482
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
6583
networkModel.getNetworkIp4Dns(network, zone);
6684
Assert.assertEquals(dns1[0], result.first());
6785
Assert.assertEquals(dns2[0], result.second());
68-
// Zone has a valid dns and network don't
69-
prepareMocks(isIp6, network, zone, null, dns1[1], null, dns2[1]);
86+
// Vpc has valid dns and network/zone don't
87+
prepareMocks(isIp6, network, zone, vpc, null, null, null, null, dns1[2], dns2[2]);
88+
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
89+
networkModel.getNetworkIp4Dns(network, zone);
90+
Assert.assertEquals(dns1[2], result.first());
91+
Assert.assertEquals(dns2[2], result.second());
92+
// Zone has a valid dns and network/vpc don't
93+
prepareMocks(isIp6, network, zone, vpc, null, dns1[1], null, dns2[1], null, null);
7094
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
7195
networkModel.getNetworkIp4Dns(network, zone);
7296
Assert.assertEquals(dns1[1], result.first());
7397
Assert.assertEquals(dns2[1], result.second());
74-
// Zone has a valid dns and network has only first dns
75-
prepareMocks(isIp6, network, zone, dns1[0], dns1[1], null, dns2[1]);
98+
// Zone/vpc has a valid dns and network has only first dns
99+
prepareMocks(isIp6, network, zone, vpc, dns1[0], dns1[1], null, dns2[1], dns1[2], dns2[2]);
76100
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
77101
networkModel.getNetworkIp4Dns(network, zone);
78102
Assert.assertEquals(dns1[0], result.first());
79103
Assert.assertNull(result.second());
80-
// Both network and zone only have the first dns
81-
prepareMocks(isIp6, network, zone, dns1[0], dns1[1], null, null);
104+
// network don't have a valid dns, vpc has only first dns, Zone has a valid dns
105+
prepareMocks(isIp6, network, zone, vpc, null, dns1[1], null, dns2[1], dns1[2], null);
106+
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
107+
networkModel.getNetworkIp4Dns(network, zone);
108+
Assert.assertEquals(dns1[2], result.first());
109+
Assert.assertNull(result.second());
110+
// network/vpc/zone only have the first dns
111+
prepareMocks(isIp6, network, zone, vpc, dns1[0], dns1[1], null, null, dns1[2], null);
82112
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
83113
networkModel.getNetworkIp4Dns(network, zone);
84114
Assert.assertEquals(dns1[0], result.first());
85115
Assert.assertNull(result.second());
86-
// Both network and zone dns are null
87-
prepareMocks(isIp6, network, zone, null, null, null, null);
116+
// network/vpc and zone dns are null
117+
prepareMocks(isIp6, network, zone, vpc, null, null, null, null, null, null);
88118
result = isIp6 ? networkModel.getNetworkIp6Dns(network, zone) :
89119
networkModel.getNetworkIp4Dns(network, zone);
90120
Assert.assertNull(result.first());

0 commit comments

Comments
 (0)