Issues 1179 and 1182 (#1232)

* Update logging

* Remove duplicate code

* Update unit tests

* Clean up includes

* Merge ProtobufSerializer into protobuf_util namespace

* Precompile regex

* Add const

* Add Split() convenience method, update log level/ID parsing

* Move log.h to legacy folder

* Elimininate gotos

* Fixes for gcc 13

* Update compiler flags

* Update default folder handling

* Use references instead of pointers

* Move code for better encapsulation

* Move code

* Remove unused method argument

* Move device logger

* Remove redundant to_string

* Rename for consistency

* Update handling of protobuf pointers

* Simplify protobuf usage

* Memory handling update

* Add hasher
This commit is contained in:
Uwe Seimet
2023-10-15 08:38:15 +02:00
committed by GitHub
parent c1f6f3ffea
commit 41bdcd4aed
161 changed files with 4767 additions and 5150 deletions

View File

@@ -3,7 +3,7 @@
// SCSI Target Emulator PiSCSI
// for Raspberry Pi
//
// Copyright (C) 2022 Uwe Seimet
// Copyright (C) 2022-2023 Uwe Seimet
//
//---------------------------------------------------------------------------
@@ -13,54 +13,75 @@
TEST(ControllerManagerTest, LifeCycle)
{
const int ID = 4;
const int ID1 = 4;
const int ID2 = 5;
const int LUN1 = 0;
const int LUN2 = 3;
auto bus = make_shared<MockBus>();
auto controller_manager = make_shared<ControllerManager>(*bus);
ControllerManager controller_manager;
DeviceFactory device_factory;
auto device = device_factory.CreateDevice(SCHS, -1, "");
EXPECT_FALSE(controller_manager->AttachToScsiController(ID, device));
EXPECT_FALSE(controller_manager.AttachToController(*bus, ID1, device));
device = device_factory.CreateDevice(SCHS, LUN1, "");
EXPECT_TRUE(controller_manager->AttachToScsiController(ID, device));
auto controller = controller_manager->FindController(ID);
EXPECT_TRUE(controller_manager.AttachToController(*bus, ID1, device));
EXPECT_TRUE(controller_manager.HasController(ID1));
auto controller = controller_manager.FindController(ID1);
EXPECT_NE(nullptr, controller);
EXPECT_EQ(1, controller->GetLunCount());
EXPECT_NE(nullptr, controller_manager->IdentifyController(1 << ID));
EXPECT_EQ(nullptr, controller_manager->IdentifyController(0));
EXPECT_EQ(nullptr, controller_manager->FindController(0));
EXPECT_NE(nullptr, controller_manager->GetDeviceByIdAndLun(ID, LUN1));
EXPECT_EQ(nullptr, controller_manager->GetDeviceByIdAndLun(0, 0));
EXPECT_FALSE(controller_manager.HasController(0));
EXPECT_EQ(nullptr, controller_manager.FindController(0));
EXPECT_TRUE(controller_manager.HasDeviceForIdAndLun(ID1, LUN1));
EXPECT_NE(nullptr, controller_manager.GetDeviceForIdAndLun(ID1, LUN1));
EXPECT_FALSE(controller_manager.HasDeviceForIdAndLun(0, 0));
EXPECT_EQ(nullptr, controller_manager.GetDeviceForIdAndLun(0, 0));
device = device_factory.CreateDevice(SCHS, LUN2, "");
EXPECT_TRUE(controller_manager->AttachToScsiController(ID, device));
controller = controller_manager->FindController(ID);
EXPECT_TRUE(controller_manager->DeleteController(controller));
EXPECT_EQ(nullptr, controller_manager->FindController(ID));
EXPECT_TRUE(controller_manager.AttachToController(*bus, ID1, device));
EXPECT_TRUE(controller_manager.HasController(ID1));
controller = controller_manager.FindController(ID1);
EXPECT_NE(nullptr, controller_manager.FindController(ID1));
EXPECT_TRUE(controller_manager.DeleteController(*controller));
EXPECT_EQ(nullptr, controller_manager.FindController(ID1));
controller_manager->DeleteAllControllers();
EXPECT_EQ(nullptr, controller_manager->FindController(ID));
EXPECT_EQ(nullptr, controller_manager->GetDeviceByIdAndLun(ID, LUN1));
auto disk = make_shared<MockDisk>();
EXPECT_TRUE(controller_manager.AttachToController(*bus, ID2, disk));
EXPECT_CALL(*disk, FlushCache);
controller_manager.DeleteAllControllers();
EXPECT_FALSE(controller_manager.HasController(ID1));
EXPECT_EQ(nullptr, controller_manager.FindController(ID1));
EXPECT_EQ(nullptr, controller_manager.GetDeviceForIdAndLun(ID1, LUN1));
EXPECT_FALSE(controller_manager.HasDeviceForIdAndLun(ID1, LUN1));
EXPECT_FALSE(controller_manager.HasController(ID2));
EXPECT_EQ(nullptr, controller_manager.FindController(ID2));
EXPECT_EQ(nullptr, controller_manager.GetDeviceForIdAndLun(ID2, LUN1));
EXPECT_FALSE(controller_manager.HasDeviceForIdAndLun(ID2, LUN1));
}
TEST(ControllerManagerTest, AttachToScsiController)
TEST(ControllerManagerTest, AttachToController)
{
const int ID = 4;
const int LUN1 = 3;
const int LUN2 = 0;
auto bus = make_shared<MockBus>();
auto controller_manager = make_shared<ControllerManager>(*bus);
ControllerManager controller_manager;
DeviceFactory device_factory;
auto device1 = device_factory.CreateDevice(SCHS, LUN1, "");
EXPECT_FALSE(controller_manager->AttachToScsiController(ID, device1)) << "LUN 0 is missing";
EXPECT_FALSE(controller_manager.AttachToController(*bus, ID, device1)) << "LUN 0 is missing";
auto device2 = device_factory.CreateDevice(SCLP, LUN2, "");
EXPECT_TRUE(controller_manager->AttachToScsiController(ID, device2));
EXPECT_TRUE(controller_manager->AttachToScsiController(ID, device1));
EXPECT_FALSE(controller_manager->AttachToScsiController(ID, device1));
EXPECT_TRUE(controller_manager.AttachToController(*bus, ID, device2));
EXPECT_TRUE(controller_manager.AttachToController(*bus, ID, device1));
EXPECT_FALSE(controller_manager.AttachToController(*bus, ID, device1));
}
TEST(ControllerManager, ProcessOnController)
{
ControllerManager controller_manager;
EXPECT_EQ(AbstractController::piscsi_shutdown_mode::NONE, controller_manager.ProcessOnController(0));
}