package net.onrc.onos.core.util;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import net.floodlightcontroller.util.MACAddress;
import net.onrc.onos.core.util.FlowEntryMatch;
import net.onrc.onos.core.util.IPv4Net;
import net.onrc.onos.core.util.Port;

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

public class FlowEntryMatchTest {

	FlowEntryMatch match;
	
	Port inport = new Port((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("127.0.0.2/32");
	Byte ipproto = Byte.valueOf((byte)5);
	Byte ipToS = Byte.valueOf((byte)6);
	Short tport1 = Short.valueOf((short)7);
	Short tport2 = Short.valueOf((short)8);
	
	@Before
	public void setUp() throws Exception{
		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 );
	}

	@Test
	public void testFlowEntryMatch(){
		FlowEntryMatch def = new FlowEntryMatch();
		
		assertEquals("default null", null, def.inPort() );
		assertEquals("default null", null, def.srcMac() );
		assertEquals("default null", null, def.dstMac() );
		assertEquals("default null", null, def.ethernetFrameType() );
		assertEquals("default null", null, def.vlanId() );
		assertEquals("default null", null, def.vlanPriority() );
		assertEquals("default null", null, def.srcIPv4Net() );
		assertEquals("default null", null, def.dstIPv4Net() );
		assertEquals("default null", null, def.ipProto() );
		assertEquals("default null", null, def.ipToS() );
		assertEquals("default null", null, def.srcTcpUdpPort() );
		assertEquals("default null", null, def.dstTcpUdpPort() );
	}

	@Test
	public void testFlowEntryMatchFlowEntryMatch(){
		FlowEntryMatch def_base = new FlowEntryMatch();
		FlowEntryMatch def = new FlowEntryMatch(def_base);

		assertEquals("default null", null, def.inPort() );
		assertEquals("default null", null, def.srcMac() );
		assertEquals("default null", null, def.dstMac() );
		assertEquals("default null", null, def.ethernetFrameType() );
		assertEquals("default null", null, def.vlanId() );
		assertEquals("default null", null, def.vlanPriority() );
		assertEquals("default null", null, def.srcIPv4Net() );
		assertEquals("default null", null, def.dstIPv4Net() );
		assertEquals("default null", null, def.ipProto() );
		assertEquals("default null", null, def.ipToS() );
		assertEquals("default null", null, def.srcTcpUdpPort() );
		assertEquals("default null", null, def.dstTcpUdpPort() );
		
		FlowEntryMatch copy = new FlowEntryMatch( match );
		
		assertEquals("inport", inport, copy.inPort() );
		assertEquals("mac1", mac1, copy.srcMac() );
		assertEquals("mac2", mac2, copy.dstMac() );
		assertEquals("ether", ether, copy.ethernetFrameType() );
		assertEquals("vlan id", vlanid, copy.vlanId() );
		assertEquals("vlan prio", vlanprio, copy.vlanPriority() );
		assertEquals("ip1", ip1, copy.srcIPv4Net() );
		assertEquals("ip2", ip2, copy.dstIPv4Net() );
		assertEquals("ip proto", ipproto, copy.ipProto() );
		assertEquals("tos", ipToS, copy.ipToS() );
		assertEquals("src port", tport1, copy.srcTcpUdpPort() );
		assertEquals("dst port", tport2, copy.dstTcpUdpPort() );

	}

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

	@Test
	public void testDisableInPort(){
		match.disableInPort();
		assertEquals("inport", null, match.inPort() );
		assertFalse( match.matchInPort() );
	}

	@Test
	public void testMatchInPort(){
		assertTrue( match.matchInPort() );
	}

	@Test
	public void testSrcMac(){
		assertEquals("mac1", mac1, match.srcMac() );
	}

	@Test
	public void testDisableSrcMac(){
		match.disableSrcMac();
		assertEquals("srcMac", null, match.srcMac() );
		assertFalse( match.matchSrcMac() );
	}

	@Test
	public void testMatchSrcMac(){
		assertTrue( match.matchSrcMac() );
	}

	@Test
	public void testDstMac(){
		assertEquals("mac2", mac2, match.dstMac() );
	}

	@Test
	public void testDisableDstMac(){
		match.disableDstMac();
		assertEquals("dstMac", null, match.dstMac() );
		assertFalse( match.matchDstMac() );
	}

	@Test
	public void testMatchDstMac(){
		assertTrue( match.matchDstMac() );
	}

	@Test
	public void testEthernetFrameType(){
		assertEquals("ether", ether, match.ethernetFrameType() );
	}

	@Test
	public void testDisableEthernetFrameType(){
		match.disableEthernetFrameType();
		assertEquals("ethernetFrameType", null, match.ethernetFrameType() );
		assertFalse( match.matchEthernetFrameType() );
	}

	@Test
	public void testMatchEthernetFrameType(){
		assertTrue( match.matchEthernetFrameType() );
	}

	@Test
	public void testVlanId(){
		assertEquals("vlan id", vlanid, match.vlanId() );
	}

	@Test
	public void testDisableVlanId(){
		match.disableVlanId();
		assertEquals("vlanId", null, match.vlanId() );
		assertFalse( match.matchVlanId() );
	}

	@Test
	public void testMatchVlanId(){
		assertTrue( match.matchVlanId() );
	}

	@Test
	public void testVlanPriority(){
		assertEquals("vlan prio", vlanprio, match.vlanPriority() );
	}

	@Test
	public void testDisableVlanPriority(){
		match.disableVlanPriority();
		assertEquals("vlanPriority", null, match.vlanPriority() );
		assertFalse( match.matchVlanPriority() );
	}

	@Test
	public void testMatchVlanPriority(){
		assertTrue( match.matchVlanPriority() );
	}

	@Test
	public void testSrcIPv4Net(){
		assertEquals("ip1", ip1, match.srcIPv4Net() );
	}

	@Test
	public void testDisableSrcIPv4Net(){
		match.disableSrcIPv4Net();
		assertEquals("srcIPv4Net", null, match.srcIPv4Net() );
		assertFalse( match.matchSrcIPv4Net() );
	}

	@Test
	public void testMatchSrcIPv4Net(){
		assertTrue( match.matchSrcIPv4Net() );
	}

	@Test
	public void testDstIPv4Net(){
		assertEquals("ip2", ip2, match.dstIPv4Net() );
	}

	@Test
	public void testDisableDstIPv4Net(){
		match.disableDstIPv4Net();
		assertEquals("dstIPv4Net", null, match.dstIPv4Net() );
		assertFalse( match.matchDstIPv4Net() );
	}

	@Test
	public void testMatchDstIPv4Net(){
		assertTrue( match.matchDstIPv4Net() );
	}

	@Test
	public void testIpProto(){
		assertEquals("ip proto", ipproto, match.ipProto() );
	}

	@Test
	public void testDisableIpProto(){
		match.disableIpProto();
		assertEquals("ipProto", null, match.ipProto() );
		assertFalse( match.matchIpProto() );
	}

	@Test
	public void testMatchIpProto(){
		assertTrue( match.matchIpProto() );
	}

	@Test
	public void testIpToS(){
		assertEquals("tos", ipToS, match.ipToS() );
	}

	@Test
	public void testDisableIpToS(){
		match.disableIpToS();
		assertEquals("ipToS", null, match.ipToS() );
		assertFalse( match.matchIpToS() );
	}

	@Test
	public void testMatchIpToS(){
		assertTrue( match.matchIpToS() );
	}

	@Test
	public void testSrcTcpUdpPort(){
		assertEquals("src port", tport1, match.srcTcpUdpPort() );
	}

	@Test
	public void testDisableSrcTcpUdpPort(){
		match.disableSrcTcpUdpPort();
		assertEquals("srcTcpUdpPort", null, match.srcTcpUdpPort() );
		assertFalse( match.matchSrcTcpUdpPort() );
	}

	@Test
	public void testMatchSrcTcpUdpPort(){
		assertTrue( match.matchSrcTcpUdpPort() );
	}

	@Test
	public void testDstTcpUdpPort(){
		assertEquals("dst port", tport2, match.dstTcpUdpPort() );
	}

	@Test
	public void testDisableDstTcpUdpPort(){
		match.disableDstTcpUdpPort();
		assertEquals("dstTcpUdpPort", null, match.dstTcpUdpPort() );
		assertFalse( match.matchDstTcpUdpPort() );
	}

	@Test
	public void testMatchDstTcpUdpPort(){
		assertTrue( match.matchDstTcpUdpPort() );
	}

	@Test
	public void testToString(){
		FlowEntryMatch def = new FlowEntryMatch();
		assertEquals("match default", def.toString(), "[]");
		
		assertEquals("match set", match.toString(), "[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]");
	}

}
