/* * Copyright 2014-present Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onosproject.net.intent; import java.util.Collection; import org.hamcrest.Description; import org.hamcrest.TypeSafeMatcher; import org.onosproject.net.EdgeLink; import org.onosproject.net.Link; /** * Matcher to determine if a Collection of Links contains a path between a source * and a destination. */ public class LinksHaveEntryWithSourceDestinationPairMatcher extends TypeSafeMatcher<Collection<Link>> { private final String source; private final String destination; /** * Creates a matcher for a given path represented by a source and * a destination. * * @param source string identifier for the source of the path * @param destination string identifier for the destination of the path */ LinksHaveEntryWithSourceDestinationPairMatcher(String source, String destination) { this.source = source; this.destination = destination; } @Override public boolean matchesSafely(Collection<Link> links) { for (Link link : links) { if (source.equals(destination) && link instanceof EdgeLink) { EdgeLink edgeLink = (EdgeLink) link; if (edgeLink.hostLocation().elementId() .toString().endsWith(source)) { return true; } } if (link.src().elementId().toString().endsWith(source) && link.dst().elementId().toString().endsWith(destination)) { return true; } } return false; } @Override public void describeTo(Description description) { description.appendText("link lookup for source \""); description.appendText(source); description.appendText(" and destination "); description.appendText(destination); description.appendText("\""); } @Override public void describeMismatchSafely(Collection<Link> links, Description mismatchDescription) { mismatchDescription.appendText("was "). appendText(links.toString()); } /** * Creates a link has path matcher. * * @param source string identifier for the source of the path * @param destination string identifier for the destination of the path * @return matcher to match the path */ public static LinksHaveEntryWithSourceDestinationPairMatcher linksHasPath( String source, String destination) { return new LinksHaveEntryWithSourceDestinationPairMatcher(source, destination); } }