// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
+
/*
* Copyright (C) 2016 Red Hat Inc.
+ *
+ * Author: J. Eric Ivancich <ivancich@redhat.com>
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License version
+ * 2.1, as published by the Free Software Foundation. See file
+ * COPYING.
*/
} // TEST
- TEST(dmclock_client, delta_rho_values) {
+ TEST(dmclock_client, delta_rho_values_borrowing_tracker) {
using ServerId = int;
// using ClientId = int;
// RespParams<ServerId> resp_params(server, dmc::PhaseType::reservation);
- dmc::ServiceTracker<ServerId> st(std::chrono::seconds(2),
- std::chrono::seconds(3));
-
+ dmc::ServiceTracker<ServerId,dmc::BorrowingTracker> st(std::chrono::seconds(2),
+ std::chrono::seconds(3));
auto rp1 = st.get_req_params(server1);
EXPECT_EQ(1u, rp1.delta) <<
"rho should be 1 with no intervening reservation responses by" <<
"other servers";
- st.track_resp(server1, dmc::PhaseType::priority);
+ // RESPONSE
+ st.track_resp(server1, dmc::PhaseType::priority, 1u);
auto rp3 = st.get_req_params(server1);
"rho should be 1 with no intervening reservation responses by" <<
"other servers";
- st.track_resp(server2, dmc::PhaseType::priority);
+ // RESPONSE
+ st.track_resp(server2, dmc::PhaseType::priority, 1u);
auto rp4 = st.get_req_params(server1);
- EXPECT_EQ(2u, rp4.delta) <<
+ EXPECT_EQ(1u, rp4.delta) <<
"delta should be 2 with one intervening priority response by " <<
"another server";
EXPECT_EQ(1u, rp4.rho) <<
"rho should be 1 with no intervening reservation responses by" <<
"other servers";
- st.track_resp(server2, dmc::PhaseType::reservation);
+ // RESPONSE
+ st.track_resp(server2, dmc::PhaseType::reservation, 1u);
auto rp6 = st.get_req_params(server1);
- EXPECT_EQ(2u, rp6.delta) <<
+ EXPECT_EQ(1u, rp6.delta) <<
"delta should be 2 with one intervening reservation response by " <<
"another server";
- EXPECT_EQ(2u, rp6.rho) <<
+ EXPECT_EQ(1u, rp6.rho) <<
"rho should be 2 with one intervening reservation responses by " <<
"another server";
- // auto rp6_b = st.get_req_params(server2);
-
- st.track_resp(server2, dmc::PhaseType::reservation);
- st.track_resp(server1, dmc::PhaseType::priority);
- st.track_resp(server2, dmc::PhaseType::priority);
- st.track_resp(server2, dmc::PhaseType::reservation);
- st.track_resp(server1, dmc::PhaseType::reservation);
- st.track_resp(server1, dmc::PhaseType::priority);
- st.track_resp(server2, dmc::PhaseType::priority);
+ st.track_resp(server2, dmc::PhaseType::reservation, 1u);
+ st.track_resp(server1, dmc::PhaseType::priority, 1u);
+ st.track_resp(server2, dmc::PhaseType::priority, 1u);
+ st.track_resp(server2, dmc::PhaseType::reservation, 1u);
+ st.track_resp(server1, dmc::PhaseType::reservation, 1u);
+ st.track_resp(server1, dmc::PhaseType::priority, 1u);
+ st.track_resp(server2, dmc::PhaseType::priority, 1u);
auto rp7 = st.get_req_params(server1);
EXPECT_EQ(5u, rp7.delta) <<
- "delta should be 5 with fourintervening responses by " <<
+ "delta should be 5 with four intervening responses by " <<
"another server";
- EXPECT_EQ(3u, rp7.rho) <<
- "rho should be 3 with two intervening reservation responses by " <<
+ EXPECT_EQ(1u, rp7.rho) <<
+ "rho should be 1 with two intervening reservation responses by " <<
"another server";
auto rp7b = st.get_req_params(server2);
- EXPECT_EQ(4u, rp7b.delta) <<
- "delta should be 4 with three intervening responses by " <<
+ EXPECT_EQ(9u, rp7b.delta) <<
+ "delta should be 9 with three intervening responses by " <<
"another server";
- EXPECT_EQ(2u, rp7b.rho) <<
- "rho should be 2 with one intervening reservation responses by " <<
+ EXPECT_EQ(4u, rp7b.rho) <<
+ "rho should be 4 with one intervening reservation responses by " <<
"another server";
auto rp8 = st.get_req_params(server1);
"rho should be 1 with no intervening reservation responses by " <<
"another server";
} // TEST
+
+
+ // NB: the BorrowingTracker has not been fully tested and the
+ // expected values below have not yet been compared with the
+ // theoretically correct values.
+ TEST(dmclock_client, delta_rho_values_orig_tracker) {
+ using ServerId = int;
+
+ ServerId server1 = 101;
+ ServerId server2 = 7;
+
+ dmc::ServiceTracker<ServerId,OrigTracker>
+ st(std::chrono::seconds(2), std::chrono::seconds(3));
+
+ auto rp1 = st.get_req_params(server1);
+
+ EXPECT_EQ(1u, rp1.delta);
+ EXPECT_EQ(1u, rp1.rho);
+
+ auto rp2 = st.get_req_params(server1);
+
+ EXPECT_EQ(0u, rp2.delta);
+ EXPECT_EQ(0u, rp2.rho);
+
+ st.track_resp(server1, dmc::PhaseType::priority, 1u);
+
+ auto rp3 = st.get_req_params(server1);
+
+ EXPECT_EQ(0u, rp3.delta);
+ EXPECT_EQ(0u, rp3.rho);
+
+ st.track_resp(server2, dmc::PhaseType::priority, 1u);
+
+ auto rp4 = st.get_req_params(server1);
+
+ EXPECT_EQ(1u, rp4.delta);
+ EXPECT_EQ(0u, rp4.rho);
+
+ auto rp5 = st.get_req_params(server1);
+
+ EXPECT_EQ(0u, rp5.delta);
+ EXPECT_EQ(0u, rp5.rho);
+
+ st.track_resp(server2, dmc::PhaseType::reservation, 1u);
+
+ auto rp6 = st.get_req_params(server1);
+
+ EXPECT_EQ(1u, rp6.delta);
+ EXPECT_EQ(1u, rp6.rho);
+
+ // auto rp6_b = st.get_req_params(server2);
+
+ st.track_resp(server2, dmc::PhaseType::reservation, 1u);
+ st.track_resp(server1, dmc::PhaseType::priority, 1u);
+ st.track_resp(server2, dmc::PhaseType::priority, 1u);
+ st.track_resp(server2, dmc::PhaseType::reservation, 1u);
+ st.track_resp(server1, dmc::PhaseType::reservation, 1u);
+ st.track_resp(server1, dmc::PhaseType::priority, 1u);
+ st.track_resp(server2, dmc::PhaseType::priority, 1u);
+
+ auto rp7 = st.get_req_params(server1);
+
+ EXPECT_EQ(4u, rp7.delta);
+ EXPECT_EQ(2u, rp7.rho);
+
+ auto rp7b = st.get_req_params(server2);
+
+ EXPECT_EQ(3u, rp7b.delta);
+ EXPECT_EQ(1u, rp7b.rho);
+
+ auto rp8 = st.get_req_params(server1);
+
+ EXPECT_EQ(0u, rp8.delta);
+ EXPECT_EQ(0u, rp8.rho);
+
+ auto rp8b = st.get_req_params(server2);
+ EXPECT_EQ(0u, rp8b.delta);
+ EXPECT_EQ(0u, rp8b.rho);
+ } // TEST
+
} // namespace dmclock
} // namespace crimson