test/jdk/javax/management/remote/rest/RestAdapterTest.java
author hb
Tue, 02 Jan 2018 13:20:18 +0530
branchjmx-rest-api
changeset 56003 4f7f76f6be2f
parent 56002 60ab3b595a8e
child 56006 352a4f213fc6
permissions -rw-r--r--
* Start Rest adapter via command line arguments * Rest adapter config via management.properties
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
     1
import com.oracle.jmx.remote.rest.http.HttpResponse;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
     2
import com.oracle.jmx.remote.rest.http.HttpUtil;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
     3
import com.oracle.jmx.remote.rest.json.JSONArray;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
     4
import com.oracle.jmx.remote.rest.json.JSONElement;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
     5
import com.oracle.jmx.remote.rest.json.JSONObject;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
     6
import com.oracle.jmx.remote.rest.json.JSONPrimitive;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
     7
import com.oracle.jmx.remote.rest.json.parser.JSONParser;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
     8
import com.oracle.jmx.remote.rest.mapper.JSONMapper;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
     9
import com.oracle.jmx.remote.rest.mapper.JSONMappingFactory;
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    10
import org.testng.Assert;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    11
import org.testng.annotations.AfterClass;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    12
import org.testng.annotations.BeforeClass;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    13
import org.testng.annotations.DataProvider;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    14
import org.testng.annotations.Test;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    15
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    16
import javax.management.*;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    17
import javax.management.remote.*;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    18
import javax.management.remote.rest.PlatformRestAdapter;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    19
import java.io.*;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    20
import java.lang.management.ManagementFactory;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    21
import java.net.HttpURLConnection;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    22
import java.net.URL;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    23
import java.util.*;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    24
import java.util.stream.Collectors;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    25
import java.util.stream.Stream;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    26
56003
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    27
 /* @test
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    28
 * @summary Unit tests for Rest adapter
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    29
 * @library /test/lib
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    30
 * @modules java.management.rest/com.oracle.jmx.remote.rest.http
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    31
 *          java.management.rest/com.oracle.jmx.remote.rest.json
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    32
 *          java.management.rest/com.oracle.jmx.remote.rest.json.parser
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    33
 *          java.management.rest/com.oracle.jmx.remote.rest.mapper
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    34
 * @build RestAdapterTest
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    35
 * @run testng/othervm  RestAdapterTest
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    36
 */
