// Verify that decideProtocol returns UnknownProtocol when given packet for // which it does not have a plugin. func TestProcess_unknownProtocol(t *testing.T) { test := testSetup(t) tuple := common.NewIpPortTuple(4, net.ParseIP("10.0.0.1"), 34898, net.ParseIP("192.168.0.1"), PORT+1) assert.Equal(t, protos.UnknownProtocol, test.udp.decideProtocol(&tuple)) }
// Verify that decideProtocol returns the protocol assocated with the // packet's destination port. func Test_decideProtocol_byDstPort(t *testing.T) { test := testSetup(t) tuple := common.NewIpPortTuple(4, net.ParseIP("10.0.0.1"), 34898, net.ParseIP("192.168.0.1"), PORT) assert.Equal(t, PROTO, test.udp.decideProtocol(&tuple)) }
// Verify that Process ignores empty packets. func TestProcess_emptyPayload(t *testing.T) { test := testSetup(t) tuple := common.NewIpPortTuple(4, net.ParseIP("192.168.0.1"), PORT, net.ParseIP("10.0.0.1"), 34898) emptyPkt := &protos.Packet{Ts: time.Now(), Tuple: tuple, Payload: []byte{}} test.udp.Process(emptyPkt) assert.Nil(t, test.plugin.pkt) }
// Verify that Process finds the plugin associated with the packet and invokes // ProcessUdp on it. func TestProcess_nonEmptyPayload(t *testing.T) { test := testSetup(t) tuple := common.NewIpPortTuple(4, net.ParseIP("192.168.0.1"), PORT, net.ParseIP("10.0.0.1"), 34898) payload := []byte{1} pkt := &protos.Packet{Ts: time.Now(), Tuple: tuple, Payload: payload} test.udp.Process(pkt) assert.Equal(t, pkt, test.plugin.pkt) }
// Benchmark that runs with parallelism to help find concurrency related // issues. To run with parallelism, the 'go test' cpu flag must be set // greater than 1, otherwise it just runs concurrently but not in parallel. func BenchmarkParallelProcess(b *testing.B) { rand.Seed(18) p := protocols{} p.tcp = make(map[protos.Protocol]protos.TcpProtocolPlugin) p.tcp[1] = &TestProtocol{Ports: []int{ServerPort}} tcp, _ := NewTcp(p) b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { pkt := &protos.Packet{ Ts: time.Now(), Tuple: common.NewIpPortTuple(4, net.ParseIP(ServerIp), ServerPort, net.ParseIP(ClientIp), uint16(rand.Intn(65535))), Payload: []byte{1, 2, 3, 4}, } tcp.Process(&layers.TCP{}, pkt) } }) }
0x71, 0x35, 0x33, 0x72, 0x71, 0x35, 0x70, 0x34, 0x36, 0x31, 0x34, 0x72, 0x31, 0x71, 0x34, 0x37, 0x38, 0x31, 0x71, 0x70, 0x72, 0x31, 0x36, 0x6e, 0x38, 0x30, 0x39, 0x71, 0x70, 0x34, 0x1a, 0x38, 0x37, 0x39, 0x6f, 0x33, 0x6f, 0x37, 0x33, 0x34, 0x71, 0x39, 0x73, 0x6e, 0x73, 0x30, 0x30, 0x35, 0x6f, 0x33, 0x70, 0x70, 0x37, 0x36, 0x71, 0x38, 0x33, 0x28, 0x32, 0x71, 0x36, 0x35, 0x71, 0x6e, 0x73, 0x33, 0x73, 0x70, 0x6e, 0x73, 0x31, 0x30, 0x38, 0x31, 0x73, 0x35, 0x72, 0x6e, 0x35, 0x73, 0x72, 0x37, 0x34, 0x6f, 0x70, 0x71, 0x72, 0x71, 0x6e, 0x70, 0x71, 0x36, 0x72, 0x6e, 0x33, 0x72, 0x6f, 0x35, 0x01, 0x69, 0x02, 0x30, 0x30, 0x03, 0x6d, 0x61, 0x63, 0x08, 0x73, 0x6f, 0x70, 0x68, 0x6f, 0x73, 0x78, 0x6c, 0x03, 0x6e, 0x65, 0x74, 0x00, 0x00, 0x10, 0x00, 0x01, }, } ) // Request and response addresses. var ( forward = common.NewIpPortTuple(4, net.ParseIP(ServerIp), ServerPort, net.ParseIP(ClientIp), ClientPort) reverse = common.NewIpPortTuple(4, net.ParseIP(ClientIp), ClientPort, net.ParseIP(ServerIp), ServerPort) ) // Verify that the interfaces for UDP and TCP have been satisfied. var _ protos.UdpProtocolPlugin = &Dns{} // TODO: Uncomment when TCP is implemented. //var _ protos.TcpProtocolPlugin = &Dns{} func newDns(verbose bool) *Dns { if verbose { logp.LogInit(logp.LOG_DEBUG, "", false, true, []string{"dns"})