Reviewed-by: Saloni Kasbekar <saloni.kasbe...@intel.com>

-----Original Message-----
From: Doug Flick <doug.e...@gmail.com> 
Sent: Wednesday, May 8, 2024 10:57 PM
To: devel@edk2.groups.io
Cc: Kasbekar, Saloni <saloni.kasbe...@intel.com>; Clark-williams, Zachary 
<zachary.clark-willi...@intel.com>
Subject: [PATCH v2 13/13] NetworkPkg: Update the PxeBcDhcp6GoogleTest due to 
underlying changes

From: Doug Flick <dougfl...@microsoft.com>

This patch updates the PxeBcDhcp6GoogleTest due to the changes in the 
underlying code. The changes are as follows:
 - Random now comes from the RngLib Protocol
 - The TCP ISN is now generated by the hash function

Cc: Saloni Kasbekar <saloni.kasbe...@intel.com>
Cc: Zachary Clark-williams <zachary.clark-willi...@intel.com>

Signed-off-by: Doug Flick [MSFT] <doug.e...@gmail.com>
---
 NetworkPkg/Test/NetworkPkgHostTest.dsc                        |   1 +
 NetworkPkg/UefiPxeBcDxe/GoogleTest/UefiPxeBcDxeGoogleTest.inf |   3 +-
 NetworkPkg/UefiPxeBcDxe/GoogleTest/PxeBcDhcp6GoogleTest.cpp   | 102 
+++++++++++++++++++-
 3 files changed, 100 insertions(+), 6 deletions(-)

diff --git a/NetworkPkg/Test/NetworkPkgHostTest.dsc 
b/NetworkPkg/Test/NetworkPkgHostTest.dsc
index fa301a7a52ab..1772afb05815 100644
--- a/NetworkPkg/Test/NetworkPkgHostTest.dsc
+++ b/NetworkPkg/Test/NetworkPkgHostTest.dsc
@@ -30,6 +30,7 @@ [Components]
   NetworkPkg/UefiPxeBcDxe/GoogleTest/UefiPxeBcDxeGoogleTest.inf {     
<LibraryClasses>       
UefiRuntimeServicesTableLib|MdePkg/Test/Mock/Library/GoogleTest/MockUefiRuntimeServicesTableLib/MockUefiRuntimeServicesTableLib.inf+
      
UefiBootServicesTableLib|MdePkg/Test/Mock/Library/GoogleTest/MockUefiBootServicesTableLib/MockUefiBootServicesTableLib.inf
   }  # Despite these library classes being listed in [LibraryClasses] below, 
they are not needed for the host-based unit tests.diff --git 
a/NetworkPkg/UefiPxeBcDxe/GoogleTest/UefiPxeBcDxeGoogleTest.inf 
b/NetworkPkg/UefiPxeBcDxe/GoogleTest/UefiPxeBcDxeGoogleTest.inf
index 301dcdf61109..8b092d9291d4 100644
--- a/NetworkPkg/UefiPxeBcDxe/GoogleTest/UefiPxeBcDxeGoogleTest.inf
+++ b/NetworkPkg/UefiPxeBcDxe/GoogleTest/UefiPxeBcDxeGoogleTest.inf
@@ -14,7 +14,7 @@ [Defines]
 # # The following information is for reference only and not required by the 
build tools. #-#  VALID_ARCHITECTURES           = IA32 X64+#  
VALID_ARCHITECTURES           = IA32 X64 AARCH64 #  [Sources]@@ -23,6 +23,7 @@ 
[Sources]
   PxeBcDhcp6GoogleTest.h   ../PxeBcDhcp6.c   ../PxeBcSupport.c+  
../../../MdePkg/Test/Mock/Library/GoogleTest/Protocol/MockRng.cpp  [Packages]   
MdePkg/MdePkg.decdiff --git 
a/NetworkPkg/UefiPxeBcDxe/GoogleTest/PxeBcDhcp6GoogleTest.cpp 
b/NetworkPkg/UefiPxeBcDxe/GoogleTest/PxeBcDhcp6GoogleTest.cpp
index bd423ebadfce..61736ff79e83 100644
--- a/NetworkPkg/UefiPxeBcDxe/GoogleTest/PxeBcDhcp6GoogleTest.cpp
+++ b/NetworkPkg/UefiPxeBcDxe/GoogleTest/PxeBcDhcp6GoogleTest.cpp
@@ -7,6 +7,8 @@
 #include <Library/GoogleTestLib.h> #include <GoogleTest/Library/MockUefiLib.h> 
