2 * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved.
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
8 package org.opendaylight.netconf.test.tool.client.http.perf;
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;
15 public final class RequestMessageUtils {
17 private static final String PEER_KEY = "{PEERID}";
18 private static final String INT_LEAF_KEY = "{INTLEAF}";
20 private static final String PHYS_ADDR_PLACEHOLDER = "{PHYS_ADDR}";
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}";
27 private static final String DEST = "http://{HOST}:{PORT}";
29 private static long macStart = 0xAABBCCDD0000L;
31 private RequestMessageUtils() {
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))
44 messageBuilder.indexOf(INT_LEAF_KEY),
45 messageBuilder.indexOf(INT_LEAF_KEY) + INT_LEAF_KEY.length(),
46 Integer.toString(idj));
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));
56 int idx = messageBuilder.indexOf(PHYS_ADDR_PLACEHOLDER);
59 messageBuilder.replace(idx, idx + PHYS_ADDR_PLACEHOLDER.length(), TestToolUtils.getMac(macStart++));
60 idx = messageBuilder.indexOf(PHYS_ADDR_PLACEHOLDER);
63 return messageBuilder.toString();
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);
72 destBuilder.indexOf(HOST_KEY),
73 destBuilder.indexOf(HOST_KEY) + HOST_KEY.length(),
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(),
86 destBuilder.append(suffixBuilder);
89 return new RestPerfClient.RequestData(destBuilder.toString(), editContentString,
90 threadId, devicePort, requests);
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")
98 .setRequestTimeout(Integer.MAX_VALUE);
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)
108 return requestBuilder.build();