From bdf1795b90af824de333bd21d3e7fa0694cf55f9 Mon Sep 17 00:00:00 2001 From: Kouame Behouba Manasse Date: Wed, 6 Mar 2024 07:48:41 -0500 Subject: [PATCH] test(crit): add unit test for SearchPattern method of MemoryReader Signed-off-by: Kouame Behouba Manasse --- crit/mempages_test.go | 60 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/crit/mempages_test.go b/crit/mempages_test.go index 2c087b8a6..566aa1937 100644 --- a/crit/mempages_test.go +++ b/crit/mempages_test.go @@ -271,6 +271,66 @@ func TestGetShmemSize(t *testing.T) { } } +func TestSearchPattern(t *testing.T) { + pid, err := getTestImgPID() + if err != nil { + t.Fatal(err) + } + + mr, err := NewMemoryReader(testImgsDir, pid, sysPageSize) + if err != nil { + t.Fatal(err) + } + + testCases := []struct { + name string + pattern string + context int + expectedError error + }{ + { + name: "PATH environment variable", + pattern: "PATH=", + expectedError: nil, + }, + { + name: "PATH environment variable regex", + pattern: `\bPATH=([^\s]+)\b`, + expectedError: nil, + }, + { + name: "PATH environment variable regex with 10 bytes context", + pattern: `\bPATH=([^\s]+)\b`, + context: 10, + expectedError: nil, + }, + { + name: "PATH environment variable regex with negative context", + pattern: `\bPATH=([^\s]+)\b`, + context: -1, + expectedError: errors.New("context size cannot be negative"), + }, + { + name: "non existing pattern", + pattern: "NON_EXISTENT_PATTERN", + expectedError: errors.New("pattern not found in process memory"), + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + results, err := mr.SearchPattern(tc.pattern, tc.context) + if err != nil && tc.expectedError == nil { + t.Errorf("Unexpected error for pattern %s: %v", tc.pattern, err) + } + + if tc.expectedError == nil && len(results) == 0 { + t.Errorf("Expected to find the %s pattern in memory pages", tc.pattern) + } + }) + } +} + // helper function to get the PID from the test-imgs directory func getTestImgPID() (uint32, error) { psTreeImg, err := getImg(filepath.Join(testImgsDir, "pstree.img"), &pstree.PstreeEntry{})