#include <GoogleTest/Library/MockUefiRuntimeServicesTableLib.h>+#include 
<GoogleTest/Library/MockUefiBootServicesTableLib.h>+#include 
<GoogleTest/Protocol/MockRng.h>  extern "C" {   #include <Uefi.h>@@ -165,7 
+167,7 @@ protected:
 // Note: // Testing PxeBcHandleDhcp6Offer() is difficult because it depends on 
a // properly setup Private structure. Attempting to properly test this 
function-// without a signficant refactor is a fools errand. Instead, we will 
test+// without a significant refactor is a fools errand. Instead, we will test 
// that we can prevent an overflow in the function. TEST_F 
(PxeBcHandleDhcp6OfferTest, BasicUsageTest) {   PXEBC_DHCP6_PACKET_CACHE  
*Cache6 = NULL;@@ -238,6 +240,7 @@ TEST_F (PxeBcCacheDnsServerAddressesTest, 
BasicUsageTest) {
     FreePool (Option);   } }+ // Test Description // Test that we can prevent 
an overflow in the function TEST_F (PxeBcCacheDnsServerAddressesTest, 
AttemptOverflowTest) {@@ -470,10 +473,15 @@ TEST_F 
(PxeBcRequestBootServiceTest, AttemptRequestOverFlowExpectFailure) {
 class PxeBcDhcp6DiscoverTest : public ::testing::Test { public:   
PXEBC_PRIVATE_DATA Private = { 0 };+  // create a mock md5 hash+  UINT8 
Md5Hash[16] = { 0 };+   EFI_UDP6_PROTOCOL Udp6Read;  protected:   
MockUefiRuntimeServicesTableLib RtServicesMock;+  MockUefiBootServicesTableLib 
BsMock;+  MockRng RngMock;    // Add any setup code if needed   virtual void@@ 
-527,8 +535,21 @@ TEST_F (PxeBcDhcp6DiscoverTest, BasicOverflowTest) {
    Private.Dhcp6Request->Length = (UINT16)(Cursor - (UINT8 
*)Private.Dhcp6Request); -  EXPECT_CALL (RtServicesMock, gRT_GetTime)-    
.WillOnce (::testing::Return (0));+  EXPECT_CALL (BsMock, gBS_LocateProtocol)+  
  .WillOnce (+       ::testing::DoAll (+                    
::testing::SetArgPointee<2> (::testing::ByRef (gRngProtocol)),+                 
   ::testing::Return (EFI_SUCCESS)+                    )+       );++  
EXPECT_CALL (RngMock, GetRng)+    .WillOnce (+       ::testing::DoAll (+        
            ::testing::SetArgPointee<3> (::testing::ByRef (Md5Hash[0])),+       
             ::testing::Return (EFI_SUCCESS)+                    )+       );    
ASSERT_EQ (     PxeBcDhcp6Discover (@@ -558,8 +579,21 @@ TEST_F 
(PxeBcDhcp6DiscoverTest, BasicUsageTest) {
    Private.Dhcp6Request->Length = (UINT16)(Cursor - (UINT8 
*)Private.Dhcp6Request); -  EXPECT_CALL (RtServicesMock, gRT_GetTime)-    
.WillOnce (::testing::Return (0));+  EXPECT_CALL (BsMock, gBS_LocateProtocol)+  
  .WillOnce (+       ::testing::DoAll (+                    
::testing::SetArgPointee<2> (::testing::ByRef (gRngProtocol)),+                 
   ::testing::Return (EFI_SUCCESS)+                    )+       );++  
EXPECT_CALL (RngMock, GetRng)+    .WillOnce (+       ::testing::DoAll (+        
            ::testing::SetArgPointee<3> (::testing::ByRef (Md5Hash[0])),+       
             ::testing::Return (EFI_SUCCESS)+                    )+       );    
ASSERT_EQ (     PxeBcDhcp6Discover (@@ -572,3 +606,61 @@ TEST_F 
(PxeBcDhcp6DiscoverTest, BasicUsageTest) {
     EFI_SUCCESS     ); }++TEST_F (PxeBcDhcp6DiscoverTest, 
MultipleRequestsAttemptOverflow) {+  EFI_IPv6_ADDRESS         DestIp     = { 0 
};+  EFI_DHCP6_PACKET_OPTION  RequestOpt = { 0 }; // the data section doesn't 
really matter++  RequestOpt.OpCode = HTONS (0x1337);+  RequestOpt.OpLen  = 
HTONS (REQUEST_OPTION_LENGTH); // this length would overflow without a check+  
UINT8  RequestOptBuffer[REQUEST_OPTION_LENGTH] = { 0 };++  // make sure we have 
enough space for 10 of these options+  ASSERT_TRUE (REQUEST_OPTION_LENGTH * 10 
<= PACKET_SIZE);++  UINT8             Index   = 0;+  EFI_DHCP6_PACKET  *Packet 
= (EFI_DHCP6_PACKET *)&Private.Dhcp6Request[Index];+  UINT8             *Cursor 
= (UINT8 *)(Packet->Dhcp6.Option);++  // let's add 10 of these options - this 
should overflow+  for (UINT8 i = 0; i < 10; i++) {+    CopyMem (Cursor, 
&RequestOpt, sizeof (RequestOpt));+    Cursor += sizeof (RequestOpt) - 1;+    
CopyMem (Cursor, RequestOptBuffer, REQUEST_OPTION_LENGTH);+    Cursor += 
REQUEST_OPTION_LENGTH;+  }++  // Update the packet length+  Packet->Length = 
(UINT16)(Cursor - (UINT8 *)Packet);+  Packet->Size   = PACKET_SIZE;++  // Make 
sure we're larger than the buffer we're trying to write into+  ASSERT_TRUE 
(Packet->Length > sizeof (EFI_PXE_BASE_CODE_DHCPV6_PACKET));++  EXPECT_CALL 
(BsMock, gBS_LocateProtocol)+    .WillOnce (+       ::testing::DoAll (+         
           ::testing::SetArgPointee<2> (::testing::ByRef (gRngProtocol)),+      
              ::testing::Return (EFI_SUCCESS)+                    )+       );++ 
 EXPECT_CALL (RngMock, GetRng)+    .WillOnce (+       ::testing::DoAll (+       
             ::testing::SetArgPointee<3> (::testing::ByRef (Md5Hash[0])),+      
              ::testing::Return (EFI_SUCCESS)+                    )+       );++ 
 ASSERT_EQ (+    PxeBcDhcp6Discover (+      
&(PxeBcDhcp6DiscoverTest::Private),+      0,+      NULL,+      FALSE,+      
(EFI_IP_ADDRESS *)&DestIp+      ),+    EFI_OUT_OF_RESOURCES+    );+}-- 
2.34.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#119200): https://edk2.groups.io/g/devel/message/119200
Mute This Topic: https://groups.io/mt/105996592/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to