/*
* Copyright (c) 2016 Huawei Technologies and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.groupbasedpolicy.renderer.faas;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.faas.uln.datastore.api.Pair;
import org.opendaylight.yang.gen.v1.urn.opendaylight.faas.logical.faas.common.rev151013.Uuid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContractId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.EndpointGroupId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2BridgeDomainId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L2FloodDomainId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.SubnetId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.faas.rev151009.ServiceCommunicationLayer;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2BridgeDomain;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L2FloodDomain;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.L3Context;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.forwarding.context.Subnet;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.policy.rev140421.tenants.tenant.policy.EndpointGroup;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.resolved.policy.rev150828.resolved.policies.ResolvedPolicy.ExternalImplicitGroup;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
public class MockFaasPolicyManager extends FaasPolicyManager {
private Map<EndpointGroupId, EndpointGroup> testEndpointGroups = new HashMap<>();
private Map<SubnetId, Subnet> testSubnets = new HashMap<>();
private Map<L2FloodDomainId, L2FloodDomain> testL2FloodDomains = new HashMap<>();
private Map<L2BridgeDomainId, L2BridgeDomain> testL2BridgeDomains = new HashMap<>();
private Map<L3ContextId, L3Context> testL3Contextes = new HashMap<>();
private Map<ContractId, Uuid> testSecIdPerContract = new HashMap<>();
private Map<TenantId, Uuid> testFaasTenantId = new HashMap<>();
private ServiceCommunicationLayer comLayer;
private ExternalImplicitGroup externalImplicitGroup;
public MockFaasPolicyManager(DataBroker dataBroker, ScheduledExecutorService executor) {
super(dataBroker, executor);
}
// *******************************************************
// Test Stubs
// *******************************************************
@Override
public void registerTenant(TenantId tenantId, EndpointGroupId epgId) {
assertTrue("FaasPolicyManager.registerTenant: epgId != null", epgId != null);
assertTrue("FaasPolicyManager.registerTenant: tenantId != null", tenantId != null);
assertTrue("FaasPolicyManager.registerTenant: testEndpointGroups.containsKey(epgId)",
testEndpointGroups.containsKey(epgId));
registeredTenants.putIfAbsent(tenantId, new ArrayList<ListenerRegistration<DataChangeListener>>());
}
@Override
public void registerSubnetWithEpg(EndpointGroupId epgId, TenantId tenantId, SubnetId subnetId) {
assertTrue("FaasPolicyManager.registerTenant: epgId != null", epgId != null);
assertTrue("FaasPolicyManager.registerTenant: tenantId != null", tenantId != null);
assertTrue("FaasPolicyManager.registerTenant: subnetId != null", subnetId != null);
assertTrue("FaasPolicyManager.registerTenant: testEndpointGroups.containsKey(epgId)",
testEndpointGroups.containsKey(epgId));
assertTrue("FaasPolicyManager.registerTenant: registeredTenants.containsKey(tenantId)",
registeredTenants.containsKey(tenantId));
assertTrue("FaasPolicyManager.registerTenant: testSubnets.containsKey(subnetId)",
testSubnets.containsKey(subnetId));
List<SubnetId> subnets = epgSubnetsMap.get(new Pair<>(epgId, tenantId));
if (subnets == null) {
subnets = new ArrayList<>();
}
for (SubnetId id : subnets) {
if (id.equals(subnetId)) {
return;
}
}
subnets.add(subnetId);
epgSubnetsMap.put(new Pair<>(epgId, tenantId), subnets);
}
@Override
public EndpointGroup readEndpointGroup(EndpointGroupId epgId, TenantId tenantId) {
return testEndpointGroups.get(epgId);
}
@Override
public Subnet readSubnet(SubnetId subnetId, TenantId tenantId) {
return testSubnets.get(subnetId);
}
@Override
protected L2FloodDomain readL2FloodDomain(L2FloodDomainId l2fId, TenantId tenantId) {
return testL2FloodDomains.get(l2fId);
}
@Override
protected L2BridgeDomain readL2BridgeDomainInstance(TenantId tenantId, L2BridgeDomainId l2bId) {
return testL2BridgeDomains.get(l2bId);
}
@Override
protected L3Context readL3ContextInstance(TenantId tenantId, L3ContextId l3cId) {
return testL3Contextes.get(l3cId);
}
@Override
protected boolean needToCreateLogicalNetwork(ServiceCommunicationLayer comLayer, List<SubnetId> consSubnetIds,
List<SubnetId> provSubnetIds, TenantId tenantId, ContractId contractId, EndpointGroup providerEpg,
EndpointGroup consumerEpg, ExternalImplicitGroup externalImplicitGroup) {
return true;
}
@Override
protected Uuid getFaasSecRulesId(ContractId contractId, TenantId gbpTenantId) {
return testSecIdPerContract.get(contractId);
}
@Override
public Uuid getFaasTenantId(TenantId tenantId) {
return testFaasTenantId.get(tenantId);
}
@Override
protected void createLayer3LogicalNetwork(EndpointGroup consEpg, ContractId contractId, EndpointGroup provEpg,
TenantId gbpTenantId, ServiceCommunicationLayer comLayer, ExternalImplicitGroup externalImplicitGroup) {
this.comLayer = comLayer;
this.externalImplicitGroup = externalImplicitGroup;
assertTrue("FaasPolicyManager.createLayer3LogicalNetwork", testEndpointGroups.containsKey(consEpg.getId()));
assertTrue("FaasPolicyManager.createLayer3LogicalNetwork", testEndpointGroups.containsKey(provEpg.getId()));
assertTrue("FaasPolicyManager.createLayer3LogicalNetwork", registeredTenants.containsKey(gbpTenantId));
}
@Override
protected void createLayer2LogicalNetwork(EndpointGroup consEpg, ContractId contractId, EndpointGroup provEpg,
TenantId gbpTenantId, ServiceCommunicationLayer comLayer, ExternalImplicitGroup externalImplicitGroup) {
this.comLayer = comLayer;
this.externalImplicitGroup = externalImplicitGroup;
assertTrue("FaasPolicyManager.createLayer2LogicalNetwork", testEndpointGroups.containsKey(consEpg.getId()));
assertTrue("FaasPolicyManager.createLayer2LogicalNetwork", testEndpointGroups.containsKey(provEpg.getId()));
assertTrue("FaasPolicyManager.createLayer2LogicalNetwork", registeredTenants.containsKey(gbpTenantId));
}
// *******************************************************
// The following Methods are to input test data
// *******************************************************
public void storeTestFaasTenantId(TenantId gbpTenantId, Uuid faasTenantId) {
testFaasTenantId.put(gbpTenantId, faasTenantId);
}
public void storeTestSecIdPerContract(ContractId contractId, Uuid secId) {
testSecIdPerContract.put(contractId, secId);
}
public void storeTestL2BridgeDomain(L2BridgeDomain brdg) {
if (brdg.getId() != null) {
testL2BridgeDomains.put(brdg.getId(), brdg);
}
}
public void storeTestL3Contextes(L3Context l3Context) {
if (l3Context.getId() != null) {
testL3Contextes.put(l3Context.getId(), l3Context);
}
}
public void storeTestL2FloodDomain(L2FloodDomain fld) {
if (fld.getId() != null) {
testL2FloodDomains.put(fld.getId(), fld);
}
}
public void storeTestSubnet(Subnet subnet) {
if (subnet.getId() != null) {
testSubnets.put(subnet.getId(), subnet);
}
}
public void storeTestEpg(EndpointGroup epg) {
if (epg.getId() != null) {
testEndpointGroups.put(epg.getId(), epg);
}
}
public ServiceCommunicationLayer getComLayer() {
return comLayer;
}
public ExternalImplicitGroup getExternalImplicitGroup() {
return externalImplicitGroup;
}
}