@Test
  public void testWindowsPerfmonInputCrud() {
    Service service = connect();
    InputCollection inputCollection = service.getInputs();
    ServiceInfo info = service.getInfo();

    if (info.getOsName().equals("Windows")) {
      String name = "sdk-input-wp";
      Args args = new Args();

      if (inputCollection.containsKey(name)) {
        inputCollection.remove(name);
        inputCollection.refresh();
      }
      assertFalse(assertRoot + "#57", inputCollection.containsKey(name));

      // CRUD Windows Perfmon Input
      args.put("interval", 600);
      args.put("object", "Server");
      inputCollection.create(name, InputKind.WindowsPerfmon, args);
      assertTrue(assertRoot + "#58", inputCollection.containsKey(name));
      WindowsPerfmonInput windowsPerfmonInput = (WindowsPerfmonInput) inputCollection.get(name);

      windowsPerfmonInput.setIndex("main");
      windowsPerfmonInput.setCounters("% Privileged Time");
      windowsPerfmonInput.setInstances("wininit");
      windowsPerfmonInput.setObject("Process");
      windowsPerfmonInput.setInterval(1200);
      windowsPerfmonInput.update();

      assertEquals(assertRoot + "#59", 1, windowsPerfmonInput.getCounters().length);
      assertTrue(
          assertRoot + "#60", contains(windowsPerfmonInput.getCounters(), "% Privileged Time"));
      assertEquals(windowsPerfmonInput.getIndex(), "main");
      assertTrue(assertRoot + "#61", contains(windowsPerfmonInput.getInstances(), "wininit"));
      assertEquals(assertRoot + "#62", 1200, windowsPerfmonInput.getInterval());
      assertEquals(assertRoot + "#63", "Process", windowsPerfmonInput.getObject());

      // set multi-series values and update.
      windowsPerfmonInput.setCounters(new String[] {"% Privileged Time", "% User Time"});
      windowsPerfmonInput.setInstances(new String[] {"smss", "csrss"});
      windowsPerfmonInput.update();

      assertEquals(assertRoot + "#64", 2, windowsPerfmonInput.getCounters().length);
      assertTrue(
          assertRoot + "#65", contains(windowsPerfmonInput.getCounters(), "% Privileged Time"));
      assertTrue(assertRoot + "#66", contains(windowsPerfmonInput.getCounters(), "% User Time"));

      assertEquals(assertRoot + "#67", 2, windowsPerfmonInput.getInstances().length);
      assertTrue(assertRoot + "#68", contains(windowsPerfmonInput.getInstances(), "smss"));
      assertTrue(assertRoot + "#69", contains(windowsPerfmonInput.getInstances(), "csrss"));

      windowsPerfmonInput.remove();
      inputCollection.refresh();
      assertFalse(assertRoot + "#70", inputCollection.containsKey(name));
    }
  }
  private void touchSpecificInput(Input input) {
    InputKind inputKind = input.getKind();
    TcpConnections tcpConnections = null;
    UdpConnections udpConnections = null;

    switch (inputKind) {
      case Monitor:
        MonitorInput monitorInput = (MonitorInput) input;
        monitorInput.getBlacklist();
        monitorInput.getCrcSalt();
        monitorInput.getFileCount();
        monitorInput.getFollowTail();
        monitorInput.getHost();
        monitorInput.getHostRegex();
        monitorInput.getIgnoreOlderThan();
        monitorInput.getIndex();
        monitorInput.getQueue();
        monitorInput.getRcvBuf();
        monitorInput.getRecursive();
        monitorInput.getSource();
        monitorInput.getSourceType();
        monitorInput.getTimeBeforeClose();
        monitorInput.getWhitelist();
        break;
      case Script:
        ScriptInput scriptInput = (ScriptInput) input;
        scriptInput.getEndTime();
        scriptInput.getGroup();
        scriptInput.getHost();
        scriptInput.getIndex();
        scriptInput.getInterval();
        scriptInput.getRcvBuf();
        scriptInput.getStartTime();
        break;
      case Tcp:
        TcpInput tcpInput = (TcpInput) input;
        tcpInput.getConnectionHost();
        tcpInput.getGroup();
        tcpInput.getHost();
        tcpInput.getIndex();
        tcpInput.getQueue();
        tcpInput.getRcvBuf();
        tcpInput.getRestrictToHost();
        tcpInput.getSource();
        tcpInput.getSourceType();
        tcpInput.getSSL();
        tcpConnections = tcpInput.connections();
        tcpConnections.getConnection();
        tcpConnections.getServername();
        break;
      case TcpSplunk:
        TcpSplunkInput tcpSplunkInput = (TcpSplunkInput) input;
        tcpSplunkInput.getConnectionHost();
        tcpSplunkInput.getGroup();
        tcpSplunkInput.getHost();
        tcpSplunkInput.getIndex();
        tcpSplunkInput.getQueue();
        tcpSplunkInput.getRcvBuf();
        tcpSplunkInput.getSource();
        tcpSplunkInput.getSourceType();
        tcpSplunkInput.getSSL();
        tcpConnections = tcpSplunkInput.connections();
        tcpConnections.getConnection();
        tcpConnections.getServername();
        break;
      case Udp:
        UdpInput udpInput = (UdpInput) input;
        udpInput.getConnectionHost();
        udpInput.getGroup();
        udpInput.getHost();
        udpInput.getIndex();
        udpInput.getQueue();
        udpInput.getRcvBuf();
        udpInput.getSource();
        udpInput.getSourceType();
        udpInput.getNoAppendingTimeStamp();
        udpInput.getNoPriorityStripping();
        udpConnections = udpInput.connections();
        udpConnections.getGroup();
        break;
      case WindowsActiveDirectory:
        WindowsActiveDirectoryInput windowsActiveDirectoryInput =
            (WindowsActiveDirectoryInput) input;
        windowsActiveDirectoryInput.getIndex();
        windowsActiveDirectoryInput.getMonitorSubtree();
        windowsActiveDirectoryInput.getStartingNode();
        windowsActiveDirectoryInput.getTargetDc();
        break;
      case WindowsEventLog:
        WindowsEventLogInput windowsEventLogInput = (WindowsEventLogInput) input;
        windowsEventLogInput.getHosts();
        windowsEventLogInput.getIndex();
        windowsEventLogInput.getLocalName();
        windowsEventLogInput.getLogs();
        windowsEventLogInput.getLookupHost();
        break;
      case WindowsPerfmon:
        WindowsPerfmonInput windowsPerfmonInput = (WindowsPerfmonInput) input;
        windowsPerfmonInput.getCounters();
        windowsPerfmonInput.getIndex();
        windowsPerfmonInput.getInstances();
        windowsPerfmonInput.getInterval();
        windowsPerfmonInput.getObject();
        break;
      case WindowsRegistry:
        WindowsRegistryInput windowsRegistryInput = (WindowsRegistryInput) input;
        windowsRegistryInput.getBaseline();
        windowsRegistryInput.getHive();
        windowsRegistryInput.getIndex();
        windowsRegistryInput.getMonitorSubnodes();
        windowsRegistryInput.getProc();
        windowsRegistryInput.getType();
        break;
      case WindowsWmi:
        WindowsWmiInput windowsWmiInput = (WindowsWmiInput) input;
        windowsWmiInput.getClasses();
        windowsWmiInput.getFields();
        windowsWmiInput.getIndex();
        windowsWmiInput.getInstances();
        windowsWmiInput.getInterval();
        windowsWmiInput.getLocalName();
        windowsWmiInput.getLookupHost();
        windowsWmiInput.getServers();
        windowsWmiInput.getWql();
        break;
    }
  }