package net.onrc.onos.core.util;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import net.floodlightcontroller.util.MACAddress;

import org.junit.Before;
import org.junit.Test;

public class FlowEntryTest {

    FlowEntry entry;

    FlowId flowId = new FlowId(0x1234);
    FlowEntryId flowEntryId = new FlowEntryId(0x5678);
    int idleTimeout = 5;
    int hardTimeout = 10;
    int priority = 15;
    FlowEntryMatch match;
    FlowEntryActions actions;

    Dpid dpid = new Dpid(0xCAFE);

    PortNumber inport = new PortNumber((short) 1);
    byte[] byte1 = {1, 2, 3, 4, 5, 6};
    byte[] byte2 = {6, 5, 4, 3, 2, 1};
    MACAddress mac1 = new MACAddress(byte1);
    MACAddress mac2 = new MACAddress(byte2);
    Short ether = Short.valueOf((short) 2);
    Short vlanid = Short.valueOf((short) 3);
    Byte vlanprio = Byte.valueOf((byte) 4);
    IPv4Net ip1 = new IPv4Net("127.0.0.1/32");
    IPv4Net ip2 = new IPv4Net(new IPv4("127.0.0.2"), (short) 32);
    IPv4 ipaddr1 = new IPv4("127.0.0.3");
    IPv4 ipaddr2 = new IPv4("127.0.0.4");
    Byte ipproto = Byte.valueOf((byte) 5);
    Byte ipToS = Byte.valueOf((byte) 6);
    Short tport1 = Short.valueOf((short) 7);
    Short tport2 = Short.valueOf((short) 8);
    PortNumber outport = new PortNumber((short) 9);
    PortNumber queueport = new PortNumber((short) 10);
    int queueId = 11;

    FlowEntryErrorState errorState = new FlowEntryErrorState((short) 12, (short) 13);


    @Before
    public void setUp() throws Exception {
        entry = new FlowEntry();

        flowId = new FlowId("0x1234");
        entry.setFlowId(flowId);

        flowEntryId = new FlowEntryId("0x5678");
        entry.setFlowEntryId(flowEntryId);

        entry.setIdleTimeout(5);
        entry.setHardTimeout(10);
        entry.setPriority(15);

        dpid = new Dpid("CA:FE");
        entry.setDpid(dpid);

        entry.setInPort(inport);
        entry.setOutPort(outport);

        match = new FlowEntryMatch();
        match.enableInPort(inport);
        match.enableSrcMac(mac1);
        match.enableDstMac(mac2);
        match.enableEthernetFrameType(ether);
        match.enableVlanId(vlanid);
        match.enableVlanPriority(vlanprio);
        match.enableSrcIPv4Net(ip1);
        match.enableDstIPv4Net(ip2);
        match.enableIpProto(ipproto);
        match.enableIpToS(ipToS);
        match.enableSrcTcpUdpPort(tport1);
        match.enableDstTcpUdpPort(tport2);

        entry.setFlowEntryMatch(match);

        FlowEntryAction action = null;
        actions = entry.flowEntryActions();

        action = new FlowEntryAction();
        action.setActionOutput(outport);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionOutputToController((short) 0);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionSetVlanId(vlanid);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionSetVlanPriority(vlanprio);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionStripVlan(true);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionSetEthernetSrcAddr(mac1);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionSetEthernetDstAddr(mac2);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionSetIPv4SrcAddr(ipaddr1);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionSetIPv4DstAddr(ipaddr2);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionSetIpToS(ipToS);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionSetTcpUdpSrcPort(tport1);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionSetTcpUdpDstPort(tport2);
        actions.addAction(action);

        action = new FlowEntryAction();
        action.setActionEnqueue(queueport, queueId);
        actions.addAction(action);

        entry.setFlowEntryUserState(FlowEntryUserState.FE_USER_ADD);
        entry.setFlowEntrySwitchState(FlowEntrySwitchState.FE_SWITCH_UPDATED);
        entry.setFlowEntryErrorState(errorState);

    }

    @Test
    public void testFlowEntry() {
        FlowEntry e = new FlowEntry();

        assertTrue(e.flowEntryActions().isEmpty());
        assertEquals("flowEntryUserState", FlowEntryUserState.FE_USER_UNKNOWN, e.flowEntryUserState());
        assertEquals("flowEntrySwitchState", FlowEntrySwitchState.FE_SWITCH_UNKNOWN, e.flowEntrySwitchState());
    }

    @Test
    public void testFlowId() {
        assertEquals("flowId", flowId, entry.flowId());
    }

    @Test
    public void testIsValidFlowId() {
        FlowEntry e = new FlowEntry();

        // Test a Flow Entry with empty Flow ID
        assertEquals("isValidFlowId", false, e.isValidFlowId());

        // Test a Flow Entry with invalid Flow ID
        e.setFlowId(new FlowId());
        assertEquals("isValidFlowId", false, e.isValidFlowId());

        // Test a Flow Entry with valid Flow ID
        e.setFlowId(new FlowId(0x1));
        assertEquals("isValidFlowId", true, e.isValidFlowId());
        assertEquals("isValidFlowId", true, entry.isValidFlowId());
    }

