Use Java 11 HttpClient
[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 java.net.URI;
11 import java.net.http.HttpRequest;
12 import java.net.http.HttpRequest.BodyPublishers;
13 import java.nio.charset.StandardCharsets;
14 import org.opendaylight.netconf.test.tool.TestToolUtils;
15
16 public final class RequestMessageUtils {
17
18     private static final String PEER_KEY = "{PEERID}";
19     private static final String INT_LEAF_KEY = "{INTLEAF}";
20
21     private static final String PHYS_ADDR_PLACEHOLDER = "{PHYS_ADDR}";
22
23     private static final String HOST_KEY = "{HOST}";
24     private static final String PORT_KEY = "{PORT}";
25     private static final String DEVICE_PORT_KEY = "{DEVICE_PORT}";
26
27
28     private static final String DEST = "http://{HOST}:{PORT}";
29
30     private static long macStart = 0xAABBCCDD0000L;
31
32     private RequestMessageUtils() {
33         // Hidden on purpose
34     }
35
36     public static String prepareMessage(final int idi, final int idj, final String editContentString,
37                                         final int devicePort) {
38         StringBuilder messageBuilder = new StringBuilder(editContentString);
39         if (editContentString.contains(PEER_KEY)) {
40             messageBuilder.replace(
41                     messageBuilder.indexOf(PEER_KEY),
42                     messageBuilder.indexOf(PEER_KEY) + PEER_KEY.length(),
43                     Integer.toString(idi))
44                     .replace(
45                             messageBuilder.indexOf(INT_LEAF_KEY),
46                             messageBuilder.indexOf(INT_LEAF_KEY) + INT_LEAF_KEY.length(),
47                             Integer.toString(idj));
48         }
49
50         if (messageBuilder.indexOf(DEVICE_PORT_KEY) != -1) {
51             messageBuilder.replace(
52                     messageBuilder.indexOf(DEVICE_PORT_KEY),
53                     messageBuilder.indexOf(DEVICE_PORT_KEY) + DEVICE_PORT_KEY.length(),
54                     Integer.toString(devicePort));
55         }
56
57         int idx = messageBuilder.indexOf(PHYS_ADDR_PLACEHOLDER);
58
59         while (idx != -1) {
60             messageBuilder.replace(idx, idx + PHYS_ADDR_PLACEHOLDER.length(), TestToolUtils.getMac(macStart++));
61             idx = messageBuilder.indexOf(PHYS_ADDR_PLACEHOLDER);
62         }
63
64         return messageBuilder.toString();
65     }
66
67     public static RestPerfClient.RequestData formPayload(final Parameters parameters, final String editContentString,
68                                                          final int threadId, final int requests) {
69         final int devicePort = parameters.sameDevice
70                 ? parameters.devicePortRangeStart : parameters.devicePortRangeStart + threadId;
71         final StringBuilder destBuilder = new StringBuilder(DEST);
72         destBuilder.replace(
73                 destBuilder.indexOf(HOST_KEY),
74                 destBuilder.indexOf(HOST_KEY) + HOST_KEY.length(),
75                 parameters.ip)
76                 .replace(
77                         destBuilder.indexOf(PORT_KEY),
78                         destBuilder.indexOf(PORT_KEY) + PORT_KEY.length(),
79                         parameters.port + "");
80         final StringBuilder suffixBuilder = new StringBuilder(parameters.destination);
81         if (suffixBuilder.indexOf(DEVICE_PORT_KEY) != -1) {
82             suffixBuilder.replace(
83                     suffixBuilder.indexOf(DEVICE_PORT_KEY),
84                     suffixBuilder.indexOf(DEVICE_PORT_KEY) + DEVICE_PORT_KEY.length(),
85                     devicePort + "");
86         }
87         destBuilder.append(suffixBuilder);
88
89
90         return new RestPerfClient.RequestData(destBuilder.toString(), editContentString,
91                 threadId, devicePort, requests);
92     }
93
94     public static HttpRequest formRequest(final String url, final String msg) {
95         return HttpRequest.newBuilder(URI.create(url))
96             .POST(BodyPublishers.ofString(msg, StandardCharsets.UTF_8))
97             .header("content-type", "application/json")
98             .header("Accept", "application/xml")
99             .build();
100     }
101 }