Midonet Plugin bugfixes

* Updated SQL upgrade scripts to include midonet configs.
* Fixed bug where default ICMP allow rule was missing
  on static NAT creation, keeping VMs from being able
  to ping the gateway.
* Changed the filter in the MidoNetElement callbacks to allow
  calls when Midonet is configured.

Signed-off-by: Hugo Trippaers <htrippaers@schubergphilis.com>
This commit is contained in:
Joe Mills 2013-05-15 17:47:58 +09:00 committed by Hugo Trippaers
parent 36a312d4b2
commit 987c3427dd
5 changed files with 107 additions and 61 deletions

View File

@ -36,7 +36,6 @@ import com.cloud.network.NetworkModel;
import com.cloud.network.Networks; import com.cloud.network.Networks;
import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.PhysicalNetworkServiceProvider;
import com.cloud.network.PublicIpAddress; import com.cloud.network.PublicIpAddress;
import com.cloud.network.dao.NetworkServiceMapDao;
import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRule;
import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.PortForwardingRule;
import com.cloud.network.rules.StaticNat; import com.cloud.network.rules.StaticNat;
@ -47,6 +46,8 @@ import com.cloud.utils.Pair;
import com.cloud.utils.component.AdapterBase; import com.cloud.utils.component.AdapterBase;
import com.cloud.utils.component.PluggableService; import com.cloud.utils.component.PluggableService;
import com.cloud.utils.net.NetUtils; import com.cloud.utils.net.NetUtils;
import com.cloud.user.AccountVO;
import com.cloud.user.dao.AccountDao;
import com.cloud.vm.NicProfile; import com.cloud.vm.NicProfile;
import com.cloud.vm.NicVO; import com.cloud.vm.NicVO;
import com.cloud.vm.ReservationContext; import com.cloud.vm.ReservationContext;
@ -131,14 +132,14 @@ public class MidoNetElement extends AdapterBase implements
@Inject @Inject
AccountManager _accountMgr; AccountManager _accountMgr;
@Inject @Inject
NetworkServiceMapDao _ntwkSrvcDao; AccountDao _accountDao;
public void setMidonetApi(MidonetApi api) { public void setMidonetApi(MidonetApi api) {
this.api = api; this.api = api;
} }
public void setNtwkSrvcDao(NetworkServiceMapDao ntwkSrvcDao){ public void setAccountDao(AccountDao aDao) {
this._ntwkSrvcDao = ntwkSrvcDao; this._accountDao = aDao;
} }
@Override @Override
@ -172,10 +173,13 @@ public class MidoNetElement extends AdapterBase implements
} }
public boolean midoInNetwork(Network network) { public boolean midoInNetwork(Network network) {
for (String pname : _ntwkSrvcDao.getDistinctProviders(network.getId())) { if((network.getTrafficType() == Networks.TrafficType.Public) &&
if (pname.equals(getProvider().getName())) { (network.getBroadcastDomainType() == Networks.BroadcastDomainType.Mido)){
return true; return true;
} }
if((network.getTrafficType() == Networks.TrafficType.Guest) &&
(network.getBroadcastDomainType() == Networks.BroadcastDomainType.Mido)){
return true;
} }
return false; return false;
} }
@ -280,6 +284,11 @@ public class MidoNetElement extends AdapterBase implements
post.addRule().type(DtoRule.RevDNAT).flowAction(DtoRule.Accept).create(); post.addRule().type(DtoRule.RevDNAT).flowAction(DtoRule.Accept).create();
} }
public String getAccountUuid(Network network) {
AccountVO acc = _accountDao.findById(network.getAccountId());
return acc.getUuid();
}
public boolean associatePublicIP(Network network, final List<? extends PublicIpAddress> ipAddress) public boolean associatePublicIP(Network network, final List<? extends PublicIpAddress> ipAddress)
throws ResourceUnavailableException { throws ResourceUnavailableException {
@ -316,7 +325,7 @@ public class MidoNetElement extends AdapterBase implements
tenantUplink = ports[0]; tenantUplink = ports[0];
providerDownlink = ports[1]; providerDownlink = ports[1];
accountIdStr = String.valueOf(network.getAccountId()); accountIdStr = getAccountUuid(network);
boolean isVpc = getIsVpc(network); boolean isVpc = getIsVpc(network);
long id = getRouterId(network, isVpc); long id = getRouterId(network, isVpc);
routerName = getRouterName(isVpc, id); routerName = getRouterName(isVpc, id);
@ -611,7 +620,7 @@ public class MidoNetElement extends AdapterBase implements
RuleChain preNat = null; RuleChain preNat = null;
RuleChain post = null; RuleChain post = null;
String accountIdStr = String.valueOf(network.getAccountId()); String accountIdStr = getAccountUuid(network);
String networkUUIDStr = String.valueOf(network.getId()); String networkUUIDStr = String.valueOf(network.getId());
for (StaticNat rule : rules) { for (StaticNat rule : rules) {
@ -659,7 +668,7 @@ public class MidoNetElement extends AdapterBase implements
return false; return false;
} }
if (canHandle(config, Service.Firewall)) { if (canHandle(config, Service.Firewall)) {
String accountIdStr = String.valueOf(config.getAccountId()); String accountIdStr = getAccountUuid(config);
String networkUUIDStr = String.valueOf(config.getId()); String networkUUIDStr = String.valueOf(config.getId());
RuleChain preFilter = getChain(accountIdStr, networkUUIDStr, RuleChainCode.TR_PREFILTER); RuleChain preFilter = getChain(accountIdStr, networkUUIDStr, RuleChainCode.TR_PREFILTER);
RuleChain preNat = getChain(accountIdStr, networkUUIDStr, RuleChainCode.TR_PRENAT); RuleChain preNat = getChain(accountIdStr, networkUUIDStr, RuleChainCode.TR_PRENAT);
@ -947,7 +956,7 @@ public class MidoNetElement extends AdapterBase implements
return false; return false;
} }
String accountIdStr = String.valueOf(network.getAccountId()); String accountIdStr = getAccountUuid(network);
String networkUUIDStr = String.valueOf(network.getId()); String networkUUIDStr = String.valueOf(network.getId());
RuleChain preNat = getChain(accountIdStr, networkUUIDStr, RuleChainCode.TR_PRENAT); RuleChain preNat = getChain(accountIdStr, networkUUIDStr, RuleChainCode.TR_PRENAT);
RuleChain postNat = getChain(accountIdStr, networkUUIDStr, RuleChainCode.TR_POST); RuleChain postNat = getChain(accountIdStr, networkUUIDStr, RuleChainCode.TR_POST);
@ -1170,16 +1179,16 @@ public class MidoNetElement extends AdapterBase implements
return routerName + "-tenantrouter-" + chain; return routerName + "-tenantrouter-" + chain;
} }
protected RuleChain getChain(String accountID, String routerName, RuleChainCode chainCode){ protected RuleChain getChain(String accountUuid, String routerName, RuleChainCode chainCode){
return getChain("", accountID, routerName, chainCode); return getChain("", accountUuid, routerName, chainCode);
} }
protected RuleChain getChain(String networkId, String accountID, protected RuleChain getChain(String networkId, String accountUuid,
String routerName, RuleChainCode chainCode){ String routerName, RuleChainCode chainCode){
String chainName = getChainName(networkId, routerName, chainCode); String chainName = getChainName(networkId, routerName, chainCode);
MultivaluedMap findChain = new MultivaluedMapImpl(); MultivaluedMap findChain = new MultivaluedMapImpl();
findChain.add("tenant_id", accountID); findChain.add("tenant_id", accountUuid);
ResourceCollection<RuleChain> ruleChains = api.getChains(findChain); ResourceCollection<RuleChain> ruleChains = api.getChains(findChain);
@ -1303,7 +1312,7 @@ public class MidoNetElement extends AdapterBase implements
String routerName = getRouterName(isVpc, id); String routerName = getRouterName(isVpc, id);
RuleChain egressChain = getChain(String.valueOf(network.getId()), RuleChain egressChain = getChain(String.valueOf(network.getId()),
String.valueOf(network.getAccountId()), getAccountUuid(network),
routerName, routerName,
RuleChainCode.ACL_EGRESS); RuleChainCode.ACL_EGRESS);
@ -1325,7 +1334,7 @@ public class MidoNetElement extends AdapterBase implements
String routerName = getRouterName(isVpc, id); String routerName = getRouterName(isVpc, id);
RuleChain egressChain = getChain(String.valueOf(network.getId()), RuleChain egressChain = getChain(String.valueOf(network.getId()),
String.valueOf(network.getAccountId()), getAccountUuid(network),
routerName, routerName,
RuleChainCode.ACL_EGRESS); RuleChainCode.ACL_EGRESS);
@ -1355,6 +1364,14 @@ public class MidoNetElement extends AdapterBase implements
.position(pos++) .position(pos++)
.create(); .create();
// If it is ICMP to the router, accept that
egressChain.addRule().type(DtoRule.Accept)
.nwProto(SimpleFirewallRule.stringToProtocolNumber("icmp"))
.nwDstAddress(network.getGateway())
.nwDstLength(32)
.position(pos++)
.create();
// Everything else gets dropped // Everything else gets dropped
egressChain.addRule() egressChain.addRule()
.type(DtoRule.Drop) .type(DtoRule.Drop)
@ -1369,7 +1386,7 @@ public class MidoNetElement extends AdapterBase implements
boolean isVpc = getIsVpc(network); boolean isVpc = getIsVpc(network);
long id = getRouterId(network, isVpc); long id = getRouterId(network, isVpc);
String routerName = getRouterName(isVpc, id); String routerName = getRouterName(isVpc, id);
String accountIdStr = String.valueOf(network.getAccountId()); String accountIdStr = getAccountUuid(network);
// Add interior port on bridge side // Add interior port on bridge side
BridgePort bridgePort = netBridge.addInteriorPort().create(); BridgePort bridgePort = netBridge.addInteriorPort().create();
@ -1406,6 +1423,14 @@ public class MidoNetElement extends AdapterBase implements
.position(pos++) .position(pos++)
.create(); .create();
// If it is ICMP to the router, accept that
inc.addRule().type(DtoRule.Accept)
.nwProto(SimpleFirewallRule.stringToProtocolNumber("icmp"))
.nwDstAddress(network.getGateway())
.nwDstLength(32)
.position(pos++)
.create();
// If it is connection tracked, accept that as well // If it is connection tracked, accept that as well
inc.addRule().type(DtoRule.Accept) inc.addRule().type(DtoRule.Accept)
.matchReturnFlow(true) .matchReturnFlow(true)
@ -1449,27 +1474,25 @@ public class MidoNetElement extends AdapterBase implements
private Bridge getOrCreateNetworkBridge(Network network){ private Bridge getOrCreateNetworkBridge(Network network){
// Find the single bridge for this network, create if doesn't exist // Find the single bridge for this network, create if doesn't exist
return getOrCreateNetworkBridge(network.getId(), network.getAccountId()); return getOrCreateNetworkBridge(network.getId(), getAccountUuid(network));
} }
private Bridge getOrCreateNetworkBridge(long networkID, long accountID){ private Bridge getOrCreateNetworkBridge(long networkID, String accountUuid){
Bridge netBridge = getNetworkBridge(networkID, accountID); Bridge netBridge = getNetworkBridge(networkID, accountUuid);
if(netBridge == null){ if(netBridge == null){
String accountIdStr = String.valueOf(accountID);
String networkUUIDStr = String.valueOf(networkID); String networkUUIDStr = String.valueOf(networkID);
netBridge = api.addBridge().tenantId(accountIdStr).name(networkUUIDStr).create(); netBridge = api.addBridge().tenantId(accountUuid).name(networkUUIDStr).create();
} }
return netBridge; return netBridge;
} }
private Bridge getNetworkBridge(long networkID, long accountID){ private Bridge getNetworkBridge(long networkID, String accountUuid){
MultivaluedMap qNetBridge = new MultivaluedMapImpl(); MultivaluedMap qNetBridge = new MultivaluedMapImpl();
String accountIdStr = String.valueOf(accountID);
String networkUUIDStr = String.valueOf(networkID); String networkUUIDStr = String.valueOf(networkID);
qNetBridge.add("tenant_id", accountIdStr); qNetBridge.add("tenant_id", accountUuid);
for (Bridge b : this. api.getBridges(qNetBridge)) { for (Bridge b : this. api.getBridges(qNetBridge)) {
if(b.getName().equals(networkUUIDStr)){ if(b.getName().equals(networkUUIDStr)){
@ -1497,7 +1520,7 @@ public class MidoNetElement extends AdapterBase implements
boolean isVpc = getIsVpc(network); boolean isVpc = getIsVpc(network);
long id = getRouterId(network, isVpc); long id = getRouterId(network, isVpc);
return getOrCreateGuestNetworkRouter(id, network.getAccountId(), isVpc); return getOrCreateGuestNetworkRouter(id, getAccountUuid(network), isVpc);
} }
@ -1509,29 +1532,28 @@ public class MidoNetElement extends AdapterBase implements
} }
} }
protected Router createRouter(long id, long accountID, boolean isVpc) { protected Router createRouter(long id, String accountUuid, boolean isVpc) {
String accountIdStr = String.valueOf(accountID);
String routerName = getRouterName(isVpc, id); String routerName = getRouterName(isVpc, id);
//Set up rule chains //Set up rule chains
RuleChain pre = api.addChain() RuleChain pre = api.addChain()
.name(getChainName(routerName, RuleChainCode.TR_PRE)) .name(getChainName(routerName, RuleChainCode.TR_PRE))
.tenantId(accountIdStr) .tenantId(accountUuid)
.create(); .create();
RuleChain post = api.addChain() RuleChain post = api.addChain()
.name(getChainName(routerName, RuleChainCode.TR_POST)) .name(getChainName(routerName, RuleChainCode.TR_POST))
.tenantId(accountIdStr) .tenantId(accountUuid)
.create(); .create();
// Set up NAT and filter chains for pre-routing // Set up NAT and filter chains for pre-routing
RuleChain preFilter = api.addChain() RuleChain preFilter = api.addChain()
.name(getChainName(routerName, RuleChainCode.TR_PREFILTER)) .name(getChainName(routerName, RuleChainCode.TR_PREFILTER))
.tenantId(accountIdStr) .tenantId(accountUuid)
.create(); .create();
RuleChain preNat = api.addChain() RuleChain preNat = api.addChain()
.name(getChainName(routerName, RuleChainCode.TR_PRENAT)) .name(getChainName(routerName, RuleChainCode.TR_PRENAT))
.tenantId(accountIdStr) .tenantId(accountUuid)
.create(); .create();
// Hook the chains in - first jump to Filter chain, then jump to Nat chain // Hook the chains in - first jump to Filter chain, then jump to Nat chain
@ -1545,28 +1567,27 @@ public class MidoNetElement extends AdapterBase implements
.create(); .create();
return api.addRouter() return api.addRouter()
.tenantId(accountIdStr) .tenantId(accountUuid)
.name(routerName) .name(routerName)
.inboundFilterId(pre.getId()) .inboundFilterId(pre.getId())
.outboundFilterId(post.getId()) .outboundFilterId(post.getId())
.create(); .create();
} }
private Router getOrCreateGuestNetworkRouter(long id, long accountID, boolean isVpc) { private Router getOrCreateGuestNetworkRouter(long id, String accountUuid, boolean isVpc) {
Router tenantRouter = getGuestNetworkRouter(id, accountID, isVpc); Router tenantRouter = getGuestNetworkRouter(id, accountUuid, isVpc);
if(tenantRouter == null){ if(tenantRouter == null){
tenantRouter = createRouter(id, accountID, isVpc); tenantRouter = createRouter(id, accountUuid, isVpc);
} }
return tenantRouter; return tenantRouter;
} }
private Router getGuestNetworkRouter(long id, long accountID, boolean isVpc){ private Router getGuestNetworkRouter(long id, String accountUuid, boolean isVpc){
MultivaluedMap qNetRouter = new MultivaluedMapImpl(); MultivaluedMap qNetRouter = new MultivaluedMapImpl();
String accountIdStr = String.valueOf(accountID);
String routerName = getRouterName(isVpc, id); String routerName = getRouterName(isVpc, id);
qNetRouter.add("tenant_id", accountIdStr); qNetRouter.add("tenant_id", accountUuid);
for (Router router : api.getRouters(qNetRouter)) { for (Router router : api.getRouters(qNetRouter)) {
if(router.getName().equals(routerName)){ if(router.getName().equals(routerName)){
@ -1613,10 +1634,10 @@ public class MidoNetElement extends AdapterBase implements
} }
private void deleteNetworkBridges(Network network){ private void deleteNetworkBridges(Network network){
long accountID = network.getAccountId(); String accountUuid = getAccountUuid(network);
long networkID = network.getId(); long networkID = network.getId();
Bridge netBridge = getNetworkBridge(networkID, accountID); Bridge netBridge = getNetworkBridge(networkID, accountUuid);
if(netBridge != null){ if(netBridge != null){
cleanBridge(netBridge); cleanBridge(netBridge);
@ -1632,11 +1653,11 @@ public class MidoNetElement extends AdapterBase implements
} }
private void deleteGuestNetworkRouters(Network network){ private void deleteGuestNetworkRouters(Network network){
long accountID = network.getAccountId(); String accountUuid = getAccountUuid(network);
boolean isVpc = getIsVpc(network); boolean isVpc = getIsVpc(network);
long id = getRouterId(network, isVpc); long id = getRouterId(network, isVpc);
Router tenantRouter = getGuestNetworkRouter(id, accountID, isVpc); Router tenantRouter = getGuestNetworkRouter(id, accountUuid, isVpc);
// Delete any peer ports corresponding to this router // Delete any peer ports corresponding to this router
for(Port peerPort : tenantRouter.getPeerPorts((new MultivaluedMapImpl()))){ for(Port peerPort : tenantRouter.getPeerPorts((new MultivaluedMapImpl()))){
@ -1677,7 +1698,7 @@ public class MidoNetElement extends AdapterBase implements
} }
// Remove inbound and outbound filter chains // Remove inbound and outbound filter chains
String accountIdStr = String.valueOf(accountID); String accountIdStr = String.valueOf(accountUuid);
String routerName = getRouterName(isVpc, id); String routerName = getRouterName(isVpc, id);
RuleChain pre = api.getChain(tenantRouter.getInboundFilterId()); RuleChain pre = api.getChain(tenantRouter.getInboundFilterId());

View File

@ -30,6 +30,8 @@ import com.cloud.network.*;
import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetwork;
import com.cloud.offering.NetworkOffering; import com.cloud.offering.NetworkOffering;
import com.cloud.user.Account; import com.cloud.user.Account;
import com.cloud.user.AccountVO;
import com.cloud.user.dao.AccountDao;
import com.cloud.vm.*; import com.cloud.vm.*;
import com.midokura.midonet.client.resource.Bridge; import com.midokura.midonet.client.resource.Bridge;
import com.cloud.utils.net.NetUtils; import com.cloud.utils.net.NetUtils;
@ -46,12 +48,16 @@ import com.cloud.vm.Nic.ReservationStrategy;
import javax.ejb.Local; import javax.ejb.Local;
import java.util.UUID; import java.util.UUID;
import javax.inject.Inject;
@Component @Component
@Local(value = NetworkGuru.class) @Local(value = NetworkGuru.class)
public class MidoNetGuestNetworkGuru extends GuestNetworkGuru { public class MidoNetGuestNetworkGuru extends GuestNetworkGuru {
private static final Logger s_logger = Logger.getLogger(MidoNetGuestNetworkGuru.class); private static final Logger s_logger = Logger.getLogger(MidoNetGuestNetworkGuru.class);
@Inject
AccountDao _accountDao;
public MidoNetGuestNetworkGuru() { public MidoNetGuestNetworkGuru() {
super(); super();
_isolationMethods = new PhysicalNetwork.IsolationMethod[] { PhysicalNetwork.IsolationMethod.MIDO }; _isolationMethods = new PhysicalNetwork.IsolationMethod[] { PhysicalNetwork.IsolationMethod.MIDO };
@ -118,7 +124,8 @@ public class MidoNetGuestNetworkGuru extends GuestNetworkGuru {
implemented.setCidr(network.getCidr()); implemented.setCidr(network.getCidr());
} }
String accountIdStr = String.valueOf(network.getAccountId()); AccountVO acc = _accountDao.findById(network.getAccountId());
String accountUUIDStr = acc.getUuid();
String routerName = ""; String routerName = "";
if (network.getVpcId() != null) { if (network.getVpcId() != null) {
routerName = "VPC" + String.valueOf(network.getVpcId()); routerName = "VPC" + String.valueOf(network.getVpcId());
@ -126,7 +133,9 @@ public class MidoNetGuestNetworkGuru extends GuestNetworkGuru {
routerName = String.valueOf(network.getId()); routerName = String.valueOf(network.getId());
} }
String broadcastUriStr = accountIdStr + "." + String.valueOf(network.getId()) + ":" + routerName; String broadcastUriStr = accountUUIDStr + "."
+ String.valueOf(network.getId())
+ ":" + routerName;
implemented.setBroadcastUri(Networks.BroadcastDomainType.Mido.toUri(broadcastUriStr)); implemented.setBroadcastUri(Networks.BroadcastDomainType.Mido.toUri(broadcastUriStr));
s_logger.debug("Broadcast URI set to " + broadcastUriStr); s_logger.debug("Broadcast URI set to " + broadcastUriStr);

View File

@ -34,6 +34,8 @@ import com.cloud.utils.db.DB;
import com.cloud.utils.db.Transaction; import com.cloud.utils.db.Transaction;
import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.NetUtils; import com.cloud.utils.net.NetUtils;
import com.cloud.user.AccountVO;
import com.cloud.user.dao.AccountDao;
import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.NetworkVO;
import com.cloud.network.dao.IPAddressVO; import com.cloud.network.dao.IPAddressVO;
import com.cloud.vm.*; import com.cloud.vm.*;
@ -50,6 +52,8 @@ public class MidoNetPublicNetworkGuru extends PublicNetworkGuru {
// Inject any stuff we need to use (DAOs etc) // Inject any stuff we need to use (DAOs etc)
@Inject @Inject
NetworkModel _networkModel; NetworkModel _networkModel;
@Inject
AccountDao _accountDao;
// Don't need to change traffic type stuff, public is fine // Don't need to change traffic type stuff, public is fine
@ -228,9 +232,10 @@ public class MidoNetPublicNetworkGuru extends PublicNetworkGuru {
} }
private URI generateBroadcastUri(Network network){ private URI generateBroadcastUri(Network network){
String accountIdStr = String.valueOf(network.getAccountId()); AccountVO acc = _accountDao.findById(network.getAccountId());
String accountUUIDStr = acc.getUuid();
String networkUUIDStr = String.valueOf(network.getId()); String networkUUIDStr = String.valueOf(network.getId());
return Networks.BroadcastDomainType.Mido.toUri(accountIdStr + return Networks.BroadcastDomainType.Mido.toUri(accountUUIDStr +
"." + "." +
networkUUIDStr + networkUUIDStr +
":" + ":" +

View File

@ -18,12 +18,13 @@
*/ */
import com.cloud.network.element.MidoNetElement; import com.cloud.network.element.MidoNetElement;
import com.cloud.user.AccountVO;
import com.cloud.user.dao.AccountDao;
import junit.framework.TestCase; import junit.framework.TestCase;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import com.midokura.midonet.client.MidonetApi; import com.midokura.midonet.client.MidonetApi;
import com.midokura.midonet.client.resource.*; import com.midokura.midonet.client.resource.*;
import com.cloud.network.dao.NetworkServiceMapDao;
import com.sun.jersey.core.util.MultivaluedMapImpl; import com.sun.jersey.core.util.MultivaluedMapImpl;
import com.cloud.network.*; import com.cloud.network.*;
import com.cloud.vm.*; import com.cloud.vm.*;
@ -46,10 +47,6 @@ public class MidoNetElementTest extends TestCase {
//mockMgmt //mockMgmt
MidonetApi api = mock(MidonetApi.class, RETURNS_DEEP_STUBS); MidonetApi api = mock(MidonetApi.class, RETURNS_DEEP_STUBS);
ArrayList<String> arr = new ArrayList<String>();
arr.add("MidoNet");
NetworkServiceMapDao mockNSMD = mock(NetworkServiceMapDao.class);
when(mockNSMD.getDistinctProviders(anyLong())).thenReturn(arr);
//mockDhcpHost //mockDhcpHost
DhcpHost mockDhcpHost = mock(DhcpHost.class); DhcpHost mockDhcpHost = mock(DhcpHost.class);
@ -82,6 +79,14 @@ public class MidoNetElementTest extends TestCase {
when(mockNetwork.getGateway()).thenReturn("1.2.3.4"); when(mockNetwork.getGateway()).thenReturn("1.2.3.4");
when(mockNetwork.getCidr()).thenReturn("1.2.3.0/24"); when(mockNetwork.getCidr()).thenReturn("1.2.3.0/24");
when(mockNetwork.getId()).thenReturn((long)2); when(mockNetwork.getId()).thenReturn((long)2);
when(mockNetwork.getBroadcastDomainType()).thenReturn(Networks.BroadcastDomainType.Mido);
when(mockNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Guest);
//mockAccountDao
AccountDao mockAccountDao = mock(AccountDao.class);
AccountVO mockAccountVO = mock(AccountVO.class);
when(mockAccountDao.findById(anyLong())).thenReturn(mockAccountVO);
when(mockAccountVO.getUuid()).thenReturn("1");
//mockNic //mockNic
NicProfile mockNic = mock(NicProfile.class); NicProfile mockNic = mock(NicProfile.class);
@ -96,8 +101,8 @@ public class MidoNetElementTest extends TestCase {
when(mockVm.getType()).thenReturn(VirtualMachine.Type.User); when(mockVm.getType()).thenReturn(VirtualMachine.Type.User);
MidoNetElement elem = new MidoNetElement(); MidoNetElement elem = new MidoNetElement();
elem.setNtwkSrvcDao(mockNSMD);
elem.setMidonetApi(api); elem.setMidonetApi(api);
elem.setAccountDao(mockAccountDao);
boolean result = false; boolean result = false;
try { try {
@ -119,14 +124,16 @@ public class MidoNetElementTest extends TestCase {
public void testImplement() { public void testImplement() {
//mock //mock
MidonetApi api = mock(MidonetApi.class, RETURNS_DEEP_STUBS); MidonetApi api = mock(MidonetApi.class, RETURNS_DEEP_STUBS);
ArrayList<String> arr = new ArrayList<String>();
arr.add("MidoNet");
NetworkServiceMapDao mockNSMD = mock(NetworkServiceMapDao.class);
when(mockNSMD.getDistinctProviders(anyLong())).thenReturn(arr);
//mockAccountDao
AccountDao mockAccountDao = mock(AccountDao.class);
AccountVO mockAccountVO = mock(AccountVO.class);
when(mockAccountDao.findById(anyLong())).thenReturn(mockAccountVO);
when(mockAccountVO.getUuid()).thenReturn("1");
MidoNetElement elem = new MidoNetElement(); MidoNetElement elem = new MidoNetElement();
elem.setNtwkSrvcDao(mockNSMD);
elem.setMidonetApi(api); elem.setMidonetApi(api);
elem.setAccountDao(mockAccountDao);
//mockRPort //mockRPort
RouterPort mockRPort = mock(RouterPort.class); RouterPort mockRPort = mock(RouterPort.class);
@ -161,6 +168,8 @@ public class MidoNetElementTest extends TestCase {
when(mockNetwork.getGateway()).thenReturn("1.2.3.4"); when(mockNetwork.getGateway()).thenReturn("1.2.3.4");
when(mockNetwork.getCidr()).thenReturn("1.2.3.0/24"); when(mockNetwork.getCidr()).thenReturn("1.2.3.0/24");
when(mockNetwork.getId()).thenReturn((long)2); when(mockNetwork.getId()).thenReturn((long)2);
when(mockNetwork.getBroadcastDomainType()).thenReturn(Networks.BroadcastDomainType.Mido);
when(mockNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public);
boolean result = false; boolean result = false;
try { try {

View File

@ -29,6 +29,8 @@ INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(hypervisor_type, hypervisor
INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled, max_hosts_per_cluster) VALUES ('VMware', '5.1', 128, 0, 32); INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled, max_hosts_per_cluster) VALUES ('VMware', '5.1', 128, 0, 32);
DELETE FROM `cloud`.`configuration` where name='vmware.percluster.host.max'; DELETE FROM `cloud`.`configuration` where name='vmware.percluster.host.max';
INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'AgentManager', 'xen.nics.max', '7', 'Maximum allowed nics for Vms created on Xen'); INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'AgentManager', 'xen.nics.max', '7', 'Maximum allowed nics for Vms created on Xen');
INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Network', 'DEFAULT', 'management-server', 'midonet.apiserver.address', 'http://localhost:8081', 'Specify the address at which the Midonet API server can be contacted (if using Midonet)');
INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Network', 'DEFAULT', 'management-server', 'midonet.providerrouter.id', 'd7c5e6a3-e2f4-426b-b728-b7ce6a0448e5', 'Specifies the UUID of the Midonet provider router (if using Midonet)');
ALTER TABLE `cloud`.`load_balancer_vm_map` ADD state VARCHAR(40) NULL COMMENT 'service status updated by LB healthcheck manager'; ALTER TABLE `cloud`.`load_balancer_vm_map` ADD state VARCHAR(40) NULL COMMENT 'service status updated by LB healthcheck manager';
alter table storage_pool change storage_provider_id storage_provider_name varchar(255); alter table storage_pool change storage_provider_id storage_provider_name varchar(255);