package org.onlab.onos.net.intent;

import java.util.Set;

import org.onlab.onos.net.ConnectPoint;
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.PortNumber;
import org.onlab.onos.net.flow.DefaultTrafficSelector;
import org.onlab.onos.net.flow.DefaultTrafficTreatment;
import org.onlab.onos.net.flow.TrafficSelector;
import org.onlab.onos.net.flow.TrafficTreatment;

/**
 * Base facilities to test various connectivity tests.
 */
public abstract class ConnectivityIntentTest extends IntentTest {

    public static final IntentId IID = new IntentId(123);
    public static final TrafficSelector MATCH = (new DefaultTrafficSelector.Builder()).build();
    public static final TrafficTreatment NOP = (new DefaultTrafficTreatment.Builder()).build();

    public static final ConnectPoint P1 = new ConnectPoint(DeviceId.deviceId("111"), PortNumber.portNumber(0x1));
    public static final ConnectPoint P2 = new ConnectPoint(DeviceId.deviceId("222"), PortNumber.portNumber(0x2));
    public static final ConnectPoint P3 = new ConnectPoint(DeviceId.deviceId("333"), PortNumber.portNumber(0x3));

    public static final Set<ConnectPoint> PS1 = itemSet(new ConnectPoint[]{P1, P3});
    public static final Set<ConnectPoint> PS2 = itemSet(new ConnectPoint[]{P2, P3});
}
