Use regular expressions when matching expected and actual text.
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
#include "config.h"
|
||||
#include "sudo_compat.h"
|
||||
|
||||
#include <regex.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
@@ -1,4 +1,4 @@
|
||||
SudoGroupPlugin.__init__ was called with arguments: () {'args': ('ModulePath=SRC_DIR/example_group_plugin.py', 'ClassName=SudoGroupPlugin'), 'version': '1.0'}
|
||||
.*
|
||||
SudoGroupPlugin.__init__ returned result: <example_group_plugin.SudoGroupPlugin object>
|
||||
SudoGroupPlugin.query was called with arguments: ('user', 'group', ('pw_name', 'pw_passwd', 1001, 101, 'pw_gecos', 'pw_dir', 'pw_shell'))
|
||||
SudoGroupPlugin.query returned result: RC.REJECT
|
||||
|
@@ -1,9 +1,9 @@
|
||||
-- Plugin STARTED --
|
||||
EXEC id --help
|
||||
EXEC info [
|
||||
EXEC info \[
|
||||
"command=/bin/id",
|
||||
"runas_uid=0"
|
||||
]
|
||||
\]
|
||||
STD IN some standard input
|
||||
STD OUT some standard output
|
||||
STD ERR some standard error
|
||||
|
@@ -1,9 +1,9 @@
|
||||
-- Plugin STARTED --
|
||||
EXEC id --help
|
||||
EXEC info [
|
||||
EXEC info \[
|
||||
"command=/bin/id",
|
||||
"runas_uid=0"
|
||||
]
|
||||
\]
|
||||
STD IN stdin for plugin 1
|
||||
STD OUT stdout for plugin 1
|
||||
STD ERR stderr for plugin 1
|
||||
|
@@ -1,9 +1,9 @@
|
||||
-- Plugin STARTED --
|
||||
EXEC whoami
|
||||
EXEC info [
|
||||
EXEC info \[
|
||||
"command=/bin/whoami",
|
||||
"runas_uid=1"
|
||||
]
|
||||
\]
|
||||
STD IN stdin for plugin 2
|
||||
STD OUT stdout for plugin 2
|
||||
STD ERR stderr for plugin 2
|
||||
|
@@ -1,8 +1,8 @@
|
||||
-- Plugin STARTED --
|
||||
EXEC cmd
|
||||
EXEC info [
|
||||
EXEC info \[
|
||||
"command=/usr/share/cmd",
|
||||
"runas_uid=0"
|
||||
]
|
||||
\]
|
||||
CLOSE Failed to execute, execve returned 1 (EPERM)
|
||||
-- Plugin DESTROYED --
|
||||
|
@@ -1 +1 @@
|
||||
Failed to construct plugin instance: (FileNotFoundError) [Errno 2] No such file or directory: '/some/not/writable/directory/sudo.log'
|
||||
Failed to construct plugin instance: (FileNotFoundError) \[Errno 2\] No such file or directory: '/some/not/writable/directory/sudo.log'
|
||||
|
@@ -1 +1 @@
|
||||
Failed during loading plugin class: (ModuleNotFoundError) No module named 'wrong_path'
|
||||
Failed during loading plugin class: ([^)]*) No module named 'wrong_path'
|
||||
|
@@ -1,61 +1,61 @@
|
||||
(APPROVAL 1) Constructed:
|
||||
{
|
||||
"plugin_options": [
|
||||
"plugin_options": \[
|
||||
"ModulePath=SRC_DIR/regress/plugin_approval_test.py",
|
||||
"ClassName=ApprovalTestPlugin",
|
||||
"Id=1"
|
||||
],
|
||||
\],
|
||||
"version": "1.15",
|
||||
"settings": [
|
||||
"settings": \[
|
||||
"SETTING1=VALUE1",
|
||||
"setting2=value2"
|
||||
],
|
||||
"user_env": [
|
||||
\],
|
||||
"user_env": \[
|
||||
"USER_ENV1=VALUE1",
|
||||
"USER_ENV2=value2"
|
||||
],
|
||||
"user_info": [
|
||||
\],
|
||||
"user_info": \[
|
||||
"INFO1=VALUE1",
|
||||
"info2=value2"
|
||||
],
|
||||
\],
|
||||
"submit_optind": 3,
|
||||
"submit_argv": [
|
||||
"submit_argv": \[
|
||||
"sudo",
|
||||
"-u",
|
||||
"user",
|
||||
"whoami",
|
||||
"--help"
|
||||
],
|
||||
\],
|
||||
"_id": "(APPROVAL 1)"
|
||||
}
|
||||
(APPROVAL 2) Constructed:
|
||||
{
|
||||
"plugin_options": [
|
||||
"plugin_options": \[
|
||||
"ModulePath=SRC_DIR/regress/plugin_approval_test.py",
|
||||
"ClassName=ApprovalTestPlugin",
|
||||
"Id=2"
|
||||
],
|
||||
\],
|
||||
"version": "1.15",
|
||||
"settings": [
|
||||
"settings": \[
|
||||
"SETTING1=VALUE1",
|
||||
"setting2=value2"
|
||||
],
|
||||
"user_env": [
|
||||
\],
|
||||
"user_env": \[
|
||||
"USER_ENV1=VALUE1",
|
||||
"USER_ENV2=value2"
|
||||
],
|
||||
"user_info": [
|
||||
\],
|
||||
"user_info": \[
|
||||
"INFO1=VALUE1",
|
||||
"info2=value2"
|
||||
],
|
||||
\],
|
||||
"submit_optind": 3,
|
||||
"submit_argv": [
|
||||
"submit_argv": \[
|
||||
"sudo",
|
||||
"-u",
|
||||
"user",
|
||||
"whoami",
|
||||
"--help"
|
||||
],
|
||||
\],
|
||||
"_id": "(APPROVAL 2)"
|
||||
}
|
||||
(APPROVAL 1) Show version was called with arguments: (0,)
|
||||
|
@@ -1,4 +1,4 @@
|
||||
PATH before: [] (should be empty)
|
||||
PATH set: ['path_for_first_plugin']
|
||||
PATH before: [] (should be empty)
|
||||
PATH set: ['path_for_second_plugin']
|
||||
PATH before: \[\] (should be empty)
|
||||
PATH set: \['path_for_first_plugin'\]
|
||||
PATH before: \[\] (should be empty)
|
||||
PATH set: \['path_for_second_plugin'\]
|
||||
|
@@ -111,10 +111,27 @@ char ** create_str_array(size_t count, ...);
|
||||
#define VERIFY_STR(actual, expected) \
|
||||
do { \
|
||||
const char *actual_str = actual; \
|
||||
if (!actual_str || strcmp(actual_str, expected) != 0) { \
|
||||
VERIFY_PRINT_MSG("%s", #actual, actual_str ? actual_str : "(null)", #expected, expected, "expected to be"); \
|
||||
return false; \
|
||||
} \
|
||||
regex_t regex; \
|
||||
int result = 0; \
|
||||
if (!actual_str) { \
|
||||
result = -1; \
|
||||
} else if (*expected == '\0') { \
|
||||
result = strcmp(actual_str, expected); \
|
||||
} else { \
|
||||
if ((result = regcomp(®ex, expected, REG_NOSUB)) != 0) { \
|
||||
char errbuf[1024]; \
|
||||
regerror(result, ®ex, errbuf, sizeof(errbuf)); \
|
||||
fprintf(stderr, "regcomp failed at %s:%d: %s\npattern: %s\n", \
|
||||
__FILE__, __LINE__, errbuf, expected); \
|
||||
} else { \
|
||||
result = regexec(®ex, actual_str, 0, NULL, 0); \
|
||||
regfree(®ex); \
|
||||
} \
|
||||
} \
|
||||
if (result != 0) { \
|
||||
VERIFY_PRINT_MSG("%s", #actual, actual_str ? actual_str : "(null)", #expected, expected, "expected to be"); \
|
||||
return false; \
|
||||
} \
|
||||
} while(false)
|
||||
|
||||
#define VERIFY_STR_CONTAINS(actual, expected) \
|
||||
|
Reference in New Issue
Block a user