    @Test
    public void testFlowEntryId() {
        assertEquals("flowEntryId", flowEntryId, entry.flowEntryId());
    }

    @Test
    public void testIsValidFlowEntryId() {
        FlowEntry e = new FlowEntry();

        // Test a Flow Entry with empty Flow Entry ID
        assertEquals("isValidFlowEntryId", false, e.isValidFlowEntryId());

        // Test a Flow Entry with invalid Flow Entry ID
        e.setFlowEntryId(new FlowEntryId());
        assertEquals("isValidFlowEntryId", false, e.isValidFlowEntryId());

        // Test a Flow Entry with valid Flow Entry ID
        e.setFlowEntryId(new FlowEntryId(0x1));
        assertEquals("isValidFlowEntryId", true, e.isValidFlowEntryId());
        assertEquals("isValidFlowEntryId", true, entry.isValidFlowEntryId());
    }

    @Test
    public void testIdleTimeout() {
        assertEquals("idleTimeout", idleTimeout, entry.idleTimeout());
    }

    @Test
    public void testHardTimeout() {
        assertEquals("hardTimeout", hardTimeout, entry.hardTimeout());
    }

    @Test
    public void testPriority() {
        assertEquals("priority", priority, entry.priority());
    }

    @Test
    public void testFlowEntryMatch() {
        assertEquals("flowEntryMatch", match, entry.flowEntryMatch());
    }

    @Test
    public void testFlowEntryActions() {
        assertEquals("flowEntryActions", actions, entry.flowEntryActions());
    }

    @Test
    public void testSetFlowEntryActions() {
        FlowEntryActions acts = new FlowEntryActions();
        entry.setFlowEntryActions(acts);
        assertEquals("flowEntryActions", acts, entry.flowEntryActions());
    }

    @Test
    public void testDpid() {
        assertEquals("dpid", dpid, entry.dpid());
    }

    @Test
    public void testInPort() {
        assertEquals("inPort", inport, entry.inPort());
    }

    @Test
    public void testOutPort() {
        assertEquals("outPort", outport, entry.outPort());
    }

    @Test
    public void testFlowEntryUserState() {
        assertEquals("flowEntryUserState", FlowEntryUserState.FE_USER_ADD, entry.flowEntryUserState());
    }

    @Test
    public void testFlowEntrySwitchState() {
        assertEquals("flowEntrySwitchState", FlowEntrySwitchState.FE_SWITCH_UPDATED, entry.flowEntrySwitchState());
    }

    @Test
    public void testFlowEntryErrorState() {
        assertEquals("flowEntryErrorState", errorState, entry.flowEntryErrorState());
    }

    @Test
    public void testToString() {
        FlowEntry def = new FlowEntry();
        assertEquals("toString",
                "[ idleTimeout=0 hardTimeout=0 priority=32768"
                + " flowEntryActions=[] flowEntryUserState=FE_USER_UNKNOWN"
                + " flowEntrySwitchState=FE_SWITCH_UNKNOWN]",
                def.toString());

        assertEquals("toString",
                "[flowEntryId=0x5678 flowId=0x1234 idleTimeout=5 hardTimeout=10"
                + " priority=15"
                + " flowEntryMatch="
                + "[inPort=1 srcMac=01:02:03:04:05:06 dstMac=06:05:04:03:02:01"
                + " ethernetFrameType=2 vlanId=3 vlanPriority=4"
                + " srcIPv4Net=127.0.0.1/32 dstIPv4Net=127.0.0.2/32"
                + " ipProto=5 ipToS=6 srcTcpUdpPort=7 dstTcpUdpPort=8"
                + "]"
                + " flowEntryActions=["
                + "[type=ACTION_OUTPUT action=[port=9 maxLen=0]];"
                // PORT_CONTROLLER((short) 0xfffd) = 65533 (-3)
                + "[type=ACTION_OUTPUT action=[port=65533 maxLen=0]];"
                + "[type=ACTION_SET_VLAN_VID action=[vlanId=3]];"
                + "[type=ACTION_SET_VLAN_PCP action=[vlanPriority=4]];"
                + "[type=ACTION_STRIP_VLAN action=[stripVlan=true]];"
                + "[type=ACTION_SET_DL_SRC action=[addr=01:02:03:04:05:06]];"
                + "[type=ACTION_SET_DL_DST action=[addr=06:05:04:03:02:01]];"
                + "[type=ACTION_SET_NW_SRC action=[addr=127.0.0.3]];"
                + "[type=ACTION_SET_NW_DST action=[addr=127.0.0.4]];"
                + "[type=ACTION_SET_NW_TOS action=[ipToS=6]];"
                + "[type=ACTION_SET_TP_SRC action=[port=7]];"
                + "[type=ACTION_SET_TP_DST action=[port=8]];"
                + "[type=ACTION_ENQUEUE action=[port=10 queueId=11]];]"
                + " dpid=00:00:00:00:00:00:ca:fe inPort=1 outPort=9"
                + " flowEntryUserState=FE_USER_ADD"
                + " flowEntrySwitchState=FE_SWITCH_UPDATED"
                + " flowEntryErrorState=[type=12 code=13]]",
                entry.toString());
    }

}
