0b83cce0b518bf8bb432f25ca765431507eeb53e
[netconf.git] / netconf / tools / netconf-testtool / src / main / java / org / opendaylight / netconf / test / tool / client / http / perf / RequestMessageUtils.java
1 /*
2  * Copyright (c) 2021 PANTHEON.tech, s.r.o. 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.netconf.test.tool.client.http.perf;
9
10 import com.ning.http.client.AsyncHttpClient;
11 import com.ning.http.client.Realm;
12 import com.ning.http.client.Request;
13 import org.opendaylight.netconf.test.tool.TestToolUtils;
14
15 public final class RequestMessageUtils {
16
17     private static final String PEER_KEY = "{PEERID}";
18     private static final String INT_LEAF_KEY = "{INTLEAF}";
19
20     private static final String PHYS_ADDR_PLACEHOLDER = "{PHYS_ADDR}";
21
22     private static final String HOST_KEY = "{HOST}";
23     private static final String PORT_KEY = "{PORT}";
24     private static final String DEVICE_PORT_KEY = "{DEVICE_PORT}";
25
26
27     private static final String DEST = "http://{HOST}:{PORT}";
28
29     private static long macStart = 0xAABBCCDD0000L;
30
31     private RequestMessageUtils() {
32         // Hidden on purpose
33     }
34
35     public static String prepareMessage(final int idi, final int idj, final String editContentString,
36                                         final int devicePort) {
37         StringBuilder messageBuilder = new StringBuilder(editContentString);
38         if (editContentString.contains(PEER_KEY)) {
39             messageBuilder.replace(
40                     messageBuilder.indexOf(PEER_KEY),
41                     messageBuilder.indexOf(PEER_KEY) + PEER_KEY.length(),
42                     Integer.toString(idi))
43                     .replace(
44                             messageBuilder.indexOf(INT_LEAF_KEY),
45                             messageBuilder.indexOf(INT_LEAF_KEY) + INT_LEAF_KEY.length(),
46                             Integer.toString(idj));
47         }
48
49         if (messageBuilder.indexOf(DEVICE_PORT_KEY) != -1) {
50             messageBuilder.replace(
51                     messageBuilder.indexOf(DEVICE_PORT_KEY),
52                     messageBuilder.indexOf(DEVICE_PORT_KEY) + DEVICE_PORT_KEY.length(),
53                     Integer.toString(devicePort));
54         }
55
56         int idx = messageBuilder.indexOf(PHYS_ADDR_PLACEHOLDER);
57
58         while (idx != -1) {
59             messageBuilder.replace(idx, idx + PHYS_ADDR_PLACEHOLDER.length(), TestToolUtils.getMac(macStart++));
60             idx = messageBuilder.indexOf(PHYS_ADDR_PLACEHOLDER);
61         }
62
63         return messageBuilder.toString();
64     }
65
66     public static RestPerfClient.RequestData formPayload(Parameters parameters, String editContentString,
67                                                          int threadId, int requests) {
68         final int devicePort = parameters.sameDevice
69                 ? parameters.devicePortRangeStart : parameters.devicePortRangeStart + threadId;
70         final StringBuilder destBuilder = new StringBuilder(DEST);
71         destBuilder.replace(
72                 destBuilder.indexOf(HOST_KEY),
73                 destBuilder.indexOf(HOST_KEY) + HOST_KEY.length(),
74                 parameters.ip)
75                 .replace(
76                         destBuilder.indexOf(PORT_KEY),
77                         destBuilder.indexOf(PORT_KEY) + PORT_KEY.length(),
78                         parameters.port + "");
79         final StringBuilder suffixBuilder = new StringBuilder(parameters.destination);
80         if (suffixBuilder.indexOf(DEVICE_PORT_KEY) != -1) {
81             suffixBuilder.replace(
82                     suffixBuilder.indexOf(DEVICE_PORT_KEY),
83                     suffixBuilder.indexOf(DEVICE_PORT_KEY) + DEVICE_PORT_KEY.length(),
84                     devicePort + "");
85         }
86         destBuilder.append(suffixBuilder);
87
88
89         return new RestPerfClient.RequestData(destBuilder.toString(), editContentString,
90                 threadId, devicePort, requests);
91     }
92
93     public static Request formRequest(AsyncHttpClient asyncHttpClient, String url, Parameters params, String msg) {
94         AsyncHttpClient.BoundRequestBuilder requestBuilder = asyncHttpClient.preparePost(url)
95                 .addHeader("content-type", "application/json")
96                 .addHeader("Accept", "application/xml")
97                 .setBody(msg)
98                 .setRequestTimeout(Integer.MAX_VALUE);
99
100         if (params.auth != null) {
101             requestBuilder.setRealm(new Realm.RealmBuilder()
102                     .setScheme(Realm.AuthScheme.BASIC)
103                     .setPrincipal(params.auth.get(0))
104                     .setPassword(params.auth.get(1))
105                     .setUsePreemptiveAuth(true)
106                     .build());
107         }
108         return requestBuilder.build();
109     }
110
111
112 }