/*
* Copyright (c) 2016 Cisco Systems, Inc. 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.ios_xe_provider.impl.util;
import com.google.common.base.Equivalence;
import com.google.common.base.Predicate;
import java.util.HashSet;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.AddressEndpointKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.AddressEndpointLocation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.endpoint.locations.AddressEndpointLocationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.L3Context;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.AddressType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.rev160427.ContextType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpoint;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.renderer.renderer.policy.configuration.renderer.endpoints.RendererEndpointBuilder;
/**
* Test for {@link AddressEndpointKeyEquivalence}.
*/
public class AddressEndpointKeyEquivalenceTest {
private AddressEndpointKeyEquivalence addressEndpointKeyEquivalence;
private AddressEndpointLocation addressEndpointLocation;
private RendererEndpoint rendererEndpoint;
@Before
public void setUp() throws Exception {
addressEndpointKeyEquivalence = new AddressEndpointKeyEquivalence();
final String address = "1.2.3.4/32";
final Class<? extends AddressType> addressType = IpPrefixType.class;
final ContextId contextId = new ContextId("l3-context-id-01");
final Class<? extends ContextType> contextType = L3Context.class;
addressEndpointLocation = new AddressEndpointLocationBuilder()
.setAddress(address)
.setAddressType(addressType)
.setContextId(contextId)
.setContextType(contextType)
.build();
rendererEndpoint = new RendererEndpointBuilder()
.setAddress(address)
.setAddressType(addressType)
.setContextId(contextId)
.setContextType(contextType)
.build();
}
@Test
public void testDoHash() throws Exception {
Assert.assertEquals(addressEndpointKeyEquivalence.doHash(addressEndpointLocation),
addressEndpointKeyEquivalence.doHash(rendererEndpoint));
}
@Test
public void testDoEquivalent() throws Exception {
Assert.assertTrue(addressEndpointKeyEquivalence.equivalent(addressEndpointLocation, rendererEndpoint));
final Predicate<AddressEndpointKey> addressPredicate =
addressEndpointKeyEquivalence.equivalentTo(addressEndpointLocation);
Assert.assertTrue(addressPredicate.apply(rendererEndpoint));
}
@Test
public void testInHashStructure_plain() throws Exception {
final HashSet<AddressEndpointKey> bag = new HashSet<>();
Assert.assertTrue(bag.add(addressEndpointLocation));
Assert.assertTrue(bag.add(rendererEndpoint));
Assert.assertEquals(2, bag.size());
}
@Test
public void testInHashStructure_wrapped() throws Exception {
final HashSet<Equivalence.Wrapper<AddressEndpointKey>> bagOfWrappers = new HashSet<>();
final Equivalence.Wrapper<AddressEndpointKey> wrap1 = addressEndpointKeyEquivalence.wrap(addressEndpointLocation);
final Equivalence.Wrapper<AddressEndpointKey> wrap2 = addressEndpointKeyEquivalence.wrap(rendererEndpoint);
Assert.assertTrue(bagOfWrappers.add(wrap1));
Assert.assertFalse(bagOfWrappers.add(wrap2));
Assert.assertEquals(1, bagOfWrappers.size());
}
}