2c6566d6303c23cb3fcc773563100f4628333769
[genius.git] / arputil / arputil-impl / src / test / java / org / opendaylight / genius / arputil / test / ArpUtilTestUtil.java
1 /*
2  * Copyright (c) 2017 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.genius.arputil.test;
9
10 import java.math.BigInteger;
11 import java.util.ArrayList;
12 import java.util.List;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.MetadataBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceivedBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.SendToController;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.packet.received.MatchBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableId;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25
26 public final class ArpUtilTestUtil {
27
28     public static final BigInteger DPN_ID = BigInteger.ONE;
29     public static final BigInteger META_DATA = BigInteger.TEN;
30     public static final long PORT_NUMBER = 2;
31     public static final String URI = "2";
32     public static final String INTERFACE_NAME = "23701c04-7e58-4c65-9425-78a80d49a218";
33     private static final String[] OP_CODE = new String[]{"0 1", "0 2"}; //array to store opCodes
34
35     private ArpUtilTestUtil() {
36     }
37
38     public static PacketReceived createPayload(int oc) {
39
40         final short ID = 2;
41         byte[] payload = bytePayload("1F 1F 1F 1F 1F 1F",                               // Destination MAC
42                                      "00 01 02 03 04 05",                               // Source MAC
43                                      "08 06",                                           // Ethernet type
44                                      "0 1",                                             // Hardware type
45                                      "8 0",                                             // Protocol type
46                                      "6",                                               // Hardware size
47                                      "4",                                               // Protocol size
48                                      OP_CODE[oc],                                       // Opcode
49                                      "00 01 02 03 04 05",                               // Sender MAC Address
50                                      "C0 A8 0 2",                                       // Sender IP Address
51                                      "00 01 02 03 04 05",                               // Target MAC Address
52                                      "C0 A8 0 2"                                        // Target IP Address
53         );
54         InstanceIdentifier<Node> iid = InstanceIdentifier.builder(Nodes.class)
55                 .child(Node.class, new NodeKey(new NodeId("openflow:12345"))).build();
56
57         return new PacketReceivedBuilder().setPacketInReason(SendToController.class).setTableId(new TableId(ID))
58                 .setPayload(payload).setIngress(new NodeConnectorRef(iid))
59                 .setMatch(new MatchBuilder().setMetadata(new MetadataBuilder().setMetadata(META_DATA).build()).build())
60                 .build();
61     }
62
63     private static byte[] bytePayload(String... contents) {
64
65         List<String[]> splitContents = new ArrayList<>();
66         int packetLength = 0;
67         for (String content : contents) {
68             String[] split = content.split(" ");
69             packetLength += split.length;
70             splitContents.add(split);
71         }
72         byte[] packet = new byte[packetLength];
73         int index = 0;
74         for (String[] split : splitContents) {
75             for (String component : split) {
76                 packet[index] = (byte) Integer.parseInt(component, 16);
77                 index++;
78             }
79         }
80         return packet;
81     }
82 }