test/hotspot/gtest/jfr/test_networkUtilization.cpp
author mgronlun
Wed, 30 Oct 2019 19:43:52 +0100
changeset 58863 c16ac7a2eba4
parent 53026 7d4397b43fa3
permissions -rw-r--r--
8226511: Implement JFR Event Streaming Reviewed-by: egahlin, mseledtsov, mgronlun Contributed-by: erik.gahlin@oracle.com, mikhailo.seledtsov@oracle.com, markus.gronlund@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
     1
/*
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
     2
 * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
     4
 *
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
     7
 * published by the Free Software Foundation.
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
     8
 *
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    13
 * accompanied this code).
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    14
 *
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    18
 *
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    21
 * questions.
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    22
 *
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    23
 */
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    24
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    25
#include "precompiled.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    26
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    27
// This test performs mocking of certain JVM functionality. This works by
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    28
// including the source file under test inside an anonymous namespace (which
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    29
// prevents linking conflicts) with the mocked symbols redefined.
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    30
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    31
// The include list should mirror the one found in the included source file -
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    32
// with the ones that should pick up the mocks removed. Those should be included
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    33
// later after the mocks have been defined.
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    34
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    35
#include "logging/log.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    36
#include "jfr/jfrEvents.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    37
#include "jfr/metadata/jfrSerializer.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    38
#include "jfr/periodic/jfrOSInterface.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    39
#include "jfr/utilities/jfrTime.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    40
#include "jfr/utilities/jfrTypes.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    41
#include "runtime/os_perf.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    42
#include "utilities/globalDefinitions.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    43
#include "utilities/growableArray.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    44
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    45
#include "unittest.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    46
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    47
#include <vector>
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    48
#include <list>
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    49
#include <map>
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    50
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    51
namespace {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    52
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    53
  class MockFastUnorderedElapsedCounterSource : public ::FastUnorderedElapsedCounterSource {
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    54
   public:
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    55
    static jlong current_ticks;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    56
    static Type now() {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    57
      return current_ticks;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    58
    }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    59
    static uint64_t nanoseconds(Type value) {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    60
      return value;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    61
    }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    62
  };
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    63
50894
e8d55141afd2 8206006: Build failed on Windows
jwilhelm
parents: 50879
diff changeset
    64
  typedef TimeInstant<CounterRepresentation, MockFastUnorderedElapsedCounterSource> MockJfrTicks;
e8d55141afd2 8206006: Build failed on Windows
jwilhelm
parents: 50879
diff changeset
    65
  typedef TimeInterval<CounterRepresentation, MockFastUnorderedElapsedCounterSource> MockJfrTickspan;
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    66
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    67
  class MockJfrCheckpointWriter {
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    68
   public:
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    69
    traceid current;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    70
    std::map<traceid, std::string> ids;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    71
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    72
    const JfrCheckpointContext context() const {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    73
      return JfrCheckpointContext();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    74
    }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    75
    intptr_t reserve(size_t size) {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    76
      return 0;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    77
    }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    78
    void write_key(traceid id) {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    79
      current = id;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    80
    }
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    81
    void write_type(JfrTypeId id) {}
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    82
    MockJfrCheckpointWriter() {}
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    83
    void write(const char* data) {}
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    84
    void set_context(const JfrCheckpointContext ctx) { }
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    85
    void write_count(u4 nof_entries) { }
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    86
  };
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    87
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    88
  class MockJfrSerializer {
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    89
   public:
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    90
    static bool register_serializer(JfrTypeId id, bool permit_cache, MockJfrSerializer* serializer) {
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    91
      return true;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    92
    }
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    93
    virtual void on_rotation() {}
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    94
    virtual void serialize(MockJfrCheckpointWriter& writer) {}
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    95
  };
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
    96
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    97
  struct MockNetworkInterface {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    98
    std::string name;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
    99
    uint64_t bytes_in;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   100
    uint64_t bytes_out;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   101
    traceid id;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   102
    MockNetworkInterface(std::string name, uint64_t bytes_in, uint64_t bytes_out, traceid id) :
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   103
      name(name), bytes_in(bytes_in), bytes_out(bytes_out), id(id) {}
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   104
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   105
    bool operator==(const MockNetworkInterface& rhs) const {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   106
      return name == rhs.name;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   107
    }
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   108
  };
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   109
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   110
  class NetworkInterface : public ::NetworkInterface {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   111
   public:
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   112
    NetworkInterface(const char* name, uint64_t bytes_in, uint64_t bytes_out, NetworkInterface* next) :
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   113
      ::NetworkInterface(name, bytes_in, bytes_out, next) {}
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   114
    NetworkInterface* next(void) const {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   115
      return reinterpret_cast<NetworkInterface*>(::NetworkInterface::next());
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   116
    }
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   117
  };
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   118
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   119
  class MockJfrOSInterface {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   120
    static std::list<MockNetworkInterface> _interfaces;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   121
   public:
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   122
    MockJfrOSInterface() {}
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   123
    static int network_utilization(NetworkInterface** network_interfaces) {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   124
      *network_interfaces = NULL;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   125
      for (std::list<MockNetworkInterface>::const_iterator i = _interfaces.begin();
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   126
           i != _interfaces.end();
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   127
           ++i) {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   128
        NetworkInterface* cur = new NetworkInterface(i->name.c_str(), i->bytes_in, i->bytes_out, *network_interfaces);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   129
        *network_interfaces = cur;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   130
      }
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   131
      return OS_OK;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   132
    }
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   133
    static MockNetworkInterface& add_interface(const std::string& name, traceid id) {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   134
      MockNetworkInterface iface(name, 0, 0, id);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   135
      _interfaces.push_front(iface);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   136
      return _interfaces.front();
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   137
    }
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   138
    static void remove_interface(const MockNetworkInterface& iface) {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   139
      _interfaces.remove(iface);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   140
    }
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   141
    static void clear_interfaces() {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   142
      _interfaces.clear();
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   143
    }
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   144
    static const MockNetworkInterface& get_interface(traceid id) {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   145
      std::list<MockNetworkInterface>::const_iterator i = _interfaces.begin();
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   146
      for (; i != _interfaces.end(); ++i) {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   147
        if (i->id == id) {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   148
          break;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   149
        }
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   150
      }
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   151
      return *i;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   152
    }
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   153
  };
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   154
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   155
  std::list<MockNetworkInterface> MockJfrOSInterface::_interfaces;
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   156
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   157
  class MockEventNetworkUtilization : public ::EventNetworkUtilization {
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   158
   public:
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   159
    std::string iface;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   160
    s8 readRate;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   161
    s8 writeRate;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   162
    static std::vector<MockEventNetworkUtilization> committed;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   163
    MockJfrCheckpointWriter writer;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   164
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   165
   public:
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   166
    MockEventNetworkUtilization(EventStartTime timing=TIMED) :
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   167
    ::EventNetworkUtilization(timing) {}
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   168
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   169
    void set_networkInterface(traceid new_value) {
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   170
      const MockNetworkInterface& entry  = MockJfrOSInterface::get_interface(new_value);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   171
      iface = entry.name;
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   172
    }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   173
    void set_readRate(s8 new_value) {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   174
      readRate = new_value;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   175
    }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   176
    void set_writeRate(s8 new_value) {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   177
      writeRate = new_value;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   178
    }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   179
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   180
    void commit() {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   181
      committed.push_back(*this);
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   182
    }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   183
50894
e8d55141afd2 8206006: Build failed on Windows
jwilhelm
parents: 50879
diff changeset
   184
    void set_starttime(const MockJfrTicks& time) {}
e8d55141afd2 8206006: Build failed on Windows
jwilhelm
parents: 50879
diff changeset
   185
    void set_endtime(const MockJfrTicks& time) {}
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   186
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   187
    static const MockEventNetworkUtilization& get_committed(const std::string& name) {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   188
      static MockEventNetworkUtilization placeholder;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   189
      for (std::vector<MockEventNetworkUtilization>::const_iterator i = committed.begin();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   190
           i != committed.end();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   191
           ++i) {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   192
        if (name == i->iface) {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   193
          return *i;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   194
        }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   195
      }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   196
      return placeholder;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   197
    }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   198
  };
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   199
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   200
  std::vector<MockEventNetworkUtilization> MockEventNetworkUtilization::committed;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   201
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   202
  jlong MockFastUnorderedElapsedCounterSource::current_ticks;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   203
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   204
// Reincluding source files in the anonymous namespace unfortunately seems to
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   205
// behave strangely with precompiled headers (only when using gcc though)
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   206
#ifndef DONT_USE_PRECOMPILED_HEADER
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   207
#define DONT_USE_PRECOMPILED_HEADER
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   208
#endif
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   209
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   210
#define EventNetworkUtilization MockEventNetworkUtilization
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   211
#define FastUnorderedElapsedCounterSource MockFastUnorderedElapsedCounterSource
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   212
#define JfrOSInterface MockJfrOSInterface
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   213
#define JfrSerializer MockJfrSerializer
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   214
#define JfrCheckpointWriter MockJfrCheckpointWriter
50894
e8d55141afd2 8206006: Build failed on Windows
jwilhelm
parents: 50879
diff changeset
   215
#define JfrTicks MockJfrTicks
e8d55141afd2 8206006: Build failed on Windows
jwilhelm
parents: 50879
diff changeset
   216
#define JfrTickspan MockJfrTickspan
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   217
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   218
#include "jfr/periodic/jfrNetworkUtilization.hpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   219
#include "jfr/periodic/jfrNetworkUtilization.cpp"
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   220
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   221
#undef EventNetworkUtilization
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   222
#undef FastUnorderedElapsedCounterSource
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   223
#undef JfrOSInterface
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   224
#undef JfrSerializer
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   225
#undef JfrCheckpointWriter
50894
e8d55141afd2 8206006: Build failed on Windows
jwilhelm
parents: 50879
diff changeset
   226
#undef JfrTicks
e8d55141afd2 8206006: Build failed on Windows
jwilhelm
parents: 50879
diff changeset
   227
#undef JfrTickspan
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   228
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   229
} // anonymous namespace
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   230
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   231
class JfrTestNetworkUtilization : public ::testing::Test {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   232
protected:
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   233
  void SetUp() {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   234
    MockEventNetworkUtilization::committed.clear();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   235
    MockJfrOSInterface::clear_interfaces();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   236
    // Ensure that tests are separated in time
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   237
    MockFastUnorderedElapsedCounterSource::current_ticks += 1 * NANOSECS_PER_SEC;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   238
  }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   239
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   240
  void TearDown() {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   241
    JfrNetworkUtilization::destroy();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   242
  }
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   243
};
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   244
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   245
TEST_VM_F(JfrTestNetworkUtilization, RequestFunctionBasic) {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   246
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   247
  MockNetworkInterface& eth0 = MockJfrOSInterface::add_interface("eth0", 1);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   248
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   249
  ASSERT_EQ(0u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   250
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   251
  eth0.bytes_in += 10;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   252
  MockFastUnorderedElapsedCounterSource::current_ticks += 2 * NANOSECS_PER_SEC;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   253
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   254
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   255
  ASSERT_EQ(1u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   256
  MockEventNetworkUtilization& e = MockEventNetworkUtilization::committed[0];
53026
7d4397b43fa3 8215362: JFR GTest JfrTestNetworkUtilization fails
egahlin
parents: 50894
diff changeset
   257
  EXPECT_EQ(40, e.readRate);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   258
  EXPECT_EQ(0, e.writeRate);
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   259
  EXPECT_STREQ("eth0", e.iface.c_str());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   260
}
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   261
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   262
TEST_VM_F(JfrTestNetworkUtilization, RequestFunctionMultiple) {
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   263
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   264
  MockNetworkInterface& eth0 = MockJfrOSInterface::add_interface("eth0", 2);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   265
  MockNetworkInterface& eth1 = MockJfrOSInterface::add_interface("eth1", 3);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   266
  MockNetworkInterface& ppp0 = MockJfrOSInterface::add_interface("ppp0", 4);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   267
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   268
  ASSERT_EQ(0u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   269
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   270
  eth0.bytes_in += 10;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   271
  eth1.bytes_in += 100;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   272
  ppp0.bytes_out += 50;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   273
  MockFastUnorderedElapsedCounterSource::current_ticks += 2 * NANOSECS_PER_SEC;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   274
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   275
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   276
  ASSERT_EQ(3u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   277
  const MockEventNetworkUtilization& eth0_event = MockEventNetworkUtilization::get_committed("eth0");
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   278
  const MockEventNetworkUtilization& eth1_event = MockEventNetworkUtilization::get_committed("eth1");
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   279
  const MockEventNetworkUtilization& ppp0_event = MockEventNetworkUtilization::get_committed("ppp0");
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   280
53026
7d4397b43fa3 8215362: JFR GTest JfrTestNetworkUtilization fails
egahlin
parents: 50894
diff changeset
   281
  EXPECT_EQ(40, eth0_event.readRate);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   282
  EXPECT_EQ(0, eth0_event.writeRate);
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   283
  EXPECT_STREQ("eth0", eth0_event.iface.c_str());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   284
53026
7d4397b43fa3 8215362: JFR GTest JfrTestNetworkUtilization fails
egahlin
parents: 50894
diff changeset
   285
  EXPECT_EQ(400, eth1_event.readRate);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   286
  EXPECT_EQ(0, eth1_event.writeRate);
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   287
  EXPECT_STREQ("eth1", eth1_event.iface.c_str());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   288
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   289
  EXPECT_EQ(0, ppp0_event.readRate);
53026
7d4397b43fa3 8215362: JFR GTest JfrTestNetworkUtilization fails
egahlin
parents: 50894
diff changeset
   290
  EXPECT_EQ(200, ppp0_event.writeRate);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   291
  EXPECT_STREQ("ppp0", ppp0_event.iface.c_str());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   292
}
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   293
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   294
TEST_VM_F(JfrTestNetworkUtilization, InterfaceRemoved) {
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   295
  MockNetworkInterface& eth0 = MockJfrOSInterface::add_interface("eth0", 5);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   296
  MockNetworkInterface& eth1 = MockJfrOSInterface::add_interface("eth1", 6);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   297
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   298
  ASSERT_EQ(0u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   299
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   300
  eth0.bytes_in += 10;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   301
  eth1.bytes_in += 20;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   302
  MockFastUnorderedElapsedCounterSource::current_ticks += 2 * NANOSECS_PER_SEC;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   303
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   304
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   305
  ASSERT_EQ(2u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   306
  const MockEventNetworkUtilization& eth0_event = MockEventNetworkUtilization::get_committed("eth0");
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   307
  const MockEventNetworkUtilization& eth1_event = MockEventNetworkUtilization::get_committed("eth1");
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   308
53026
7d4397b43fa3 8215362: JFR GTest JfrTestNetworkUtilization fails
egahlin
parents: 50894
diff changeset
   309
  EXPECT_EQ(40, eth0_event.readRate);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   310
  EXPECT_EQ(0, eth0_event.writeRate);
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   311
  EXPECT_STREQ("eth0", eth0_event.iface.c_str());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   312
53026
7d4397b43fa3 8215362: JFR GTest JfrTestNetworkUtilization fails
egahlin
parents: 50894
diff changeset
   313
  EXPECT_EQ(80, eth1_event.readRate);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   314
  EXPECT_EQ(0, eth1_event.writeRate);
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   315
  EXPECT_STREQ("eth1", eth1_event.iface.c_str());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   316
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   317
  MockJfrOSInterface::remove_interface(eth0);
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   318
  MockEventNetworkUtilization::committed.clear();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   319
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   320
  eth1.bytes_in += 10;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   321
  MockFastUnorderedElapsedCounterSource::current_ticks += 2 * NANOSECS_PER_SEC;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   322
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   323
  ASSERT_EQ(1u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   324
  const MockEventNetworkUtilization& eth1_event_v2 = MockEventNetworkUtilization::get_committed("eth1");
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   325
53026
7d4397b43fa3 8215362: JFR GTest JfrTestNetworkUtilization fails
egahlin
parents: 50894
diff changeset
   326
  EXPECT_EQ(40, eth1_event_v2.readRate);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   327
  EXPECT_EQ(0, eth1_event_v2.writeRate);
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   328
  EXPECT_STREQ("eth1", eth1_event_v2.iface.c_str());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   329
}
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   330
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   331
TEST_VM_F(JfrTestNetworkUtilization, InterfaceReset) {
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53026
diff changeset
   332
  MockNetworkInterface& eth0 = MockJfrOSInterface::add_interface("eth0", 7);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   333
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   334
  ASSERT_EQ(0u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   335
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   336
  eth0.bytes_in += 10;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   337
  MockFastUnorderedElapsedCounterSource::current_ticks += 2 * NANOSECS_PER_SEC;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   338
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   339
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   340
  ASSERT_EQ(1u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   341
  const MockEventNetworkUtilization& event = MockEventNetworkUtilization::committed[0];
53026
7d4397b43fa3 8215362: JFR GTest JfrTestNetworkUtilization fails
egahlin
parents: 50894
diff changeset
   342
  EXPECT_EQ(40, event.readRate);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   343
  EXPECT_EQ(0, event.writeRate);
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   344
  EXPECT_STREQ("eth0", event.iface.c_str());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   345
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   346
  eth0.bytes_in = 0;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   347
  MockFastUnorderedElapsedCounterSource::current_ticks += 2 * NANOSECS_PER_SEC;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   348
  MockEventNetworkUtilization::committed.clear();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   349
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   350
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   351
  ASSERT_EQ(0u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   352
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   353
  eth0.bytes_in = 10;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   354
  MockFastUnorderedElapsedCounterSource::current_ticks += 2 * NANOSECS_PER_SEC;
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   355
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   356
  JfrNetworkUtilization::send_events();
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   357
  ASSERT_EQ(1u, MockEventNetworkUtilization::committed.size());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   358
  const MockEventNetworkUtilization& event_v2 = MockEventNetworkUtilization::committed[0];
53026
7d4397b43fa3 8215362: JFR GTest JfrTestNetworkUtilization fails
egahlin
parents: 50894
diff changeset
   359
  EXPECT_EQ(40, event_v2.readRate);
50879
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   360
  EXPECT_EQ(0, event_v2.writeRate);
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   361
  EXPECT_STREQ("eth0", event_v2.iface.c_str());
d90c3cbf13df 8003209: JFR events for network utilization
rwestberg
parents:
diff changeset
   362
}