4f7f76f6be2f * Start Rest adapter via command line arguments
hb
parents: 56002
diff changeset
    37
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    38
@Test
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    39
public class RestAdapterTest {
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    40
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    41
    private JMXConnectorServer cs;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    42
    private String restUrl = "";
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    43
    JMXConnector connector;
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    44
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    45
    @BeforeClass
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    46
    public void setupServers() throws IOException {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    47
        MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    48
        JMXServiceURL url = new JMXServiceURL("rmi", null, 0);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    49
        cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, platformMBeanServer);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    50
        cs.start();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    51
        JMXServiceURL addr = cs.getAddress();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    52
        connector = JMXConnectorFactory.connect(addr, null);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    53
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    54
        String testSrcRoot = System.getProperty("test.src") + File.separator;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    55
        String configFile = testSrcRoot + "mgmt.properties";
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    56
        File f = new File(configFile);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    57
        Properties properties = null;
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    58
        if (f.exists()) {
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    59
            properties = new Properties();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    60
            properties.load(new FileInputStream(f));
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    61
        }
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    62
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    63
        PlatformRestAdapter.init(properties);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    64
        restUrl = PlatformRestAdapter.getBaseURL();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    65
    }
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    66
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    67
    @AfterClass
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    68
    public void tearDownServers() throws IOException {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    69
        connector.close();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    70
        cs.stop();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    71
        PlatformRestAdapter.stop();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    72
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    73
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    74
    private Set<String> rmiGetAllMBeans() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    75
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    76
            MBeanServerConnection mBeanServer = connector.getMBeanServerConnection();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    77
            Set<ObjectInstance> objectInstances = mBeanServer.queryMBeans(null, null);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    78
            return objectInstances.stream().map(a -> a.getObjectName().toString()).collect(Collectors.toSet());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    79
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    80
            throw new RuntimeException(ex);
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    81
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    82
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
    83
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    84
    private Map<String, Object> rmiGetAttributes(String name) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    85
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    86
            MBeanServerConnection mBeanServer = connector.getMBeanServerConnection();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    87
            ObjectName objectName = new ObjectName(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    88
            MBeanInfo mInfo = mBeanServer.getMBeanInfo(objectName);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    89
            String[] attrs = Stream.of(mInfo.getAttributes())
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    90
                    .map(MBeanAttributeInfo::getName)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    91
                    .toArray(String[]::new);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    92
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    93
            Map<String, Object> result = new LinkedHashMap<>();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    94
            AttributeList attrVals = mBeanServer.getAttributes(objectName, attrs);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    95
            List<String> missingAttrs = new ArrayList<>(Arrays.asList(attrs));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    96
            attrVals.asList().forEach(a -> {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    97
                missingAttrs.remove(a.getName());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    98
                result.put(a.getName(), a.getValue());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
    99
            });
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   100
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   101
            for (String attr : missingAttrs) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   102
                try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   103
                    mBeanServer.getAttribute(objectName, attr);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   104
                    result.put(attr, "< Error: No such attribute >");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   105
                } catch (RuntimeException ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   106
                    if (ex.getCause() instanceof UnsupportedOperationException) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   107
                        result.put(attr, "< Attribute not supported >");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   108
                    } else if (ex.getCause() instanceof IllegalArgumentException) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   109
                        result.put(attr, "< Invalid attributes >");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   110
                    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   111
                } catch (AttributeNotFoundException e) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   112
                    result.put(attr, "< Attribute not found >");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   113
                }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   114
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   115
            return result;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   116
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   117
            throw new RuntimeException(ex);
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   118
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   119
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   120
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   121
    private Set<String> rmiGetOperations(String name) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   122
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   123
            MBeanServerConnection mBeanServer = connector.getMBeanServerConnection();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   124
            ObjectName objectName = new ObjectName(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   125
            MBeanOperationInfo[] operationInfos = mBeanServer.getMBeanInfo(objectName).getOperations();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   126
            Set<String> rmiOps = Stream.of(operationInfos)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   127
                    .map(MBeanFeatureInfo::getName).collect(Collectors.toSet());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   128
            return rmiOps;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   129
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   130
            throw new RuntimeException(ex);
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   131
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   132
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   133
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   134
    private Set<String> restGetAllMBeans() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   135
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   136
            String url = restUrl + "/platform/mbeans";
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   137
            Set<String> mbeanNames = new HashSet<>();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   138
            do {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   139
                HttpResponse httpResponse = executeHttpRequest(url);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   140
                if (httpResponse.getCode() != 200)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   141
                    throw new RuntimeException(httpResponse.getBody());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   142
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   143
                String firstPage = httpResponse.getBody();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   144
                JSONParser parser = new JSONParser(firstPage);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   145
                JSONObject root = (JSONObject) parser.parse();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   146
                JSONArray mbeansNode = (JSONArray) root.get("mbeans");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   147
                for (JSONElement je : mbeansNode) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   148
                    JSONObject jobj = (JSONObject) je;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   149
                    JSONPrimitive jp = (JSONPrimitive) jobj.get("name");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   150
                    String name = (String) jp.getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   151
                    mbeanNames.add(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   152
                }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   153
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   154
                JSONObject linkObj = (JSONObject) root.get("_links");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   155
                if (linkObj == null) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   156
                    break;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   157
                }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   158
                if (linkObj.get("next") == null)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   159
                    break;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   160
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   161
                JSONPrimitive element = (JSONPrimitive) linkObj.get("next");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   162
                String nextUrl = (String) element.getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   163
                if (nextUrl.equalsIgnoreCase(url)) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   164
                    break;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   165
                } else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   166
                    url = nextUrl;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   167
                }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   168
            } while (true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   169
            return mbeanNames;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   170
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   171
            throw new RuntimeException(ex);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   172
        }
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   173
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   174
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   175
    private JSONObject restGetAttributes(String name) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   176
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   177
            String url = "/platform/mbeans/" + name;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   178
            HttpResponse httpResponse = executeHttpRequest(url);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   179
            if (httpResponse.getCode() == 200) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   180
                JSONParser parser = new JSONParser(httpResponse.getBody());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   181
                JSONElement root = parser.parse();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   182
                JSONElement element = ((JSONObject) root).get("attributes");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   183
                if (element != null && element instanceof JSONObject)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   184
                    return (JSONObject) element;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   185
                else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   186
                    return new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   187
                }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   188
            } else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   189
                throw new RuntimeException("HTTP GET for [" + url + "] failed, response = " + httpResponse.getBody());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   190
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   191
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   192
            throw new RuntimeException(ex);
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   193
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   194
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   195
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   196
    private JSONArray restGetOperations(String name) {
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   197
        try {
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   198
            String url = "/platform/mbeans/" + name;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   199
            HttpResponse httpResponse = executeHttpRequest(url);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   200
            if (httpResponse.getCode() == 200) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   201
                JSONParser parser = new JSONParser(httpResponse.getBody());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   202
                JSONElement root = parser.parse();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   203
                JSONElement element = ((JSONObject) root).get("operations");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   204
                if (element != null && element instanceof JSONArray)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   205
                    return (JSONArray) element;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   206
                else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   207
                    return new JSONArray();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   208
                }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   209
            } else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   210
                throw new RuntimeException("HTTP GET for [" + url + "] failed, response = " + httpResponse.getBody());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   211
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   212
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   213
            throw new RuntimeException(ex);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   214
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   215
    }
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   216
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   217
    private HttpResponse executeHttpRequest(String inputUrl) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   218
        return executeHttpRequest(inputUrl, "", false);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   219
    }
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   220
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   221
    private HttpResponse executeHttpRequest(String inputUrl, String body, boolean isPost) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   222
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   223
            if (inputUrl != null && !inputUrl.isEmpty()) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   224
                URL url;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   225
                if (!inputUrl.startsWith("http")) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   226
                    url = new URL(HttpUtil.escapeUrl(restUrl + inputUrl));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   227
                } else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   228
                    url = new URL(inputUrl);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   229
                }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   230
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   231
                con.setRequestProperty("Content-Type", "application/json;");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   232
                String userCredentials = "username1:password1";
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   233
                String basicAuth = "Basic " + Base64.getEncoder().encodeToString(userCredentials.getBytes());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   234
                con.setRequestProperty("Authorization", basicAuth);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   235
                if (isPost) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   236
                    con.setDoOutput(true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   237
                    con.setRequestMethod("POST");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   238
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   239
                    try (OutputStreamWriter out = new OutputStreamWriter(
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   240
                            con.getOutputStream())) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   241
                        out.write(body);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   242
                        out.flush();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   243
                    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   244
                } else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   245
                    con.setDoOutput(false);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   246
                }
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   247
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   248
                try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   249
                    int status = con.getResponseCode();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   250
                    StringBuilder sbuf;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   251
                    if (status == 200) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   252
                        try (BufferedReader br = new BufferedReader(
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   253
                                new InputStreamReader(con.getInputStream()))) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   254
                            sbuf = new StringBuilder();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   255
                            String input;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   256
                            while ((input = br.readLine()) != null) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   257
                                sbuf.append(input);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   258
                            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   259
                        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   260
                    } else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   261
                        try (BufferedReader br = new BufferedReader(
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   262
                                new InputStreamReader(con.getErrorStream()))) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   263
                            sbuf = new StringBuilder();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   264
                            String input;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   265
                            while ((input = br.readLine()) != null) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   266
                                sbuf.append(input);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   267
                            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   268
                        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   269
                    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   270
                    return new HttpResponse(status, sbuf.toString());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   271
                } catch (IOException e) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   272
                    e.printStackTrace();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   273
                }
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   274
            }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   275
        } catch (Exception ex) {
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   276
            throw new RuntimeException(ex);
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   277
        }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   278
        return null;
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   279
    }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   280
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   281
    private void verifyHttpResponse(HttpResponse httpResponse) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   282
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   283
            Assert.assertEquals(httpResponse.getCode(), 200);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   284
            JSONParser parser = new JSONParser(httpResponse.getBody());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   285
            parser.parse();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   286
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   287
            throw new RuntimeException(ex);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   288
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   289
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   290
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   291
    private JSONObject restGetMBeanOperationsBulkOp(String name) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   292
        JSONArray jsonArray = restGetOperations(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   293
        JSONArray ops = jsonArray.stream()
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   294
                .filter(a -> ((JSONObject) a).get("arguments") == null)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   295
                .map((JSONElement a) -> ((JSONObject) a).get("name"))
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   296
                .collect(Collectors.toCollection(JSONArray::new));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   297
        JSONObject result = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   298
        if (ops != null && !ops.isEmpty()) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   299
            result.put("operations", ops);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   300
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   301
        return result;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   302
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   303
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   304
    private JSONObject restGetMBeanAttributeBulkOp(String name) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   305
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   306
            MBeanServerConnection mBeanServer = connector.getMBeanServerConnection();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   307
            ObjectName objectName = new ObjectName(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   308
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   309
            MBeanAttributeInfo[] attrInfos = mBeanServer.getMBeanInfo(objectName).getAttributes();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   310
            Set<String> writableAttrs = Stream.of(attrInfos)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   311
                    .filter(MBeanAttributeInfo::isWritable)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   312
                    .map(MBeanFeatureInfo::getName).collect(Collectors.toSet());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   313
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   314
            JSONObject writeAttrMap = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   315
            List<String> invalidAttrs = Arrays.asList("< Attribute not supported >",
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   316
                    "< Invalid attributes >",
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   317
                    "< Attribute not found >",
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   318
                    "< Error: No such attribute >");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   319
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   320
            JSONObject attrMap = restGetAttributes(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   321
            writableAttrs.stream().filter(a -> {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   322
                JSONElement element = attrMap.get(a);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   323
                if (element instanceof JSONPrimitive
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   324
                        && ((JSONPrimitive) element).getValue() instanceof String) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   325
                    String attrVal = (String) ((JSONPrimitive) element).getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   326
                    if (invalidAttrs.contains(attrVal))
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   327
                        return false;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   328
                }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   329
                return true;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   330
            }).forEach(a -> writeAttrMap.put(a, attrMap.get(a)));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   331
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   332
            JSONObject jsonObject = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   333
            JSONArray attrs = new JSONArray();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   334
            attrMap.keySet().forEach(a -> attrs.add(new JSONPrimitive(a)));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   335
            if (attrs != null && !attrs.isEmpty()) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   336
                jsonObject.put("get", attrs);
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   337
            }
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   338
            if (writeAttrMap != null && !writeAttrMap.isEmpty()) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   339
                jsonObject.put("set", writeAttrMap);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   340
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   341
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   342
            JSONObject result = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   343
            if (jsonObject != null && !jsonObject.isEmpty()) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   344
                result.put("attributes", jsonObject);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   345
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   346
            return result;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   347
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   348
            ex.getCause().printStackTrace();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   349
            throw new RuntimeException(ex);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   350
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   351
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   352
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   353
    @DataProvider(name = "allMBeans")
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   354
    private Object[][] allMBeans() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   355
        Set<String> names = restGetAllMBeans();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   356
        Object[] objects = names.stream().toArray(Object[]::new);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   357
        Object[][] result = new Object[objects.length][1];
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   358
        for (int i = 0; i < objects.length; i++) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   359
            result[i][0] = objects[i];
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   360
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   361
        return result;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   362
    }
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   363
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   364
    @Test
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   365
    public void testAllMBeanServers() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   366
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   367
            HttpResponse httpResponse = executeHttpRequest(restUrl);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   368
            Assert.assertEquals(httpResponse.getCode(), 200);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   369
            JSONParser parser = new JSONParser(httpResponse.getBody());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   370
            JSONObject parse = (JSONObject) parser.parse();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   371
            JSONArray links = (JSONArray) parse.get("mBeanServers");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   372
            for(JSONElement elem : links) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   373
                JSONObject jobj = (JSONObject) elem;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   374
                String link = (String) ((JSONPrimitive)jobj.get("href")).getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   375
                HttpResponse hr = executeHttpRequest(link);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   376
                Assert.assertEquals(httpResponse.getCode(), 200);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   377
                JSONParser parser1 = new JSONParser(hr.getBody());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   378
                JSONObject parse1 = (JSONObject) parser1.parse();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   379
                JSONObject links1 = (JSONObject) parse1.get("_links");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   380
                String link3 = (String) ((JSONPrimitive)links1.get("mbeans")).getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   381
                verifyHttpResponse(executeHttpRequest(link3));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   382
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   383
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   384
            throw new RuntimeException(ex);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   385
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   386
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   387
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   388
    @Test
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   389
    public void testAllMBeans() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   390
        Set<String> restMbeans = restGetAllMBeans();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   391
        Set<String> rmiMbeans = rmiGetAllMBeans();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   392
        long count = restMbeans.stream().filter(mbeanName -> !rmiMbeans.contains(mbeanName)).count();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   393
        Assert.assertEquals(count, 0);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   394
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   395
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   396
    public void testMBeanFiltering() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   397
        String url = restUrl + "/platform/mbeans?";
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   398
        List<String> filtersOk = Arrays.asList("query=*:type=DiagnosticCommand,*",
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   399
        "query=java.lang:*&page=2",
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   400
        "query=java.lang:*&page=1",
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   401
        "query=*:type=Diag*");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   402
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   403
        List<String> filtersKo = Arrays.asList("","*:type=DiagnosticCommand,*","query=java.lang:*&page=1&invalid=4");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   404
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   405
        for(String filter : filtersOk) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   406
            HttpResponse httpResponse = executeHttpRequest(url + filter);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   407
            Assert.assertEquals(httpResponse.getCode(),200);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   408
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   409
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   410
        for(String filter : filtersKo) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   411
            HttpResponse httpResponse = executeHttpRequest(url + filter);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   412
            Assert.assertEquals(httpResponse.getCode(),HttpURLConnection.HTTP_BAD_REQUEST);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   413
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   414
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   415
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   416
    @Test
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   417
    public void testAllMBeanInfo() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   418
        Set<String> names = restGetAllMBeans();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   419
        for (String name : names) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   420
            String url = "/platform/mbeans/" + name + "/info";
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   421
            HttpResponse httpResponse = executeHttpRequest(url);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   422
            verifyHttpResponse(httpResponse);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   423
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   424
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   425
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   426
    @Test(priority = 3)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   427
    public void testMbeanNoArgOperations() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   428
        Set<String> mbeans = restGetAllMBeans();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   429
        for (String name : mbeans) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   430
            JSONArray restoperations = restGetOperations(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   431
            Set<String> rmiOps = rmiGetOperations(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   432
            Set<String> restOps = restoperations.stream().map((JSONElement a) -> {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   433
                JSONElement elem = ((JSONObject) a).get("name");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   434
                if (elem instanceof JSONPrimitive
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   435
                        && (((JSONPrimitive) elem).getValue() instanceof String)) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   436
                    return (String) ((JSONPrimitive) elem).getValue();
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   437
                } else {
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   438
                    return null;
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   439
                }
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   440
            }).collect(Collectors.toSet());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   441
            Assert.assertEquals(rmiOps, restOps);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   442
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   443
            for (JSONElement jsonElement : restoperations) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   444
                JSONObject jsonObject = (JSONObject) jsonElement;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   445
                String opUrl = (String) ((JSONPrimitive) jsonObject.get("href")).getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   446
                if (jsonObject.get("arguments") == null) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   447
                    HttpResponse httpResponse = executeHttpRequest(opUrl, "", true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   448
                    verifyHttpResponse(httpResponse);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   449
                }
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   450
            }
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   451
        }
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   452
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   453
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   454
    @Test(priority = 2)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   455
    public void testMBeanSetAttributes() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   456
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   457
            Set<String> mbeans = restGetAllMBeans();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   458
            MBeanServerConnection mBeanServer = connector.getMBeanServerConnection();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   459
            for (String name : mbeans) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   460
                ObjectName objectName = new ObjectName(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   461
                String url = "/platform/mbeans/" + objectName.toString();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   462
                JSONObject attrMap = restGetAttributes(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   463
                MBeanAttributeInfo[] attrInfos = mBeanServer.getMBeanInfo(objectName).getAttributes();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   464
                Set<String> writableAttrs = Stream.of(attrInfos)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   465
                        .filter(MBeanAttributeInfo::isWritable)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   466
                        .map(MBeanFeatureInfo::getName).collect(Collectors.toSet());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   467
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   468
                if (writableAttrs.isEmpty())
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   469
                    continue;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   470
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   471
                JSONObject writeAttrMap = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   472
                List<String> invalidAttrs = Arrays.asList(new String[]{"< Attribute not supported >",
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   473
                        "< Invalid attributes >",
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   474
                        "< Attribute not found >",
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   475
                        "< Error: No such attribute >"});
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   476
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   477
                writableAttrs.stream().filter(a -> {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   478
                    JSONElement element = attrMap.get(a);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   479
                    if (element instanceof JSONPrimitive
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   480
                            && ((JSONPrimitive) element).getValue() instanceof String) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   481
                        String attrVal = (String) ((JSONPrimitive) element).getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   482
                        if (invalidAttrs.contains(attrVal))
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   483
                            return false;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   484
                    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   485
                    return true;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   486
                }).forEach(a -> writeAttrMap.put(a, attrMap.get(a)));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   487
                HttpResponse httpResponse = executeHttpRequest(url, writeAttrMap.toJsonString(), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   488
                if (httpResponse.getCode() == 200) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   489
                    String body = httpResponse.getBody();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   490
                    JSONParser parser = new JSONParser(body);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   491
                    JSONObject jsonObject = (JSONObject) parser.parse();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   492
                    Assert.assertEquals(jsonObject.size(), writeAttrMap.size());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   493
                    Assert.assertEquals(jsonObject.keySet(), writeAttrMap.keySet());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   494
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   495
                    for (JSONElement elem : jsonObject.values()) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   496
                        String output = (String) ((JSONPrimitive) elem).getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   497
                        Assert.assertEquals(output.equalsIgnoreCase("success"), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   498
                    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   499
                }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   500
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   501
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   502
            throw new RuntimeException(ex);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   503
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   504
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   505
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   506
    @Test(priority = 1)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   507
    public void testMBeanGetAttributes() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   508
        try {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   509
            Set<String> mbeans = restGetAllMBeans();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   510
            for (String name : mbeans) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   511
                Map<String, Object> rmiAttrs = rmiGetAttributes(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   512
                JSONMapper typeMapper = JSONMappingFactory.INSTANCE.getTypeMapper(rmiAttrs);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   513
                JSONObject rmiJson = (JSONObject) typeMapper.toJsonValue(rmiAttrs);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   514
                JSONObject restJson = restGetAttributes(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   515
                Assert.assertEquals(restJson.size(), rmiJson.size());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   516
                Assert.assertEquals(rmiJson.keySet(), restJson.keySet());
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   517
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   518
        } catch (Exception ex) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   519
            throw new RuntimeException(ex);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   520
        }
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   521
    }
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   522
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   523
    @Test(priority = 4)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   524
    public void testThreadMXBeanBulkRequest() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   525
        String name = "java.lang:type=Threading";
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   526
        String url = "/platform/mbeans/java.lang:type=Threading";
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   527
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   528
        JSONObject jsonObject = restGetAttributes(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   529
        JSONArray jarr = (JSONArray) jsonObject.get("AllThreadIds");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   530
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   531
        Long[] threadIds = jarr.stream().map(a -> {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   532
            if (a instanceof JSONPrimitive && ((JSONPrimitive) a).getValue() instanceof Long) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   533
                return (Long) ((JSONPrimitive) a).getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   534
            } else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   535
                return -1;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   536
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   537
        }).toArray(Long[]::new);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   538
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   539
        JSONObject args = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   540
        JSONArray array = new JSONArray();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   541
        Stream.of(threadIds).forEach(a -> array.add(new JSONPrimitive(a)));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   542
        args.put("p0", array);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   543
        args.put("p1", new JSONPrimitive(true));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   544
        args.put("p2", new JSONPrimitive(true));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   545
        JSONObject jobj1 = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   546
        jobj1.put("getThreadInfo", args);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   547
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   548
        JSONObject jobj2 = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   549
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   550
        jobj2.putAll(restGetMBeanAttributeBulkOp(name));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   551
        jobj2.put("operations", jobj1);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   552
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   553
        HttpResponse httpResponse = executeHttpRequest(url, jobj2.toJsonString(), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   554
        verifyHttpResponse(httpResponse);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   555
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   556
        JSONArray arr = new JSONArray();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   557
        arr.add(new JSONPrimitive("findMonitorDeadlockedThreads"));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   558
        arr.add(new JSONPrimitive("resetPeakThreadCount"));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   559
        arr.add(new JSONPrimitive("findDeadlockedThreads"));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   560
        arr.add(jobj1);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   561
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   562
        jobj2.clear();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   563
        jobj2.putAll(restGetMBeanAttributeBulkOp(name));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   564
        jobj2.put("operations", arr);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   565
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   566
        httpResponse = executeHttpRequest(url, jobj2.toJsonString(), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   567
        verifyHttpResponse(httpResponse);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   568
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   569
        jobj2.clear();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   570
        jobj2.putAll(restGetMBeanAttributeBulkOp(name));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   571
        jobj2.put("operations", "resetPeakThreadCount");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   572
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   573
        httpResponse = executeHttpRequest(url, jobj2.toJsonString(), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   574
        verifyHttpResponse(httpResponse);
55994
9721e36abeb0 Implementation of GET for new APIs
hb
parents:
diff changeset
   575
    }
56002
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   576
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   577
    @Test(priority = 5)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   578
    public void testThreadMXBeanThreadInfo() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   579
        String name = "java.lang:type=Threading";
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   580
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   581
        JSONObject jsonObject = restGetAttributes(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   582
        JSONArray jarr = (JSONArray) jsonObject.get("AllThreadIds");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   583
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   584
        Long[] threadIds = jarr.stream().map(a -> {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   585
            if (a instanceof JSONPrimitive && ((JSONPrimitive) a).getValue() instanceof Long) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   586
                return (Long) ((JSONPrimitive) a).getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   587
            } else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   588
                return -1;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   589
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   590
        }).toArray(Long[]::new);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   591
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   592
        JSONArray operations = restGetOperations("java.lang:type=Threading");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   593
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   594
        JSONObject threadInfoRequest = (JSONObject) operations.stream()
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   595
                .filter(a -> {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   596
                    JSONObject jobj = (JSONObject) a;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   597
                    JSONElement elem = ((JSONObject) a).get("name");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   598
                    if (elem instanceof JSONPrimitive
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   599
                            && (((JSONPrimitive) elem).getValue() instanceof String)) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   600
                        return ((JSONPrimitive) elem).getValue().equals("getThreadInfo");
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   601
                    } else {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   602
                        return false;
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   603
                    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   604
                }).findFirst().get();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   605
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   606
        String postUrl1 = (String) ((JSONPrimitive) threadInfoRequest.get("href")).getValue();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   607
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   608
        // Build arguments
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   609
        // 1. getThreadInfo(long id)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   610
        JSONObject args = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   611
        args.put("p0", new JSONPrimitive(threadIds[0]));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   612
        HttpResponse httpResponse = executeHttpRequest(postUrl1, args.toJsonString(), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   613
        verifyHttpResponse(httpResponse);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   614
        args.clear();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   615
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   616
        // 2. getThreadInfo(long[] ids)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   617
        JSONArray array = new JSONArray();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   618
        Stream.of(threadIds).forEach(a -> array.add(new JSONPrimitive(a)));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   619
        args.put("p0", array);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   620
        httpResponse = executeHttpRequest(postUrl1, args.toJsonString(), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   621
        verifyHttpResponse(httpResponse);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   622
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   623
        //3. getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   624
        args.put("p1", new JSONPrimitive(true));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   625
        args.put("p2", new JSONPrimitive(true));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   626
        httpResponse = executeHttpRequest(postUrl1, args.toJsonString(), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   627
        verifyHttpResponse(httpResponse);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   628
        args.clear();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   629
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   630
        //4. getThreadInfo(long id, int maxDepth)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   631
        args.put("p0", new JSONPrimitive(threadIds[0]));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   632
        args.put("p1", new JSONPrimitive(10));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   633
        httpResponse = executeHttpRequest(postUrl1, args.toJsonString(), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   634
        verifyHttpResponse(httpResponse);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   635
        args.clear();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   636
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   637
        //5. getThreadInfo(long[] ids, int maxDepth)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   638
        JSONArray jarr1 = new JSONArray();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   639
        Stream.of(threadIds).forEach(a -> jarr1.add(new JSONPrimitive(a)));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   640
        args.put("p0", jarr1);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   641
        args.put("p1", new JSONPrimitive(10));
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   642
        httpResponse = executeHttpRequest(postUrl1, args.toJsonString(), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   643
        verifyHttpResponse(httpResponse);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   644
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   645
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   646
    @Test(priority = 4)
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   647
    public void testAllMBeansBulkRequest() {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   648
        Set<String> allNames = restGetAllMBeans();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   649
        String url = restUrl + "/platform/mbeans";
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   650
        JSONObject result = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   651
        for (String name : allNames) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   652
            JSONObject attrNode = restGetMBeanAttributeBulkOp(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   653
            JSONObject opsNode = restGetMBeanOperationsBulkOp(name);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   654
            JSONObject jobj = new JSONObject();
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   655
            if (attrNode != null && !attrNode.isEmpty()) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   656
                jobj.putAll(attrNode);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   657
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   658
            if (opsNode != null && !opsNode.isEmpty()) {
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   659
                jobj.putAll(opsNode);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   660
            }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   661
            result.put(name, jobj);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   662
        }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   663
        HttpResponse httpResponse = executeHttpRequest(url, result.toJsonString(), true);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   664
        verifyHttpResponse(httpResponse);
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   665
    }
60ab3b595a8e Lot of bug fixes
hb
parents: 55994
diff changeset
   666
}