package net.onrc.onos.ofcontroller.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 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]");
	}

}
