Skip to content

Commit

Permalink
Added tests for the ReservationRegister
Browse files Browse the repository at this point in the history
  • Loading branch information
Paolo Fittipaldi authored and Paolo Fittipaldi committed Oct 22, 2024
1 parent 9664cf7 commit 056e8aa
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 36 deletions.
29 changes: 0 additions & 29 deletions quisp/modules/QRSA/ConnectionManager/ConnectionManager_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -572,33 +572,4 @@ TEST(ConnectionManagerTest, RespondToRequest) {
delete hardware_monitor;
}

// TEST(ConnectionManagerTest, QnicReservation) {
// prepareSimulation();
// auto *connection_manager = new ConnectionManagerTestTarget();

// int qnic_address = 13, qnic_address2 = 15;
// // qnic reservation
// EXPECT_EQ(connection_manager->reserved_qnics.size(), 0);
// connection_manager->reserveQnic(qnic_address);
// EXPECT_EQ(connection_manager->reserved_qnics.size(), 1);
// EXPECT_EQ(connection_manager->reserved_qnics.at(0), qnic_address);
// EXPECT_TRUE(connection_manager->isQnicBusy(qnic_address));
// EXPECT_FALSE(connection_manager->isQnicBusy(qnic_address2));
// connection_manager->reserveQnic(qnic_address2);
// EXPECT_EQ(connection_manager->reserved_qnics.size(), 2);
// EXPECT_EQ(connection_manager->reserved_qnics.at(1), qnic_address2);
// EXPECT_TRUE(connection_manager->isQnicBusy(qnic_address));
// EXPECT_TRUE(connection_manager->isQnicBusy(qnic_address2));

// // qnic release
// connection_manager->releaseQnic(qnic_address);
// EXPECT_EQ(connection_manager->reserved_qnics.size(), 1);
// EXPECT_EQ(connection_manager->reserved_qnics.at(0), qnic_address2);
// EXPECT_FALSE(connection_manager->isQnicBusy(qnic_address));
// EXPECT_TRUE(connection_manager->isQnicBusy(qnic_address2));
// connection_manager->releaseQnic(qnic_address2);
// EXPECT_EQ(connection_manager->reserved_qnics.size(), 0);
// EXPECT_FALSE(connection_manager->isQnicBusy(qnic_address));
// EXPECT_FALSE(connection_manager->isQnicBusy(qnic_address2));
// }
} // namespace
24 changes: 18 additions & 6 deletions quisp/utils/ReservationRegister.cc
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ void ReservationRegister::registerReservation(int qnic_addr, unsigned long rules
ruleset_id_to_qnic_addrs[ruleset_id] = std::set<int>();
}

auto &target_qnic_set = ruleset_id_to_qnic_addrs[ruleset_id];
auto& target_qnic_set = ruleset_id_to_qnic_addrs[ruleset_id];

if (target_qnic_set.find(qnic_addr) != target_qnic_set.end()) { // If qnic already in this entry, complain
throw cRuntimeError("Error when registering QNIC reservation by ruleset id: QNIC Reservation already registered.");
Expand All @@ -32,8 +32,13 @@ void ReservationRegister::registerReservation(int qnic_addr, unsigned long rules
void ReservationRegister::deleteReservationByQnicAddr(int qnic_addr) {
auto target_reservation = qnic_addr_to_ruleset_id.find(qnic_addr);
if (target_reservation == qnic_addr_to_ruleset_id.end()) throw cRuntimeError("Error when deleting QNIC reservation by QNIC address: qnic not reserved.");
ruleset_id_to_qnic_addrs.erase(target_reservation->second); // unsigned long ruleset_id corresponding to the reservation
qnic_addr_to_ruleset_id.erase(qnic_addr);

// fetching the relevant reservation in the RuleSet to Qnic addr register
auto& target_qnic_set = ruleset_id_to_qnic_addrs[target_reservation->second];
target_qnic_set.erase(qnic_addr);
if (target_qnic_set.size() == 0) ruleset_id_to_qnic_addrs.erase(target_reservation->second); // if this was the last qnic, delete the entry from the Ruleset to Qnic register

qnic_addr_to_ruleset_id.erase(qnic_addr); // Finally, delete the reservation from the Qnic to Ruleset ID register.
}

void ReservationRegister::deleteReservationByRulesetId(unsigned long ruleset_id) {
Expand All @@ -46,13 +51,14 @@ void ReservationRegister::deleteReservationByRulesetId(unsigned long ruleset_id)
ruleset_id_to_qnic_addrs.erase(ruleset_id);
}

void ReservationRegister::updateReservationId(unsigned long new_ruleset_id, unsigned long old_ruleset_id) // update a reservation with the correct ruleset ID (once defined)
void ReservationRegister::updateReservationId(unsigned long old_ruleset_id, unsigned long new_ruleset_id) // update a reservation with the correct ruleset ID (once defined)
{
auto reservation_to_update = ruleset_id_to_qnic_addrs.find(old_ruleset_id);
if (reservation_to_update == ruleset_id_to_qnic_addrs.end()) throw cRuntimeError("Error when updating QNIC reservation ID: no such reservation");
for (int qnic_addr : reservation_to_update->second) {
std::set<int> qnic_set = reservation_to_update->second;
for (int qnic_addr : qnic_set) {
deleteReservationByQnicAddr(qnic_addr);
registerReservation(new_ruleset_id, qnic_addr);
registerReservation(qnic_addr, new_ruleset_id);
}
}

Expand All @@ -63,5 +69,11 @@ bool ReservationRegister::isQnicBusy(int qnic_addr) {
}
return true;
}

const int ReservationRegister::getRsidToQnicAddrMapSize() const { return ruleset_id_to_qnic_addrs.size(); };
const int ReservationRegister::getQnicAddrToRsidMapSize() const { return qnic_addr_to_ruleset_id.size(); };
const std::map<unsigned long, std::set<int>>& ReservationRegister::getRsidToQnicAddrMap() const { return ruleset_id_to_qnic_addrs; };
const std::map<int, unsigned long>& ReservationRegister::getQnicAddrToRsidMap() const { return qnic_addr_to_ruleset_id; };

} /* namespace utils */
} /* namespace quisp */
7 changes: 6 additions & 1 deletion quisp/utils/ReservationRegister.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,14 @@ class ReservationRegister {
void registerReservation(int qnic_addr, unsigned long ruleset_id);
void deleteReservationByQnicAddr(int qnic_addr);
void deleteReservationByRulesetId(unsigned long ruleset_id);
void updateReservationId(unsigned long new_ruleset_id, unsigned long old_ruleset_id);
void updateReservationId(unsigned long old_ruleset_id, unsigned long new_ruleset_id);
bool isQnicBusy(int qnic_addr);

const int getRsidToQnicAddrMapSize() const;
const int getQnicAddrToRsidMapSize() const;
const std::map<unsigned long, std::set<int>>& getRsidToQnicAddrMap() const;
const std::map<int, unsigned long>& getQnicAddrToRsidMap() const;

private:
std::map<unsigned long, std::set<int>> ruleset_id_to_qnic_addrs;
std::map<int, unsigned long> qnic_addr_to_ruleset_id;
Expand Down

0 comments on commit 056e8aa

Please sign in to comment.